def source_listing
@source_listing ||= begin
lines = @template.split(/\n/)
if line_number
line_index = line_number - 1
beginning_line = line_index <= SOURCE_CONTEXT_WINDOW ? 0 : line_index - SOURCE_CONTEXT_WINDOW
source_size = SOURCE_CONTEXT_WINDOW * 2 + 1
else
beginning_line = 0
source_size = lines.length
end
contextual_lines = lines[beginning_line, source_size]
output = []
contextual_lines.each_with_index do |line, index|
line_number = (index+beginning_line+1).to_s.rjust(3)
output << "#{line_number}: #{line}"
end
output.join("\n")
end
end