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