@# This requires a hacked version of man2html @# See here: http://www.kylheku.com/cgit/man @(bind closedtxt " <TT>[+]</TT>") @(bind opentxt " <TT>[-]</TT>") @(bind xpnall "[expand all]") @(bind clpsall "[collapse all]") @(bind closed t) @(do (defvarl symhash (hash)) (defvarl tagmap (hash)) (defvarl tochash (hash)) (defvarl dupe-hashes (hash)) (defvarl dupe-titles (hash)) (defvarl direct (hash)) (defvarl disamb (hash)) (defvarl dist-counter 0) (defvarl colli (hash-props)) (defun hash-title (title) (let* ((ti title) (cntr 0) (defs (build (while-match `@nil<tt>@ttitem</tt>@rest` ti (add ttitem) (set ti rest))))) (set title (if defs (car defs) (downcase-str title)) ti title) (while* [dupe-titles title] (set title `T-@(inc cntr)-@ti`)) (set [dupe-titles title] t) (let* ((h (crc32 title)) (h (+ h (or [colli title] 0))) (existing [dupe-hashes h])) (when existing (unless (equal title existing) (error "~a ~a hash collision!" existing title))) (set [dupe-hashes h] title) (format nil "N-~,08X" h)))) (defun toc-tag (sec) `TOC-@sec`) (defun process-ambiguities (hash) (let ((rhash (hash))) (dohash (sym tags hash) (let ((shash (fmt "S-~,08X" (crc32 sym)))) (if [rhash shash] (error "~a ~a hash collision" sym [rhash shash]) (set [rhash shash] sym)) (set [hash sym] shash) (if (null (cdr tags)) (push shash [direct (car tags)]) (set [disamb shash] (reverse tags)))))))) Content-type: text/html @(skip 15) <h1>TXR</h1> @(skip)Updated: @YEAR-@MONTH-@DAY<br><a href="#index">Index</a> @(bind TIME @(make-time-utc (int-str YEAR) (int-str MONTH) (int-str DAY) 0 0 0 nil)) @(bind VERSION nil) @(collect :vars (BODY)) @ (some) @ (cases) <a name="@tag"> </a> @ (some) <h@level>@sec @title</h@level> @ (or) <h@level>@sec @title </h@level> @ (end) @ (bind newtag @(hash-title title)) @ (do (set [tagmap tag] newtag)) @ (output :into BODY) <a name="@newtag"> </a> <h@level><a href="#@(toc-tag sec)" onclick="tocjump('@(toc-tag sec)')">@sec</a> @title</h@level> @ (end) @ (cat BODY "\n") @ (or) @BODY @ (end) @ (and) <b>TXR</b> - text processing language (version @ver) @ (set VERSION ver) @ (end) @(until) <hr> <a name="index"> </a><h2>Index</h2> @(end) <hr> @(collect :vars (TOC)) @ (some) @ (cases) @ (cases) <dt><a href="#@tag">@num @rest</a><dd> @ (or) <dt><a href="#@tag">@num @rest </a><dd> @ (end) @ (bind TOC `<dt><a name="@(toc-tag num)" class="tocanchor">@num</a> <a href="#@[tagmap tag]">@rest</a></dt>`) @ (or) <a name="index">@(skip) @ (output :into TOC) <h2>Contents</h2> <noscript> <h3>Please turn on Javascript to use the collapsible contents.</h3> </noscript> <a href="#/" onclick="toggleall(this)">@xpnall</a> @ (end) @ (or) @TOC @ (end) @ (and) <dt><a href="@nil">@nil TXR LISP</a><dd> @ (and) <dt><a href="#@tag">@(coll :vars (sym))<tt>@sym</tt>@(end) @ (do (let ((n-tag [tagmap tag])) (mapdo (do pushnew n-tag [symhash (html-decode @1)]) sym) (set [tochash n-tag] rest))) @ (and) <dt><a href="#@tag">@num @nil @ (maybe) </a><dd> @ (end) <dl> @ (cat TOC) @ (bind pos @(car (search-regex TOC #/<\/dt/))) @ (bind id @(gensym)) @ (do (set [TOC pos..pos] `<a href="#/" onclick="toggle(this, '@id')" class="toggle">@(if closed closedtxt opentxt)</a>`)) @ (output :into TOC) @TOC <dd><dl id="@id" class="tocsec"@(if closed " style=\"display: none\"")> @ (end) @ (end) @(until) This document was created by @(end) @(flatten TOC) @(do (process-ambiguities symhash)) @(set BODY @(let ((inside-tt nil) (inside-syntax nil)) (mapcar (do cond ((equal @1 "<tt>") (set inside-tt t) @1) ((equal @1 "</tt>") (set inside-tt nil) (set inside-syntax nil) @1) ((equal @1 "<dt>Syntax:<dd>") (set inside-syntax t) @1) ((or (and inside-tt (not inside-syntax)) (match-regex @1 #/<dt><tt>/)) (regsub #/@?[\(\[][^ )&]+/ (do let* ((at (if (eql [@1 0] #\@) (pop @1))) (tok [@1 1..:]) (bkt [@1 0]) (tag [symhash (html-decode tok)])) (if tag `@at@bkt<a href="#@tag">@tok</a>` `@at@1`)) @1)) ((starts-with "<a name=" @1) (match @(with `<a name="@tag">@rest` shash [direct tag]) @1 (join (collect-each ((sh shash)) `<a name="@sh"> </a>\n`) @1))) ((search-regex @1 #/<h[1-9]>/) @1) (t (regsub #/<tt>.%<\/tt>/ (do let* ((tok [@1 4 -5]) (tend (break-str tok ") ")) pfx sym sfx tag) (cond ((match-str tok "@(") (set pfx "@(" sym [tok 2 tend] sfx [tok tend .. :] tag [symhash (html-decode sym)])) (t (set tag [symhash (html-decode tok)] sym tok))) (if tag `<tt>@pfx<a href="#@tag">@sym</a>@sfx</tt>` @1)) @1))) BODY))) @(bind (d-tag n-tag) @(transpose (hash-pairs disamb))) @(output) <!doctype html public "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head><title>Manpage for TXR @VERSION</title> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <style> .disambiguations dl { margin-bottom: 2048px; } dl.items dd:-moz-only-whitespace::after { content: "\00A0"; } dl.items dd:empty:after { content: "\00A0"; } dl.items dd { overflow: auto; min-width: calc(100% - 3em); margin-left: 3em; margin-bottom: 1ex; } dl.items dt { float: left; padding-right: 1ex; } kbd { background-color: #eee; border-radius: 3px; border: 1px solid #b4b4b4; box-shadow: 0 1px 1px rgba(0, 0, 0, .2), 0 2px 0 0 rgba(255, 255, 255, .7) inset; color: #333; display: inline-block; font-weight: 700; line-height: 1; padding: 2px 4px; white-space: nowrap; } </style> <script type="text/javascript"> var xpanded = false; function toggle(link, id) { var e = document.getElementById(id); if (e.style.display == '') { e.style.display = 'none'; link.innerHTML = '@closedtxt'; } else { e.style.display = ''; link.innerHTML = '@opentxt'; } } function toggleall(link) { var toc = document.getElementsByClassName("TOC"); var dls = toc[0].getElementsByClassName("tocsec"); var atoggles = toc[0].getElementsByClassName("toggle"); var ndisp = xpanded ? 'none' : ''; var nhtml = xpanded ? '@closedtxt' : '@opentxt' for (var i = 0; i < dls.length; i++) dls[i].style.display = ndisp; for (var i = 0; i < atoggles.length; i++) atoggles[i].innerHTML = nhtml; link.innerHTML = xpanded ? '@xpnall' : '@clpsall'; xpanded = !xpanded; } function tocjump(hash) { var toc = document.getElementsByClassName("TOC"); var tanch = toc[0].getElementsByClassName("tocanchor"); for (var i = 0; i < tanch.length; i++) { var ta = tanch[i]; if (ta.name == hash) { for (var e = ta.parentNode; e !== null; e = e.parentElement) { if (e.tagName == "DL") { var dt = e.previousElementSibling; e.style.display = ''; if (dt !== null) { var atoggles = dt.getElementsByClassName("toggle"); if (atoggles.length > 0) atoggles[0].innerHTML = '@opentxt'; } } } } } } </script> </head><body> <h2>Manpage for <a href="#@[tagmap "lbAB"]">TXR </a>@VERSION</h2> <h2>@(time-string-utc TIME "%b %d, %Y")</h2> <p> <form action="https://www.paypal.com/cgi-bin/webscr" method="post"> <input type="hidden" name="cmd" value="_s-xclick"> <input type="hidden" name="encrypted" value="-----BEGIN PKCS7-----MIIHJwYJKoZIhvcNAQcEoIIHGDCCBxQCAQExggEwMIIBLAIBADCBlDCBjjELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAkNBMRYwFAYDVQQHEw1Nb3VudGFpbiBWaWV3MRQwEgYDVQQKEwtQYXlQYWwgSW5jLjETMBEGA1UECxQKbGl2ZV9jZXJ0czERMA8GA1UEAxQIbGl2ZV9hcGkxHDAaBgkqhkiG9w0BCQEWDXJlQHBheXBhbC5jb20CAQAwDQYJKoZIhvcNAQEBBQAEgYBQLZSe0xgg+h5deucBW3W3vj5kgJXsNm+Cmidp8krGwBTXBJJ4b6qreIdiArKKEVD6Lohb0f+267KtCvu28j/Kf6MlVfdsdI0p36jvqjisRGF/wtiJuHsHhbY5Lw27LykuZepzo9P22wAEo4dVi1n2ULhr1O3Fa2bGUJK5zFzZ1jELMAkGBSsOAwIaBQAwgaQGCSqGSIb3DQEHATAUBggqhkiG9w0DBwQI9fi0GhLipgyAgYAhyKuqSfxMrIyaHx9ul4lTPxHrzZu7SiQHPCF7+e3Sr4nxqAREmNJSrWnoE8wDAueBJ0TIcJIY8jFJbtXf/l/uawzD9XEab4WwW3LHU5ei3sOtKZzw0V+z7X+R4/21c0yu/vrvSTzGvZJbZW5T2Vck/EJa3nTqn8lOOPmSIyxRBaCCA4cwggODMIIC7KADAgECAgEAMA0GCSqGSIb3DQEBBQUAMIGOMQswCQYDVQQGEwJVUzELMAkGA1UECBMCQ0ExFjAUBgNVBAcTDU1vdW50YWluIFZpZXcxFDASBgNVBAoTC1BheVBhbCBJbmMuMRMwEQYDVQQLFApsaXZlX2NlcnRzMREwDwYDVQQDFAhsaXZlX2FwaTEcMBoGCSqGSIb3DQEJARYNcmVAcGF5cGFsLmNvbTAeFw0wNDAyMTMxMDEzMTVaFw0zNTAyMTMxMDEzMTVaMIGOMQswCQYDVQQGEwJVUzELMAkGA1UECBMCQ0ExFjAUBgNVBAcTDU1vdW50YWluIFZpZXcxFDASBgNVBAoTC1BheVBhbCBJbmMuMRMwEQYDVQQLFApsaXZlX2NlcnRzMREwDwYDVQQDFAhsaXZlX2FwaTEcMBoGCSqGSIb3DQEJARYNcmVAcGF5cGFsLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAwUdO3fxEzEtcnI7ZKZL412XvZPugoni7i7D7prCe0AtaHTc97CYgm7NsAtJyxNLixmhLV8pyIEaiHXWAh8fPKW+R017+EmXrr9EaquPmsVvTywAAE1PMNOKqo2kl4Gxiz9zZqIajOm1fZGWcGS0f5JQ2kBqNbvbg2/Za+GJ/qwUCAwEAAaOB7jCB6zAdBgNVHQ4EFgQUlp98u8ZvF71ZP1LXChvsENZklGswgbsGA1UdIwSBszCBsIAUlp98u8ZvF71ZP1LXChvsENZklGuhgZSkgZEwgY4xCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJDQTEWMBQGA1UEBxMNTW91bnRhaW4gVmlldzEUMBIGA1UEChMLUGF5UGFsIEluYy4xEzARBgNVBAsUCmxpdmVfY2VydHMxETAPBgNVBAMUCGxpdmVfYXBpMRwwGgYJKoZIhvcNAQkBFg1yZUBwYXlwYWwuY29tggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADgYEAgV86VpqAWuXvX6Oro4qJ1tYVIT5DgWpE692Ag422H7yRIr/9j/iKG4Thia/Oflx4TdL+IFJBAyPK9v6zZNZtBgPBynXb048hsP16l2vi0k5Q2JKiPDsEfBhGI+HnxLXEaUWAcVfCsQFvd2A1sxRr67ip5y2wwBelUecP3AjJ+YcxggGaMIIBlgIBATCBlDCBjjELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAkNBMRYwFAYDVQQHEw1Nb3VudGFpbiBWaWV3MRQwEgYDVQQKEwtQYXlQYWwgSW5jLjETMBEGA1UECxQKbGl2ZV9jZXJ0czERMA8GA1UEAxQIbGl2ZV9hcGkxHDAaBgkqhkiG9w0BCQEWDXJlQHBheXBhbC5jb20CAQAwCQYFKw4DAhoFAKBdMBgGCSqGSIb3DQEJAzELBgkqhkiG9w0BBwEwHAYJKoZIhvcNAQkFMQ8XDTEyMDMxMDEwMzczNFowIwYJKoZIhvcNAQkEMRYEFFrxlUHVygBbXOOpW9sAA30sKa+lMA0GCSqGSIb3DQEBAQUABIGAnn2T3mTtic58GXWIZSnV/PruTSwnEpyfVDVDBLyBNIPVabV0a2ra0HQZfHKxvMZNAPN2bpcBLPMubDZEWCcw6XdkOKPyZ9aJ7PEv5i7t6tg3MRR62YwroREHQVedCcRInnBFExQMOrZe/hTY75Xydk9yuIST4VbMO0CuttVz4aE=-----END PKCS7----- "> <input type="image" src="https://www.paypalobjects.com/en_US/i/btn/btn_donate_LG.gif" border="0" name="submit" alt="PayPal - The safer, easier way to pay online!"> <img alt="" border="0" src="https://www.paypalobjects.com/en_US/i/scr/pixel.gif" width="1" height="1"> </form> </p> <div class="toc"> @(repeat) @TOC @(end) </div> @(repeat) @BODY @(first) @(end) <div class="disambiguations"> @(repeat) <a name="@{d-tag}"> <p>Topics matching <tt>@(hash-revget symhash d-tag)</tt>: <dl> @ (repeat :counter (n 1)) <dt><a href="#@{n-tag}">@n:</a> @[tochash n-tag]</dt> @ (end) </dl> </a> @(end) </div> </body> </html> @(end) @(do (let ((ignames '("*-1" "*-2" "*-20" "*0" "*1" "*2" "*99" "*n" "*r" "*v" "--args" "--eargs" "-C" ".." "TXR_COMPAT" "buf-get-" "buf-put-")) (imgsyms (hash-list (append-each* ((entry [remove-if (op equal "pub") (package-alist) car]) (pkg-name [mapcar car entry]) (pkg [mapcar cdr entry])) (let ((fn (casequal pkg-name (("usr" "keyword") (fun tostringp)) (t (opip tostringp (join-with ":" pkg-name)))))) (mapcar fn (package-symbols pkg))))))) (each ((sym ignames)) (del [symhash sym])) (let ((missing (hash-diff symhash imgsyms))) (dohash (sym val missing) (format *stderr* "~a: missing from image\n" sym)))))