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