aboutsummaryrefslogtreecommitdiff
path: root/libXaw/spec/fixindex.awk
diff options
context:
space:
mode:
Diffstat (limited to 'libXaw/spec/fixindex.awk')
-rw-r--r--libXaw/spec/fixindex.awk73
1 files changed, 73 insertions, 0 deletions
diff --git a/libXaw/spec/fixindex.awk b/libXaw/spec/fixindex.awk
new file mode 100644
index 000000000..e8849f3bd
--- /dev/null
+++ b/libXaw/spec/fixindex.awk
@@ -0,0 +1,73 @@
+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);
+}