ss[sid] = "<pre>"
}
-{
+function esc() {
gsub(/\&/, "\\&")
gsub(/</, "\\<")
gsub(/>/, "\\>")
}
+{
+ esc()
+}
+
+!title && /^[^@]/ {
+ title = $0
+ gsub(/ +/, " ", title)
+ gsub(/Committee Draft --/, "", title)
+}
+
/^@sect Contents/ {
ss[sid] = ss[sid] "</pre>\n"
seencontents = 1
+ level = 0
+}
+
+seencontents && !seenfore && /^[^@]/ {
+ id = $1
+ if (id ~ /Annex/)
+ id = $2
+ sub(/\.$/, "", id)
+
+ s = $0
+ if (!sub(/ +\. .*/, "", s)) {
+ getline
+ esc()
+ sub(/^ */, " ")
+ s = s $0
+ sub(/ +\. .*/, "", s)
+ }
+
+ if (match(s, /<[a-zA-Z0-9_]*\.h>/)) {
+ h = substr($0,RSTART,RLENGTH)
+ if (!(h in header))
+ header[h] = id
+ }
+
+ s = "<a href=\"#" id "\">" s "</a>\n"
+
+ s = "<li>" s
+ n = split(id, a, /\./)
+ while (n > level) {
+ s = "<ul>\n" s
+ level++
+ }
+ while (n < level) {
+ s = "</ul>\n" s
+ level--
+ }
+ ss[sid] = ss[sid] s
+ next
}
/^@sect Foreword/ {
- ss[sid] = ss[sid] "</pre>\n"
+ while (level--)
+ ss[sid] = ss[sid] "</ul>\n"
seenfore = 1
}
}
sid++
getline
+ esc()
ss[sid] = ss[sid] "<h1>" $0 "</h1>\n"
- title = $0
if (!seencontents) {
ss[sid] = ss[sid] "<pre>\n"
}
next
}
+/^@sect 3\./ {
+ markdef = 1
+}
+
/^@sect/ {
sid++
slevel = split($2,a,/\./)+1
slevel = 5
sect = $2
getline
+ esc()
# todo hX, back to top
- ss[sid] = sprintf("<a name=\"%s\" href=\"#%s\"><h%s>%s</h%s></a>\n", sect, sect, slevel, $0, slevel)
- if ($0 ~ /^(Index|Contents)/)
+ ss[sid] = sprintf("<h%s><a name=\"%s\" href=\"#%s\">%s</a></h%s>\n", slevel, sect, sect, $0, slevel)
+ if ($0 == "Index")
ss[sid] = ss[sid] "<pre>\n"
next
}
/^@end pre/ {
if (!pre)
next
- pre = pre "</pre>\n"
+ pre = pre "\n</pre>\n"
if (nn)
note[nn] = note[nn] "\n" pre
else
nn = 0
p = $2
getline
- i = $2
- ss[sid] = ss[sid] "<!--page " p " indent " i "-->\n"
+ ss[sid] = ss[sid] "<!--page " p " -->\n"
next
}
/^@para/ {
- ss[sid] = ss[sid] "<p><!--para " $2 "-->\n"
+ ss[sid] = ss[sid] sprintf("<p><a name=\"%sp%s\" href=\"#%sp%s\"><small>%s</small></a>\n", sect, $2, sect, $2, $2)
next
}
-/^ *(Syntax|Semantics|Description|Constraints|Synopsis|Returns)$/ {
- ss[sid] = ss[sid] "<h6>" $0 "</h6>\n"
+/^ ?(Syntax|Semantics|Description|Constraints|Synopsis|Returns|Recommended practice|Implementation limits|Environmental limits)$/ {
+ ss[sid] = ss[sid] "<p><b>" $0 "</b>\n"
next
}
p = p substr(s,1,RSTART-1)
m = substr(s,RSTART,RLENGTH)
if (m in header)
- p = p "<a href=\"#" header "\">" m "</a>"
+ p = p "<a href=\"#" header[m] "\">" m "</a>"
else
p = p m
s = substr(s,RSTART+RLENGTH)
}
s = p s
p = ""
- while (match(s, noteid "\\)")) {
+ # TODO: false positives..
+ while (match(s, /[a-z]opt[ )"]/))
+ s = substr(s,1,RSTART) "<sub>opt</sub>" substr(s,RSTART+RLENGTH-1)
+ if (match(s, /[a-z]opt$/))
+ s = substr(s,1,RSTART) "<sub>opt</sub>"
+ for (;;) {
+ while (match(s, noteid-1 "\\)")) {
+ p = p substr(s,1,RSTART-1)
+ p = p "<sup><a href=\"#note" noteid-1 "\"><b>" noteid-1 ")</b></a></sup>"
+ s = substr(s,RSTART+RLENGTH)
+ }
+ if (!match(s, noteid "\\)"))
+ break
if (noteid==1 && s !~ /\.1\)/)
break
p = p substr(s,1,RSTART-1)
s = substr(s,RSTART+RLENGTH)
}
s = p s
-# if (s ~ /^ *[1-9][0-9]*\) /) {
-# sub(/\)/,"",s)
-# sub(/[0-9]+/,"<sup><a name=\"note&\" href=\"#note&\"><b>&)</b></a></sup>",s)
-# }
-
+ sub(/^ *Forward references/, "<p><b>&</b>", s)
+ if (markdef) {
+ s = "<b>" s "</b><br>"
+ markdef = 0
+ }
if (pre)
pre = pre "\n" s
else if (nn)
END {
ss[sid] = ss[sid] "</pre>"
- print "<html><head><title>C</title></head><body>"
+ print "<html><head><title>" title "</title></head><body>"
for (i = 1; i <= sid; i++) {
print ss[i]
-# if (slev[i] < 4)
n = split(snote[i],a)
if (n > 0) {
- s = "<h6>footnotes</h6>\n"
+ s = "<p><b>Footnotes</b>\n"
for (j = 1; j <= n; j++) {
- s = s "<p><a name=\"note" a[j] "\">" a[j] ")</a>" note[a[j]+0] "\n"
+ s = s "<p><small><a name=\"note" a[j] "\" href=\"#note" a[j] "\">" a[j] ")</a>" note[a[j]+0] "</small>\n"
}
print s
}
+ print "<p><small><a href=\"#Contents\">Contents</a></small>"
}
print "</body></html>"