Class: Puppet::Pops::Parser::Locator::Locator19
- Inherits:
-
AbstractLocator
- Object
- Puppet::Pops::Parser::Locator
- AbstractLocator
- Puppet::Pops::Parser::Locator::Locator19
- Defined in:
- lib/puppet/pops/parser/locator.rb
Overview
This implementation is for Ruby19 and Ruby20. It uses byteslice to get strings from byte based offsets. For Ruby20 this is faster than using the Stringscanner.charpos method (byteslice outperforms it, when strings are frozen).
Constant Summary
Constants inherited from Puppet::Pops::Parser::Locator
LOCATOR_VERSION, MULTIBYTE, RUBYVER, RUBYVER_ARRAY, RUBY_1_9_3, RUBY_2_0_0
Instance Attribute Summary
Attributes inherited from AbstractLocator
#file, #line_index, #prev_line, #prev_offset, #string
Instance Method Summary collapse
-
#char_length(offset, end_offset) ⇒ Object
Returns the length measured in number of characters from the given start and end byte offseta.
-
#char_offset(byte_offset) ⇒ Object
Returns the character offset for a given byte offset Ruby 19 is multibyte but has no character position methods, must use byteslice.
-
#offset_on_line(offset) ⇒ Object
Returns the offset on line (first offset on a line is 0).
Methods inherited from AbstractLocator
#ary_bsearch_i, #compute_line_index, #initialize, #line_for_offset, #pos_on_line, #to_location_hash
Methods inherited from Puppet::Pops::Parser::Locator
#file, #line_for_offset, #line_index, locator, locator_version, #pos_on_line, #string
Constructor Details
This class inherits a constructor from Puppet::Pops::Parser::Locator::AbstractLocator
Instance Method Details
#char_length(offset, end_offset) ⇒ Object
Returns the length measured in number of characters from the given start and end byte offseta
287 288 289 |
# File 'lib/puppet/pops/parser/locator.rb', line 287 def char_length(offset, end_offset) string.byteslice(offset, end_offset - offset).length end |
#char_offset(byte_offset) ⇒ Object
Returns the character offset for a given byte offset Ruby 19 is multibyte but has no character position methods, must use byteslice
282 283 284 |
# File 'lib/puppet/pops/parser/locator.rb', line 282 def char_offset(byte_offset) string.byteslice(0, byte_offset).length end |
#offset_on_line(offset) ⇒ Object
Returns the offset on line (first offset on a line is 0). Ruby 19 is multibyte but has no character position methods, must use byteslice
275 276 277 278 |
# File 'lib/puppet/pops/parser/locator.rb', line 275 def offset_on_line(offset) line_offset = line_index[ line_for_offset(offset)-1 ] string.byteslice(line_offset, offset-line_offset).length end |