class BetterHtml::Tokenizer::BaseErb
Constants
- EXPR_TRIM_MATCHER
- REGEXP_WITHOUT_TRIM
- STMT_TRIM_MATCHER
Attributes
current_position[R]
tokens[R]
Public Class Methods
new(buffer)
click to toggle source
Calls superclass method
# File lib/better_html/tokenizer/base_erb.rb, line 16 def initialize(buffer) raise ArgumentError, 'first argument must be Parser::Source::Buffer' unless buffer.is_a?(::Parser::Source::Buffer) @buffer = buffer @tokens = [] @current_position = 0 super(buffer.source, regexp: REGEXP_WITHOUT_TRIM, trim: false) end
Private Instance Methods
add_code(code)
click to toggle source
# File lib/better_html/tokenizer/base_erb.rb, line 30 def add_code(code) if code[0] == '%' add_erb_tokens(nil, '%', code[1..-1], nil) append("<%#{code}%>") else _, ltrim_or_comment, code, rtrim = *STMT_TRIM_MATCHER.match(code) ltrim = ltrim_or_comment if ltrim_or_comment == '-' indicator = ltrim_or_comment if ltrim_or_comment == '#' add_erb_tokens(ltrim, indicator, code, rtrim) append("<%#{ltrim}#{indicator}#{code}#{rtrim}%>") end end
add_erb_tokens(ltrim, indicator, code, rtrim)
click to toggle source
# File lib/better_html/tokenizer/base_erb.rb, line 49 def add_erb_tokens(ltrim, indicator, code, rtrim) pos = current_position add_token(:erb_begin, pos, pos + 2) pos += 2 if ltrim add_token(:trim, pos, pos + ltrim.length) pos += ltrim.length end if indicator add_token(:indicator, pos, pos + indicator.length) pos += indicator.length end add_token(:code, pos, pos + code.length) pos += code.length if rtrim token = add_token(:trim, pos, pos + rtrim.length) pos += rtrim.length end add_token(:erb_end, pos, pos + 2) end
add_expression(indicator, code)
click to toggle source
# File lib/better_html/tokenizer/base_erb.rb, line 43 def add_expression(indicator, code) _, code, rtrim = *EXPR_TRIM_MATCHER.match(code) add_erb_tokens(nil, indicator, code, rtrim) append("<%#{indicator}#{code}#{rtrim}%>") end
add_token(type, begin_pos, end_pos)
click to toggle source
# File lib/better_html/tokenizer/base_erb.rb, line 76 def add_token(type, begin_pos, end_pos) token = Token.new( type: type, loc: Location.new(@buffer, begin_pos, end_pos) ) @tokens << token token end
append(text)
click to toggle source
# File lib/better_html/tokenizer/base_erb.rb, line 26 def append(text) @current_position += text.length end