Class: Puppet::Pops::Parser::Locator::SubLocator

Inherits:
Puppet::Pops::Parser::Locator show all
Defined in:
lib/puppet/pops/parser/locator.rb

Overview

A Sublocator locates a concrete locator (subspace) in a virtual space. The ‘leading_line_count` is the (virtual) number of lines preceding the first line in the concrete locator. The `leading_offset` is the (virtual) byte offset of the first byte in the concrete locator. The `leading_line_offset` is the (virtual) offset / margin in characters for each line.

This illustrates characters in the sublocator (‘.`) inside the subspace (`X`):

1:XXXXXXXX
2:XXXX.... .. ... ..
3:XXXX. . .... ..
4:XXXX............

This sublocator would be configured with leading_line_count = 1, leading_offset=8, and leading_line_offset=4

Note that leading_offset must be the same for all lines and measured in characters.

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 collapse

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from Puppet::Pops::Parser::Locator

#line_index, locator, locator_version

Constructor Details

#initialize(locator, leading_line_count, leading_offset, leading_line_offset) ⇒ SubLocator

Returns a new instance of SubLocator.



104
105
106
107
108
109
# File 'lib/puppet/pops/parser/locator.rb', line 104

def initialize(locator, leading_line_count, leading_offset, leading_line_offset)
  @locator = locator
  @leading_line_count = leading_line_count
  @leading_offset = leading_offset
  @leading_line_offset = leading_line_offset
end

Instance Attribute Details

#leading_line_countObject (readonly)



93
94
95
# File 'lib/puppet/pops/parser/locator.rb', line 93

def leading_line_count
  @leading_line_count
end

#leading_line_offsetObject (readonly)



95
96
97
# File 'lib/puppet/pops/parser/locator.rb', line 95

def leading_line_offset
  @leading_line_offset
end

#leading_offsetObject (readonly)



94
95
96
# File 'lib/puppet/pops/parser/locator.rb', line 94

def leading_offset
  @leading_offset
end

#locatorObject (readonly)



92
93
94
# File 'lib/puppet/pops/parser/locator.rb', line 92

def locator
  @locator
end

Class Method Details

.sub_locator(string, file, leading_line_count, leading_offset, leading_line_offset) ⇒ Object



97
98
99
100
101
102
# File 'lib/puppet/pops/parser/locator.rb', line 97

def self.sub_locator(string, file, leading_line_count, leading_offset, leading_line_offset)
  self.new(Puppet::Pops::Parser::Locator.locator(string, file),
    leading_line_count,
    leading_offset,
    leading_line_offset)
end

Instance Method Details

#char_length(offset, end_offset) ⇒ Object

Given offsets are offsets in the subspace



136
137
138
139
# File 'lib/puppet/pops/parser/locator.rb', line 136

def char_length(offset, end_offset)
  effective_line = @locator.line_for_offset(end_offset) - @locator.line_for_offset(offset)
  locator.char_length(offset, end_offset) + (effective_line * @leading_line_offset)
end

#char_offset(offset) ⇒ Object

Given offset is offset in the subspace



130
131
132
133
# File 'lib/puppet/pops/parser/locator.rb', line 130

def char_offset(offset)
  effective_line = @locator.line_for_offset(offset)
  locator.char_offset(offset) + (effective_line * @leading_line_offset) + @leading_offset
end

#fileObject



111
112
113
# File 'lib/puppet/pops/parser/locator.rb', line 111

def file
  @locator.file
end

#line_for_offset(offset) ⇒ Object

Given offset is offset in the subspace



120
121
122
# File 'lib/puppet/pops/parser/locator.rb', line 120

def line_for_offset(offset)
  @locator.line_for_offset(offset) + @leading_line_count
end

#offset_on_line(offset) ⇒ Object

Given offset is offset in the subspace



125
126
127
# File 'lib/puppet/pops/parser/locator.rb', line 125

def offset_on_line(offset)
  @locator.offset_on_line(offset) + @leading_line_offset
end

#pos_on_line(offset) ⇒ Object



141
142
143
# File 'lib/puppet/pops/parser/locator.rb', line 141

def pos_on_line(offset)
  offset_on_line(offset) +1
end

#stringObject



115
116
117
# File 'lib/puppet/pops/parser/locator.rb', line 115

def string
  @locator.string
end