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

if __FILE__==$0
  Footnotes.new.run(ARGV.shift)
end
