xenocara/doc/xorg-docs/specs/Xaw/fixindex.awk
2006-11-29 16:49:19 +00:00

74 lines
1.5 KiB
Awk

BEGIN {
FS = ":";
BD = "\\s+1\\fB";
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);
}