class Parslet::Slice

A slice is a small part from the parse input. A slice mainly behaves like any other string, except that it remembers where it came from (offset in original input).

Extracting line and column

Using the line_and_column method, you can extract the line and column in the original input where this slice starts.

Example:

slice.line_and_column # => [1, 13]
slice.offset          # => 12

Likeness to strings

Parslet::Slice behaves in many ways like a Ruby String. This likeness however is not complete - many of the myriad of operations String supports are not yet in Slice. You can always extract the internal string instance by calling to_s.

These omissions are somewhat intentional. Rather than maintaining a full delegation, we opt for a partial emulation that gets the job done.

Attributes

line_cache[R]
position[R]
str[R]

Public Class Methods

new(position, string, line_cache=nil) click to toggle source

Construct a slice using a string, an offset and an optional line cache. The line cache should be able to answer to the line_and_column message.

# File lib/parslet/slice.rb, line 33
def initialize(position, string, line_cache=nil)
  @position = position
  @str = string
  @line_cache = line_cache
end

Public Instance Methods

+(other) click to toggle source

Concatenate two slices; it is assumed that the second slice begins where the first one ends. The offset of the resulting slice is the same as the one of this slice.

# File lib/parslet/slice.rb, line 67
def +(other)
  self.class.new(@position, str + other.to_s, line_cache)
end
==(other) click to toggle source

Compares slices to other slices or strings.

# File lib/parslet/slice.rb, line 45
def == other
  str == other
end
inspect() click to toggle source

Prints the slice as "string"@offset.

# File lib/parslet/slice.rb, line 106
def inspect

  str.inspect + "@#{offset}"
end
length() click to toggle source
Alias for: size
line_and_column() click to toggle source

Returns a <line, column> tuple referring to the original input.

# File lib/parslet/slice.rb, line 73
def line_and_column
  raise ArgumentError, "No line cache was given, cannot infer line and column."        unless line_cache

  line_cache.line_and_column(@position.bytepos)
end
match(regexp) click to toggle source

Match regular expressions.

# File lib/parslet/slice.rb, line 51
def match(regexp)
  str.match(regexp)
end
offset() click to toggle source
# File lib/parslet/slice.rb, line 39
def offset
  @position.charpos
end
size() click to toggle source

Returns the slices size in characters.

# File lib/parslet/slice.rb, line 57
def size
  str.size
end
Also aliased as: length
to_f() click to toggle source
# File lib/parslet/slice.rb, line 99
def to_f
  str.to_f
end
to_i() click to toggle source
# File lib/parslet/slice.rb, line 96
def to_i
  str.to_i
end
to_int() click to toggle source
# File lib/parslet/slice.rb, line 93
def to_int
  Integer(str)
end
to_s() click to toggle source
Alias for: to_str
to_slice() click to toggle source
# File lib/parslet/slice.rb, line 87
def to_slice
  self
end
to_str() click to toggle source

Conversion operators —————————————————–

# File lib/parslet/slice.rb, line 82
def to_str
  str
end
Also aliased as: to_s
to_sym() click to toggle source
# File lib/parslet/slice.rb, line 90
def to_sym
  str.to_sym
end