class ActionView::Template::Handlers::ERB

def find_offset(compiled, source_tokens, error_column)

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