LSR: Update.
[lilypond.git] / scm / document-identifiers.scm
blob67e282bd862cd594beb8c26680ac25d0697021a2
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 ;;
10 (use-modules (ice-9 format))
12 (define (document-music-function music-func-pair)
13   (let*
14       ((name-sym (car music-func-pair))
15        (music-func (cdr music-func-pair))
16        (func (ly:music-function-extract music-func))
17        (arg-names
18         (map symbol->string
19              (cddr (cadr (procedure-source func)))))
20        (doc (procedure-documentation func))
21        (sign (object-property func 'music-function-signature))
22        (type-names (map type-name sign))
24        (signature-str
25         (string-join
26          (map (lambda (x) (format "@var{~a} (~a)"
27                                   (car x)
28                                   (cadr x)))
29               (zip arg-names type-names)))))
30     (format
31      "@item @code{~a}~a~a
32 @findex ~a
35      name-sym (if (equal? "" signature-str) "" " - ") signature-str
36      name-sym
37      (if doc doc "(undocumented; fixme)"))))
40 (define (document-object obj-pair)
41   (cond
42    ((ly:music-function? (cdr obj-pair))
43     (document-music-function obj-pair))
44    (else
45     #f)))
48 (define (identifier<? a b)
49   (string<?
50    (symbol->string (car a))
51    (symbol->string (car b))))
54 (define-public (identifiers-doc-string)
55   (format
56    "@table @asis
58 @end table
60    (string-join
61     (filter
62      identity
63      (map
64       document-object
65       (sort
66        (ly:module->alist (current-module))
67        identifier<?)))
68     "")))