]> git.donarmstrong.com Git - lilypond.git/blob - scm/music-documentation-lib.scm
ly- -> ly:
[lilypond.git] / scm / music-documentation-lib.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 ly:translator-name
61            (filter-list
62             (lambda (x) (engraver-accepts-music-type? (car entry) x)) all-engravers-list))))
63      "\n\n"
64      )))
65
66 (define (music-types-doc)
67   (make <texi-node>
68     #:name "Music classes"
69     #:children 
70     (map music-type-doc
71          (sort
72           (hash-table->alist music-types->names) alist<?))
73     ))
74
75 (define (music-doc-str obj)
76   (let*
77       (
78        (namesym  (car obj))
79        (props (cdr obj))
80        (types (cdr (assoc  'types props)))
81        )
82     
83     (string-append
84      (object-property namesym 'music-description)
85      "\n\nMusic types:\n"
86      (human-listify (map ref-ify (map symbol->string types)))
87      "\n\n"
88      "\n\nAccepted by: "
89      (human-listify
90       (map ref-ify
91       (map ly:translator-name
92            (filter-list
93             (lambda (x) (engraver-accepts-music-types? types x)) all-engravers-list))))
94      "\n\nProperties: \n"
95      (description-list->texi
96       (map
97        (lambda (x) (document-property x 'music props))
98        (map car props)))
99      
100      )
101     ))
102
103 (define (music-object-doc obj)
104   (make <texi-node>
105     #:name (symbol->string (car obj))
106     #:text (music-doc-str obj)
107     ))
108
109 (define (music-expressions-doc)
110   (make <texi-node>
111     #:name "Music expressions"
112     #:desc "Objects that represent music."
113     #:children
114      (map music-object-doc music-descriptions)
115   ))
116   
117 (define (music-doc-node)
118   (make <texi-node>
119     #:name "Music definitions"
120     #:desc "Definition of the Input data structures"
121     #:children
122     (list
123      (music-expressions-doc)
124      (music-types-doc)
125      (music-props-doc))
126     ))
127
128   
129   
130