]> git.donarmstrong.com Git - lilypond.git/blob - scm/define-music-types.scm
(err): robustness fix for
[lilypond.git] / scm / define-music-types.scm
1 ;;;; define-music-types.scm --
2 ;;;;
3 ;;;;  source file of the GNU LilyPond music typesetter
4 ;;;; 
5 ;;;; (c) 1998--2006 Han-Wen Nienhuys <hanwen@cs.uu.nl>
6 ;;;;                 Jan Nieuwenhuizen <janneke@gnu.org>
7
8 ;; TODO: should link back into user manual.
9
10 (define-public music-descriptions
11   `(
12     (AbsoluteDynamicEvent
13      . (
14         (description . "Creates a dynamic mark.
15
16 Syntax: @var{note}@code{\\x},
17 where x is one of \\ppp, \\pp, \\p, \\mp, \\mf, \\f, \\ff, \\fff.")
18         (types . (general-music event dynamic-event absolute-dynamic-event))
19         ))
20     (ApplyContext
21      . (
22         (description . "Call the argument with the current context during interpreting phase")
23         (types . (general-music apply-context))
24         (iterator-ctor . ,ly:apply-context-iterator::constructor)
25         ))
26     (ApplyOutputEvent
27      . (
28         (description . "
29 Call the argument with all current grobs during interpreting phase.
30
31 Syntax
32
33 \\applyoutput FUNC
34
35 arguments to func are 1. the grob, 2. the originating context,
36 3. context where FUNC is called.
37
38 ")
39         (iterator-ctor . ,ly:output-property-music-iterator::constructor)
40         (types . (general-music layout-instruction))
41         ))
42     (ArpeggioEvent 
43      . (
44         (description .  "Make an arpeggio on this note.
45
46 Syntax:
47 @var{note}-@code{\\arpeggio}")
48         (types . (general-music arpeggio-event event))
49         ))
50
51     ;; todo: use articulation-event for slur as well.
52     ;; separate non articulation scripts  
53     (ArticulationEvent
54      . (
55         (description .  "Adds an articulation marking to a note.  
56
57 Syntax:
58 @var{note}@code{X}@code{Y}, where X is a direction (up @code{^}, down
59 @code{_}, or LilyPond's choice (no direction specified)), and where Y
60 is an articulation (such as @code{-.}, @code{->}, @code{\\tenuto},
61 @code{\\downbow}).  See the user manual for details.")
62
63         (types . (general-music event articulation-event script-event))
64         )) 
65     (AutoChangeMusic
66      . (
67         (description .  "Used for making voices that switch between piano staves automatically.")
68         (iterator-ctor . ,ly:auto-change-iterator::constructor)
69         (start-callback . ,ly:music-wrapper::start-callback)
70         (length-callback . ,ly:music-wrapper::length-callback)
71         (types . (general-music music-wrapper-music auto-change-instruction))
72         ))
73     (BarCheck
74      . (
75         (description .
76                      "Check whether this music coincides with the start of the measure.")
77         (types . (general-music bar-check))
78         (iterator-ctor . ,ly:bar-check-iterator::constructor)
79         ))
80     (BassFigureEvent
81      . (
82         (description .  "Print a bass-figure text")
83
84         (types . (general-music event rhythmic-event bass-figure-event))
85         ))
86     (BeamEvent
87      . (
88         (description .  "Starts or stops a beam.  
89
90 Syntax for manual control:
91 c8-[ c c-] c8")
92         (types . (general-music event beam-event span-event))
93         ))
94     (BreakEvent
95      . (
96         (description .  "Create a line break, Syntax: \\break or page break, Syntax: \\pagebreak.")
97
98         (types . (general-music break-event event))
99         ))
100     (BreathingSignEvent
101      . (
102         (description .  "Creates a `breath mark' or `comma'.  
103
104 Syntax:
105 @var{note}\\breathe.")
106
107         (types . (general-music event breathing-event))
108         )) 
109     (BusyPlayingEvent
110      . (
111         (description .  "Used internally to signal beginning and ending of notes.")
112
113         (types . (general-music event busy-playing-event))
114         ))
115     (ContextChange
116      . (
117         (description .  "Change staffs in Piano staff. 
118
119 Syntax @code{\\translator Staff = @var{new-id}}.")
120         (iterator-ctor . , ly:change-iterator::constructor)
121         (types . (general-music translator-change-instruction))
122         ))
123
124     (ClusterNoteEvent
125      . ((description .  "A note that is part of a cluster.")
126
127         ;; not a note-event, to ensure that Note_engraver doesn't eat it. 
128         (types . (general-music cluster-note-event melodic-event rhythmic-event event))
129         ))
130     
131     (ContextSpeccedMusic
132      . (
133         (description .  "Interpret the argument music within a specific context.")
134         (iterator-ctor . ,ly:context-specced-music-iterator::constructor)
135         (length-callback . ,ly:music-wrapper::length-callback)
136         (start-callback . ,ly:music-wrapper::start-callback)
137         (types . (context-specification general-music music-wrapper-music))
138         ))
139     
140     (CrescendoEvent
141      . (
142         (description .  "Begins or ends a crescendo.  
143
144 Syntax: @var{note}\\cr
145 ... @var{note}\\rc (you can also use \\<, \\!, \\cresc, and
146 \\endcresc.  See the user manual for details.).")
147
148         (types . (general-music dynamic-event crescendo-event event))
149         )) 
150     (DecrescendoEvent
151      . (
152         (description .  "See @ref{CrescendoEvent}.")
153
154         (types . (general-music dynamic-event decrescendo-event event))
155         ))
156     
157     (ExtenderEvent
158      . (
159         (description .  "Extend lyrics.")
160
161         (types . (general-music extender-event event))
162         ))
163
164     
165     (EventChord
166      . (
167         (description .  "Internally used to group a set of events.")
168         (iterator-ctor . ,ly:event-chord-iterator::constructor)
169         (length-callback . ,ly:music-sequence::maximum-length-callback)
170         (to-relative-callback . ,ly:music-sequence::event-chord-relative-callback)
171         (types . (general-music event-chord simultaneous-music))
172         ))
173
174     (FingerEvent
175      . (
176         (description . "Specify what finger to use for this note.")
177         (types . (general-music fingering-event event))
178         ))
179     (BeamForbidEvent
180      . (
181         (description . "Specify that a note may not auto-beamed ")
182         (types . (general-music event beam-forbid-event))
183         ))
184     (GlissandoEvent
185      . (
186         (description .  "Start  a glissando on this note.")
187         (types . (general-music glissando-event event))
188         ))
189     
190     (GraceMusic
191      . (
192         (description .  "Interpret the argument as grace notes. ")
193         (start-callback . ,ly:grace-music::start-callback)
194         (length . ,ZERO-MOMENT)
195         (iterator-ctor . ,ly:grace-iterator::constructor)
196         (types . (grace-music music-wrapper-music general-music))
197         ))
198     (NoteGroupingEvent
199      . (
200         (description . "Start or stop grouping brackets.")
201         (types . (general-music event note-grouping-event))
202         ))
203     (HarmonicEvent
204      . (
205         (description . "Mark a note as harmonic")
206         (types . (general-music event harmonic-event))
207         ))
208     (HyphenEvent
209      . (
210         (description .  "A hyphen between lyric syllables.")
211
212         (types . (general-music hyphen-event event))
213         ))
214     
215     (KeyChangeEvent
216      . (
217         (description .  "Change the key signature. 
218
219 Syntax: @code{\\key } @var{name} @var{scale}.")
220         (to-relative-callback . ,(lambda (x p) p))
221         (types . (general-music key-change-event event))
222         ))
223     (LaissezVibrerEvent
224      . ((description . "Don't damp this chord.
225
226 Syntax: @var{note}\\laissezVibrer.")
227
228         (types . (general-music event laissez-vibrer-event))
229         ))
230     (LigatureEvent
231      . (
232         (description .  "(docme).")
233
234         (span-type . ligature)
235         (types . (general-music span-event ligature-event event))
236         ))
237     
238     (OldLyricCombineMusic
239      . (
240         (description .  "Align lyrics to the start of notes.
241
242 Syntax @var{\\oldaddlyrics }@var{music} @var{lyrics}.")
243
244         (types . (general-music lyric-combine-music))
245         (length-callback . ,ly:lyric-combine-music::length-callback)
246         (start-callback . ,ly:music-sequence::first-start-callback)
247         (iterator-ctor . ,ly:old-lyric-combine-music-iterator::constructor)
248         ))
249     
250     (LyricCombineMusic
251      . (
252         (description .  "Align lyrics to the start of notes.
253
254 Syntax @var{\\lyricsto }@var{voicename} @var{lyrics}.")
255         (length . ,ZERO-MOMENT)
256         (types . (general-music lyric-combine-music))
257         (iterator-ctor . ,ly:lyric-combine-music-iterator::constructor)
258         ))
259
260     (LyricEvent
261      . (
262         (description .  "A lyric syllable. Must be entered in lyrics mode, i.e.
263 @code{\\lyrics @{ twinkle4 twinkle4 @} } .")
264
265         (types . (general-music rhythmic-event lyric-event event))
266         ))
267     (MarkEvent
268      . (
269         (description .  "Insert a rehearsal mark. 
270
271 Syntax: @code{\\mark} @var{marker},
272 e.g. @code{\\mark \"A\"}.")
273
274         (types . (general-music mark-event event))
275         ))
276     (MelismaPlayingEvent
277      . (
278         (description .  "Used internally to signal melismas.")
279         (types . (general-music melisma-playing-event event))
280         ))
281     (ManualMelismaEvent
282      . (
283         (description .  "Start or stop a melisma.
284
285 Syntax: @code{c4\\melisma d\\melismaEnd}.")
286         (types . (general-music melisma-span-event event))
287         ))
288     
289     (MultiMeasureRestEvent
290      . (
291         (description . "Rests that may be compressed into Multi rests. 
292
293 Syntax
294 @code{R2.*4} for 4 measures in 3/4 time. Note the capital R.")
295         (types . (general-music event rhythmic-event multi-measure-rest-event))
296         ))
297     
298     (MultiMeasureRestMusicGroup
299      . (
300         (description .  "Like sequential-music, but specifically intended
301 to group start-mmrest, skip, stop-mmrest sequence. 
302
303 Syntax @code{R2.*5} for 5 measures in 3/4 time.")
304         (length-callback . ,ly:music-sequence::cumulative-length-callback)
305         (start-callback . ,ly:music-sequence::first-start-callback)
306         (iterator-ctor . ,ly:sequential-music-iterator::constructor)
307         (types . (general-music sequential-music))
308         ))
309     
310     (MultiMeasureTextEvent
311      . (
312         (description . "Texts on mm rests. 
313
314 Syntax
315 @code{R-\\markup @{ \\roman \"bla\" @}}. Note the explicit font switch.")
316         (types . (general-music event multi-measure-text-event))
317         ))
318
319     (Music
320      . (
321         (description .  "Generic type for music expressions.")
322
323         (types . (general-music)) 
324         ))
325     (NoteEvent
326      . (
327         (description .  "A note.")
328
329         (types . (general-music event note-event rhythmic-event melodic-event))
330         ))
331     
332     (OutputPropertySetMusic
333      . (
334         (description .  "Set grob properties in objects
335 individually. 
336
337 Syntax @code{\\outputproperty @var{predicate} @var{prop}
338 = @var{val}}.")
339
340         (iterator-ctor . ,ly:output-property-music-iterator::constructor)
341         (types . (general-music layout-instruction))
342         ))
343     
344     (OverrideProperty
345      . (
346         (description .  "Extend the definition of a graphical object.
347
348 SYNTAX
349
350 @code{\\override [ @var{Ctxt} . ] @var{Obj} @var{prop} = @var{val}}
351 ")
352         (types . (general-music layout-instruction))
353         (iterator-ctor . ,ly:push-property-iterator::constructor)
354         ))
355     (PartCombineMusic
356      . (
357         (description .  "Combine two parts on a staff, either merged or
358 as separate voices.")
359         (length-callback . ,ly:music-sequence::maximum-length-callback)
360         (start-callback . ,ly:music-sequence::minimum-start-callback)
361         (types . (general-music part-combine-music))
362         (iterator-ctor . ,ly:part-combine-iterator::constructor)
363         ))
364     (PhrasingSlurEvent
365      . (
366         (description . "Start or end phrasing slur. 
367
368 Syntax NOTE \\(  and \\) NOTE")
369         (types . (general-music span-event event phrasing-slur-event))
370         ))
371     
372     (PropertySet
373      . (
374         (description .  "Set a context property.
375
376 Syntax: @code{\\property @var{context}.@var{prop} = @var{scheme-val}}.")
377         (types . (layout-instruction general-music))
378         (iterator-ctor . ,ly:property-iterator::constructor)
379         ))
380
381     (PropertyUnset
382      . (
383         (description .  "Remove the definition of a context @code{\\property}.")
384
385         (types . (layout-instruction general-music))
386         (iterator-ctor . ,ly:property-unset-iterator::constructor)
387         ))
388     
389     (PesOrFlexaEvent
390      . (
391         (description .  "Within a ligature, mark the previous and the
392 following note to form a pes (if melody goes up) or a flexa (if melody
393 goes down).")
394
395         (types . (general-music pes-or-flexa-event event))
396         ))
397
398     (QuoteMusic
399      . (
400         (description . "Quote preprocessed snippets of music. ")
401         (iterator-ctor . ,ly:quote-iterator::constructor)
402         (length-callback . ,ly:music-wrapper::length-callback)
403         (start-callback . ,ly:music-wrapper::start-callback)
404         (types . (general-music music-wrapper-music))
405         ))
406     
407     (RelativeOctaveCheck
408      . ((description . "Check if a pitch is in the correct octave.")
409         (to-relative-callback . ,ly:relative-octave-check::relative-callback)
410         (types . (general-music relative-octave-check))
411         ))
412     
413     (RepeatedMusic
414      . (
415         (description .  "Repeat music in different ways")
416         (type .  repeated-music)
417         (types . (general-music repeated-music))
418         ))
419     
420     (Event
421      . (
422         (description .  "Atomic music event.")
423
424         (types . (general-music event))
425         ))
426     
427     (RestEvent
428      . (
429         (description .  "A Rest. 
430
431 Syntax @code{r4} for a quarter rest. ")
432
433         (types . (general-music event rhythmic-event rest-event))
434         )) 
435     (RevertProperty
436      . (
437         (description .  "The opposite of @ref{OverrideProperty}: remove a
438 previously added property from a graphical object definition
439  ")
440
441         (types . (general-music layout-instruction))
442         (iterator-ctor . ,      ly:pop-property-iterator::constructor)
443         ))
444
445     (SequentialMusic
446      . (
447         (description .  "Music expressions concatenated. 
448
449 Syntax \\sequential @{..@} or simply @{..@} .")
450
451         (length-callback . ,ly:music-sequence::cumulative-length-callback)
452         (start-callback . ,ly:music-sequence::first-start-callback)
453         (iterator-ctor . ,ly:sequential-music-iterator::constructor)
454         (types . (general-music sequential-music))
455         ))
456
457     (SoloOneEvent
458      . (
459         (description . "Print Solo.1")
460         (part-combine-status . solo1)
461         (types . (general-music event part-combine-event))
462         ))
463     (SoloTwoEvent
464      . (
465         (description . "Print Solo.2")
466         (part-combine-status . solo2)
467         (types . (general-music event part-combine-event))
468         ))
469     (UnisonoEvent
470      . ((description . "Print a2")
471         (part-combine-status . unisono)
472         (types . (general-music event part-combine-event))))
473     
474     (SimultaneousMusic
475      . (
476         (description .  "Music playing together.
477
478 SYNTAX
479
480 @code{ \\simultaneous @{ .. @}} or << .. >>.")
481
482         (iterator-ctor . ,ly:simultaneous-music-iterator::constructor)
483         (start-callback . ,ly:music-sequence::minimum-start-callback)
484         (length-callback . ,ly:music-sequence::maximum-length-callback)
485         (to-relative-callback . ,ly:music-sequence::simultaneous-relative-callback)
486         
487         (types . (general-music simultaneous-music))
488         ))
489     
490     (SlurEvent
491      . (
492         (description . "Start or end slur. 
493
494 Syntax NOTE(     and NOTE) ")
495
496         (types . (general-music span-event event slur-event))
497         ))
498     
499     (StaffSpanEvent
500      . ((description . "Start or  stop a staff symbol.")
501         (types . (general-music event span-event staff-span-event))
502      ))
503     
504     (StartPlayingEvent
505      . (
506         (description .  "Used internally to signal beginning of notes.")
507
508         (types . (general-music event start-playing-event))
509         ))
510     
511     (TextSpanEvent
512      . (
513         (description . "Start a text spanner like 8va.....|")
514         (types . (general-music span-event event text-span-event))
515         ))
516     
517     (TrillSpanEvent
518      . (
519         (description . "Start a trill spanner tr~~~")
520         (types . (general-music span-event event trill-span-event))
521         ))
522     
523     (TimeScaledMusic
524      . (
525         (description .  "Multiply durations, as in tuplets. 
526
527 Syntax @code{\\times @var{fraction} @var{music}}, e.g.
528 @code{\\times 2/3 @{ ... @}} for triplets.
529  ")
530         (length-callback . ,ly:music-wrapper::length-callback)
531         (start-callback . ,ly:music-wrapper::start-callback)
532         (iterator-ctor . ,ly:time-scaled-music-iterator::constructor)
533         (types . (time-scaled-music music-wrapper-music general-music))
534         ))
535     
536     (TransposedMusic
537      . (
538         (description .  "Music that has been transposed.")
539         (iterator-ctor . ,ly:music-wrapper-iterator::constructor)
540         (start-callback . ,ly:music-wrapper::start-callback)
541         (length-callback . ,ly:music-wrapper::length-callback)
542         (to-relative-callback . ,ly:relative-octave-music::no-relative-callback)
543         (types . (music-wrapper-music general-music transposed-music))
544         ))
545
546     (UnrelativableMusic
547      . (
548         (description .  "Music that can not be converted from relative to absolute notation.
549 For example, transposed music.")
550         (to-relative-callback . ,ly:relative-octave-music::no-relative-callback)
551         (iterator-ctor . ,ly:music-wrapper-iterator::constructor)
552         (length-callback . ,ly:music-wrapper::length-callback)
553         (types . (music-wrapper-music general-music unrelativable-music))
554         ))
555
556     (RelativeOctaveMusic
557      . (
558         (description .  "Music that was entered in relative octave notation.")
559         (to-relative-callback . ,ly:relative-octave-music::relative-callback)
560         (iterator-ctor . ,ly:music-wrapper-iterator::constructor)
561         (length-callback . ,ly:music-wrapper::length-callback)
562         (start-callback . ,ly:music-wrapper::start-callback)
563         (types . (music-wrapper-music general-music relative-octave-music))
564         ))
565     (ScriptEvent
566      . (
567         (description .  "Add an articulation mark to a note. ")
568
569         (types . (general-music event))
570         ))
571
572     (SkipMusic
573      . (
574         (description .  "Filler that takes up duration, does not print anything, and also
575 does not create staffs or voices implicitly.
576
577
578
579 Syntax: @code{\\skip }@var{duration}.")
580         (length-callback . ,ly:music-duration-length)
581         (iterator-ctor . ,ly:simple-music-iterator::constructor)
582         (types . (general-music event rhythmic-event skip-event))
583         ))
584     
585     (SkipEvent
586      . (
587         (description .  "Filler that takes up duration, but does not print anything.
588
589
590
591 Syntax: @code{s}@var{duration}")
592
593         (types . (general-music event rhythmic-event skip-event))
594         ))
595     (SpanEvent
596      . (
597         (description .  "Event for anything that is started at a different time than stopped.")
598
599         (types . (general-music event))
600         ))
601     
602     (SustainEvent
603      . (
604         (description . "Depress or release sustain pedal. ")
605         (types . (general-music event pedal-event sustain-pedal-event))
606         ))
607     
608     (SostenutoEvent
609      . (
610         (description . "Depress or release sostenuto pedal. ")
611         (types . (general-music event pedal-event sostenuto-pedal-event))
612         ))
613     
614     (UnaCordaEvent
615      . (
616         (description . "Depress or release una-corda pedal.")
617         (types . (general-music event pedal-event una-corda-pedal-event))
618         ))
619     
620     (StringNumberEvent
621      . (
622         (description .  "Specify on which string to play this note. 
623
624 Syntax: @code{\\@var{number}}.")
625
626         (types . (general-music string-number-event event))
627         )) 
628
629     (MetronomeChangeEvent
630      . (
631         (description .  "Change tempo setting (in beats per minute).")
632         (types . (general-music metronome-change-event tempo-event event))
633         ))
634     
635     (TextScriptEvent
636      . (
637         (description .  "")
638         (types . (general-music script-event text-script-event event))
639         )) 
640     (TieEvent
641      . (
642         (description .  "A tie.  Entered as @var{note}-~.")
643         (types . (general-music tie-event event))
644         ))
645     (TremoloEvent
646      . (
647         (description . "Un measured tremolo.")
648         (types . (general-music event tremolo-event))
649         ))
650     
651     (VoiceSeparator
652      . (
653         (description .  "Separate polyphonic voices in simultaneous music. 
654
655 Syntax: @code{\\\\}")
656
657         (types . (separator general-music))
658         ))
659
660     (VoltaRepeatedMusic
661      . (
662         (iterator-ctor . ,ly:volta-repeat-iterator::constructor)
663         (description . "")
664         (start-callback .  ,ly:repeated-music::first-start)
665         (length-callback . ,ly:repeated-music::volta-music-length)
666         (types . (general-music repeated-music volta-repeated-music))
667         ))
668     
669     (UnfoldedRepeatedMusic
670      . (
671         (iterator-ctor . ,ly:unfolded-repeat-iterator::constructor)
672         (description .  "")
673         (start-callback .  ,ly:repeated-music::first-start)
674         (types . (general-music repeated-music unfolded-repeated-music))
675         (length-callback . ,ly:repeated-music::unfolded-music-length)
676         ))
677     (PercentRepeatedMusic
678      . (
679         (description .  "Repeats encoded by percents.")
680         (iterator-ctor . ,ly:percent-repeat-iterator::constructor)
681         (start-callback .  ,ly:repeated-music::first-start)
682         (length-callback . ,ly:repeated-music::unfolded-music-length)
683         (types . (general-music repeated-music percent-repeated-music))
684         ))
685     
686     (TremoloRepeatedMusic
687      . (
688         (iterator-ctor . ,ly:chord-tremolo-iterator::constructor)
689         (description .  "Repeated notes denoted by tremolo beams.")
690         (start-callback .  ,ly:repeated-music::first-start)
691
692         ;; the length of the repeat is handled by shifting the note logs
693         (length-callback . ,ly:repeated-music::folded-music-length)
694         (types . (general-music repeated-music tremolo-repeated-music))
695         
696         ))
697     
698     (FoldedRepeatedMusic
699      . (
700         (description .  "Repeats with alternatives placed in parallel. ")
701         (iterator-ctor  . ,ly:folded-repeat-iterator::constructor)
702         (start-callback .  ,ly:repeated-music::minimum-start)
703         (length-callback . ,ly:repeated-music::folded-music-length)
704         (types . (general-music repeated-music folded-repeated-music))
705         ))
706     ))
707
708 (set! music-descriptions
709       (sort music-descriptions alist<?))
710
711 (define-public music-name-to-property-table (make-vector 59 '()))
712
713 ;; init hash table,
714 ;; transport description to an object property.
715 (set!
716  music-descriptions
717  (map (lambda (x)
718         (set-object-property! (car x)
719                               'music-description
720                               (cdr (assq 'description (cdr x))))
721         (let ((lst (cdr x)))
722           (set! lst (assoc-set! lst 'name (car x)))
723           (set! lst (assq-remove! lst 'description))
724           (hashq-set! music-name-to-property-table (car x) lst)
725           (cons (car x) lst)))
726       music-descriptions))
727
728 (define-safe-public (make-music name . music-properties)
729   "Create a music object of given name, and set its properties
730 according to `music-properties', a list of alterning property symbols
731 and values. E.g:
732   (make-music 'OverrideProperty 
733               'symbol 'Stem
734               'grob-property 'thickness
735               'grob-value (* 2 1.5))"
736   (if (not (symbol? name))
737       (ly:error (_ "symbol expected: ~S") name))
738   (let ((props (hashq-ref music-name-to-property-table name '())))
739     (if (not (pair? props))
740         (ly:error (_ "can't find music object: ~S") name))
741     (let ((m (ly:make-music props)))
742       (define (set-props mus-props)
743         (if (and (not (null? mus-props))
744                  (not (null? (cdr mus-props))))
745             (begin
746               (set! (ly:music-property m (car mus-props)) (cadr mus-props))
747               (set-props (cddr mus-props)))))
748       (set-props music-properties)
749       m)))
750
751 (define-public (make-repeated-music name)
752   (let* ((handle (assoc name '(("volta" . VoltaRepeatedMusic)
753                                ("unfold" . UnfoldedRepeatedMusic)
754                                ("percent" . PercentRepeatedMusic)
755                                ("tremolo" . TremoloRepeatedMusic)
756                                ("fold" . FoldedRepeatedMusic))))
757          (music-name (if (pair? handle)
758                          (cdr handle)
759                          (begin
760                            (ly:warning (_ "unknown repeat type `~S'") name)
761                            (ly:warning (_ "See music-types.scm for supported repeats"))
762                            'VoltaRepeatedMusic))))
763     (make-music music-name)))
764