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