]> git.donarmstrong.com Git - lilypond.git/blob - scm/document-music.scm
* lily/translator-def.cc (get_translator_names): new function
[lilypond.git] / scm / document-music.scm
1
2 (define (music-props-doc)
3   (make <texi-node>
4     #:name "Music properties"
5     #:desc "All music properties, including descriptions"
6     #:text
7   (let* (
8          (ps (sort (map symbol->string all-music-properties) string<?))
9          (descs (map (lambda (prop)
10                        (property->texi 'music (string->symbol prop)))
11                      ps))
12          (texi (description-list->texi descs))
13          )
14     texi)
15   ))
16
17 (define music-types->names (make-vector 61 '()))
18 (map (lambda (entry)
19        (let*
20            (
21             (types (cdr (assoc 'types (cdr entry) )))
22             )
23          (map (lambda (type)
24                 (hashq-set! music-types->names type
25                             (cons (car entry)
26                                   (hashq-ref music-types->names type '())))
27                             
28                 ) types)
29          
30          ))
31   music-descriptions)
32
33
34 (define (hash-table->alist t)
35   "Convert table t to list"
36   (apply append
37          (vector->list t)
38   ))
39
40 (define (strip-description x)
41     (cons (symbol->string (car x))
42           ""))
43
44 (define (music-type-doc entry)
45   (make <texi-node>
46     #:name  (symbol->string (car entry))
47     #:text 
48     (string-append
49      "\nMusic event type @code{"
50      (symbol->string (car entry))
51      "} is in Music objects of type "
52      (human-listify
53       (sort
54        (map (lambda (x) (ref-ify (symbol->string x)))
55              (cdr entry)) string<?))
56
57      "\n\nAccepted by: "
58      (human-listify
59       (map ref-ify
60            (map symbol->string
61                 (map ly:translator-name
62                      (filter
63                       (lambda (x) (engraver-accepts-music-type? (car entry) x)) all-engravers-list)))))
64      "\n\n"
65      )))
66
67 (define (music-types-doc)
68   (make <texi-node>
69     #:name "Music classes"
70     #:children 
71     (map music-type-doc
72          (sort
73           (hash-table->alist music-types->names) alist<?))
74     ))
75
76 (define (music-doc-str obj)
77   (let*
78       (
79        (namesym  (car obj))
80        (props (cdr obj))
81        (types (cdr (assoc  'types props)))
82        )
83     
84     (string-append
85      (object-property namesym 'music-description)
86      "\n\nMusic types:\n"
87      (human-listify (map ref-ify (map symbol->string types)))
88      "\n\n"
89      "\n\nAccepted by: "
90      (human-listify
91       (map ref-ify
92            (map symbol->string (map ly:translator-name
93                 (filter
94                  (lambda (x) (engraver-accepts-music-types? types x)) all-engravers-list)))))
95      "\n\nProperties: \n"
96      (description-list->texi
97       (map
98        (lambda (x) (document-property x 'music props))
99        (map car props)))
100      
101      )
102     ))
103
104 (define (music-object-doc obj)
105   (make <texi-node>
106     #:name (symbol->string (car obj))
107     #:text (music-doc-str obj)
108     ))
109
110 (define (music-expressions-doc)
111   (make <texi-node>
112     #:name "Music expressions"
113     #:desc "Objects that represent music."
114     #:children
115      (map music-object-doc music-descriptions)
116   ))
117   
118 (define (music-doc-node)
119   (make <texi-node>
120     #:name "Music definitions"
121     #:desc "Definition of the Input data structures"
122     #:children
123     (list
124      (music-expressions-doc)
125      (music-types-doc)
126      (music-props-doc))
127     ))
128
129   
130   
131