;; newlispdoc afile.lsp bfile.lsp ;; newlispdoc -s afile.lsp bfile.lsp ;; newlispdoc -s *.lsp ;; ;; ; or on Win32 ;; newlisp newlispdoc afile.lsp bfile.lsp ;; newlisp newlispdoc -s afile.lsp bfile.lsp ;; newlisp newlispdoc -s *.lsp ;;;; newlispdoc can take a file of URLs and generate documentation and syntax ;; highlighted source from remote files: ;;
;; newlispdoc -url file-with-urls.txt 10000 ;; newlispdoc -s -url file-with-urls.txt 10000 ;; ;; ; or on Win32 ;; newlisp newlispdoc -url file-with-urls.txt 10000 ;; newlisp newlispdoc -s -url file-with-urls.txt 10000 ;;;; file-with-urls.txt contains one URL per line in the file. A URLstarts either ;; with http:// or file:// - This allows mixing remote and local files. An optional ;; timeout of 10 seconds is specified after the url file name. If no timeout is specified ;; newlispdoc assumes 5 seconds. ;; ;; Execute from within the same directory of the source files when ;; no url file is given. ;; ;; For each file a file with the same name and extension '.html' is generated ;; and written to the current directory. A file 'index.htm' is written as ;; an index for all other files generated. If the '-s' switch is specified, ;; a file with the extension '.src.html' is generated for each file. ;; ;; Please read @link http://newlisp.org/newLISPdoc.html newLISPdoc.htm to learn ;; about tagging of newLISP source code for newlispdoc. ;; (set 'version "1.3") ; get list of files from command line (set 'files (2 (main-args))) (if (empty? files) (begin (println "USAGE: newlispdoc [-s]
[/text]) ; ---------- routines for generating syntax-highlighted file[/text]) (set 'prolog3 {}) (set 'epilog [text] Modules
- ∂ -
generated with newLISP and newLISPdoc
\n" src-file "\n" {
" text "[p]") (replace "
" text "[/p]") (replace "" text "[pre]") (replace "" text "[/pre]") (replace "
" text "[blockquote]") ) (define (unprotect-html text) (replace "[h1]" text "") (replace "[h2]" text "
") (replace "[/h2]" text "") (replace "[/h3]" text "") (replace "[/h4]" text "") (replace "[i]" text "") (replace "[/i]" text "") (replace "[em]" text "") (replace "[/em]" text "") (replace "[b]" text "") (replace "[/b]" text "") (replace "[tt]" text "") (replace "[/tt]" text "") (replace "[p]" text "") (replace "[h3]" text "
") (replace "[h4]" text "
") (replace "[/h1]" text "
") (replace "[/p]" text "
") (replace "[br]" text "
") (replace "[br/]" text "
") (replace "[pre]" text "") (replace "[/pre]" text "") (replace "[center]" text "") (replace "[/center]" text " ") (replace "[li]" text "- ") (replace "[/li]" text "
") (replace "[ul]" text "") (replace "[/ul]" text "
") (replace "[blockquote]" text "") (replace "[/blockquote]" text "") ) ; format the example tags (define (format-example text) (replace "<" text "<") (replace ">" text ">") (string "example:\n") ) ; write the module tag link on the index page ; put source link on doc page if -s flag (define (format-module text desc filename , module) (set 'module (string "" (replace ";;" text "") "Module: " text "
")) (write-buffer indexpage (string {} module "\n" )) (write-buffer indexpage (string "" desc "
\n")) (if source-link (string {source} module) (string "
" module)) ) ; write the function name links on the index page under the module (define (format-func-link func-name file-name) (let (names (if (find ":" func-name) (parse func-name ":") (list "" func-name))) (write-buffer indexpage (string {} (names 1) { })) (string (names 0) "_" (names 1)) ) ) ; format the syntax line (define (format-syntax text file-name, tag) (replace "<([^<]*?)>" text (string "" $1 "") 0) (replace {^ *\((.*?) (.*?\))} text (string "(" $1 " " $2) 0) (replace {^ *\(([^ ]*?)\)} text (string "(" $1 ")") 0) (string (unless (= old-syntax $1) (begin (set 'old-syntax $1) (set 'tag (format-func-link $1 file-name)) (set 'tag (string {})) (string "- § - \n" tag "" old-syntax "
\n")) "") "syntax: " (trim text) "
\n") ) (define (format-parameter param text) ; (replace "<([^<]*?)>" param (string "" $1 "") 0) ; (replace "<([^<]*?)>" text (string "" $1 "") 0) (string "parameter: " (format-text (trim param)) " - " (format-text text) "
\n") ) (define (format-return text) (string "return: " (format-text text) "
\n") ) (define (format-text text) (replace "<([^<]*?)>" text (string "" $1 "") 0) (replace "'([^\\s].*?[^\\s])'" text (string "" $1 "") 0) ) ;---------------------------------- End newlisdoc formatting subroutines ---------------- ; MAIN function (dolist (fle files) (println fle) (set 'html "") (set 'original (read-file fle time-out)) (if (not original) (begin (println "Could not read " fle) (exit 1))) (if (starts-with original "ERR:") (println "Could not read " fle " " original)) (set 'outfile (last (parse fle "\\\\|/" 0))) (set 'page (parse (replace "\r\n" original "\n") "\n")) (set 'page (filter (fn (ln) (or (starts-with ln ";;") (= (length (trim ln)) 0))) page)) (set 'page (join page "\n")) (if (find ";; *@module " page 0) (begin (replace ";; @example *\n(.*?)\n\\s*\n" page (format-example $1) 4) (set 'page (protect-html page)) (set 'desc "") (replace ";; *@description (.*?)\n" page (begin (set 'desc $1) (string "" desc "
\n") ) 0) (replace ";; *@module (.*?)\n" page (format-module $1 desc outfile) 0) (replace ";; *@author (.*?)\n" page (string "Author: " $1 "
\n") 0) (replace ";; *@version (.*?)\n" page (string "Version: " $1 "
\n") 0) (replace ";; *@location (.*?)\n" page (string {Location: } $1 "
\n") 0) (replace ";; *@syntax (.*?)\n" page (format-syntax $1 outfile) 0) (replace ";; *@param (.*?) (.*?)\n" page (format-parameter $1 $2) 0) (replace ";; *@return (.*?)\n" page (format-return $1) 0) (replace ";;\\s*\n" page "\n" 0) (replace ";;(.*\n)" page (format-text $1) 0) (replace {@link ([^ ]*?) ([^ ]*?)\s} page (string {} $2 { }) 0) (set 'page (unprotect-html page)) (write-buffer html (format prolog1 outfile)) (write-buffer html stylesheet) (write-buffer html prolog3) (write-buffer html page) (write-buffer html epilog) (write-file (string outfile ".html") html) ; write syntax highlighted source (if source-link (write-syntax-highlight original outfile)) )) ) ; write the modules index page (write-buffer indexpage epilog) (write-file "index.html" indexpage) (exit)