]> git.donarmstrong.com Git - lilypond.git/blob - scm/define-music-types.scm
More message fixes and dutch translations.
[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@xs4all.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   "Generate events for multimeasure rests, to be used by the sequential-iterator"
12   (let ((location (ly:music-property music 'origin))
13         (duration (ly:music-property music 'duration)))
14     (list (make-music 'BarCheck
15                       'origin location)
16           (make-event-chord (cons (make-music 'MultiMeasureRestEvent
17                                               'origin location
18                                               'duration duration)
19                                   (ly:music-property music 'articulations)))
20           (make-music 'BarCheck
21                       'origin location))))
22
23 (define-public music-descriptions
24   `(
25     (AbsoluteDynamicEvent
26      . (
27         (description . "Creates a dynamic mark.
28
29 Syntax: @var{note}@code{\\x},
30 where x is one of \\ppp, \\pp, \\p, \\mp, \\mf, \\f, \\ff, \\fff.")
31         (types . (general-music event dynamic-event absolute-dynamic-event))
32         ))
33
34     (AnnotateOutputEvent
35      . ((description . "Print an annotation of an output element.")
36         (types . (general-music event annotate-output-event))
37         ))
38         
39     (ApplyContext
40      . (
41         (description . "Call the argument with the current context during interpreting phase")
42         (types . (general-music apply-context))
43         (iterator-ctor . ,ly:apply-context-iterator::constructor)
44         ))
45     
46     (ApplyOutputEvent
47      . (
48         (description . "
49 Call the argument with all current grobs during interpreting phase.
50
51 Syntax
52
53 \\applyOutput #'Context FUNC
54
55 arguments to func are 1. the grob, 2. the originating context,
56 3. context where FUNC is called.
57
58 ")
59         (types . (general-music event apply-output-event))
60         ))
61     (ArpeggioEvent 
62      . (
63         (description .  "Make an arpeggio on this note.
64
65 Syntax:
66 @var{note}-@code{\\arpeggio}")
67         (types . (general-music arpeggio-event event))
68         ))
69
70     ;; todo: use articulation-event for slur as well.
71     ;; separate non articulation scripts  
72     (ArticulationEvent
73      . (
74         (description .  "Adds an articulation marking to a note.  
75
76 Syntax:
77 @var{note}@code{X}@code{Y}, where X is a direction (up @code{^}, down
78 @code{_}, or LilyPond's choice (no direction specified)), and where Y
79 is an articulation (such as @code{-.}, @code{->}, @code{\\tenuto},
80 @code{\\downbow}).  See the user manual for details.")
81
82         (types . (general-music event articulation-event script-event))
83         )) 
84     (AutoChangeMusic
85      . (
86         (description .  "Used for making voices that switch between piano staves automatically.")
87         (iterator-ctor . ,ly:auto-change-iterator::constructor)
88         (start-callback . ,ly:music-wrapper::start-callback)
89         (length-callback . ,ly:music-wrapper::length-callback)
90         (types . (general-music music-wrapper-music auto-change-instruction))
91         ))
92     (BarCheck
93      . (
94         (description .
95                      "Check whether this music coincides with the start of the measure.")
96         (types . (general-music bar-check))
97         (iterator-ctor . ,ly:bar-check-iterator::constructor)
98         ))
99     (BassFigureEvent
100      . (
101         (description .  "Print a bass-figure text")
102
103         (types . (general-music event rhythmic-event bass-figure-event))
104         ))
105     
106     (BeamEvent
107      . (
108         (description .  "Starts or stops a beam.  
109
110 Syntax for manual control:
111 c8-[ c c-] c8")
112         (types . (general-music event beam-event span-event))
113         ))
114     (BendAfterEvent
115      . ((description . "A drop/fall/doit jazz articulation")
116         (types . (general-music bend-after-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 span-event span-dynamic-event crescendo-event event))
161         )) 
162     (DecrescendoEvent
163      . (
164         (description .  "See @ref{CrescendoEvent}.")
165
166         (types . (general-music span-event span-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 page-break-event event))
347         ))
348     (PageTurnEvent
349      . (
350         (description .  "Allow, forbid or force a page turn.")
351         (types . (general-music break-event page-turn-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 rhythmic-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 solo-one-event))
463         ))
464     (SoloTwoEvent
465      . (
466         (description . "Print Solo.2")
467         (part-combine-status . solo2)
468         (types . (general-music event part-combine-event solo-two-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-event))
617         ))
618     
619     (UnaCordaEvent
620      . (
621         (description . "Depress or release una-corda pedal.")
622         (types . (general-music event pedal-event una-corda-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     (StrokeFingerEvent
635      . (
636         (description .  "Specify with which finger to pluck a string. 
637
638 Syntax: @code{\\rightHandFinger @var{text}}.")
639
640         (types . (general-music stroke-finger-event event))
641         )) 
642     
643     (TextScriptEvent
644      . (
645         (description .  "")
646         (types . (general-music script-event text-script-event event))
647         )) 
648     (TieEvent
649      . (
650         (description .  "A tie.  Entered as @var{note}-~.")
651         (types . (general-music tie-event event))
652         ))
653     (TremoloEvent
654      . (
655         (description . "Un measured tremolo.")
656         (types . (general-music event tremolo-event))
657         ))
658     
659     (TremoloSpanEvent
660      . (
661         (description . "Tremolo over two stems")
662         (types . (general-music event span-event tremolo-span-event))
663         ))
664
665     (VoiceSeparator
666      . (
667         (description .  "Separate polyphonic voices in simultaneous music. 
668
669 Syntax: @code{\\\\}")
670
671         (types . (separator general-music))
672         ))
673
674     (VoltaRepeatedMusic
675      . (
676         (iterator-ctor . ,ly:volta-repeat-iterator::constructor)
677         (description . "")
678         (start-callback .  ,ly:repeated-music::first-start)
679         (length-callback . ,ly:repeated-music::volta-music-length)
680         (types . (general-music repeated-music volta-repeated-music))
681         ))
682     
683     (UnfoldedRepeatedMusic
684      . (
685         (iterator-ctor . ,ly:unfolded-repeat-iterator::constructor)
686         (description .  "")
687         (start-callback .  ,ly:repeated-music::first-start)
688         (types . (general-music repeated-music unfolded-repeated-music))
689         (length-callback . ,ly:repeated-music::unfolded-music-length)
690         ))
691     (PercentRepeatedMusic
692      . (
693         (description .  "Repeats encoded by percents.")
694         (iterator-ctor . ,ly:percent-repeat-iterator::constructor)
695         (start-callback .  ,ly:repeated-music::first-start)
696         (length-callback . ,ly:repeated-music::unfolded-music-length)
697         (types . (general-music repeated-music percent-repeated-music))
698         ))
699     
700     (TremoloRepeatedMusic
701      . (
702         (iterator-ctor . ,ly:chord-tremolo-iterator::constructor)
703         (description .  "Repeated notes denoted by tremolo beams.")
704         (start-callback .  ,ly:repeated-music::first-start)
705
706         ;; the length of the repeat is handled by shifting the note logs
707         (length-callback . ,ly:repeated-music::folded-music-length)
708         (types . (general-music repeated-music tremolo-repeated-music))
709         
710         ))
711     
712     (FoldedRepeatedMusic
713      . (
714         (description .  "Repeats with alternatives placed in parallel. ")
715         (iterator-ctor  . ,ly:folded-repeat-iterator::constructor)
716         (start-callback .  ,ly:repeated-music::minimum-start)
717         (length-callback . ,ly:repeated-music::folded-music-length)
718         (types . (general-music repeated-music folded-repeated-music))
719         ))
720     ))
721
722 (set! music-descriptions
723       (sort music-descriptions alist<?))
724
725 (define-public music-name-to-property-table (make-vector 59 '()))
726
727 ;; init hash table,
728 ;; transport description to an object property.
729 (set!
730  music-descriptions
731  (map (lambda (x)
732         (set-object-property! (car x)
733                               'music-description
734                               (cdr (assq 'description (cdr x))))
735         (let ((lst (cdr x)))
736           (set! lst (assoc-set! lst 'name (car x)))
737           (set! lst (assq-remove! lst 'description))
738           (hashq-set! music-name-to-property-table (car x) lst)
739           (cons (car x) lst)))
740       music-descriptions))
741
742 (define-safe-public (make-music name . music-properties)
743   "Create a music object of given name, and set its properties
744 according to `music-properties', a list of alterning property symbols
745 and values. E.g:
746   (make-music 'OverrideProperty 
747               'symbol 'Stem
748               'grob-property 'thickness
749               'grob-value (* 2 1.5))"
750   (if (not (symbol? name))
751       (ly:error (_ "symbol expected: ~S") name))
752   (let ((props (hashq-ref music-name-to-property-table name '())))
753     (if (not (pair? props))
754         (ly:error (_ "cannot find music object: ~S") name))
755     (let ((m (ly:make-music props)))
756       (define (set-props mus-props)
757         (if (and (not (null? mus-props))
758                  (not (null? (cdr mus-props))))
759             (begin
760               (set! (ly:music-property m (car mus-props)) (cadr mus-props))
761               (set-props (cddr mus-props)))))
762       (set-props music-properties)
763       m)))
764
765 (define-public (make-repeated-music name)
766   (let* ((handle (assoc name '(("volta" . VoltaRepeatedMusic)
767                                ("unfold" . UnfoldedRepeatedMusic)
768                                ("percent" . PercentRepeatedMusic)
769                                ("tremolo" . TremoloRepeatedMusic)
770                                ("fold" . FoldedRepeatedMusic))))
771          (music-name (if (pair? handle)
772                          (cdr handle)
773                          (begin
774                            (ly:warning (_ "unknown repeat type `~S'") name)
775                            (ly:warning (_ "See music-types.scm for supported repeats"))
776                            'VoltaRepeatedMusic))))
777     (make-music music-name)))
778