]> git.donarmstrong.com Git - lilypond.git/blob - scm/document-identifiers.scm
Merge branch 'jneeman' of git+ssh://jneem@git.sv.gnu.org/srv/git/lilypond into jneeman
[lilypond.git] / scm / document-identifiers.scm
1 ;;
2 ;; document-identifiers.scm -- implement documentation
3 ;; of identifiers from .ly file.
4 ;; 
5 ;; source file of the GNU LilyPond music typesetter
6 ;; 
7 ;; (c) 2006 Han-Wen Nienhuys <hanwen@lilypond.org>
8 ;; 
9
10
11 (use-modules (ice-9 format))
12
13 (define (document-music-function music-func-pair)
14   (let*
15       ((name-sym (car music-func-pair))
16        (music-func (cdr music-func-pair))
17        (func (ly:music-function-extract music-func))
18        (arg-names
19         (map symbol->string 
20              (cddr (cadr (procedure-source func)))))
21        (doc (procedure-documentation func))
22        (sign (object-property func 'music-function-signature))
23        (type-names (map type-name sign))
24
25        ;; C&P
26        (signature (zip arg-names arg-names type-names))
27        (signature-str
28           (string-join
29            (map (lambda (x) (format "@var{~a} (~a)"
30                                     (car x)
31                                     (cadr x)))
32                                     
33                 (zip arg-names type-names)))))
34
35     (format
36      
37      "\n
38 @item @code{~a} - ~a\n
39 @findex ~a
40
41 ~a\n\n"
42
43      name-sym signature-str
44      name-sym
45      (if doc doc "(undocumented; fixme)"))))
46
47
48
49 (define (document-object obj-pair)
50   (cond
51    ((ly:music-function? (cdr obj-pair)) (document-music-function obj-pair))
52    (else
53     #f)))
54
55 (define-public (identifiers-doc-string)
56   (format
57    "@table @asis
58 ~a
59 @end table
60 "
61   (string-join
62    (filter
63     identity
64    (map
65     document-object
66     (ly:module->alist (current-module)))))))