]> git.donarmstrong.com Git - lilypond.git/blob - scm/music-types.scm
9c878669942979638d6f03ff98a24e7dceb1b72d
[lilypond.git] / scm / music-types.scm
1
2 (define-public music-descriptions
3   `(
4     (AbortEvent
5      . (
6         (internal-class-name . "Span_req")
7         (span-type . "abort")
8         (types . (general-music event abort-event))
9         ))
10     (ArpeggioEvent 
11      . (
12         (internal-class-name .  "Arpeggio_req")
13         (types . (general-music event))
14         ))
15     (ArticulationEvent
16      . (
17         (internal-class-name . "Articulation_req")
18         (types . (general-music event articulation-event script-event))
19         )) 
20     (BassFigureEvent
21      . (
22         (internal-class-name . "Bass_figure_req")
23         (compress-procedure . ,music-duration-compress)
24         (length . ,music-duration-length) 
25         (types . (general-music event rhythmic-event bass-figure-event))
26         ))
27     (BreakEvent
28      . (
29         (internal-class-name . "Break_req")
30
31         (types . (general-music event))
32         )) 
33     (BreathingSignEvent
34      . (
35         (internal-class-name . "Breathing_sign_req")
36
37         (types . (general-music event breathing-event))
38         )) 
39     (BusyPlayingEvent
40      . (
41         (internal-class-name . "Busy_playing_req")
42
43         (types . (general-music event busy-playing-event))
44         )) 
45     (ExtenderEvent
46      . (
47         (internal-class-name . "Extender_req")
48         (types . (general-music event))
49         ))   
50     (GlissandoEvent
51      . (
52         (internal-class-name . "Glissando_req")
53         (types . (general-music event))
54         )) 
55    (GraceMusic
56      . (
57         (internal-class-name . "Grace_music")
58         (iterator-ctor . ,Grace_iterator::constructor)
59         (types . (grace-music music-wrapper-music general-music))
60         ))
61    (HyphenEvent
62      . (
63         (internal-class-name . "Hyphen_req")
64         (types . (general-music event))
65         ))   
66     (KeyChangeEvent
67      . (
68         (internal-class-name . "Key_change_req")
69         (types . (general-music event))
70         )) 
71     (LyricEvent
72      . (
73         (internal-class-name . "Lyric_req")
74         (types . (general-music rhythmic-event event))
75         ))
76     (LigatureEvent
77      . (
78         (internal-class-name . "Span_req")
79         (span-type . ligature)
80         (types . (general-music event span-event ligature-event))
81         ))
82     (MarkEvent
83      . (
84         (internal-class-name . "Mark_req")
85         (types . (general-music event))
86         ))  
87     (MelismaEvent
88      . (
89         (internal-class-name . "Melisma_playing_req")
90         (types . (general-music span-event event))
91         )) 
92     (Melisma_playingEvent
93      . (
94         (internal-class-name . "Melisma_req")
95         (types . (general-music event))
96         ))
97     (Music
98      . (
99         (internal-class-name . "Music")
100         (types . (general-music)) 
101         ))
102     (NoteEvent
103      . (
104         (internal-class-name . "Request")
105         (length . ,music-duration-length) 
106         (compress-procedure . ,music-duration-compress)
107         (types . (general-music event note-event rhythmic-event melodic-event))
108         ))
109     (PorrectusEvent
110      . (
111         (internal-class-name . "Porrectus_req")
112         (types . (general-music event))
113         ))
114     (RepeatedMusic
115      . (
116         (internal-class-name . "Repeated_music")
117         (type .  repeated-music)
118         (types . (general-music repeat-music))
119         ))
120     (Request
121      . (
122         (internal-class-name . "Request")
123         (types . (general-music event))
124         )) 
125     (RestEvent
126      . (
127         (internal-class-name . "Request")
128         (length . ,music-duration-length)
129         (compress-procedure . ,music-duration-compress)
130         (types . (general-music event rhythmic-event rest-event))
131         )) 
132     (RhythmicEvent
133      . (
134         (internal-class-name . "Rhythmic_req")
135         (length . ,music-duration-length) 
136         (compress-procedure . ,music-duration-compress)
137         (types . (general-music rhythmic-event  event))
138         )) 
139     (SequentialMusic
140      . (
141         (internal-class-name . "Sequential_music")
142         (iterator-ctor . ,Sequential_music_iterator::constructor)
143         (types . (general-music sequential-music))
144         ))
145     (SimultaneousMusic
146      . (
147         (internal-class-name . "Simultaneous_music")
148         (iterator-ctor . ,Simultaneous_music_iterator::constructor)
149         
150         (types . (general-music simultaneous-music))
151         ))
152     (PropertySet
153      . (
154         (internal-class-name . "Music")
155         (types . (layout-instruction general-music))
156         (iterator-ctor . ,Property_iterator::constructor)
157         )
158      )
159      (PropertyUnset
160      . (
161         (internal-class-name . "Music")
162         (types . (layout-instruction general-music))
163         (iterator-ctor . ,Property_unset_iterator::constructor)
164         )
165      )
166      (VoiceSeparator
167       . (
168          (internal-class-name . "Music")
169          (types . (separator general-music))
170          ))
171      (BarCheck
172       . (
173          (internal-class-name . "Music")
174          (types . (general-music bar-check))
175          (iterator-ctor . ,Bar_check_iterator::constructor)
176          ))
177      (OverrideProperty
178       . (
179          (internal-class-name . "Music")
180          (types . (general-music layout-instruction))
181          (iterator-ctor . ,     Push_property_iterator::constructor)
182          ))
183      (RevertProperty
184       . (
185          (internal-class-name . "Music")
186          (types . (general-music layout-instruction))
187          (iterator-ctor . ,     Pop_property_iterator::constructor)
188          ))
189      
190     (OutputPropertySetMusic
191      . (
192         (internal-class-name . "Music")
193         (iterator-ctor . ,Output_property_music_iterator::constructor)
194         (types . (general-music layout-instruction))
195         ))
196     (ContextSpeccedMusic
197      . (
198         (internal-class-name . "Context_specced_music")
199         (types . (context-specification general-music music-wrapper-music))
200         ))
201     (AutoChangeMusic
202      . (
203         (internal-class-name . "Music_wrapper")
204         (iterator-ctor . ,Auto_change_iterator::constructor)
205         (types . (general-music music-wrapper-music auto-change-instruction))
206         ))
207     (TranslatorChange
208      . (
209         (internal-class-name . "Music")
210         (iterator-ctor . , Change_iterator::constructor)
211         (types . (general-music translator-change-instruction))
212         ))
213     (TimeScaledMusic
214      . (
215         (internal-class-name . "Time_scaled_music")
216         (iterator-ctor . ,Time_scaled_music_iterator::constructor)
217         (types . (time-scaled-music music-wrapper-music general-music))
218         ))
219     (TransposedMusic
220      . (
221         (internal-class-name . "Transposed_music")
222         (types . (music-wrapper-music general-music transposed-music))
223         ))
224
225     (UntransposableMusic
226      . (
227         (internal-class-name . "Untransposable_music")
228         (types . (music-wrapper-music general-music untransposable-music)) 
229         ))
230
231     (UnrelativableMusic
232      . (
233         (internal-class-name . "Un_relativable_music")
234         (types . (music-wrapper-music general-music unrelativable-music))
235         ))
236
237     (RelativeOctaveMusic
238      . (
239         (internal-class-name . "Relative_octave_music")
240         (types . (music-wrapper-music general-music relative-octave-music))
241         ))
242
243     (LyricCombineMusic
244      . (
245         (internal-class-name . "Lyric_combine_music")
246         (types . (general-music lyric-combine-music))
247         (iterator-ctor . ,Lyric_combine_music_iterator::constructor)
248         ))
249
250     (PartCombineMusic
251      . (
252         (internal-class-name . "Part_combine_music")
253         (types . (general-music part-combine-music))
254         (iterator-ctor . ,Part_combine_music_iterator::constructor)
255      ))
256     (RequestChord
257      . (
258         (internal-class-name . "Request_chord")
259         (iterator-ctor . ,Request_chord_iterator::constructor)
260         (types . (general-music simultaneous-music))
261         )
262      )
263      
264     (ScriptEvent
265      . (
266         (internal-class-name . "Script_req")
267
268         (types . (general-music event))
269         )) 
270     (SkipEvent
271      . (
272         (internal-class-name . "Request")
273         (types . (general-music event rhythmic-event skip-event))
274         )) 
275     (SpanEvent
276      . (
277         (internal-class-name . "Span_req")
278         (types . (general-music event))
279         )) 
280     (StringNumberEvent
281      . (
282         (internal-class-name . "String_number_req")
283
284         (types . (general-music event))
285         )) 
286     (TempoEvent
287      . (
288         (internal-class-name . "Tempo_req")
289
290         (types . (general-music event))
291         )) 
292     (TextScriptEvent
293      . (
294         (internal-class-name . "Text_script_req")
295         (types . (general-music script-event text-script-event event))
296         )) 
297     (TieEvent
298      . (
299         (internal-class-name . "Request")
300         (types . (general-music tie-event event))
301         ))
302     ))
303
304
305
306 (define music-name-to-property-table (make-vector 59 '()))
307
308 (map (lambda (x)
309        (hashq-set! music-name-to-property-table (car x)
310                    (assoc-set! (cdr x) 'name (car x)))
311        )
312      music-descriptions)
313
314
315
316 (define-public (make-music-by-name x)
317   (if (not (symbol? x))
318       (misc-error "Not a symbol: ~s" x))
319   (let*
320       (
321        (props (hashq-ref music-name-to-property-table x '()))
322        (name (if (pair? props)
323                  (cdr (assoc 'internal-class-name props))
324                  (misc-error "Can not find music object ~s" x)))
325        )
326
327     (if (eq? props '())
328         (ly-warn (format "Could not find music type `~a'" x)))  
329     (ly-make-bare-music name props)
330   ))
331