class Parser::Source::Range


@api public
#

def ==(other)

def ==(other)
  other.is_a?(Range) &&
    @source_buffer == other.source_buffer &&
    @begin_pos     == other.begin_pos     &&
    @end_pos       == other.end_pos
end

def begin

def begin
  Range.new(@source_buffer, @begin_pos, @begin_pos)
end

def column

def column
  _, column = @source_buffer.decompose_position(@begin_pos)
  column
end

def column_range

def column_range
  self.begin.column...self.end.column
end

def end

def end
  Range.new(@source_buffer, @end_pos, @end_pos)
end

def initialize(source_buffer, begin_pos, end_pos)

def initialize(source_buffer, begin_pos, end_pos)
  @source_buffer       = source_buffer
  @begin_pos, @end_pos = begin_pos, end_pos
  freeze
end

def inspect

def inspect
  "#<Source::Range #{@source_buffer.name} #{@begin_pos}...#{@end_pos}>"
end

def is?(*what)

def is?(*what)
  what.include?(source)
end

def join(other)

def join(other)
  Range.new(@source_buffer,
      [@begin_pos, other.begin_pos].min,
      [@end_pos,   other.end_pos].max)
end

def line

def line
  line, _ = @source_buffer.decompose_position(@begin_pos)
  line
end

def resize(new_size)

def resize(new_size)
  Range.new(@source_buffer, @begin_pos, @begin_pos + new_size)
end

def size

def size
  @end_pos - @begin_pos
end

def source

def source
  @source_buffer.source[self.begin_pos...self.end_pos]
end

def source_line

def source_line
  @source_buffer.source_line(line)
end

def to_a

def to_a
  (@begin_pos...@end_pos).to_a
end

def to_s

def to_s
  line, column = @source_buffer.decompose_position(@begin_pos)
  [@source_buffer.name, line, column + 1].join(':')
end