#!/usr/bin/perl -w # # syntax: perl footnotes.pl sample4.txt > new.txt use strict; $|=0; if (!@ARGV){ print "usage: $0 old.txt > new.txt\n"; exit 1; } my @broken; my %mapindex; my %txtindex; my $stopp = 0; my $count = 0; my $msg = 'WARNING: footnote not defined!'; while (<>) { if ($stopp) { if ( /\[ (\d+) \] (.*)/x ) { $txtindex{$1} = $2; } next; } if ( /^\@footnotes:$/ ) { $stopp = 1; print $_; next; } while ( s/^ (.*?) \[ (\d+) \]//x ) { print $1; if ( exists $mapindex{$2} ) { print '[' . $mapindex{$2} . ']'; next; } $mapindex{$2} = ++$count; print '['. $count. ']'; } print $_; } for my $key ( sort { $mapindex{$a} <=> $mapindex{$b} } keys %mapindex ) { if ( exists $txtindex{$key} ) { printf ("[%s]%s\n", $mapindex{$key}, $txtindex{$key}); } else { printf ("[%s] %s (old ref no %s)\n", $mapindex{$key}, $msg, $key); push (@broken, $mapindex{$key}); } } if (@broken) { print STDERR "broken footnote(s): ", join(', ', @broken), "\n"; } exit 0; # eof