|
|
1.1 root 1: BEGIN {
2: longest = 0
3: overf = 0
4: i = 1
5: }
6: /^%/ {
7: total += length($0)+1
8: next
9: }
10: /\\def/ {
11: total += length($0)+1
12: next
13: }
14: /\\title/ {
15: place[i] = total
16: total += length($0) + 1
17: gettitl($0)
18: text[i] = title
19: hsize += length(title)+1
20: i++
21: l = length(title)
22: if(longest < l+1)
23: longest = l + 1
24: if(l > 23){
25: while(l>=23){
26: overf++;
27: l -= 23
28: }
29: }
30: next
31: }
32: /\\([Ss]ection|sub.*section|newsection|chapter)[^a-zA-Z]/ {
33: place[i] = total
34: if($0 ~ /{/ && $0 ~ /}/){
35: line=$0
36: op=gsub("{","",line)
37: cl=gsub("}","",line)
38: n=index($0,"{") +1
39: if(op == cl && cl>1){
40: sub("}","")
41: sub(/{\\tt/,"")
42: }
43: heading = substr($0, n, index($0,"}")-n)
44: }
45: else if($0 ~ /{/){
46: total += length($0) + 1
47: nlines = 0
48: n=index($0, "{")
49: heading = substr($0, n+1, length($0)-n)
50: while(getline ){
51: if(nlines++ > 3){
52: print "too many lines in heading:" heading |"cat 1>&2"
53: break
54: }
55: total += length($0) +1
56: if($0 ~ /}/){
57: heading = heading " " substr($0, 1, index($0,"}")-1)
58: break
59: }
60: else
61: heading = heading " " $0
62: }
63: }
64: total += length($0) +1
65: text[i] = heading
66: hsize += length(heading)+1
67: l = length(heading)
68: if(longest < l+1)
69: longest = l + 1
70: if(l > 23){
71: while(l>=23){
72: overf++;
73: l -= 23
74: }
75: }
76: heading = ""
77: i++
78: next
79: }
80: /.*/ {
81: total += length($0) + 1
82: }
83: END {
84: if(i > 1){
85: # print hsize, longest, i-1, overf
86: for(n=1;n<i;n++){
87: # print place[n]
88: print text[n]
89: }
90: }
91: }
92: function gettitl(A){
93: if(A ~ "%"){
94: split(A,z,"%")
95: a=z[1]
96: }
97: else a=A
98: if(a ~ /\\thanks/){
99: if(a ~ /}/)
100: sub(/\\thanks{.*}/," ",a)
101: else{
102: thanks=1
103: sub(/\\thanks.*/, " ",a)
104: }
105: }
106: left=gsub(/{/," ",a)
107: right = gsub(/}/," ",a)
108: if(thanks)left += 1
109: if(a ~ /\\[a-z][a-z]* /)gsub(/\\[a-z][a-z]* /," ",a)
110: if(a ~ /\\[^a-z]/)gsub(/\\[^a-z]/," ",a)
111: title = a
112: while(left != right){
113: if((getline)<1){print "ran out of file"
114: exit
115: }
116: total += length($0) +1
117: if($0 ~ "%"){
118: split($0,z,"%")
119: if(length(z[1]) == 0)continue
120: a = z[1]
121: }
122: else a = $0
123: if(thanks){
124: if(a ~ /}/){
125: thanks=0
126: right += 1
127: sub(/}/,"XXX",a)
128: sub(/.*XXX/," ",a)
129: }
130: else continue
131: }
132: if(a ~ /\\thanks/){
133: b=a
134: left += gsub(/{/," ",b)
135: right += gsub(/}/," ",b)
136: if(index(/}/,a)){
137: gsub(/\\thanks.*}/," ",a)
138: title = title " " a
139: continue
140: }
141: thanks=1
142: continue
143: }
144: left+=gsub(/{/," ",a)
145: right += gsub(/}/," ",a)
146: if(a ~ /\\[a-z][a-z]* /)gsub(/\\[a-z][a-z]* /," ",a)
147: if(a ~ /\\[^a-z]/)gsub(/\\[^a-z]/," ",a)
148: title = title " " a
149: }
150: gsub(/[ ][ ]*/," ",title)
151: sub(/^ /,"", title)
152: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.