Add package documentation
[sheep] / src / main / docgen.lisp
1 (in-package #:docgen)
2
3 (define-condition validation-failure nil ((msg :initarg :msg :reader validation-failure-msg)))
4
5 (defun validate-package (pkg)
6  (macrolet
7   ((with-success-check (&rest f)
8     `(handler-case
9       (progn ,@f :success)
10       (validation-failure (v) (list :failure :msg (validation-failure-msg v))))))
11   (let
12    ((symbs nil))
13    (do-external-symbols (symb pkg) (push symb symbs))
14    (setf symbs (sort symbs #'string< :key #'symbol-name))
15    (remove :success
16     (append
17      (list (with-success-check (docgen-pkg:doc->ast pkg)))
18      (mapcar
19       (lambda (symb) (with-success-check (docgen-func:doc->ast symb)))
20       symbs))))))
21
22 (defun export-package (pkg)
23  (let
24   ((symbs nil))
25   (do-external-symbols (symb pkg) (push symb symbs))
26   (setf symbs (sort symbs #'string< :key #'symbol-name))
27   (with-output-to-string (str)
28    (format str "~A~%~%" (docgen-pkg:ast->md (docgen-pkg:doc->ast (find-package pkg))))
29    (format str "~{~A~^~%~}" (mapcar (lambda (symb) (docgen-func:ast->md (docgen-func:doc->ast symb))) symbs)))))