Class: Parslet::Slice
- Inherits:
-
Object
- Object
- Parslet::Slice
- Defined in:
- lib/parslet/slice.rb
Overview
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.
Instance Attribute Summary collapse
-
#line_cache ⇒ Object
readonly
Returns the value of attribute line_cache.
-
#offset ⇒ Object
readonly
Returns the value of attribute offset.
-
#str ⇒ Object
readonly
Returns the value of attribute str.
Instance Method Summary collapse
-
#+(other) ⇒ Object
Concatenate two slices; it is assumed that the second slice begins where the first one ends.
-
#==(other) ⇒ Object
Compares slices to other slices or strings.
-
#initialize(string, offset, line_cache = nil) ⇒ Slice
constructor
Construct a slice using a string, an offset and an optional line cache.
-
#inspect ⇒ Object
Prints the slice as
"string"@offset
. -
#line_and_column ⇒ Object
Returns a <line, column> tuple referring to the original input.
-
#match(regexp) ⇒ Object
Match regular expressions.
-
#size ⇒ Object
Returns the slices size in characters.
- #to_f ⇒ Object
- #to_i ⇒ Object
- #to_int ⇒ Object
- #to_slice ⇒ Object
-
#to_str ⇒ Object
(also: #to_s)
Conversion operators —————————————————–.
- #to_sym ⇒ Object
Constructor Details
#initialize(string, offset, line_cache = nil) ⇒ Slice
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.
32 33 34 35 |
# File 'lib/parslet/slice.rb', line 32 def initialize(string, offset, line_cache=nil) @str, @offset = string, offset @line_cache = line_cache end |
Instance Attribute Details
#line_cache ⇒ Object (readonly)
Returns the value of attribute line_cache.
27 28 29 |
# File 'lib/parslet/slice.rb', line 27 def line_cache @line_cache end |
#offset ⇒ Object (readonly)
Returns the value of attribute offset.
26 27 28 |
# File 'lib/parslet/slice.rb', line 26 def offset @offset end |
#str ⇒ Object (readonly)
Returns the value of attribute str.
26 27 28 |
# File 'lib/parslet/slice.rb', line 26 def str @str end |
Instance Method Details
#+(other) ⇒ Object
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.
59 60 61 |
# File 'lib/parslet/slice.rb', line 59 def +(other) self.class.new(str + other.to_s, offset, line_cache) end |
#==(other) ⇒ Object
Compares slices to other slices or strings.
39 40 41 |
# File 'lib/parslet/slice.rb', line 39 def == other str == other end |
#inspect ⇒ Object
Prints the slice as "string"@offset
.
98 99 100 |
# File 'lib/parslet/slice.rb', line 98 def inspect str.inspect << "@#{offset}" end |
#line_and_column ⇒ Object
Returns a <line, column> tuple referring to the original input.
65 66 67 68 69 70 |
# File 'lib/parslet/slice.rb', line 65 def line_and_column raise ArgumentError, "No line cache was given, cannot infer line and column." \ unless line_cache line_cache.line_and_column(self.offset) end |
#match(regexp) ⇒ Object
Match regular expressions.
45 46 47 |
# File 'lib/parslet/slice.rb', line 45 def match(regexp) str.match(regexp) end |
#size ⇒ Object
Returns the slices size in characters.
51 52 53 |
# File 'lib/parslet/slice.rb', line 51 def size str.size end |
#to_f ⇒ Object
91 92 93 |
# File 'lib/parslet/slice.rb', line 91 def to_f str.to_f end |
#to_i ⇒ Object
88 89 90 |
# File 'lib/parslet/slice.rb', line 88 def to_i str.to_i end |
#to_int ⇒ Object
85 86 87 |
# File 'lib/parslet/slice.rb', line 85 def to_int Integer(str) end |
#to_slice ⇒ Object
79 80 81 |
# File 'lib/parslet/slice.rb', line 79 def to_slice self end |
#to_str ⇒ Object Also known as: to_s
Conversion operators —————————————————–
74 75 76 |
# File 'lib/parslet/slice.rb', line 74 def to_str str end |
#to_sym ⇒ Object
82 83 84 |
# File 'lib/parslet/slice.rb', line 82 def to_sym str.to_sym end |