--- /dev/null
+#!/bin/sh
+
+export LC_ALL=C
+sed 's/&/\&/g;s/</\</g;s/>/\>/g' | awk '
+BEGIN {
+ getline
+ print "<html><head><title>" $0 "</title></head><body><pre>"
+ print
+
+ while (getline == 1) {
+ if ($0 ~ /^Contents/)
+ break
+ print
+ }
+ print "<a name=\"Contents\" href=\"#Contents\">Contents</a>"
+
+ while (getline == 1) {
+ id = $1
+ if (id ~ /Annex/)
+ id = $2
+ if (id ~ /^([1-9A-Z]|Index|Foreword|Introduction|Bibliography)/) {
+ if (match($0, /<[a-zA-Z0-9_]*\.h>/)) {
+ h=substr($0,RSTART,RLENGTH)
+ if (!(h in header))
+ header[h] = id
+ }
+ if (id ~ /\.$/)
+ id = substr(id,1,length(id)-1)
+ s = "<a href=\"#" id "\">" $0
+ if ($(NF-1) == ".")
+ print s "</a>"
+ else{
+ print s
+ getline
+ print $0 "</a>"
+ }
+ if (id == "Index")
+ break
+ } else
+ print
+ }
+}
+
+!seenindex && /^ *([1-9A-Z]\.|Annex|Index|Foreword|Introduction|Bibliography)/ {
+ id = $1
+ if (id ~ /Annex/)
+ id = $2
+ if (($0 ~ /^ [1-9]\./ || id ~ /^([A-Z]|[1-9A-Z]\.[1-9][0-9.]*|Index|Foreword|Introduction|Bibliography)$/) &&
+ (NF==1 || $2 ~ /^[A-Z]/)) {
+ if (id ~ /\.$/)
+ id = substr(id,1,length(id)-1)
+ print "<a name=\"" id "\" href=\"#" id "\"><b>" $0 "</b></a>"
+ if (id == "Index")
+ seenindex=1
+ next
+ }
+}
+
+/^\[page / {
+ p = substr($2,1,length($2)-1)
+ print "[<a name=\"#p" p "\" href=\"p" p "\">page " p "</a>] (<a href=\"#Contents\">Contents</a>)"
+ next
+}
+
+{
+ s = $0
+ p = ""
+ if (seenindex)
+ r = "[ (][A-Z1-9][0-9.]*"
+ else
+ r = "[ (][A-Z1-9]\\.[0-9.]*[0-9]"
+ while (match(s, r)) {
+ p = p substr(s,1,RSTART)
+ l = substr(s,RSTART+1,RLENGTH-1)
+ if (l ~ /[4-9][0-9]/ || l ~ /[0-3][0-9][0-9]/ || substr(s,RSTART+RLENGTH,1) ~ /[a-zA-Z]/)
+ p = p l
+ else
+ p = p "<a href=\"#" l "\">" l "</a>"
+ s = substr(s,RSTART+RLENGTH)
+ }
+ s = p s
+ p = ""
+ while (match(s, /<[a-zA-Z0-9_]*\.h>/)) {
+ p = p substr(s,1,RSTART-1)
+ h = substr(s,RSTART,RLENGTH)
+ if (h in header)
+ p = p "<a href=\"#" header[h] "\">" h "</a>"
+ else
+ p = p h
+ s = substr(s,RSTART+RLENGTH)
+ }
+ print p s
+}'