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