#!/bin/sh
# Copyright 1991 by Norman Ramsey. All rights reserved.
# See file COPYRIGHT for more information.
# Don't try to understand this file! Look at lib/totex.nw in the noweb source!
delay=0 noindex=0
for i do
case $i in
-delay) delay=1 ;;
-noindex) noindex=1 ;;
*) echo "This can't happen -- $i passed to totex" 1>&2 ; exit 1 ;;
esac
done
awk 'BEGIN { code=0 ; quoting=0 ; text=1; defns[0] = 0
ulist[0] = 0 }
/^@begin code/ { code=1 ; printf "\\nwbegincode{%s}", substr($0, 13) }
/^@end code/ { code=0 ; printf "\\nwendcode{}"; lastdefnlabel = "" }
/^@begin docs 0$/ { if (delay) next }
/^@end docs 0$/ { if (delay) {
printf "\\nwfilename{%s}", filename; delay=0; next
} }
/^@begin docs/ { text=0 ; printf "\\nwbegindocs{%s}", substr($0, 13) }
/^@end docs/ { printf "\\nwenddocs{}" }
/^@text / { line = substr($0, 7) ; text += length - 6
if (code) printf "%s", escape_brace_bslash(line)
else if (quoting) printf "%s", TeXliteral(line)
else printf "%s", line
}
/^@nl$/ { if (!code) {if (text==0) printf "\\nwdocspar"
text=1}
if (quoting) printf "\\nwnewline"
printf "\n"
}
/^@defn / { name = substr($0, 7); if (lastxreflabel != "") {
printf "\\sublabel{%s}", lastxreflabel
printf "\\nwmargintag{%s}", label2tag(lastxreflabel)
}
printf "\\moddef{%s%s}\\%sendmoddef", convquotes(name), (lastxrefref != "" ? ("~" label2tag(lastxrefref)) : ""), defns[name]
lastdefnlabel = lastxreflabel
lastxreflabel = lastxrefref = ""
defns[name] = "plus" }
/^@use / { printf "\\LA{}%s%s\\RA{}",
convquotes(substr($0, 6)), (lastxrefref != "" ? ("~" label2tag(lastxrefref)) : "")
}
/^@quote$/ { quoting = 1 ; printf "{\\tt{}" }
/^@endquote$/ { quoting = 0 ; printf "}" }
/^@file / { filename = substr($0, 7); lastxreflabel = lastxrefref = ""
if (!delay) printf "\\nwfilename{%s}", filename
}
/^@literal / { printf "%s", substr($0, 10) }
/^@header latex / { printf "\\documentclass{article}\\usepackage{noweb}\\pagestyle{noweb}\\noweboptions{%s}%s",
substr($0, 15), "\\begin{document}" }
/^@header tex / { printf "\\input nwmac " }
/^@trailer latex$/ { print "\\end{document}" }
/^@trailer tex$/ { print "\\bye" }
/^@xref label / { lastxreflabel = substr($0, 13) }
/^@xref ref / { lastxrefref = substr($0, 11) }
/^@xref begindefs$/ { printf "\\nwalsodefined{" }
/^@xref defitem / { printf "\\\\{%s}", substr($0, 15) }
/^@xref enddefs$/ { printf "}" }
/^@xref beginuses$/ { printf "\\nwused{" }
/^@xref useitem / { printf "\\\\{%s}", substr($0, 15) }
/^@xref enduses$/ { printf "}" }
/^@xref notused / { printf "\\nwnotused{%s}", TeXliteral(substr($0, 15)) }
/^@xref nextdef / { }
/^@xref prevdef / { }
/^@xref beginchunks$/ { }
/^@xref chunkbegin / { label = $3; name = substr($0, 19 + length(label))
printf "\\nwixlogsorted{c}{{%s}{%s}{",
convquotes(name), label
}
/^@xref chunkuse / { printf "\\nwixu{%s}", substr($0, 16) }
/^@xref chunkdefn / { printf "\\nwixd{%s}", substr($0, 17) }
/^@xref chunkend$/ { print "}}%" }
/^@xref endchunks$/ { }
/^@index nl$/ { print (code ? "\\eatline" : "%") }
/^@index defn / {
if (!noindex) { arg = substr($0, 13); if (lastxreflabel != "") printf "\\nosublabel{%s}", lastxreflabel
if (lastxrefref != "")
printf "\\nwindexdefn{%s}{%s}{%s}", TeXliteral(arg), indexlabel(arg), lastxrefref
lastxreflabel = lastxrefref = "" } }
/^@index localdefn / {
if (!noindex) { arg = substr($0, 18); if (lastxreflabel != "") printf "\\nosublabel{%s}", lastxreflabel
if (lastxrefref != "")
printf "\\nwindexdefn{%s}{%s}{%s}", TeXliteral(arg), indexlabel(arg), lastxrefref
lastxreflabel = lastxrefref = "" } }
/^@index use / {
if (!noindex) { arg = substr($0, 12); if (!code) {
if (lastxreflabel != "") printf "\\protect\\nosublabel{%s}", lastxreflabel
if (lastxrefref != "")
printf "\\protect\\nwindexuse{%s}{%s}{%s}",
TeXliteral(arg), indexlabel(arg), lastxrefref
}
lastxreflabel = lastxrefref = "" } }
/^@index begindefs$/ { if (!noindex) { printf "\\nwidentdefs{" } }
/^@index isused / { if (!noindex) { } } # handled by latex
/^@index defitem / { if (!noindex) { i = substr($0,16); printf "\\\\{{%s}{%s}}", TeXliteral(i), indexlabel(i) } }
/^@index enddefs$/ { if (!noindex) { printf "}" } }
/^@index beginuses$/ { if (!noindex) { printf "\\nwidentuses{"; ucount = 0 } }
/^@index isdefined / { if (!noindex) { } } # latex finds the definitions
/^@index useitem / { if (!noindex) { i = substr($0, 16); printf "\\\\{{%s}{%s}}", TeXliteral(i), indexlabel(i)
ulist[ucount++] = i
} }
/^@index enduses$/ { if (!noindex) { printf "}"; if (lastdefnlabel != "") {
for (j = 0; j < ucount; j++)
printf "\\nwindexuse{%s}{%s}{%s}",
TeXliteral(ulist[j]), indexlabel(ulist[j]), lastdefnlabel
} } }
/^@index beginindex$/ { if (!noindex) { } }
/^@index entrybegin / { if (!noindex) { label = $3; name = substr($0, 20 + length(label))
printf "\\nwixlogsorted{i}{{%s}{%s}}%%\n",
TeXliteral(name), indexlabel(name)
} }
/^@index entryuse / { if (!noindex) { } } # handled by latex
/^@index entrydefn / { if (!noindex) { } } # handled by latex
/^@index entryend$/ { if (!noindex) { } }
/^@index endindex$/ { if (!noindex) { } }
END { printf "\n" }
function label2tag(label) {
return "{\\nwtagstyle{}\\subpageref{" label "}}"
}
function escape_brace_bslash(line) {
gsub(/[\\{}]/, "\n&", line)
gsub(/\n/, "\\", line)
return line
}
function convquotes(s, r, i) {
r = ""
while (i = index(s, "[[")) {
r = r substr(s, 1, i-1) "\\code{}"
s = substr(s, i+2)
if (i = match(s, "\\]\\]+")) {
r = r TeXliteral(substr(s, 1, i-1+RLENGTH-2)) "\\edoc{}"
s = substr(s, i+RLENGTH)
} else {
r = r s "\\edoc{}"
s = ""
}
}
return r s
}
function indexlabel(ident, l) {
l = ident
gsub(/:/, ":col", l) # must be first (colon)
gsub(/ /, ":sp", l) # space
gsub(/#/, ":has", l) # hash
gsub(/\$/, ":do", l) # dollar
gsub(/%/, ":pe", l) # percent
gsub(/&/, ":am", l) # ampersand
gsub(/,/, ":com", l) # commad
gsub(/\\/, ":bs", l) # backslash
gsub(/\^/, ":hat", l) # hat
gsub(/_/, ":un", l) # underscore
gsub(/{/, ":lb", l) # left brace
gsub(/}/, ":rb", l) # right brace
gsub(/~/, ":ti", l) # tilde
return l
}
function TeXliteral(arg) {
gsub(/\\/, "<\\char92>", arg)
gsub(/}/, "<\\char125}", arg)
gsub(/{/, "{\\char123}", arg)
gsub(/<\\char/, "{\\char", arg)
gsub(/{\\char92>/, "{\\char92}", arg)
gsub(/\$/, "{\\char36}", arg)
gsub(/&/, "{\\char38}", arg)
gsub(/#/, "{\\char35}", arg)
gsub(/\^/, "{\\char94}", arg)
gsub(/_/, "{\\char95}", arg)
gsub(/%/, "{\\char37}", arg)
gsub(/~/, "{\\char126}", arg)
gsub(/ /, "\\ ", arg)
return arg
}' delay=$delay noindex=$noindex
syntax highlighted by Code2HTML, v. 0.9.1