Wraps the input string for parslet.
# File lib/parslet/source.rb, line 12 def initialize(str) raise( ArgumentError, "Must construct Source with a string like object." ) unless str.respond_to?(:to_str) @str = StringScanner.new(str) # maps 1 => /./m, 2 => /../m, etc... @re_cache = Hash.new { |h,k| h[k] = /(.|$){#{k}}/ } @line_cache = LineCache.new @line_cache.scan_for_line_endings(0, str) end
@note Please be aware of encodings at this point.
# File lib/parslet/source.rb, line 83 def bytepos=(n) @str.pos = n rescue RangeError end
Returns how many chars remain in the input.
# File lib/parslet/source.rb, line 54 def chars_left @str.rest_size end
Returns how many chars there are between current position and the string given. If the string given doesn’t occur in the source, then the remaining chars (chars_left) are returned.
@return [Fixnum] count of chars until str or chars_left
# File lib/parslet/source.rb, line 64 def chars_until str slice_str = @str.check_until(Regexp.new(Regexp.escape(str))) return chars_left unless slice_str return slice_str.size - str.size end
Consumes n characters from the input, returning them as a slice of the input.
# File lib/parslet/source.rb, line 41 def consume(n) position = self.pos slice_str = @str.scan(@re_cache[n]) slice = Parslet::Slice.new( position, slice_str, @line_cache) return slice end
Returns a <line, column> tuple for the given position. If no position is given, line/column information is returned for the current position given by pos.
# File lib/parslet/source.rb, line 92 def line_and_column(position=nil) @line_cache.line_and_column(position || self.bytepos) end
Checks if the given pattern matches at the current input position.
@param pattern [Regexp] pattern to check for @return [Boolean] true if the pattern matches at pos
# File lib/parslet/source.rb, line 33 def matches?(pattern) @str.match?(pattern) end
Position of the parse as a character offset into the original string.
@note Please be aware of encodings at this point.
# File lib/parslet/source.rb, line 74 def pos Position.new(@str.string, @str.pos) end
Generated with the Darkfish Rdoc Generator 2.