Fix up Rubinius specific library specs.
[rbx.git] / lib / rexml / parseexception.rb
blobfeb7a7e6385fe3100a6dc027d02b3f3982e9466f
1 module REXML
2   class ParseException < RuntimeError
3     attr_accessor :source, :parser, :continued_exception
5     def initialize( message, source=nil, parser=nil, exception=nil )
6       super(message)
7       @source = source
8       @parser = parser
9       @continued_exception = exception
10     end
12     def to_s
13       # Quote the original exception, if there was one
14       if @continued_exception
15         err = @continued_exception.inspect
16         err << "\n"
17         err << @continued_exception.backtrace.join("\n")
18         err << "\n...\n"
19       else
20         err = ""
21       end
23       # Get the stack trace and error message
24       err << super
26       # Add contextual information
27       if @source
28         err << "\nLine: #{line}\n"
29         err << "Position: #{position}\n"
30         err << "Last 80 unconsumed characters:\n"
31         err << @source.buffer[0..80].gsub(/\n/, ' ')
32       end
33       
34       err
35     end
37     def position
38       @source.current_line[0] if @source and defined? @source.current_line and
39       @source.current_line
40     end
42     def line
43       @source.current_line[2] if @source and defined? @source.current_line and 
44       @source.current_line
45     end
47     def context
48       @source.current_line
49     end
50   end  
51 end