74 lines
1.5 KiB
Awk
74 lines
1.5 KiB
Awk
BEGIN {
|
|
FS = "#";
|
|
BD = "\\s+1\\f3";
|
|
ED = "\\fP\\s-1";
|
|
}
|
|
|
|
NR == 1 {
|
|
if ($3 != "")
|
|
printf(".Ib \"%s\"\n", $2);
|
|
major = $2;
|
|
minor = $3;
|
|
if ($4 == "@DEF@") {
|
|
pagelist = BD $1 ED;
|
|
}
|
|
else {
|
|
pagelist = $1;
|
|
}
|
|
pageno = $1;
|
|
oldpageno = $1;
|
|
oldpagelist = "";
|
|
}
|
|
|
|
NR != 1 {
|
|
if ($2 == major && $3 == minor) # neither has changed
|
|
{
|
|
if ($1 != pageno) { # new page number, append
|
|
oldpageno = $1;
|
|
oldpagelist = pagelist;
|
|
if ($4 == "@DEF@") {
|
|
pagelist = pagelist ", " BD $1 ED;
|
|
}
|
|
else {
|
|
pagelist = pagelist ", " $1;
|
|
}
|
|
}
|
|
else { # old page, but check for def
|
|
if ($4 == "@DEF@") {
|
|
if (pageno == oldpageno) {
|
|
if (oldpagelist != "")
|
|
oldpagelist = oldpagelist ", "
|
|
}
|
|
pagelist = oldpagelist BD $1 ED;
|
|
}
|
|
}
|
|
}
|
|
else # one has changed
|
|
{
|
|
if (minor != "") # dump full record
|
|
printf(".I< \"%s\" \"%s\" \"%s\"\n", major, minor, pagelist);
|
|
else
|
|
printf(".I> \"%s\" \"%s\"\n", major, pagelist);
|
|
if ($4 == "@DEF@") { # restart pagelist
|
|
pagelist = BD $1 ED;
|
|
}
|
|
else {
|
|
pagelist = $1;
|
|
}
|
|
oldpagelist = "";
|
|
oldpageno = $1;
|
|
if ($2 != major && $3 != "") # major has changed, minor not null
|
|
printf(".Ib \"%s\"\n", $2);
|
|
}
|
|
major = $2;
|
|
minor = $3;
|
|
pageno = $1;
|
|
}
|
|
|
|
END {
|
|
if (minor != "") # dump full record
|
|
printf(".I< \"%s\" \"%s\" \"%s\"\n", major, minor, pagelist);
|
|
else
|
|
printf(".I> \"%s\" \"%s\"\n", major, pagelist);
|
|
}
|