class HtmlBeautifier::Parser
Public Class Methods
new() { |self| ... }
click to toggle source
# File lib/htmlbeautifier/parser.rb, line 5 def initialize @maps = [] yield self if block_given? end
Public Instance Methods
map(pattern, method)
click to toggle source
# File lib/htmlbeautifier/parser.rb, line 10 def map(pattern, method) @maps << [pattern, method] end
scan(subject, receiver)
click to toggle source
# File lib/htmlbeautifier/parser.rb, line 14 def scan(subject, receiver) @scanner = StringScanner.new(subject) dispatch(receiver) until @scanner.eos? end
source_line_number()
click to toggle source
# File lib/htmlbeautifier/parser.rb, line 23 def source_line_number [source_so_far.chomp.split(%r{\n}).count, 1].max end
source_so_far()
click to toggle source
# File lib/htmlbeautifier/parser.rb, line 19 def source_so_far @scanner.string[0...@scanner.pos] end
Private Instance Methods
dispatch(receiver)
click to toggle source
# File lib/htmlbeautifier/parser.rb, line 29 def dispatch(receiver) _, method = @maps.find { |pattern, _| @scanner.scan(pattern) } raise "Unmatched sequence" unless method receiver.__send__(method, *extract_params(@scanner)) rescue => ex raise "#{ex.message} on line #{source_line_number}" end
extract_params(scanner)
click to toggle source
# File lib/htmlbeautifier/parser.rb, line 37 def extract_params(scanner) return [scanner[0]] unless scanner[1] params = [] i = 1 while scanner[i] params << scanner[i] i += 1 end params end