;;; copyright (c) 2010-2013 Polos Ruetz (in-package :eql-user) (defparameter *help* nil) (defun add-cpp-docu () (with-open-file (s "../src/ecl_fun.cpp" :direction :input) (let (curr ex) (flet ((add-curr () (when curr (push (reverse curr) *help*) (setf curr nil))) (trim (str) (string-trim '(#\/ #\Space) str))) (x:while-it (read-line s nil nil) (let ((line (string-trim " " x:it))) (when (x:starts-with "///" line) (when (x:starts-with "cl_object " ex) (add-curr) (let* ((pos (search "///" ex :start2 3)) ; exception: Lisp name at end of line (fun (if pos (trim (subseq ex (+ 3 pos))) (trim (subseq ex 10))))) (push (if pos fun (substitute #\- #\_ (string-trim "2" (subseq fun 0 (position #\( fun))))) curr))) (push (trim line) curr)) (setf ex line))) (add-curr))))) (defun add-lisp-docu () (do-external-symbols (sym (find-package :eql)) (let ((name (symbol-name sym))) (when (or (char= #\Q (char name 0)) (find name '("ENSURE-QT-OBJECT" "DEFINE-QT-WRAPPERS" "DEFVAR-UI" "TR") :test 'string=)) (x:when-it (documentation sym 'function) (let ((fun (string-downcase (symbol-name sym))) (docu (mapcar #'(lambda (s) (string-trim " " s)) (x:split x:it #\Newline)))) (unless (string= fun (subseq (second docu) 7)) (push (cons fun docu) *help*)))))))) (defun help () (setf *help* nil) (add-cpp-docu) (add-lisp-docu) (with-open-file (s "auto-doc.htm" :direction :output :if-exists :supersede) (format s "~%~ ~%~
~%~")
(dolist (example examples)
(tab)
(! example))
(! ""))))
(! "