Method: EZML::Util#balance

Defined in:
lib/ezml/util.rb

#balance(scanner, start, finish, count = 0) ⇒ Object



76
77
78
79
80
81
82
83
84
85
86
# File 'lib/ezml/util.rb', line 76

def balance(scanner, start, finish, count = 0)
  str = ''.dup
  scanner = StringScanner.new(scanner) unless scanner.is_a? StringScanner
  regexp = Regexp.new("(.*?)[\\#{start.chr}\\#{finish.chr}]", Regexp::MULTILINE)
  while scanner.scan(regexp)
    str << scanner.matched
    count += 1 if scanner.matched[-1] == start
    count -= 1 if scanner.matched[-1] == finish
    return [str.strip, scanner.rest] if count == 0
  end
end