]> git.donarmstrong.com Git - lilypond.git/blob - scm/music-types.scm
(Lyric_combine_music_iterator): remove superfluous events.
[lilypond.git] / scm / music-types.scm
1
2 (define-public music-descriptions
3   `(
4     (AbortEvent
5      . (
6    (description .  "End the currently running spanners.")
7         (internal-class-name . "Event")
8         (span-type . "abort")
9         (types . (general-music event abort-event))
10         ))
11     (AbsoluteDynamicEvent
12      . (
13    (description . "Creates a dynamic mark.  Syntax: @var{note}@code{\\x},
14 where x is one of \@\{\\ppp, \\pp, \\p, \\mp, \\mf, \\f, \\ff, \\fff.\@\}")
15         (internal-class-name . "Event")
16         (types . (general-music event dynamic-event absolute-dynamic-event))
17         ))
18     (ArpeggioEvent 
19      . (
20         (description .  "Make an arpeggio on this note. Syntax:
21 @var{note}-@code{\\arpeggio}")
22         (internal-class-name .  "Event")
23         (types . (general-music arpeggio-event event))
24         ))
25
26     ;; todo: use articulation-event for slur as well.
27     ;; separate non articulation scripts  
28     (ArticulationEvent
29      . (
30    (description .  "Adds an articulation marking to a note.  Syntax:
31 @var{note}@code{X}@code{Y}, where X is a direction (up @code{^}, down
32 @code{_}, or Lilypond's choice (no direction specified)), and where Y
33 is an articulation (such as @code{-.}, @code{->}, @code{\\tenuto},
34 @code{\\downbow}).  See the user manual for details.")
35
36         (internal-class-name . "Event")
37         (types . (general-music event articulation-event script-event))
38         )) 
39     (AutoChangeMusic
40      . (
41         (description .  "")
42
43         (internal-class-name . "Music_wrapper")
44         (iterator-ctor . ,Auto_change_iterator::constructor)
45         (types . (general-music music-wrapper-music auto-change-instruction))
46         ))
47     (BarCheck
48      . (
49         (description .  "")
50         (internal-class-name . "Music")
51         (types . (general-music bar-check))
52         (iterator-ctor . ,Bar_check_iterator::constructor)
53         ))
54     (BassFigureEvent
55      . (
56         (description .  "")
57
58         (internal-class-name . "Event")
59         (types . (general-music event rhythmic-event bass-figure-event))
60         ))
61     (BeamEvent
62      . (
63    (description .  "Starts or stops a beam.  Syntax for manual control:
64 \[c8 c c\] c8")
65
66         (internal-class-name . "Event")
67         (types . (general-music event beam-event span-event))
68         ))
69     (BreakEvent
70      . (
71    (description .  "Creates a line break.  Syntax: \\break.")
72
73         (internal-class-name . "Event")
74         (types . (general-music break-event event))
75         ))
76     (BreathingSignEvent
77      . (
78    (description .  "Creates a `breath mark' or `comma'.  Syntax:
79 @var{note}\\breathe.")
80
81         (internal-class-name . "Event")
82         (types . (general-music event breathing-event))
83         )) 
84     (BusyPlayingEvent
85      . (
86         (description .  "")
87
88         (internal-class-name . "Event")
89         (types . (general-music event busy-playing-event))
90         )) 
91     (ContextSpeccedMusic
92      . (
93         (description .  "")
94         (iterator-ctor . ,Context_specced_music_iterator::constructor)
95         (internal-class-name . "Music_wrapper")
96         (types . (context-specification general-music music-wrapper-music))
97         ))
98     (CrescendoEvent
99      . (
100    (description .  "Begins or ends a crescendo.  Syntax: @var{note}\\cr
101 ... @var{note}\\rc (you can also use \\<, \\!, \\cresc, and
102 \\endcresc.  See the user manual for details.).")
103
104         (internal-class-name . "Event")
105         (types . (general-music dynamic-event crescendo-event event))
106         )) 
107     (DecrescendoEvent
108      . (
109         (description .  "")
110
111         (internal-class-name . "Event")
112         (types . (general-music dynamic-event decrescendo-event event))
113         ))
114  
115     (ExtenderEvent
116      . (
117         (description .  "")
118
119         (internal-class-name . "Event")
120         (types . (general-music extender-event event))
121         ))
122     (FingerEvent
123      . (
124         (description . "")
125         (internal-class-name . "Event")
126         (types . (general-music fingering-event event))
127         ))
128     (GlissandoEvent
129      . (
130         (description .  "")
131
132         (internal-class-name . "Event")
133         (types . (general-music glissando-event event))
134         )) 
135     (GraceMusic
136      . (
137         (description .  "")
138
139         (internal-class-name . "Grace_music")
140         (iterator-ctor . ,Grace_iterator::constructor)
141         (types . (grace-music music-wrapper-music general-music))
142         ))
143     (NoteGroupingEvent
144      . (
145         (description . "Start or stop grouping brackets.")
146         (internal-class-name . "Event")
147         (types . (general-music event note-grouping-event))
148         ))
149     (HyphenEvent
150      . (
151         (description .  "")
152
153         (internal-class-name . "Event")
154         (types . (general-music hyphen-event event))
155         ))   
156     (KeyChangeEvent
157      . (
158         (description .  "")
159
160         (internal-class-name . "Key_change_req")
161         (types . (general-music key-change-event event))
162         )) 
163     (LyricCombineMusic
164      . (
165         (description .  "")
166
167         (internal-class-name . "Lyric_combine_music")
168         (types . (general-music lyric-combine-music))
169         (iterator-ctor . ,Lyric_combine_music_iterator::constructor)
170         ))
171
172     (LyricEvent
173      . (
174         (description .  "A lyric syllable. Must be entered in lyrics mode, i.e.
175 @code{\\lyrics @{ twinkle4 twinkle4 @} } .")
176
177         (internal-class-name . "Event")
178         (types . (general-music rhythmic-event lyric-event event))
179         ))
180     (LigatureEvent
181      . (
182         (description .  "")
183
184         (internal-class-name . "Event")
185         (span-type . ligature)
186         (types . (general-music event span-event ligature-event))
187         ))
188     (MarkEvent
189      . (
190         (description .  "")
191
192         (internal-class-name . "Event")
193         (types . (general-music mark-event event))
194         ))
195     (MelismaPlayingEvent
196      . (
197         (description .  "")
198         (internal-class-name . "Event")
199         (types . (general-music melisma-playing-event event))
200         ))
201     (MultiMeasureRestEvent
202      . (
203         (description . "Rests that may be compressed into Multi rests. Syntax
204 @code{R2.*4} for 4 measures in 3/4 time. Note the capital R.")
205         (internal-class-name . "Event")
206         (types . (general-music event multi-measure-rest-event))
207         ))
208     (Music
209      . (
210         (description .  "")
211
212         (internal-class-name . "Music")
213         (types . (general-music)) 
214         ))
215     (NoteEvent
216      . (
217         (description .  "")
218
219         (internal-class-name . "Event")
220         (types . (general-music event note-event rhythmic-event melodic-event))
221         ))
222     (OverrideProperty
223      . (
224         (description .  "")
225
226         (internal-class-name . "Music")
227         (types . (general-music layout-instruction))
228         (iterator-ctor . ,      Push_property_iterator::constructor)
229         ))
230
231     (PartCombineMusic
232      . (
233         (description .  "")
234
235         (internal-class-name . "Simultaneous_music")
236         (types . (general-music part-combine-music))
237         (iterator-ctor . ,Part_combine_music_iterator::constructor)
238         ))
239     (PhrasingSlurEvent
240      . (
241         (description . "Start or end phrasing slur. Syntax NOTE \\(  and \\) NOTE")
242         (internal-class-name . "Event")
243         (types . (general-music span-event phrasing-slur-event))
244         ))
245     (PropertySet
246      . (
247         (description .  "")
248         (internal-class-name . "Music")
249         (types . (layout-instruction general-music))
250         (iterator-ctor . ,Property_iterator::constructor)
251         )
252      )
253     (PropertyUnset
254      . (
255         (description .  "")
256
257         (internal-class-name . "Music")
258         (types . (layout-instruction general-music))
259         (iterator-ctor . ,Property_unset_iterator::constructor)
260         )
261      )
262     (PorrectusEvent
263      . (
264         (description .  "")
265
266         (internal-class-name . "Event")
267         (types . (general-music porrectus-event event))
268         ))
269     (RepeatedMusic
270      . (
271         (description .  "")
272
273         (type .  repeated-music)
274         (types . (general-music repeated-music))
275         ))
276     (Event
277      . (
278         (description .  "")
279
280         (internal-class-name . "Event")
281         (types . (general-music event))
282         )) 
283     (RestEvent
284      . (
285         (description .  "")
286
287         (internal-class-name . "Event")
288         (types . (general-music event rhythmic-event rest-event))
289         )) 
290     (SequentialMusic
291      . (
292         (description .  "Music expressions concatenated. Syntax \\sequential @{..@} or simply @{..@} .")
293
294         (internal-class-name . "Sequential_music")
295         (iterator-ctor . ,Sequential_music_iterator::constructor)
296         (types . (general-music sequential-music))
297         ))
298     (SimultaneousMusic
299      . (
300         (description .  "Music playing together. Syntax: \\simultaneous @{ .. @} or < .. >.")
301
302         (internal-class-name . "Simultaneous_music")
303         (iterator-ctor . ,Simultaneous_music_iterator::constructor)
304         
305         (types . (general-music simultaneous-music))
306         ))
307     (SlurEvent
308      . (
309         (description . "Start or end slur. Syntax NOTE(  and )NOTE")
310         (internal-class-name . "Event")
311         (types . (general-music span-event slur-event))
312         ))
313
314     (RevertProperty
315      . (
316         (description .  "")
317
318         (internal-class-name . "Music")
319         (types . (general-music layout-instruction))
320         (iterator-ctor . ,      Pop_property_iterator::constructor)
321         ))
322     
323     (OutputPropertySetMusic
324      . (
325         (description .  "")
326
327         (internal-class-name . "Music")
328         (iterator-ctor . ,Output_property_music_iterator::constructor)
329         (types . (general-music layout-instruction))
330         ))
331     
332     (TextSpanEvent
333      . (
334         (description . "Start a text spanner like 8va.....|")
335         (internal-class-name . "Event")
336         (types . (general-music span-event text-span-event))
337         ))
338     (TranslatorChange
339      . (
340         (description .  "")
341         (internal-class-name . "Music")
342         (iterator-ctor . , Change_iterator::constructor)
343         (types . (general-music translator-change-instruction))
344         ))
345     
346     (TimeScaledMusic
347      . (
348         (description .  "")
349         (internal-class-name . "Time_scaled_music")
350         (iterator-ctor . ,Time_scaled_music_iterator::constructor)
351         (types . (time-scaled-music music-wrapper-music general-music))
352         ))
353     
354     (TransposedMusic
355      . (
356         (description .  "")
357         (internal-class-name . "Transposed_music")
358         (types . (music-wrapper-music general-music transposed-music))
359         ))
360
361     (UntransposableMusic
362      . (
363         (description .  "")
364
365         (internal-class-name . "Untransposable_music")
366         (types . (music-wrapper-music general-music untransposable-music)) 
367         ))
368
369     (UnrelativableMusic
370      . (
371         (description .  "")
372         (internal-class-name . "Un_relativable_music")
373         (types . (music-wrapper-music general-music unrelativable-music))
374         ))
375
376     (RelativeOctaveMusic
377      . (
378         (description .  "")
379
380         (internal-class-name . "Relative_octave_music")
381         (types . (music-wrapper-music general-music relative-octave-music))
382         ))
383
384     
385     (EventChord
386      . (
387         (description .  "")
388
389         (internal-class-name . "Simultaneous_music")
390         (iterator-ctor . ,Event_chord_iterator::constructor)
391         (types . (general-music event-chord simultaneous-music))
392         )
393      )
394     
395     (ScriptEvent
396      . (
397         (description .  "")
398
399         (internal-class-name . "Event")
400         (types . (general-music event))
401         )) 
402     (SkipEvent
403      . (
404         (description .  "")
405
406         (internal-class-name . "Event")
407         (types . (general-music event rhythmic-event skip-event))
408         )) 
409     (SpanEvent
410      . (
411         (description .  "")
412
413         (internal-class-name . "Event")
414         (types . (general-music event))
415         )) 
416     (SustainPedalEvent
417      . (
418         (description . "")
419         (internal-class-name . "Event")
420         (types . (general-music pedal-event sustain-pedal-event))
421         ))
422     (SostenutoEvent
423      . (
424         (description . "")
425         (internal-class-name . "Event")
426         (types . (general-music pedal-event sostenuto-pedal-event))
427         ))
428     (UnaCordaEvent
429      . (
430         (description . "")
431         (internal-class-name . "Event")
432         (types . (general-music pedal-event una-corda-pedal-event))
433         ))
434     (StringNumberEvent
435      . (
436         (description .  "")
437
438         (internal-class-name . "Event")
439         (types . (general-music string-number-event event))
440         )) 
441     (TempoEvent
442      . (
443         (description .  "")
444
445         (internal-class-name . "Event")
446         (types . (general-music tempo-event event))
447         )) 
448     (TextScriptEvent
449      . (
450         (description .  "")
451         (internal-class-name . "Event")
452         (types . (general-music script-event text-script-event event))
453         )) 
454     (TieEvent
455      . (
456         (description .  "A tie.  Entered as ~.")
457         (internal-class-name . "Event")
458         (types . (general-music tie-event event))
459         ))
460     (TremoloEvent
461      . (
462         (description . "Un measured tremolo.")
463         (internal-class-name . "Event")
464         (types . (general-music event tremolo-event))
465         ))
466     (VoiceSeparator
467      . (
468         (description .  "")
469
470         (internal-class-name . "Music")
471         (types . (separator general-music))
472         ))
473
474     (VoltaRepeatedMusic
475      . (
476         (iterator-ctor . ,Volta_repeat_iterator::constructor)
477         (internal-class-name . "Repeated_music")
478         (description . "")
479         (start-moment-function .  ,Repeated_music::first_start)
480         (length . ,Repeated_music::volta_music_length)
481         (types . (general-music repeated-music volta-repeated-music))
482         ))
483     
484     (UnfoldedRepeatedMusic
485      . (
486         (iterator-ctor . ,Unfolded_repeat_iterator::constructor)
487         (description .  "")
488         (start-moment-function .  ,Repeated_music::first_start)
489         (internal-class-name . "Repeated_music")
490         (types . (general-music repeated-music unfolded-repeated-music))
491         (length . ,Repeated_music::unfolded_music_length)
492         ))
493     (PercentRepeatedMusic
494      . (
495         (internal-class-name . "Repeated_music")
496         (description .  "")
497         (iterator-ctor . ,Percent_repeat_iterator::constructor)
498         (start-moment-function .  ,Repeated_music::first_start)
499         (length . ,Repeated_music::unfolded_music_length)
500         (types . (general-music repeated-music percent-repeated-music))
501         ))
502     
503     (TremoloRepeteadMusic
504      . (
505         (iterator-ctor . ,Chord_tremolo_iterator::constructor)
506         (description .  "")
507         (internal-class-name . "Repeated_music")
508         (start-moment-function .  ,Repeated_music::first_start)
509
510         ;; the length of the repeat is handled by shifting the note logs
511         (length . ,Repeated_music::folded_music_length)
512         (types . (general-music repeated-music tremolo-repeated-music))
513         
514         ))
515     (FoldedRepeatedMusic
516      . (
517         (internal-class-name . "Repeated_music")
518         (description .  "")
519         (iterator-ctor  . ,Folded_repeat_iterator::constructor)
520         (start-moment-function .  ,Repeated_music::minimum_start)
521         (length . ,Repeated_music::folded_music_length)
522         (types . (general-music repeated-music folded-repeated-music))
523         ))
524     ))
525
526 (set! music-descriptions
527       (sort music-descriptions alist<?))
528
529 (define music-name-to-property-table (make-vector 59 '()))
530
531
532 ;; init hash table,
533 ;; transport description to an object property.
534 (set!
535  music-descriptions
536  (map (lambda (x)
537         (set-object-property! (car x)
538                               'music-description
539                               (cdr (assq 'description (cdr x))))
540         (let
541             ((l (cdr x)))
542           (set! l (assoc-set! l 'name (car x)))
543           (set! l (assq-remove!  l 'description))
544           (hashq-set! music-name-to-property-table (car x) l)
545           (cons (car x) l)
546           ))
547       music-descriptions))
548
549
550
551 (define-public (make-music-by-name x)
552   (if (not (symbol? x))
553       (error (format "Not a symbol: ~a" x)))
554   (let*
555       (
556        (props (hashq-ref music-name-to-property-table x '()))
557        (name (if (pair? props)
558                  (cdr (assoc 'internal-class-name props))
559                  (error "Can not find music object" x)))
560        )
561
562     (if (eq? props '())
563         (ly:warn (format "Could not find music type `~a'" x)))  
564     (ly:make-bare-music name props)
565     ))
566
567
568
569 (define-public (make-repeated-music name)
570   (let*
571       (
572        (handle (assoc
573                 name
574                 '(("volta" . VoltaRepeatedMusic)
575                   ("unfold" . UnfoldedRepeatedMusic)
576                   ("percent" . PercentRepeatedMusic)
577                   ("tremolo" . TremoloRepeteadMusic)
578                   ("fold" . FoldedRepeatedMusic)
579                   )))
580        (music-name
581         (if (pair? handle)
582             (cdr handle)
583             (begin
584               (ly:warn
585                (string-append "Unknown repeat type `" name
586                               "'\nSee music-types.scm for supported repeats"))
587               'VoltaRepeatedMusic)
588             )
589         )
590        )
591
592     (make-music-by-name music-name)
593     ))
594