]> git.donarmstrong.com Git - lilypond.git/blob - scm/document-music.scm
d6bd4e1c59c3b836a38221628a16ad79e1de3e8f
[lilypond.git] / scm / document-music.scm
1 ;;;; document-markup.scm -- part of generated backend documentation
2 ;;;;
3 ;;;;  source file of the GNU LilyPond music typesetter
4 ;;;; 
5 ;;;; (c) 1998--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
6 ;;;;                 Jan Nieuwenhuizen <janneke@gnu.org>
7
8 (define (music-props-doc)
9   (make <texi-node>
10     #:name "Music properties"
11     #:desc "All music properties, including descriptions"
12     #:text
13     (let* ((ps (sort (map symbol->string all-music-properties) string<?))
14            (descs (map (lambda (prop)
15                          (property->texi 'music (string->symbol prop)))
16                        ps))
17            (texi (description-list->texi descs)))
18       texi)))
19
20 (define music-types->names (make-vector 61 '()))
21 (map (lambda (entry)
22        (let* ((types (cdr (assoc 'types (cdr entry)))))
23          (map (lambda (type)
24                 (hashq-set! music-types->names type
25                             (cons (car entry)
26                                   (hashq-ref music-types->names type '()))))
27               types)))
28      music-descriptions)
29
30 (define (strip-description x)
31   (cons (symbol->string (car x))
32         ""))
33
34 (define (music-type-doc entry)
35   (make <texi-node>
36     #:name  (symbol->string (car entry))
37     #:text 
38     (string-append
39      "\nMusic event type @code{"
40      (symbol->string (car entry))
41      "} is in Music objects of type "
42      (human-listify
43       (sort
44        (map (lambda (x) (ref-ify (symbol->string x)))
45             (cdr entry)) string<?))
46
47      "\n\nAccepted by: "
48      (human-listify
49       (map ref-ify
50            (map symbol->string
51                 (map ly:translator-name
52                      (filter
53                       (lambda (x) (engraver-accepts-music-type? (car entry) x)) all-engravers-list)))))
54      "\n\n")))
55
56 (define (music-types-doc)
57   (make <texi-node>
58     #:name "Music classes"
59     #:children 
60     (map music-type-doc
61          (sort
62           (hash-table->alist music-types->names) alist<?))))
63
64 (define (music-doc-str obj)
65   (let* ((namesym  (car obj))
66          (props (cdr obj))
67          (types (cdr (assoc  'types props))))
68     
69     (string-append
70      (object-property namesym 'music-description)
71      "\n\nMusic types:\n"
72      (human-listify (map ref-ify (map symbol->string types)))
73      "\n\n"
74      "\n\nAccepted by: "
75      (human-listify
76       (map ref-ify
77            (map symbol->string (map ly:translator-name
78                                     (filter
79                                      (lambda (x) (engraver-accepts-music-types? types x)) all-engravers-list)))))
80      "\n\nProperties: \n"
81      (description-list->texi
82       (map
83        (lambda (x) (property->texi 'music  x props))
84        (map car props))))))
85
86 (define (music-object-doc obj)
87   (make <texi-node>
88     #:name (symbol->string (car obj))
89     #:text (music-doc-str obj)))
90
91 (define (music-expressions-doc)
92   (make <texi-node>
93     #:name "Music expressions"
94     #:desc "Objects that represent music."
95     #:children
96     (map music-object-doc music-descriptions)))
97
98 (define (music-doc-node)
99   (make <texi-node>
100     #:name "Music definitions"
101     #:desc "Definition of the Input data structures"
102     #:children
103     (list
104      (music-expressions-doc)
105      (music-types-doc)
106      (music-props-doc))))