X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=scm%2Fdocument-markup.scm;h=e595de132033f0ba0038ae8b190a2c4405a58044;hb=5b4b0d6e9a197e8f9eb085b7c2ad78b8be3e5cfc;hp=4396ea4d38b8575f030833e41253991cce92ac98;hpb=52c47ff08943021305e5d40bf5a4963e3e520af8;p=lilypond.git diff --git a/scm/document-markup.scm b/scm/document-markup.scm index 4396ea4d38..e595de1320 100644 --- a/scm/document-markup.scm +++ b/scm/document-markup.scm @@ -2,65 +2,116 @@ ;;;; ;;;; source file of the GNU LilyPond music typesetter ;;;; -;;;; (c) 1998--2006 Han-Wen Nienhuys +;;;; (c) 1998--2008 Han-Wen Nienhuys ;;;; Jan Nieuwenhuizen + +(define (doc-markup-function-properties func) + (let ((properties (hashq-ref markup-functions-properties func)) + (prop-strings (list))) + (for-each (lambda (prop-spec) + (set! prop-strings + (if (list? prop-spec) + ;; either (prop value) or (prop) + (cons (if (null? (cdr prop-spec)) + (format #f "@item @code{~a}\n" (car prop-spec)) + (format #f "@item @code{~a} (~a)\n" + (car prop-spec) + (let ((default (cadr prop-spec))) + (if (and (list? default) + (null? default)) + "'()" + default)))) + prop-strings) + ;; a markup command: get its properties + ;; FIXME: avoid cyclical references + (append (doc-markup-function-properties prop-spec) + prop-strings)))) + (or properties (list))) + prop-strings)) + (define (doc-markup-function func) (let* ((doc-str (procedure-documentation func)) - (f-name (symbol->string (procedure-name func))) - (c-name (regexp-substitute/global #f "-markup(-list)?$" f-name 'pre "" 'post)) - (sig (object-property func 'markup-signature)) - (arg-names (let ((arg-list (cadr (procedure-source func)))) + (f-name (symbol->string (procedure-name func))) + (c-name (regexp-substitute/global #f "-markup(-list)?$" f-name 'pre "" 'post)) + (sig (object-property func 'markup-signature)) + (arg-names (let ((arg-list (cadr (procedure-source func)))) (if (list? arg-list) (map symbol->string (cddr arg-list)) (make-list (length sig) "arg")))) - (sig-type-names (map type-name sig)) - (signature-str - (string-join - (map (lambda (x) (string-append - "@var{" (car x) "} (" (cadr x) ")" )) - (zip arg-names sig-type-names)) - " " ))) + (sig-type-names (map type-name sig)) + (signature-str + (string-join + (map (lambda (x) (string-append + "@var{" (car x) "} (" (cadr x) ")" )) + (zip arg-names sig-type-names)) + " " ))) (string-append "\n\n@item @code{\\" c-name "} " signature-str - - "\n@findex " f-name "\n" - "\n@cindex @code{" c-name "}\n" - + "\n@funindex \\" c-name "\n" + "\n@cindex \\" c-name "\n" (if (string? doc-str) - doc-str - "")))) + doc-str + "") + (let ((prop-strings (doc-markup-function-properties func))) + (if (null? prop-strings) + "\n" + (string-append "\n\n\nUsed properties:\n@itemize\n" + (apply string-append prop-strings) + "@end itemize\n")))))) (define (markup-functionstring (procedure-name a)) (symbol->string (procedure-name b)))) - -(define (markup-doc-string) - (string-append - - "@table @asis" - (apply string-append - - (map doc-markup-function - (sort markup-function-list markup-functionstring category)) + (category-name (string-capitalize (regexp-substitute/global #f + "-" category-string 'pre " " 'post))) + (markup-functions (hashq-ref markup-functions-by-category + category))) + (make + #:appendix #t + #:name category-name + #:desc "" + #:text (string-append + "@table @asis" + (apply string-append + (map doc-markup-function + (sort markup-functions markup-function - #:name "Markup functions" - #:desc "Definitions of the markup functions." - #:text (markup-doc-string))) + #:appendix #t + #:name "Text markup commands" + #:desc "" + #:text "The following commands can all be used inside @code{\\markup @{ @}}." + #:children (let* (;; when a new category is defined, update `ordered-categories' + (ordered-categories '(font align graphic music instrument-specific-markup other)) + (raw-categories (hash-fold (lambda (category functions categories) + (cons category categories)) + (list) + markup-functions-by-category)) + (categories (append ordered-categories + (filter (lambda (cat) + (not (memq cat ordered-categories))) + raw-categories)))) + (map markup-category-doc-node categories)))) (define (markup-list-doc-node) (make - #:name "Markup list functions" - #:desc "Definitions of the markup list functions." - #:text (markup-list-doc-string))) + #:appendix #t + #:name "Text markup list commands" + #:desc "" + #:text (string-append + "The following commands can all be used with @code{\\markuplines}.\n" + (markup-list-doc-string))))