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 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
|