diff --git a/abcl.asd b/abcl.asd index d65ede78f84894d9a07435aa3fec19ffb83da0f0..25eee1566aa61591a80aea8e891e53c98e509a75 100644 --- a/abcl.asd +++ b/abcl.asd @@ -163,3 +163,10 @@ be in a directory named '../ansi-test/'." (defmethod perform ((o load-op) (c (eql (find-system :abcl-contrib)))) (require :abcl-contrib)) +(defsystem :abcl/documentation + :depends-on (swank) + :components + ((:module grovel :pathname "doc/manual/" :serial t + :components ((:file "package") + (:file "grovel"))))) + diff --git a/doc/manual/grovel.lisp b/doc/manual/grovel.lisp index fc9f8b6eba5d2d4ff97690aaa7b3e959b50fd38b..faa269a758a6d6ca9c28c29709e626c98f13966a 100644 --- a/doc/manual/grovel.lisp +++ b/doc/manual/grovel.lisp @@ -1,15 +1,16 @@ +(in-package :abcl/documentation) -(defun grovel-docstrings-as-tex (&optional (package (find-package :java))) - (let ((output-file (format nil "~A.tex" (string-downcase (package-name package))))) +(defun grovel-docstrings-as-tex (&key + (package (find-package :java)) + (directory (asdf:component-pathname (asdf:find-component :abcl/documentation 'grovel)))) + "Transform exported symbols documentation in PACKAGE to DIRECTORY." + (let ((output-file (merge-pathnames (format nil "~A.tex" (string-downcase (package-name package))) directory)) + (symbols (loop :for symbol :being :each :external-symbol :of package :collecting symbol))) (with-open-file (stream output-file :direction :output) - (format t "Writing output to ~A.~%" output-file) - (loop :for symbol :being :each :external-symbol :of package + (format t "Writing output to '~A'.~%" output-file) + (loop :for symbol :in (sort symbols (lambda (a b) (string-lessp (symbol-name a) (symbol-name b)))) :doing (format stream "~&~A~%~%" (symbol-as-tex symbol)))))) -(require :asdf) - -(asdf:load-system 'swank) ;; XXX Does this load the SWANK-BACKEND package as well - (defun texify-string (string &optional remove) (with-output-to-string (s) (loop for char across string @@ -29,7 +30,7 @@ Downcase symbol names but leave strings alone." (defun arglist-as-tex (symbol) (handler-case - (loop :for arg :in (arglist symbol) + (loop :for arg :in (ext:arglist symbol) :collecting (texify arg)) (t (e) (progn (warn "Failed to form arglist for ~A: ~A" symbol e) diff --git a/doc/manual/package.lisp b/doc/manual/package.lisp new file mode 100644 index 0000000000000000000000000000000000000000..1e3ec68b93109f7dc62235b3d7306a9c6a84d776 --- /dev/null +++ b/doc/manual/package.lisp @@ -0,0 +1,4 @@ +(defpackage #:abcl/documentation + (:use :cl) + (:export #:grovel-docstrings-as-tex)) +