# Initialisierung
#
# "lbrk" und "rbrk" werden als temporäre Ersatzstrings für die
# eckigen Klammern benutzt, wenn die originalen Fussnoten ersetzt
# werden, um doppelte Ersetzungen zu verhindern. Am Schluss werden
# diese Strings wieder durch die eckigen Klammern ersetzt.
BEGIN {
maintext=1;
count=1;
lbrk="a192aedadac29bdc8ec296f267222d17"
rbrk="8ea03e15e3312e78ce9278b05acd1af0"
}
/a192aedadac29bdc8ec296f267222d17/ {
print "lbrk ist im Text enthalten, bitte Skript anpassen...";
exit;
}
/8ea03e15e3312e78ce9278b05acd1af0/ {
print "rbrk ist im Text enthalten, bitte Skript anpassen...";
exit;
}
# Start des Fussnotenbereichs
/^@footnotes:/ {
maintext = 0;
}
# Verarbeitung des Haupttextes
maintext == 1 {
# Zeilen an "[" aufsplitten (potentielle Fussnotenfundstellen)
num = split($0, array, "[");
for (idx=1; idx<=num; idx++) {
# Nur wenn auch "]" auftaucht, könnte es eine Fussnote sein
if (match(array[idx], "]")) {
# Nur wenn nur Zahlen zwischen "[" und "]" stehen, ist es eine
footnote = substr(array[idx], 1, RSTART-1);
if (footnote == sprintf("%d", footnote) ) {
# Falls diese Referenz noch nie aufgetaucht ist, wird
# eine neue Zuordnung alt -> neu in a_footnote gespeichert
if (a_footnote[footnote] == 0) {
a_footnote[footnote] = count;
count++;
}
# Ersetzen der alten durch die neue Referenz
gsub("\\[" footnote "\\]", lbrk a_footnote[footnote] rbrk);
}
}
}
# Ersetzen der temporären Ersatzstrings für die eckigen Klammern
gsub(lbrk, "[");
gsub(rbrk, "]");
print $0;
}
# Verarbeitung des Fussnotenbereichs
/^\[[0-9]+\]/ && (maintext == 0) {
# Extrahieren der alten Fussnote
footnote = substr($1, 2, length($1)-2);
# Extrahieren des zugehörigen Fussnotentextes
footnotetext = substr($0, length($1)+2);
# Speichern des Fussnotentextes in einem Array mit der neuen Numerierung
a_footnotetext[a_footnote[footnote]] = footnotetext;
}
# Ausgabe der sortierten Fussnoten
END {
print "@footnotes:\n";
for (idx=1; idx<count; idx++) {
printf("[%d] %s\n", idx, a_footnotetext[idx]);
}
}