# Autor: Bernhard Reiter

FOOTNOTE_SPLIT = "@footnote:"
regexp = Regexp.compile('\[([0-9]+)\]')

class Footnote
   @@table = {}
   @@index = 0

   def self.next(num)
       @@table[num] = @@table.key?(num) ? @@table[num] : @@index += 1
   end
end

# Monkey patch
class String
   def index_footnotes!(regexp)
       gsub!(regexp) { |num| "[#{Footnote.next(num)}]" }
   end
end

# Text laden
input = ARGV[0] != nil ? File.read(ARGV[0]) : STDIN.read
text, bib = input.split(FOOTNOTE_SPLIT)

# Fussnoten neu nummerieren und sortieren
text.index_footnotes!(regexp)
bib = bib.index_footnotes!(regexp).split("\n").sort.join("\n")

# Ausgabe
puts text, FOOTNOTE_SPLIT, bib