class BetterHtml::Tokenizer::Location

def adjust(begin_pos: 0, end_pos: 0)

def adjust(begin_pos: 0, end_pos: 0)
  self.class.new(@source_buffer, @begin_pos + begin_pos, @end_pos + end_pos)
end

def begin

def begin
  with(end_pos: @begin_pos)
end

def end

def end
  with(begin_pos: @end_pos)
end

def initialize(buffer, begin_pos, end_pos)

def initialize(buffer, begin_pos, end_pos)
  raise ArgumentError,
    "first argument must be Parser::Source::Buffer" unless buffer.is_a?(::Parser::Source::Buffer)
  if begin_pos > buffer.source.size
    raise ArgumentError,
      "begin_pos location #{begin_pos} is out of range for document of size #{buffer.source.size}"
  end
  if (end_pos - 1) > buffer.source.size
    raise ArgumentError,
      "end_pos location #{end_pos} is out of range for document of size #{buffer.source.size}"
  end
  super(buffer, begin_pos, end_pos)
end

def line_range

def line_range
  Range.new(start_line, stop_line)
end

def line_source_with_underline

def line_source_with_underline
  spaces = source_line.scan(/\A\s*/).first
  column_without_spaces = [column - spaces.length, 0].max
  underscore_length = (end_pos - begin_pos).clamp(1, (source_line.length - column_without_spaces))
  "#{source_line.gsub(/\A\s*/, "")}\n#{" " * column_without_spaces}#{"^" * underscore_length}"
end

def offset(offset)

def offset(offset)
  with(begin_pos: offset + @begin_pos, end_pos: offset + @end_pos)
end

def range

def range
  Range.new(begin_pos, end_pos, true)
end

def resize(new_size)

def resize(new_size)
  with(end_pos: @begin_pos + new_size)
end

def with(begin_pos: @begin_pos, end_pos: @end_pos)

def with(begin_pos: @begin_pos, end_pos: @end_pos)
  self.class.new(@source_buffer, begin_pos, end_pos)
end