1#!/usr/bin/awk -f
2
3#
4# (c) K. Anton Feenstra 2001
5#
6# subindex v. 0.1 - 12 feb 2001
7#
8# reads tex index entries as generated by makeindex and
9# combines identical words into sub-entries
10#
11
12BEGIN {
13  n=0;
14}
15
16/[{ ]Symbols[ }]/ {
17  if ( substr(1,1,$0)!="%" )
18    $0 = "% " $0;
19}
20
21/^[ \t]*\\see/ {
22  sub("^[ \t]*","");
23  pp = pp $0;
24  next;
25}
26
27{
28  sub(", \\\\see.*","",pp);
29}
30
31function dump() {
32  printf("%% %d %d %d %d |", mc, nc, mp, np);
33  for(i=1;i<=nc;i++) printf(" %s",c[i]);
34  printf(" |");
35  for(i=1;i<=np;i++) printf(" %s",p[i]);
36  printf(" |\n");
37}
38
39
40{
41  mc=0;
42  if ($1=="\\item") {
43    for(i=1; $(i)!="\\hfill" && i<=NF; i++) {
44      c[i]=$(i+1);
45      sub(",$","",c[i]);
46      if (i<=np && c[i]==p[i]) mc=i;
47    }
48    nc=i-2;
49  } else {
50    nc=0;
51    mc=0;
52  }
53#  if (mc) dump();
54  if (mc && mc<=nc) {
55    if (mc) {
56      key=c[1];
57      for(i=2; i<=mc; i++)
58	key=key" "c[i];
59    } else
60      key="";
61    if (key != pkey && mc<np)
62      printf("  \\item %s \\hfill \\nopagebreak\n", key);
63    pkey=key;
64  }
65  if (mp) m=mp; else m=mc;
66  skey=p[m+1];
67  for(i=m+2; i<=np; i++)
68    skey=skey" "p[i];
69  if (mc<np)
70    for(i=1; i<=mp || i<=mc; i++) {
71      sub("item "key" ", "subitem ", pp);
72      sub("item "key", "skey, "subitem "skey" $\\sim$", pp);
73      pp="  "pp;
74    }
75
76  np=nc;
77  mp=mc;
78  for(i=1;i<=np;i++)
79    p[i]=c[i];
80}
81
82{
83  if (NR>1) print pp;
84  pp=$0;
85}
86
87END {
88  print pp;
89}
90
91#last line
92