class Puppet::Pops::Parser::Locator::Locator19
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).
Public Class Methods
_pcore_type()
click to toggle source
# File lib/puppet/pops/parser/locator.rb 319 def self._pcore_type 320 @type ||= Types::PObjectType.new('Puppet::AST::Locator', { 321 'attributes' => { 322 'string' => Types::PStringType::DEFAULT, 323 'file' => Types::PStringType::DEFAULT, 324 'line_index' => { 325 Types::KEY_TYPE => Types::POptionalType.new(Types::PArrayType.new(Types::PIntegerType::DEFAULT)), 326 Types::KEY_VALUE => nil 327 } 328 } 329 }) 330 end
Public Instance Methods
char_length(offset, end_offset)
click to toggle source
Returns the length measured in number of characters from the given start and end byte offset
# File lib/puppet/pops/parser/locator.rb 346 def char_length(offset, end_offset) 347 string.byteslice(offset, end_offset - offset).length 348 end
char_offset(byte_offset)
click to toggle source
Returns the character offset for a given byte offset Ruby 19 is multibyte but has no character position methods, must use byteslice
# File lib/puppet/pops/parser/locator.rb 341 def char_offset(byte_offset) 342 string.byteslice(0, byte_offset).length 343 end
extract_text(offset, length)
click to toggle source
Extracts the text from byte offset with given byte length @returns String - the extracted text
# File lib/puppet/pops/parser/locator.rb 352 def extract_text(offset, length) 353 string.byteslice(offset, length) 354 end
offset_on_line(offset)
click to toggle source
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
# File lib/puppet/pops/parser/locator.rb 334 def offset_on_line(offset) 335 line_offset = line_index[ line_for_offset(offset)-1 ] 336 @string.byteslice(line_offset, offset-line_offset).length 337 end