method
find_offset
v7.1.3.4 -
Show latest stable
- Class:
ActionView::Template::Handlers::ERB
find_offset(compiled, source_tokens, error_column)private
No documentation available.
# File actionview/lib/action_view/template/handlers/erb.rb, line 108
def find_offset(compiled, source_tokens, error_column)
compiled = StringScanner.new(compiled)
passed_tokens = []
while tok = source_tokens.shift
tok_name, str = *tok
case tok_name
when :TEXT
loop do
break if compiled.match?(str)
compiled.getch
end
raise LocationParsingError unless compiled.scan(str)
when :CODE
if compiled.pos > error_column
raise LocationParsingError, "We went too far"
end
if compiled.pos + str.bytesize >= error_column
offset = error_column - compiled.pos
return passed_tokens.map(&:last).join.bytesize + offset
else
unless compiled.scan(str)
raise LocationParsingError, "Couldn't find code snippet"
end
end
when :OPEN
next_tok = source_tokens.first.last
loop do
break if compiled.match?(next_tok)
compiled.getch
end
when :CLOSE
next_tok = source_tokens.first.last
loop do
break if compiled.match?(next_tok)
compiled.getch
end
else
raise LocationParsingError, "Not implemented: #{tok.first}"
end
passed_tokens << tok
end
end