Method: String#each_line_range

Defined in:
lib/gonzui/util.rb

#each_line_range(byteno, ncontexts) ⇒ Object



146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
# File 'lib/gonzui/util.rb', line 146

def each_line_range(byteno, ncontexts)
  raise unless block_given?
  lines = []
  center = self.line_range(byteno)
  lines.push([0, center])

  head = center.first
  ncontexts.times {|i|
    pos = head - 2
    pos += 1 if self[pos] == ?\n # empty line
    break if pos <= 0
    range = self.line_range(pos)
    head = range.first
    lines.unshift([0 - i - 1, range])
  }

  tail = center.last
  ncontexts.times {|i|
    pos = tail + 1
    break if pos >= self.length
    range = self.line_range(pos)
    tail = range.last
    lines.push([i + 1, range])
  }

  lines.each {|lineno_offset, range|
    yield(lineno_offset, range)
  }
end