/tools/Ruby/lib/ruby/1.8/rexml/parseexception.rb

http://github.com/agross/netopenspace · Ruby · 51 lines · 40 code · 8 blank · 3 comment · 4 complexity · 736cfeae53abcb74d9c8d65d5431e590 MD5 · raw file

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