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
Public Class Methods
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
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
Compares slices to other slices or strings.
# File lib/parslet/slice.rb, line 45 def == other str == other end
Prints the slice as "string"@offset
.
# File lib/parslet/slice.rb, line 103 def inspect str.inspect + "@#{offset}" end
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 regular expressions.
# File lib/parslet/slice.rb, line 51 def match(regexp) str.match(regexp) end
# File lib/parslet/slice.rb, line 39 def offset @position.charpos end
Returns the slices size in characters.
# File lib/parslet/slice.rb, line 57 def size str.size end
# File lib/parslet/slice.rb, line 96 def to_f str.to_f end
# File lib/parslet/slice.rb, line 93 def to_i self.str.to_i end
# File lib/parslet/slice.rb, line 87 def to_slice self end
Conversion operators —————————————————–
# File lib/parslet/slice.rb, line 82 def to_str str end
# File lib/parslet/slice.rb, line 90 def to_sym str.to_sym end