#!/usr/bin/env perl
# all in memory
use strict;
my %mapping; # mapping of digits
my @definitions;
undef $/; # read in one go
my $counter = 1;
my $part = 0;
for( split /(\n\@footnotes:\n)/, <> ) {
if( ++$part == 1 ) {
s/\[(\d+)\]/'['.($mapping{$1} ||= $counter++).']'/ge;
print;
} elsif( $part == 2 ) {
print;
} else {
for( split /^/ ) {
/^ \[ (\d+) \] (.*)/x
or print, next;
exists $mapping{$1} or
warn("ignoring unused note: $_"), next;
$definitions[$mapping{$1}] = $2;
}
}
}
for my $i ( 1..$#definitions ) {
print "[$i]$definitions[$i]\n";
}