X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=scm%2Fdocument-identifiers.scm;h=39d428408817911c5b403c77537550b7e270594d;hb=HEAD;hp=838de55e558db9bad72d1fafc3972318dd2ce54a;hpb=9b279fe458c4dd2ed9550670ea521e29bad57cd0;p=lilypond.git diff --git a/scm/document-identifiers.scm b/scm/document-identifiers.scm index 838de55e55..39d4284088 100644 --- a/scm/document-identifiers.scm +++ b/scm/document-identifiers.scm @@ -1,6 +1,6 @@ ;;;; This file is part of LilyPond, the GNU music typesetter. ;;;; -;;;; Copyright (C) 2006--2011 Han-Wen Nienhuys +;;;; Copyright (C) 2006--2015 Han-Wen Nienhuys ;;;; ;;;; LilyPond is free software: you can redistribute it and/or modify ;;;; it under the terms of the GNU General Public License as published by @@ -22,48 +22,51 @@ ((name-sym (car music-func-pair)) (music-func (cdr music-func-pair)) (func (ly:music-function-extract music-func)) - (arg-names - (map symbol->string - (cddr (cadr (procedure-source func))))) - (doc (procedure-documentation func)) - (sign (object-property func 'music-function-signature)) - (type-names (map type-name sign)) - + (full-doc (procedure-documentation func)) + (match-args (and full-doc (string-match "^\\([^)]*\\)\n" full-doc))) + (arg-names (if match-args + (with-input-from-string (match:string match-args) read) + (circular-list "arg"))) + (doc (if match-args (match:suffix match-args) full-doc)) + (sign (ly:music-function-signature music-func)) + (type-names (map (lambda (pred) + (if (pair? pred) + (format #f "[~a]" (type-name (car pred))) + (format #f "(~a)" (type-name pred)))) + sign)) (signature-str - (string-join - (map (lambda (x) (format #f "@var{~a} (~a)" - (car x) - (cadr x))) - (zip arg-names type-names))))) + (string-join + (map (lambda (arg type) (format #f "@var{~a} ~a" arg type)) + arg-names (cdr type-names))))) (format #f - "@item @code{~a}~a~a -@findex ~a + "@item @code{~a} ~a ~a~a +@funindex ~a ~a " - name-sym (if (equal? "" signature-str) "" " - ") signature-str - name-sym - (if doc doc "(undocumented; fixme)")))) + name-sym (car type-names) + (if (string-null? signature-str) "" " - ") signature-str + name-sym + (if (and doc (not (string-null? doc))) + doc + (begin + (ly:warning "music function `~a' not documented." name-sym) + "(undocumented; fixme)"))))) (define (document-object obj-pair) - (cond - ((ly:music-function? (cdr obj-pair)) - (document-music-function obj-pair)) - (else - #f))) + (and (ly:music-function? (cdr obj-pair)) + (document-music-function obj-pair))) (define-public (identifiers-doc-string) (format #f - "@table @asis + "@table @asis ~a @end table " - (string-join - (filter - identity - (map - document-object - (sort - (ly:module->alist (current-module)) - identifieralist (current-module)) + identifier