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