Sha256: d46c704bdf2cf3a03ad5f1b2b89d30052704084b2cfee53b544808f751e6248d
Contents?: true
Size: 1.38 KB
Versions: 31
Compression:
Stored size: 1.38 KB
Contents
require 'ripper' require 'hamlit/concerns/balanceable' module Hamlit module Parsers module Attribute include Concerns::Balanceable def parse_attributes(scanner) if scanner.match?(/{/) parse_old_attributes(scanner) + parse_new_attributes(scanner) else parse_new_attributes(scanner) + parse_old_attributes(scanner) end end private def parse_old_attributes(scanner) return [] unless scanner.match?(/{/) tokens = Ripper.lex(scanner.rest) until balanced_braces_exist?(tokens) @current_lineno += 1 break unless @lines[@current_lineno] scanner.concat(current_line) tokens = Ripper.lex(scanner.rest) end tokens = fetch_balanced_braces(tokens) scanner.pos += tokens.last.first.last + 1 [tokens.map(&:last).join] end def parse_new_attributes(scanner) return [] unless scanner.match?(/\(/) tokens = Ripper.lex(scanner.rest) until balanced_parens_exist?(tokens) @current_lineno += 1 break unless @lines[@current_lineno] scanner.concat(current_line) tokens = Ripper.lex(scanner.rest) end tokens = fetch_balanced_parentheses(tokens) scanner.pos += tokens.last.first.last + 1 [tokens.map(&:last).join] end end end end
Version data entries
31 entries across 31 versions & 1 rubygems