\documentclass{article} \usepackage{axiom} \begin{document} \title{Autodoc} \author{Tim Daly} \maketitle \begin{abstract} We want to generate the reference information from axiom source files automatically. \end{abstract} \eject \tableofcontents \eject By design the chunk name has 3 fields. The first field is one of \{category, domain, package\}. The second field is the abbreviation. The third field is the full name. This routine will return two lists, the first is the list of abbreviations and the second is the list of full names. We keep looping until we run out of input, at which point we throw out of the loop and catch it here. <>= (catch 'done @ We open the source file <>= (with-open-file (in sourcefile) @ We read each line, trimming off trailing spaces <>= (loop (setq expr (read-line in nil 'done)) (when (eq expr 'done) (throw 'done nil)) (setq expr (string-trim '(#\space) expr)) @ We look for lines that begin with a chunk name that starts with package, domain, or category and end with an equal sign (which indicates a chunk definition). <>= (when (and (> (length expr) 4) (or (string= "@<$ and an $=$ which make up the chunk name. <>= (setq expr (subseq expr 0 (- (length expr) 3))) @ We get the third field from the string which is the long name. <>= (setq point (position #\space expr :from-end t :test #'char=)) @ We get the second field from the string which is the abbreviation. <>= (setq mark (position #\space (string-right-trim '(#\space) (subseq expr 0 (1- point))) :from-end t)) (push (string-trim '(#\space) (subseq expr mark point)) names))))) @ <>= (defun srcabbrevs (sourcefile) (let (in expr start end names longnames) <> <> <> <> <> <> (format t "~a ~a ~a~%" expr point longnames) <> (values names longnames)))) @ \section{Doit} <>= (srcabbrevs "/new/patch38/src/algebra/acplot.spad.pamphlet") @ \section{Autodoc} <>= <> <> @ \section{Makefile} <<*>>= TANGLE=/usr/local/bin/notangle -t8 WEAVE=/usr/local/bin/noweave -delay LISP=/new/patch38/obj/linux/bin/lisp all: code doc run code: autodoc.lisp.pamphlet @${TANGLE} -Rautodoc autodoc.lisp.pamphlet >autodoc.lisp doc: autodoc.lisp.pamphlet @${WEAVE} autodoc.lisp.pamphlet >autodoc.tex @latex autodoc.tex @latex autodoc.tex run: autodoc.lisp @cat autodoc.lisp | ${LISP} remake: @${TANGLE} autodoc.lisp.pamphlet >Makefile @ \eject \begin{thebibliography}{99} \bibitem{1} nothing \end{thebibliography} \end{document}