class Footnotes
FOOTNOTE_HEADER = '@footnotes:'
FOOTNOTE_HEADER_REGEXP = %r(^#{FOOTNOTE_HEADER})
def initialize
@cnt = 0
@table = {}
end
def handle_text_block()
r = /\[(\d+)\]/
while line = @file.gets
return if line.match(FOOTNOTE_HEADER_REGEXP)
line.gsub!(r) do |m|
@table[m] = @cnt += 1 unless @table[m]
"[#{@table[m]}]"
end
puts line
end
end
def handle_footnotes()
footnotes = {}
r = /^(\[\d+\])/
while line = @file.gets
old_note = line[r, 1]
next unless old_note
new_note = @table[old_note]
next unless new_note
footnotes[new_note] = line[old_note.length..-1]
end
footnotes.sort.each { |idx,ref| print "[#{idx}]#{ref}" }
end
def run(file)
@file = file ? File.open(file, 'r') : STDIN
handle_text_block
puts FOOTNOTE_HEADER
handle_footnotes
@file.close
end
end