1
require "rabbit/parser/base"
10
/^= /.match(source.read)
15
source = "=begin\n#{@source.read}\n=end\n"
16
tree = ::RD::RDTree.new(source)
17
visitor = RD2RabbitVisitor.new(@canvas)
19
rescue Racc::ParseError
20
message = format_parse_error_message($!.message, source)
21
raise ParseError.new, message, $@
25
def format_parse_error_message(message, source)
26
if /line (\d+):/.match(message)
27
numbered_source = add_number(source, $1.to_i)
29
numbered_source = add_number(source)
31
"#{message}\n--\n#{numbered_source}"
35
def add_number(source, around=nil)
38
lines = source.to_a[0..-2]
40
i = [1, around - SNIPPET_SIZE].max
41
lines = lines[i, 2 * SNIPPET_SIZE]
43
format = "%#{Math.log10(lines.size).truncate + 1}d %s"
45
lines.collect do |line|
54
require "rabbit/parser/rd/rd2rabbit-lib"