Sha256: 373f19cb4666f788860566eef4b6ab0e92a0978301b10b4603bb4cff197f33ef
Contents?: true
Size: 1.36 KB
Versions: 37
Compression:
Stored size: 1.36 KB
Contents
module Ruco class ArrayProcessor attr_accessor :lines def initialize @line_number = -1 @lines = [] @open_elements = [] @still_open_elements = [] end def open_tag(name, position) #puts "Open #{name} #{@line_number}:#{position}" @open_elements << [name, position] end def close_tag(name, position) #puts "Close #{name} #{@line_number}:#{position}" open_element = @open_elements.pop || @still_open_elements.pop @lines[@line_number] << [name, open_element.last...position] end def new_line(line) #puts "Line #{line}" # close elements only opened in last line @open_elements.each do |name, position| @lines[@line_number] << [name, position...@line.size] end # surround last line in still open elements from previouse lines @still_open_elements.each do |name,_| @lines[@line_number] << [name, 0...@line.size] end # mark open as 'still open' # and let them start on column 0 -> if closed in this line its 0...position @still_open_elements += @open_elements.map{|name,_| [name,0]} @open_elements = [] # proceed with next line @line = line @line_number += 1 @lines[@line_number] = [] end def start_parsing(name);end def end_parsing(name);end def inspect @lines end end end
Version data entries
37 entries across 37 versions & 1 rubygems