@# This requires a hacked version of man2html @# See here: http://www.kylheku.com/cgit/man @(bind txrhash @(hash :equal-based)) @(bind txlhash @(hash :equal-based)) @(bind tgthash txrhash) @(bind tagmap @(hash :equal-based)) @(do (defvar dupes (hash)) (defvar tagnum (hash :equal-based)) (defun hash-title (title) (let* ((h (logtrunc (hash-equal title) 32)) (existing [dupes h])) (when existing (unless (equal title existing) (error "~a ~a hash collision!" existing title))) (set [dupes h] title) (format nil "N-~,08X" h))) (set [tagmap "lbAB"] (hash-title "NAME")) (defun enumerate (title) (let ((num (inc [tagnum title 0]))) `@title@(if (> num 1) `-@num` "")`))) 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 lookup @[orf txrhash txlhash]) @(bind VERSION nil) @(collect :vars (BODY LOOKUP)) @ (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 (enumerate title))) @ (do (set [tagmap tag] newtag)) @ (output :into BODY) <A NAME="@newtag"> </A> <H@level>@sec @title</H@level> @ (end) @ (cat BODY "\n") @ (or) @BODY @ (end) @ (and) <H2>@nil TXR LISP</H2> @ (set lookup txrhash) @ (and) <B>TXR</B> - text processing language (version @ver) @ (set VERSION ver) @ (end) @ (bind LOOKUP lookup) @(until) <HR> <A NAME="index"> </A><H2>Index</H2> @(end) <HR> @(collect :vars (TOC)) @ (some) @ (cases) <DT><A HREF="#@tag">@rest @ (output :into TOC) <DT><A HREF="#@[tagmap tag]">@rest @ (end) @ (or) @TOC @ (end) @ (and) <DT><A HREF="@nil">@nil TXR LISP</A><DD> @ (set tgthash txlhash) @ (and) <DT><A HREF="#@tag">@(coll :vars (sym))<TT>@sym</TT>@(end) @ (do (mapdo (do unless [tgthash @1] (set [tgthash @1] [tagmap tag])) sym)) @ (end) @(until) This document was created by @(end) @(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 [(if at txrhash txlhash) tok])) (if tag `@at@bkt<A HREF="#@tag">@tok</A>` `@at@1`)) @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 [txrhash sym])) (t (set tag [@@2 tok] sym tok))) (if tag `<TT>@pfx<A HREF="#@tag">@sym</A>@sfx</TT>` @1)) @1))) BODY LOOKUP))) @(output) <HTML> <HEAD><TITLE>Manpage for TXR @VERSION</TITLE> </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-----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-----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> @(repeat) @TOC @(end) @(repeat) @BODY @(first) @(end) </BODY> </HTML> @(end)