class Rabbit::Parser::RD
Constants
- SNIPPET_SIZE
Public Class Methods
format_name()
click to toggle source
# File lib/rabbit/parser/rd.rb, line 19 def format_name "RD" end
match?(source)
click to toggle source
# File lib/rabbit/parser/rd.rb, line 23 def match?(source) extension = source.extension if extension.nil? head = source.read[0, 500] if head.respond_to?(:force_encoding) head.force_encoding("ASCII-8BIT") end /^=(?:\s+\S|[^=])/ === head else /\A(?:rd|rab|rbt)\z/i =~ extension end end
Public Instance Methods
parse()
click to toggle source
# File lib/rabbit/parser/rd.rb, line 37 def parse source = @source.read.gsub(/\r\n/, "\n") source = "=begin\n#{source}\n=end\n" tree = ::RD::RDTree.new(source) visitor = RD2RabbitVisitor.new(@canvas) visitor.visit(tree) rescue Racc::ParseError message = format_parse_error_message($!.message, source) raise ParseError.new, message, $@ end
Private Instance Methods
add_number(source, around=nil)
click to toggle source
# File lib/rabbit/parser/rd.rb, line 59 def add_number(source, around=nil) i = 1 puts source lines = source.lines.to_a[0..-2] if around i = [1, around - SNIPPET_SIZE].max lines = lines[i, 2 * SNIPPET_SIZE] end format = "%#{Math.log10(lines.size).truncate + 1}d %s" lines.collect do |line| i += 1 format % [i, line] end.join end
format_parse_error_message(message, source)
click to toggle source
# File lib/rabbit/parser/rd.rb, line 49 def format_parse_error_message(message, source) if /line (\d+):/.match(message) numbered_source = add_number(source, $1.to_i) else numbered_source = add_number(source) end "#{message}\n--\n#{numbered_source}" end