X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;ds=sidebyside;f=scm%2Fdefine-music-types.scm;h=73ab524a2f762153e92aa0e922212be82e13d0b3;hb=91e7cbaa6e54e004365d28e0f10c9362a7f13320;hp=d981db254eb57a6fa01605aaa089bcb52ca456e2;hpb=955f829883aa125b2b633b1e71f6256da5b773fa;p=lilypond.git diff --git a/scm/define-music-types.scm b/scm/define-music-types.scm index d981db254e..73ab524a2f 100644 --- a/scm/define-music-types.scm +++ b/scm/define-music-types.scm @@ -1,17 +1,20 @@ +;;;; define-music-types.scm -- +;;;; +;;;; source file of the GNU LilyPond music typesetter +;;;; +;;;; (c) 1998--2005 Han-Wen Nienhuys +;;;; Jan Nieuwenhuizen + +;; TODO: should link back into user manual. (define-public music-descriptions `( - (AbortEvent - . ( - (description . "End the currently running spanners.") - (internal-class-name . "Event") - (span-type . "abort") - (types . (general-music event abort-event)) - )) (AbsoluteDynamicEvent . ( - (description . "Creates a dynamic mark. Syntax: @var{note}@code{\\x}, -where x is one of \@\{\\ppp, \\pp, \\p, \\mp, \\mf, \\f, \\ff, \\fff.\@\}") + (description . "Creates a dynamic mark. + +Syntax: @var{note}@code{\\x}, +where x is one of \\ppp, \\pp, \\p, \\mp, \\mf, \\f, \\ff, \\fff.") (internal-class-name . "Event") (types . (general-music event dynamic-event absolute-dynamic-event)) )) @@ -27,9 +30,9 @@ where x is one of \@\{\\ppp, \\pp, \\p, \\mp, \\mf, \\f, \\ff, \\fff.\@\}") (description . " Call the argument with all current grobs during interpreting phase. -SYNTAX +Syntax -\applyoutput FUNC +\\applyoutput FUNC arguments to func are 1. the grob, 2. the originating context, 3. context where FUNC is called. @@ -41,9 +44,11 @@ arguments to func are 1. the grob, 2. the originating context, )) (ArpeggioEvent . ( - (description . "Make an arpeggio on this note. Syntax: + (description . "Make an arpeggio on this note. + +Syntax: @var{note}-@code{\\arpeggio}") - (internal-class-name . "Event") + (internal-class-name . "Event") (types . (general-music arpeggio-event event)) )) @@ -51,7 +56,9 @@ arguments to func are 1. the grob, 2. the originating context, ;; separate non articulation scripts (ArticulationEvent . ( - (description . "Adds an articulation marking to a note. Syntax: + (description . "Adds an articulation marking to a note. + +Syntax: @var{note}@code{X}@code{Y}, where X is a direction (up @code{^}, down @code{_}, or LilyPond's choice (no direction specified)), and where Y is an articulation (such as @code{-.}, @code{->}, @code{\\tenuto}, @@ -62,7 +69,7 @@ is an articulation (such as @code{-.}, @code{->}, @code{\\tenuto}, )) (AutoChangeMusic . ( - (description . "Used for making voices that switch between piano staves automatically.") + (description . "Used for making voices that switch between piano staves automatically.") (internal-class-name . "Music_wrapper") (iterator-ctor . ,Auto_change_iterator::constructor) @@ -78,36 +85,32 @@ is an articulation (such as @code{-.}, @code{->}, @code{\\tenuto}, )) (BassFigureEvent . ( - (description . "Print a bass-figure text") + (description . "Print a bass-figure text") (internal-class-name . "Event") (types . (general-music event rhythmic-event bass-figure-event)) )) (BeamEvent . ( - (description . "Starts or stops a beam. Syntax for manual control: -c8-[ c c-] c8") + (description . "Starts or stops a beam. - (internal-class-name . "Event") - (types . (general-music event beam-event span-event)) - )) - (NewBeamEvent - . ( - (description . "Starts or stops a beam. Syntax for manual control: +Syntax for manual control: c8-[ c c-] c8") (internal-class-name . "Event") - (types . (general-music event new-beam-event span-event)) + (types . (general-music event beam-event span-event)) )) (BreakEvent . ( - (description . "Creates a line break. Syntax: \\break.") + (description . "Create a line break, Syntax: \\break or page break, Syntax: \\pagebreak.") (internal-class-name . "Event") (types . (general-music break-event event)) )) (BreathingSignEvent . ( - (description . "Creates a `breath mark' or `comma'. Syntax: + (description . "Creates a `breath mark' or `comma'. + +Syntax: @var{note}\\breathe.") (internal-class-name . "Event") @@ -115,24 +118,33 @@ c8-[ c c-] c8") )) (BusyPlayingEvent . ( - (description . "Used internally to signal beginning and ending of notes.") + (description . "Used internally to signal beginning and ending of notes.") (internal-class-name . "Event") (types . (general-music event busy-playing-event)) )) - + (ContextChange + . ( + (description . "Change staffs in Piano staff. + +Syntax @code{\\translator Staff = @var{new-id}}.") + (internal-class-name . "Music") + (iterator-ctor . , Change_iterator::constructor) + (types . (general-music translator-change-instruction)) + )) + (ClusterNoteEvent . ( - (description . "A note that is part of a cluster.") + (description . "A note that is part of a cluster.") (internal-class-name . "Event") - ; not a note-event, to ensure that Note_engraver doesn't eat it. + ; not a note-event, to ensure that Note_engraver doesn't eat it. (types . (general-music cluster-note-event melodic-event rhythmic-event event)) )) (ContextSpeccedMusic . ( - (description . "Interpret the argument music within a specific context.") + (description . "Interpret the argument music within a specific context.") (iterator-ctor . ,Context_specced_music_iterator::constructor) (internal-class-name . "Music_wrapper") (types . (context-specification general-music music-wrapper-music)) @@ -140,7 +152,9 @@ c8-[ c c-] c8") (CrescendoEvent . ( - (description . "Begins or ends a crescendo. Syntax: @var{note}\\cr + (description . "Begins or ends a crescendo. + +Syntax: @var{note}\\cr ... @var{note}\\rc (you can also use \\<, \\!, \\cresc, and \\endcresc. See the user manual for details.).") @@ -149,15 +163,15 @@ c8-[ c c-] c8") )) (DecrescendoEvent . ( - (description . "See @ref{CrescendoEvent}.") + (description . "See @ref{CrescendoEvent}.") (internal-class-name . "Event") (types . (general-music dynamic-event decrescendo-event event)) )) - + (ExtenderEvent . ( - (description . "Extend lyrics.") + (description . "Extend lyrics.") (internal-class-name . "Event") (types . (general-music extender-event event)) @@ -168,18 +182,25 @@ c8-[ c c-] c8") (internal-class-name . "Event") (types . (general-music fingering-event event)) )) + (BeamForbidEvent + . ( + (description . "Specify that a note may not auto-beamed ") + (internal-class-name . "Event") + (types . (general-music event beam-forbid-event)) + )) (GlissandoEvent . ( - (description . "Start a glissando on this note.") + (description . "Start a glissando on this note.") (internal-class-name . "Event") (types . (general-music glissando-event event)) )) (GraceMusic . ( - (description . "Interpret the argument as grace notes. ") - - (internal-class-name . "Grace_music") + (description . "Interpret the argument as grace notes. ") + (internal-class-name . "Music_wrapper") + (start-callback . ,Grace_music::start_callback) + (length . ,(ly:make-moment 0 1)) (iterator-ctor . ,Grace_iterator::constructor) (types . (grace-music music-wrapper-music general-music)) )) @@ -189,9 +210,15 @@ c8-[ c c-] c8") (internal-class-name . "Event") (types . (general-music event note-grouping-event)) )) + (HarmonicEvent + . ( + (description . "Mark a note as harmonic") + (internal-class-name . "Event") + (types . (general-music event harmonic-event)) + )) (HyphenEvent . ( - (description . "A hyphen between lyric syllables.") + (description . "A hyphen between lyric syllables.") (internal-class-name . "Event") (types . (general-music hyphen-event event)) @@ -199,15 +226,17 @@ c8-[ c c-] c8") (KeyChangeEvent . ( - (description . "Change the key signature. Syntax: @code{\\key } @var{name} @var{scale}.") + (description . "Change the key signature. + +Syntax: @code{\\key } @var{name} @var{scale}.") - (internal-class-name . "Key_change_ev") + (internal-class-name . "Event") (types . (general-music key-change-event event)) )) (LigatureEvent . ( - (description . "(docme).") + (description . "(docme).") (internal-class-name . "Event") (span-type . ligature) @@ -216,17 +245,31 @@ c8-[ c c-] c8") (LyricCombineMusic . ( - (description . "Align lyrics to the start of notes. -Syntax @var{\\addlyrics }@var{music} @var{lyrics}.") + (description . "Align lyrics to the start of notes. + +Syntax @var{\\oldaddlyrics }@var{music} @var{lyrics}.") - (internal-class-name . "Lyric_combine_music") + (internal-class-name . "Music") (types . (general-music lyric-combine-music)) + (length-callback . ,Lyric_combine_music::length_callback) + (start-callback . ,Music_sequence::first_start_callback) (iterator-ctor . ,Lyric_combine_music_iterator::constructor) )) + + (NewLyricCombineMusic + . ( + (description . "Align lyrics to the start of notes. + +Syntax @var{\\lyricsto }@var{voicename} @var{lyrics}.") + (internal-class-name . "Music") + (length . ,(ly:make-moment 0 1)) + (types . (general-music lyric-combine-music)) + (iterator-ctor . ,New_lyric_combine_music_iterator::constructor) + )) (LyricEvent . ( - (description . "A lyric syllable. Must be entered in lyrics mode, i.e. + (description . "A lyric syllable. Must be entered in lyrics mode, i.e. @code{\\lyrics @{ twinkle4 twinkle4 @} } .") (internal-class-name . "Event") @@ -234,7 +277,9 @@ Syntax @var{\\addlyrics }@var{music} @var{lyrics}.") )) (MarkEvent . ( - (description . "Insert a rehearsal mark. Syntax: @code{\mark} @var{marker}, + (description . "Insert a rehearsal mark. + +Syntax: @code{\\mark} @var{marker}, e.g. @code{\\mark \"A\"}.") (internal-class-name . "Event") @@ -242,22 +287,34 @@ e.g. @code{\\mark \"A\"}.") )) (MelismaPlayingEvent . ( - (description . "Used internally to signal melismas") + (description . "Used internally to signal melismas.") (internal-class-name . "Event") (types . (general-music melisma-playing-event event)) )) + (ManualMelismaEvent + . ( + (description . "Start or stop a melisma. + +Syntax: @code{c4\\melisma d\\melismaEnd}.") + (internal-class-name . "Event") + (types . (general-music melisma-span-event event)) + )) (MultiMeasureRestEvent . ( - (description . "Rests that may be compressed into Multi rests. Syntax + (description . "Rests that may be compressed into Multi rests. + +Syntax @code{R2.*4} for 4 measures in 3/4 time. Note the capital R.") (internal-class-name . "Event") - (types . (general-music event span-event multi-measure-rest-event)) + (types . (general-music event rhythmic-event multi-measure-rest-event)) )) (MultiMeasureTextEvent . ( - (description . "Texts on mm rests. Syntax + (description . "Texts on mm rests. + +Syntax @code{R-\\markup @{ \\roman \"bla\" @}}. Note the explicit font switch.") (internal-class-name . "Event") (types . (general-music event multi-measure-text-event)) @@ -265,14 +322,14 @@ e.g. @code{\\mark \"A\"}.") (Music . ( - (description . "Generic type for music expressions.") + (description . "Generic type for music expressions.") (internal-class-name . "Music") (types . (general-music)) )) (NoteEvent . ( - (description . "A note.") + (description . "A note.") (internal-class-name . "Event") (types . (general-music event note-event rhythmic-event melodic-event)) @@ -280,60 +337,58 @@ e.g. @code{\\mark \"A\"}.") (OverrideProperty . ( - (description . "Extend the definition of a graphical object. + (description . "Extend the definition of a graphical object. SYNTAX @code{\\propery Foo.Bar \\override} @var{SYMBOL} = @var{VALUE} ") - (internal-class-name . "Music") (types . (general-music layout-instruction)) (iterator-ctor . , Push_property_iterator::constructor) )) - (PartCombineMusic . ( - (description . "Combine two parts on a staff, either merged or + (description . "Combine two parts on a staff, either merged or as separate voices.") - - (internal-class-name . "Simultaneous_music") + (internal-class-name . "Music") + (length-callback . ,Music_sequence::maximum_length_callback) + (start-callback . ,Music_sequence::minimum_start_callback) (types . (general-music part-combine-music)) - (iterator-ctor . ,Part_combine_music_iterator::constructor) + (iterator-ctor . ,Part_combine_iterator::constructor) )) - (PhrasingSlurEvent . ( - (description . "Start or end phrasing slur. Syntax NOTE \\( and \\) NOTE") + (description . "Start or end phrasing slur. + +Syntax NOTE \\( and \\) NOTE") (internal-class-name . "Event") (types . (general-music span-event phrasing-slur-event)) )) (PropertySet . ( - (description . "Set a context property. + (description . "Set a context property. -Syntax: @code{\property @var{context}.@var{prop} = @var{scheme-val}}.") +Syntax: @code{\\property @var{context}.@var{prop} = @var{scheme-val}}.") (internal-class-name . "Music") (types . (layout-instruction general-music)) (iterator-ctor . ,Property_iterator::constructor) - ) - ) - + )) + (PropertyUnset . ( - (description . "Remove the definition of a context @code{\property}.") + (description . "Remove the definition of a context @code{\\property}.") (internal-class-name . "Music") (types . (layout-instruction general-music)) (iterator-ctor . ,Property_unset_iterator::constructor) - ) - ) + )) (PesOrFlexaEvent . ( - (description . "Within a ligature, mark the previous and the + (description . "Within a ligature, mark the previous and the following note to form a pes (if melody goes up) or a flexa (if melody goes down).") @@ -341,23 +396,31 @@ goes down).") (types . (general-music pes-or-flexa-event event)) )) + (QuoteMusic + . ( + (description . "Quote preprocessed snippets of music. ") + (internal-class-name . "Music_wrapper") + (iterator-ctor . ,Quote_iterator::constructor) + (types . (general-music)) + )) + (RelativeOctaveCheck . ((description . "Check if a pitch is in the correct octave.") - (internal-class-name . "Relative_octave_check") + (internal-class-name . "Music") + (to-relative-callback . ,Relative_octave_check::relative_callback) (types . (general-music relative-octave-check)) )) (RepeatedMusic . ( - (description . "Repeat music in different ways") - - (type . repeated-music) + (description . "Repeat music in different ways") + (type . repeated-music) (types . (general-music repeated-music)) )) (Event . ( - (description . "Atomic music event.") + (description . "Atomic music event.") (internal-class-name . "Event") (types . (general-music event)) @@ -365,65 +428,110 @@ goes down).") (RestEvent . ( - (description . "A Rest. Syntax @code{r4} for a quarter rest. ") + (description . "A Rest. + +Syntax @code{r4} for a quarter rest. ") (internal-class-name . "Event") (types . (general-music event rhythmic-event rest-event)) )) + (RevertProperty + . ( + (description . "The opposite of @ref{OverrideProperty}: remove a +previously added property from a graphical object definition + ") + + (internal-class-name . "Music") + (types . (general-music layout-instruction)) + (iterator-ctor . , Pop_property_iterator::constructor) + )) + (SequentialMusic . ( - (description . "Music expressions concatenated. Syntax \\sequential @{..@} or simply @{..@} .") + (description . "Music expressions concatenated. + +Syntax \\sequential @{..@} or simply @{..@} .") - (internal-class-name . "Sequential_music") + (internal-class-name . "Music") + (length-callback . ,Music_sequence::cumulative_length_callback) + (start-callback . ,Music_sequence::first_start_callback) (iterator-ctor . ,Sequential_music_iterator::constructor) (types . (general-music sequential-music)) )) (MultiMeasureRestMusicGroup . ( - (description . "Like sequential-music, but specifically intended -to group start-mmrest, skip, stop-mmrest sequence. Syntax @code{R2.*5} for 5 measures in 3/4 time.") - (internal-class-name . "Sequential_music") + (description . "Like sequential-music, but specifically intended +to group start-mmrest, skip, stop-mmrest sequence. + +Syntax @code{R2.*5} for 5 measures in 3/4 time.") + (internal-class-name . "Music") + (length-callback . ,Music_sequence::cumulative_length_callback) + (start-callback . ,Music_sequence::first_start_callback) (iterator-ctor . ,Sequential_music_iterator::constructor) (types . (general-music sequential-music)) )) + + (SoloOneEvent + . ( + (description . "Print Solo.1") + (internal-class-name . "Event") + (part-combine-status . solo1) + (types . (general-music event part-combine-event)) + )) + (SoloTwoEvent + . ( + (description . "Print Solo.2") + (internal-class-name . "Event") + (part-combine-status . solo2) + (types . (general-music event part-combine-event)) + )) + (UnisonoEvent + . ((description . "Print a2") + (internal-class-name . "Event") + (part-combine-status . unisono) + (types . (general-music event part-combine-event)))) (SimultaneousMusic . ( - (description . "Music playing together. + (description . "Music playing together. SYNTAX @code{ \\simultaneous @{ .. @}} or < .. >.") - (internal-class-name . "Simultaneous_music") + (internal-class-name . "Music") (iterator-ctor . ,Simultaneous_music_iterator::constructor) + (start-callback . ,Music_sequence::minimum_start_callback) + (length-callback . ,Music_sequence::maximum_length_callback) + (to-relative-callback . ,Music_sequence::simultaneous_relative_callback) (types . (general-music simultaneous-music)) )) (SlurEvent . ( - (description . "Start or end slur. Syntax NOTE( and )NOTE") + (description . "Start or end slur. + +Syntax NOTE( and )NOTE") (internal-class-name . "Event") (types . (general-music span-event slur-event)) )) - (RevertProperty + (StartPlayingEvent . ( - (description . "The opposite of @ref{OverrideProperty}: remove a -previously added property from a graphical object definition - ") + (description . "Used internally to signal beginning of notes.") - (internal-class-name . "Music") - (types . (general-music layout-instruction)) - (iterator-ctor . , Pop_property_iterator::constructor) + (internal-class-name . "Event") + (types . (general-music event start-playing-event)) )) - + (OutputPropertySetMusic . ( - (description . "Set grob properties in objects -individually. Syntax @code{\\outputproperty @var{predicate} @var{prop} + (description . "Set grob properties in objects +individually. + +Syntax @code{\\outputproperty @var{predicate} @var{prop} = @var{val}}.") (internal-class-name . "Music") @@ -438,92 +546,105 @@ individually. Syntax @code{\\outputproperty @var{predicate} @var{prop} (types . (general-music span-event text-span-event)) )) - (TranslatorChange + (TrillSpanEvent . ( - (description . "Change staffs in Piano staff. Syntax @code{\\translator Staff = @var{new-id}}.") - (internal-class-name . "Music") - (iterator-ctor . , Change_iterator::constructor) - (types . (general-music translator-change-instruction)) + (description . "Start a trill spanner tr~~~") + (internal-class-name . "Event") + (types . (general-music span-event trill-span-event)) )) (TimeScaledMusic . ( - (description . "Multiply durations, as in tuplets. Syntax @code{\\times @var{fraction} @var{music}}, e.g. + (description . "Multiply durations, as in tuplets. + +Syntax @code{\\times @var{fraction} @var{music}}, e.g. @code{\\times 2/3 @{ ... @}} for triplets. ") - (internal-class-name . "Time_scaled_music") + (internal-class-name . "Music_wrapper") (iterator-ctor . ,Time_scaled_music_iterator::constructor) (types . (time-scaled-music music-wrapper-music general-music)) )) (TransposedMusic . ( - (description . "Music that has been transposed.") - (internal-class-name . "Transposed_music") + (description . "Music that has been transposed.") + (internal-class-name . "Music_wrapper") + (to-relative-callback . ,Relative_octave_music::no_relative_callback) (types . (music-wrapper-music general-music transposed-music)) )) (UntransposableMusic . ( - (description . "Music that can not be transposed.") - - (internal-class-name . "Untransposable_music") + (description . "Music that can not be transposed.") + (to-relative-callback . ,Relative_octave_music::no_relative_callback) + (untransposable . #t) + (internal-class-name . "Music_wrapper") (types . (music-wrapper-music general-music untransposable-music)) )) (UnrelativableMusic . ( - (description . "Music that can not be converted from relative to absolute notation. + (description . "Music that can not be converted from relative to absolute notation. For example, transposed music.") - (internal-class-name . "Un_relativable_music") + (to-relative-callback . ,Relative_octave_music::no_relative_callback) + (internal-class-name . "Music_wrapper") (types . (music-wrapper-music general-music unrelativable-music)) )) (RelativeOctaveMusic . ( - (description . "Music that was entered in relative octave notation.") - - (internal-class-name . "Relative_octave_music") + (description . "Music that was entered in relative octave notation.") + (to-relative-callback . ,Relative_octave_music::relative_callback) + (internal-class-name . "Music_wrapper") (types . (music-wrapper-music general-music relative-octave-music)) )) (EventChord . ( - (description . "Internally used to group a set of events.") - (internal-class-name . "Event_chord") + (description . "Internally used to group a set of events.") + (internal-class-name . "Music") (iterator-ctor . ,Event_chord_iterator::constructor) + (length-callback . ,Music_sequence::maximum_length_callback) + (to-relative-callback . ,Music_sequence::event_chord_relative_callback) (types . (general-music event-chord simultaneous-music)) - ) - ) + )) (ScriptEvent . ( - (description . "Add an articulation mark to a note. ") + (description . "Add an articulation mark to a note. ") (internal-class-name . "Event") (types . (general-music event)) )) - (NonEventSkip + (SkipMusic . ( - (description . "Filler that takes up duration, but does not print anything. This also does not create any event-accepting contexts. ") + (description . "Filler that takes up duration, does not print anything, and also +does not create staffs or voices implicitly. + + + +Syntax: @code{\\skip }@var{duration}.") (internal-class-name . "Music") - (length . ,ly:music-duration-length) + (length-callback . ,ly:music-duration-length) (iterator-ctor . ,Simple_music_iterator::constructor) (types . (general-music event rhythmic-event skip-event)) )) - + (SkipEvent . ( - (description . "Filler that takes up duration, but does not print anything.") + (description . "Filler that takes up duration, but does not print anything. + + + +Syntax: @code{s}@var{duration}") (internal-class-name . "Event") (types . (general-music event rhythmic-event skip-event)) )) - (SpanEvent . ( - (description . "Event for anything that is started at a different time than stopped.") + (description . "Event for anything that is started at a different time than stopped.") (internal-class-name . "Event") (types . (general-music event)) @@ -552,7 +673,9 @@ For example, transposed music.") (StringNumberEvent . ( - (description . "Specify on which string to play this note. Syntax: @code{\\@var{number}}.") + (description . "Specify on which string to play this note. + +Syntax: @code{\\@var{number}}.") (internal-class-name . "Event") (types . (general-music string-number-event event)) @@ -560,29 +683,23 @@ For example, transposed music.") (MetronomeChangeEvent . ( - (description . "Change tempo setting (in beats per minute).") + (description . "Change tempo setting (in beats per minute).") (internal-class-name . "Event") (types . (general-music metronome-change-event tempo-event event)) )) (TextScriptEvent . ( - (description . "") + (description . "") (internal-class-name . "Event") (types . (general-music script-event text-script-event event)) )) (TieEvent . ( - (description . "A tie. Entered as @code{~}.") + (description . "A tie. Entered as @var{note}-~.") (internal-class-name . "Event") (types . (general-music tie-event event)) )) - (NewTieEvent - . ( - (description . "A tie. Entered as @var{note}-~.") - (internal-class-name . "Event") - (types . (general-music new-tie-event event)) - )) (TremoloEvent . ( (description . "Un measured tremolo.") @@ -592,7 +709,9 @@ For example, transposed music.") (VoiceSeparator . ( - (description . "Separate polyphonic voices in simultaneous music. Syntax: @code{\\\\}") + (description . "Separate polyphonic voices in simultaneous music. + +Syntax: @code{\\\\}") (internal-class-name . "Music") (types . (separator general-music)) @@ -601,52 +720,52 @@ For example, transposed music.") (VoltaRepeatedMusic . ( (iterator-ctor . ,Volta_repeat_iterator::constructor) - (internal-class-name . "Repeated_music") + (internal-class-name . "Music") (description . "") - (start-moment-function . ,Repeated_music::first_start) - (length . ,Repeated_music::volta_music_length) + (start-callback . ,Repeated_music::first_start) + (length-callback . ,Repeated_music::volta_music_length) (types . (general-music repeated-music volta-repeated-music)) )) (UnfoldedRepeatedMusic . ( (iterator-ctor . ,Unfolded_repeat_iterator::constructor) - (description . "") - (start-moment-function . ,Repeated_music::first_start) - (internal-class-name . "Repeated_music") + (description . "") + (start-callback . ,Repeated_music::first_start) + (internal-class-name . "Music") (types . (general-music repeated-music unfolded-repeated-music)) - (length . ,Repeated_music::unfolded_music_length) + (length-callback . ,Repeated_music::unfolded_music_length) )) (PercentRepeatedMusic . ( - (internal-class-name . "Repeated_music") - (description . "Repeats encoded by percents.") + (internal-class-name . "Music") + (description . "Repeats encoded by percents.") (iterator-ctor . ,Percent_repeat_iterator::constructor) - (start-moment-function . ,Repeated_music::first_start) - (length . ,Repeated_music::unfolded_music_length) + (start-callback . ,Repeated_music::first_start) + (length-callback . ,Repeated_music::unfolded_music_length) (types . (general-music repeated-music percent-repeated-music)) )) (TremoloRepeatedMusic . ( (iterator-ctor . ,Chord_tremolo_iterator::constructor) - (description . "Repeated notes denoted by tremolo beams.") - (internal-class-name . "Repeated_music") - (start-moment-function . ,Repeated_music::first_start) + (description . "Repeated notes denoted by tremolo beams.") + (internal-class-name . "Music") + (start-callback . ,Repeated_music::first_start) ;; the length of the repeat is handled by shifting the note logs - (length . ,Repeated_music::folded_music_length) + (length-callback . ,Repeated_music::folded_music_length) (types . (general-music repeated-music tremolo-repeated-music)) )) (FoldedRepeatedMusic . ( - (internal-class-name . "Repeated_music") - (description . "Repeats with alternatives placed in parallel. ") - (iterator-ctor . ,Folded_repeat_iterator::constructor) - (start-moment-function . ,Repeated_music::minimum_start) - (length . ,Repeated_music::folded_music_length) + (internal-class-name . "Music") + (description . "Repeats with alternatives placed in parallel. ") + (iterator-ctor . ,Folded_repeat_iterator::constructor) + (start-callback . ,Repeated_music::minimum_start) + (length-callback . ,Repeated_music::folded_music_length) (types . (general-music repeated-music folded-repeated-music)) )) )) @@ -656,7 +775,6 @@ For example, transposed music.") (define music-name-to-property-table (make-vector 59 '())) - ;; init hash table, ;; transport description to an object property. (set! @@ -665,58 +783,46 @@ For example, transposed music.") (set-object-property! (car x) 'music-description (cdr (assq 'description (cdr x)))) - (let - ((l (cdr x))) - (set! l (assoc-set! l 'name (car x))) - (set! l (assq-remove! l 'description)) - (hashq-set! music-name-to-property-table (car x) l) - (cons (car x) l) - )) + (let ((lst (cdr x))) + (set! lst (assoc-set! lst 'name (car x))) + (set! lst (assq-remove! lst 'description)) + (hashq-set! music-name-to-property-table (car x) lst) + (cons (car x) lst))) music-descriptions)) - - -(define-public (make-music-by-name x) - (if (not (symbol? x)) - (error (format "Not a symbol: ~a" x))) - (let* - ( - (props (hashq-ref music-name-to-property-table x '())) - (name (if (pair? props) - (cdr (assoc 'internal-class-name props)) - (error "Can not find music object" x))) - ) - - (if (eq? props '()) - (ly:warn (format "Could not find music type `~a'" x))) - (ly:make-bare-music name props) - )) - - +(define-public (make-music name . music-properties) + "Create a music object of given name, and set its properties +according to `music-properties', a list of alterning property symbols +and values. E.g: + (make-music 'OverrideProperty + 'symbol 'Stem + 'grob-property 'thickness + 'grob-value (* 2 1.5))" + (if (not (symbol? name)) + (error (format "Not a symbol: ~a" name))) + (let ((props (hashq-ref music-name-to-property-table name '()))) + (if (not (pair? props)) + (error "Can not find music object" name)) + (let ((m (ly:make-bare-music (cdr (assoc 'internal-class-name props)) props))) + (define (set-props mus-props) + (if (and (not (null? mus-props)) + (not (null? (cdr mus-props)))) + (begin + (set! (ly:music-property m (car mus-props)) (cadr mus-props)) + (set-props (cddr mus-props))))) + (set-props music-properties) + m))) (define-public (make-repeated-music name) - (let* - ( - (handle (assoc - name - '(("volta" . VoltaRepeatedMusic) - ("unfold" . UnfoldedRepeatedMusic) - ("percent" . PercentRepeatedMusic) - ("tremolo" . TremoloRepeatedMusic) - ("fold" . FoldedRepeatedMusic) - ))) - (music-name - (if (pair? handle) - (cdr handle) - (begin - (ly:warn - (string-append "Unknown repeat type `" name - "'\nSee music-types.scm for supported repeats")) - 'VoltaRepeatedMusic) - ) - ) - ) - - (make-music-by-name music-name) - )) + (let* ((handle (assoc name '(("volta" . VoltaRepeatedMusic) + ("unfold" . UnfoldedRepeatedMusic) + ("percent" . PercentRepeatedMusic) + ("tremolo" . TremoloRepeatedMusic) + ("fold" . FoldedRepeatedMusic)))) + (music-name (if (pair? handle) + (cdr handle) + (begin + (ly:warn "Unknown repeat type `~S'\nSee music-types.scm for supported repeats" name) + 'VoltaRepeatedMusic)))) + (make-music music-name)))