]> git.donarmstrong.com Git - lilypond.git/blobdiff - scm/define-music-types.scm
*** empty log message ***
[lilypond.git] / scm / define-music-types.scm
index d981db254eb57a6fa01605aaa089bcb52ca456e2..73ab524a2f762153e92aa0e922212be82e13d0b3 100644 (file)
@@ -1,17 +1,20 @@
+;;;; define-music-types.scm --
+;;;;
+;;;;  source file of the GNU LilyPond music typesetter
+;;;; 
+;;;; (c) 1998--2005 Han-Wen Nienhuys <hanwen@cs.uu.nl>
+;;;;                Jan Nieuwenhuizen <janneke@gnu.org>
+
+;; TODO: should link back into user manual.
 
 (define-public music-descriptions
   `(
 
 (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
      . (
     (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))
        ))
        (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.
 
        (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.
 
 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 
      . (
        ))
     (ArpeggioEvent 
      . (
-       (description .  "Make an arpeggio on this note. Syntax:
+       (description .  "Make an arpeggio on this note.
+
+Syntax:
 @var{note}-@code{\\arpeggio}")
 @var{note}-@code{\\arpeggio}")
-       (internal-class-name .  "Event")
+       (internal-class-name .  "Event")
        (types . (general-music arpeggio-event 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
      . (
     ;; 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},
 @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
      . (
        )) 
     (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)
 
        (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
      . (
        ))
     (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
      . (
 
        (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")
 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
      . (
        ))
     (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
      . (
 
        (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")
 @var{note}\\breathe.")
 
        (internal-class-name . "Event")
@@ -115,24 +118,33 @@ c8-[ c c-] c8")
        )) 
     (BusyPlayingEvent
      . (
        )) 
     (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))
        ))
 
        (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
      . (
     (ClusterNoteEvent
      . (
-       (description .  "A note that is part of a cluster.")
+       (description .  "A note that is part of a cluster.")
        (internal-class-name . "Event")
 
        (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
      . (
        (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))
        (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
      . (
     
     (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.).")
 
 ... @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
      . (
        )) 
     (DecrescendoEvent
      . (
-       (description .  "See @ref{CrescendoEvent}.")
+       (description .  "See @ref{CrescendoEvent}.")
 
        (internal-class-name . "Event")
        (types . (general-music dynamic-event decrescendo-event event))
        ))
 
        (internal-class-name . "Event")
        (types . (general-music dynamic-event decrescendo-event event))
        ))
+    
     (ExtenderEvent
      . (
     (ExtenderEvent
      . (
-       (description .  "Extend lyrics.")
+       (description .  "Extend lyrics.")
 
        (internal-class-name . "Event")
        (types . (general-music extender-event event))
 
        (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))
        ))
        (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
      . (
     (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
      . (
        (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))
        ))
        (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))
        ))
        (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
      . (
     (HyphenEvent
      . (
-       (description .  "A hyphen between lyric syllables.")
+       (description .  "A hyphen between lyric syllables.")
 
        (internal-class-name . "Event")
        (types . (general-music hyphen-event event))
 
        (internal-class-name . "Event")
        (types . (general-music hyphen-event event))
@@ -199,15 +226,17 @@ c8-[ c c-] c8")
     
     (KeyChangeEvent
      . (
     
     (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
      . (
        (types . (general-music key-change-event event))
        ))
     
     (LigatureEvent
      . (
-       (description .  "(docme).")
+       (description .  "(docme).")
 
        (internal-class-name . "Event")
        (span-type . ligature)
 
        (internal-class-name . "Event")
        (span-type . ligature)
@@ -216,17 +245,31 @@ c8-[ c c-] c8")
     
     (LyricCombineMusic
      . (
     
     (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))
        (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)
        ))
        (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
      . (
 
     (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")
 @code{\\lyrics @{ twinkle4 twinkle4 @} } .")
 
        (internal-class-name . "Event")
@@ -234,7 +277,9 @@ Syntax @var{\\addlyrics }@var{music} @var{lyrics}.")
        ))
     (MarkEvent
      . (
        ))
     (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")
 e.g. @code{\\mark \"A\"}.")
 
        (internal-class-name . "Event")
@@ -242,22 +287,34 @@ e.g. @code{\\mark \"A\"}.")
        ))
     (MelismaPlayingEvent
      . (
        ))
     (MelismaPlayingEvent
      . (
-       (description .  "Used internally to signal melismas")
+       (description .  "Used internally to signal melismas.")
        (internal-class-name . "Event")
        (types . (general-music melisma-playing-event event))
        ))
        (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
      . (
     
     (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")
 @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
      . (
        ))
     
     (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))
 @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
      . (
 
     (Music
      . (
-       (description .  "Generic type for music expressions.")
+       (description .  "Generic type for music expressions.")
 
        (internal-class-name . "Music")
        (types . (general-music)) 
        ))
     (NoteEvent
      . (
 
        (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))
 
        (internal-class-name . "Event")
        (types . (general-music event note-event rhythmic-event melodic-event))
@@ -280,60 +337,58 @@ e.g. @code{\\mark \"A\"}.")
     
     (OverrideProperty
      . (
     
     (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}
 
 ")
 
 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)
        ))
        (internal-class-name . "Music")
        (types . (general-music layout-instruction))
        (iterator-ctor . ,      Push_property_iterator::constructor)
        ))
-
     (PartCombineMusic
      . (
     (PartCombineMusic
      . (
-       (description .  "Combine two parts on a staff, either merged or
+       (description .  "Combine two parts on a staff, either merged or
 as separate voices.")
 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))
        (types . (general-music part-combine-music))
-       (iterator-ctor . ,Part_combine_music_iterator::constructor)
+       (iterator-ctor . ,Part_combine_iterator::constructor)
        ))
        ))
-    
     (PhrasingSlurEvent
      . (
     (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
      . (
        (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)
        (internal-class-name . "Music")
        (types . (layout-instruction general-music))
        (iterator-ctor . ,Property_iterator::constructor)
-       )
-     )
-    
+       ))
+
     (PropertyUnset
      . (
     (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)
 
        (internal-class-name . "Music")
        (types . (layout-instruction general-music))
        (iterator-ctor . ,Property_unset_iterator::constructor)
-       )
-     )
+       ))
     
     (PesOrFlexaEvent
      . (
     
     (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).")
 
 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))
        ))
 
        (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.")
     (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
      . (
        (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
      . (
        (types . (general-music repeated-music))
        ))
     
     (Event
      . (
-       (description .  "Atomic music event.")
+       (description .  "Atomic music event.")
 
        (internal-class-name . "Event")
        (types . (general-music event))
 
        (internal-class-name . "Event")
        (types . (general-music event))
@@ -365,65 +428,110 @@ goes down).")
     
     (RestEvent
      . (
     
     (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))
        )) 
 
        (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
      . (
     (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
      . (
        (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))
        ))
        (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
      . (
     
     (SimultaneousMusic
      . (
-       (description .  "Music playing together.
+       (description .  "Music playing together.
 
 SYNTAX
 
 @code{ \\simultaneous @{ .. @}} or < .. >.")
 
 
 SYNTAX
 
 @code{ \\simultaneous @{ .. @}} or < .. >.")
 
-       (internal-class-name . "Simultaneous_music")
+       (internal-class-name . "Music")
        (iterator-ctor . ,Simultaneous_music_iterator::constructor)
        (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
      . (
        
        (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))
        ))
 
        (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
      . (
     (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")
 = @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))
        ))
     
        (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
      . (
        ))
     
     (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.
  ")
 @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
      . (
        (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
      . (
        (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
      . (
        (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.")
 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
      . (
        (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
      . (
        (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)
        (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))
        (types . (general-music event-chord simultaneous-music))
-       )
-     )
+       ))
     
     (ScriptEvent
      . (
     
     (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))
        ))
 
 
        (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")
        (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))
        ))
        (iterator-ctor . ,Simple_music_iterator::constructor)
        (types . (general-music event rhythmic-event skip-event))
        ))
-     
+    
     (SkipEvent
      . (
     (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))
        ))
 
        (internal-class-name . "Event")
        (types . (general-music event rhythmic-event skip-event))
        ))
-    
     (SpanEvent
      . (
     (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))
 
        (internal-class-name . "Event")
        (types . (general-music event))
@@ -552,7 +673,9 @@ For example, transposed music.")
     
     (StringNumberEvent
      . (
     
     (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))
 
        (internal-class-name . "Event")
        (types . (general-music string-number-event event))
@@ -560,29 +683,23 @@ For example, transposed music.")
 
     (MetronomeChangeEvent
      . (
 
     (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
      . (
        (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
      . (
        (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))
        ))
        (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.")
     (TremoloEvent
      . (
        (description . "Un measured tremolo.")
@@ -592,7 +709,9 @@ For example, transposed music.")
     
     (VoiceSeparator
      . (
     
     (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))
 
        (internal-class-name . "Music")
        (types . (separator general-music))
@@ -601,52 +720,52 @@ For example, transposed music.")
     (VoltaRepeatedMusic
      . (
        (iterator-ctor . ,Volta_repeat_iterator::constructor)
     (VoltaRepeatedMusic
      . (
        (iterator-ctor . ,Volta_repeat_iterator::constructor)
-       (internal-class-name . "Repeated_music")
+       (internal-class-name . "Music")
        (description . "")
        (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)
        (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))
        (types . (general-music repeated-music unfolded-repeated-music))
-       (length . ,Repeated_music::unfolded_music_length)
+       (length-callback . ,Repeated_music::unfolded_music_length)
        ))
     (PercentRepeatedMusic
      . (
        ))
     (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)
        (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)
        (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
 
        ;; 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
      . (
        (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))
        ))
     ))
        (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 '()))
 
 
 (define music-name-to-property-table (make-vector 59 '()))
 
-
 ;; init hash table,
 ;; transport description to an object property.
 (set!
 ;; 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))))
        (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))
 
       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)
 
 (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)))