Sha256: 38dd9c8df0b03bc73acae7a61a67c057611ba24b4983acdb5e0efbb626f874be
Contents?: true
Size: 1.47 KB
Versions: 4
Compression:
Stored size: 1.47 KB
Contents
require "rd/rdfmt" require "rabbit/parser/base" module Rabbit module Parser class RD < Base end end end require "rabbit/parser/rd/rd2rabbit-lib" module Rabbit module Parser class RD push_loader(self) class << self def match?(source) return true if /\A(?:rd|rab)\z/i =~ source.extension.to_s /^= /.match(source.read) end end 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 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 SNIPPET_SIZE = 10 def add_number(source, around=nil) i = 1 puts source lines = source.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 end end end
Version data entries
4 entries across 4 versions & 1 rubygems
Version | Path |
---|---|
rabbit-1.0.8 | lib/rabbit/parser/rd.rb |
rabbit-1.0.7 | lib/rabbit/parser/rd.rb |
rabbit-1.0.6 | lib/rabbit/parser/rd.rb |
rabbit-1.0.5 | lib/rabbit/parser/rd.rb |