]> git.donarmstrong.com Git - lilypond.git/blob - scm/document-identifiers.scm
Document music functions too.
[lilypond.git] / scm / document-identifiers.scm
1 (use-modules (ice-9 format))
2
3 (define (document-music-function music-func-pair)
4   (let*
5       ((name-sym (car music-func-pair))
6        (music-func (cdr music-func-pair))
7        (func (ly:music-function-extract music-func))
8        (arg-names
9         (map symbol->string 
10              (cddr (cadr (procedure-source func)))))
11        (doc (procedure-documentation func))
12        (sign (object-property func 'music-function-signature))
13        (type-names (map type-name sign))
14
15        ;; C&P
16        (signature (zip arg-names arg-names type-names))
17        (signature-str
18           (string-join
19            (map (lambda (x) (format "@var{~a} (~a)"
20                                     (car x)
21                                     (cadr x)))
22                                     
23                 (zip arg-names type-names)))))
24
25     (format
26      
27      "\n
28 @item @code{~a} - ~a\n
29 @findex ~a
30
31 ~a\n\n"
32
33      name-sym signature-str
34      name-sym
35      (if doc doc "(undocumented; fixme)"))))
36
37
38
39 (define (document-object obj-pair)
40   (cond
41    ((ly:music-function? (cdr obj-pair)) (document-music-function obj-pair))
42    (else
43     #f)))
44
45 (define-public (identifiers-doc-string)
46   (format
47    "@table @asis
48 ~a
49 @end table
50 "
51   (string-join
52    (filter
53     identity
54    (map
55     document-object
56     (ly:module->alist (current-module)))))))