format definitions in section 3.x
[c-standard.git] / annot.sh
blobdebb71df730240513a5922e4c977b00ebbe14cba
1 #!/bin/sh
3 export LC_ALL=C
4 awk '
5 function initpage() {
6 if (innote)
7 endpre()
9 indent = 10
10 para = 0
11 innote = 0
12 ok = 0
13 empty = ""
14 page = ""
17 function endlist() {
18 if (listindex) {
19 listindent = 0
20 listindex = 0
21 print "@end ol"
22 } else if (listlevel) {
23 listlevel--
24 print "@end ul"
28 function donote(s) {
29 if (match(s, /^[1-9][0-9]*\) +/)) {
30 # todo..
31 endpre()
32 print "@note " substr(s, 1, RLENGTH-2)
33 s = substr(s, RLENGTH+1)
34 innote = 1
35 noteindent = RLENGTH
36 } else if (innote) {
37 if (match(s, /^ +/) && RLENGTH >= noteindent)
38 s = substr(s, noteindent+1)
39 else
40 innote = 0
42 return s
45 function doul(s) {
46 if (!listlevel) {
47 if (s ~ /^--/) {
48 s = dopre(s)
49 listlevel++
50 print "@ul"
51 } else
52 return s
54 if (listlevel == 1) {
55 if (s ~ /^ *o /) {
56 listlevel++
57 print "@ul"
58 } else if (s ~ /^--/) {
59 s = dopre(s)
60 s = substr(s , 3)
61 print "@li"
62 } else if (match(s, /^ +/) && RLENGTH > 1) {
63 sub(/^ /, "", s)
64 } else if (s !~ /^$/) {
65 endpre()
66 endlist()
69 if (listlevel == 2) {
70 if (s ~ /^ *o /) {
71 sub(/ *o /, "", s)
72 s = dopre(s)
73 print "@li"
74 } else if (match(s, /^ +/) && RLENGTH > 5) {
75 sub(/^ +/, "", s)
76 } else if (s !~ /^$/) {
77 sub(/^ /, "", s)
78 endlist()
81 return s
84 function dool(s) {
85 if (listindex == 0) {
86 if (s ~ /^ *1\. /)
87 print "@ol"
88 else
89 return s
92 if (match(s, "^ +" (listindex+1) "\\. +")) {
93 listindex++
94 listindent = RLENGTH
95 s = substr(s, RLENGTH)
96 s = dopre(s)
97 print "@li " listindex
98 } else if (match(s, /^ +/) && RLENGTH >= listindent) {
99 s = substr(s, listindent+1)
100 } else if (s !~ /^$/) {
101 endpre()
102 endlist()
104 return s
107 function endpre() {
108 if (inpre) {
109 print "@end pre"
110 inpre = 0
114 function dopre(s) {
115 if (seenindex != 1)
116 return s
117 if (!inpre) {
118 if (s ~ /^ */) {
119 print "@pre"
120 inpre = 1
121 } else
122 return s
124 if (s !~ /^ */)
125 endpre()
126 return s
129 function dosect(s, n,a) {
130 if (seenindex > 1)
131 return s
132 if (s ~ /^Programming languages/) {
133 print "@title " s
134 return s
136 if (s !~ /^([1-9]\.|[A-Z]\.[1-9]| *Annex |Contents|Index|Foreword|Introduction| *Bibliography)/)
137 return s
138 if (s ~ /^[0-9.]+[^0-9. ]/)
139 return s
140 n = split(s, a)
141 id = a[1]
142 if (id ~ /Annex/)
143 id = a[2]
144 if (id ~ /^([A-Z]|[1-9]\.|[1-9A-Z]\.[0-9.]*[0-9]|Contents|Index|Foreword|Introduction|Bibliography)$/ &&
145 (n==1 || a[2] ~ /^[A-Z.v]/)) {
146 sub(/^ +/,"",s)
147 if (id ~ /\.$/)
148 id = substr(id,1,length(id)-1)
149 if (seenindex || id == "Contents") {
150 endpre()
151 endlist()
152 print "@sect " id
154 if (id == "Index")
155 seenindex++
157 return s
160 BEGIN {
161 listlevel = 0
162 listindex = 0
163 listindent = 0
164 noteindent = 0
165 inpre = 0
166 seenindex = 0
167 pn = 1
168 initpage()
171 /^\[page/ {
172 if(!para && indent && ok)
173 indent = -1
175 if (!ok)
176 indent = 0
178 n = split(page, a, /\n/)
179 print "@page " pn
180 print "@indent " indent
181 if (indent < 0)
182 indent = 0
183 for (i = 1; i < n; i++) {
184 if (a[i] ~ /^@/) {
185 if (a[i] ~ /^@para/)
186 endlist()
187 print a[i]
188 } else {
189 s = substr(a[i], indent+1)
190 s = dosect(s)
191 s = donote(s)
192 if (!innote) {
193 s = doul(s)
194 s = dool(s)
196 s = dopre(s)
197 print s
201 pn++
202 initpage()
203 next
206 /^$/ {
207 if (ok)
208 empty = empty "\n"
209 next
212 length(empty) > 0 {
213 page = page empty
214 empty = ""
218 ok = 1
219 if (match($0, /^[0-9]+ +/)) {
220 para = 1
221 i = RLENGTH
222 match($0, /^[0-9]+/)
223 page = page "@para " substr($0,1,RLENGTH) "\n"
224 } else if (match($0, /^ +/)) {
225 i = RLENGTH
226 } else if ($0 !~ /^[0-9]*$/) {
227 i = 0
228 } else
229 i = 10
230 if (i < indent)
231 indent = i
232 page = page $0 "\n"