def createFigureList(input) figures = [] ; input.each { | line | case line when /Fig (\d*)(<.*$)/ puts "Found Figure: #{$1}" figures << $1.to_i when /Fig.[^\s]/ puts "WARNING: No space after figure reference: " + line ; end } return figures ; end def createMap(figures) map = Hash.new ; (1..figures.length).each { | i | map[figures[i-1]] = i; } return map ; end def replace(input, map, output) replacedReferences = [] input.each { | line | output.write line.gsub(/(:?Fig(:?\.)?) (\d*)/) { | s | replacedReferences << $3.to_i if $2 == "." ; "Fig#{$2} #{map[$3.to_i]}" } } unreplacedReferences = map.keys.sort ; unreplacedReferences.delete_if { | ref | replacedReferences.include?(ref) } puts "Unreplaced References: " puts unreplacedReferences ; end input = File.open("article.html") figures = createFigureList(input) ; map = createMap(figures) map.keys.sort.each { |k| puts "#{k} => #{map[k]}" } $stdout.sync = true #puts "Replace (y/n)?" ; #gets.chomp input.rewind replace(input, map, File.new("article_replaced.html", "w")) ;