]> git.donarmstrong.com Git - lilypond.git/blob - scm/document-music.scm
(interface-doc): prune Grob
[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
35 (define (strip-description x)
36     (cons (symbol->string (car x))
37           ""))
38
39 (define (music-type-doc entry)
40   (make <texi-node>
41     #:name  (symbol->string (car entry))
42     #:text 
43     (string-append
44      "\nMusic event type @code{"
45      (symbol->string (car entry))
46      "} is in Music objects of type "
47      (human-listify
48       (sort
49        (map (lambda (x) (ref-ify (symbol->string x)))
50              (cdr entry)) string<?))
51
52      "\n\nAccepted by: "
53      (human-listify
54       (map ref-ify
55            (map symbol->string
56                 (map ly:translator-name
57                      (filter
58                       (lambda (x) (engraver-accepts-music-type? (car entry) x)) all-engravers-list)))))
59      "\n\n"
60      )))
61
62 (define (music-types-doc)
63   (make <texi-node>
64     #:name "Music classes"
65     #:children 
66     (map music-type-doc
67          (sort
68           (hash-table->alist music-types->names) alist<?))
69     ))
70
71 (define (music-doc-str obj)
72   (let*
73       (
74        (namesym  (car obj))
75        (props (cdr obj))
76        (types (cdr (assoc  'types props)))
77        )
78     
79     (string-append
80      (object-property namesym 'music-description)
81      "\n\nMusic types:\n"
82      (human-listify (map ref-ify (map symbol->string types)))
83      "\n\n"
84      "\n\nAccepted by: "
85      (human-listify
86       (map ref-ify
87            (map symbol->string (map ly:translator-name
88                 (filter
89                  (lambda (x) (engraver-accepts-music-types? types x)) all-engravers-list)))))
90      "\n\nProperties: \n"
91      (description-list->texi
92       (map
93        (lambda (x) (property->texi 'music  x props))
94        (map car props)))
95      
96      )
97     ))
98
99 (define (music-object-doc obj)
100   (make <texi-node>
101     #:name (symbol->string (car obj))
102     #:text (music-doc-str obj)
103     ))
104
105 (define (music-expressions-doc)
106   (make <texi-node>
107     #:name "Music expressions"
108     #:desc "Objects that represent music."
109     #:children
110      (map music-object-doc music-descriptions)
111   ))
112   
113 (define (music-doc-node)
114   (make <texi-node>
115     #:name "Music definitions"
116     #:desc "Definition of the Input data structures"
117     #:children
118     (list
119      (music-expressions-doc)
120      (music-types-doc)
121      (music-props-doc))
122     ))
123
124   
125   
126