]> git.donarmstrong.com Git - lilypond.git/blobdiff - scm/define-music-types.scm
* scm/backend-library.scm: update email address.
[lilypond.git] / scm / define-music-types.scm
index d0fdce20c8b4a0a97e80c1cb3dd64d41838da019..fb0cc99d258917ff97fe15f00a8821a40721d249 100644 (file)
@@ -1,49 +1,62 @@
+;;;; define-music-types.scm --
+;;;;
+;;;;  source file of the GNU LilyPond music typesetter
+;;;; 
+;;;; (c) 1998--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+;;;;                Jan Nieuwenhuizen <janneke@gnu.org>
+
+;; TODO: should link back into user manual.
+
+(define (mm-rest-child-list music)
+  "Generate events for multimeasure rests, to be used by the sequential-iterator"
+  (let ((location (ly:music-property music 'origin))
+       (duration (ly:music-property music 'duration)))
+    (list (make-music 'BarCheck
+                     'origin location)
+         (make-event-chord (cons (make-music 'MultiMeasureRestEvent
+                                             'origin location
+                                             'duration duration)
+                                 (ly:music-property music 'articulations)))
+         (make-music 'BarCheck
+                     'origin location))))
 
 (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.\@\}")
-       (internal-class-name . "Event")
+       (description . "Creates a dynamic mark.
+
+Syntax: @var{note}@code{\\x},
+where x is one of \\ppp, \\pp, \\p, \\mp, \\mf, \\f, \\ff, \\fff.")
        (types . (general-music event dynamic-event absolute-dynamic-event))
        ))
     (ApplyContext
      . (
        (description . "Call the argument with the current context during interpreting phase")
        (types . (general-music event dynamic-event absolute-dynamic-event))
        ))
     (ApplyContext
      . (
        (description . "Call the argument with the current context during interpreting phase")
-       (internal-class-name . "Music")
        (types . (general-music apply-context))
        (types . (general-music apply-context))
-       (iterator-ctor . ,Apply_context_iterator::constructor)
+       (iterator-ctor . ,ly:apply-context-iterator::constructor)
        ))
     (ApplyOutputEvent
      . (
        (description . "
 Call the argument with all current grobs during interpreting phase.
 
        ))
     (ApplyOutputEvent
      . (
        (description . "
 Call the argument with all current grobs during interpreting phase.
 
-SYNTAX
+Syntax
 
 
-\applyoutput FUNC
+\\applyOutput #'Context 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.
 
 ")
-       (internal-class-name . "Event")
-       (iterator-ctor . ,Output_property_music_iterator::constructor)
-       (types . (general-music layout-instruction))
+       (types . (general-music event apply-output-event))
        ))
     (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")
        (types . (general-music arpeggio-event event))
        ))
 
        (types . (general-music arpeggio-event event))
        ))
 
@@ -51,582 +64,640 @@ 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
 @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
+@code{_}, or LilyPond's choice (no direction specified)), and where Y
 is an articulation (such as @code{-.}, @code{->}, @code{\\tenuto},
 @code{\\downbow}).  See the user manual for details.")
 
 is an articulation (such as @code{-.}, @code{->}, @code{\\tenuto},
 @code{\\downbow}).  See the user manual for details.")
 
-       (internal-class-name . "Event")
        (types . (general-music event articulation-event script-event))
        )) 
     (AutoChangeMusic
      . (
        (types . (general-music event articulation-event script-event))
        )) 
     (AutoChangeMusic
      . (
-       (description .  "Used for making voices that switch between piano staves automatically.")
-
-       (internal-class-name . "Music_wrapper")
-       (iterator-ctor . ,Auto_change_iterator::constructor)
+       (description .  "Used for making voices that switch between piano staves automatically.")
+       (iterator-ctor . ,ly:auto-change-iterator::constructor)
+       (start-callback . ,ly:music-wrapper::start-callback)
+       (length-callback . ,ly:music-wrapper::length-callback)
        (types . (general-music music-wrapper-music auto-change-instruction))
        ))
     (BarCheck
      . (
        (description .
                     "Check whether this music coincides with the start of the measure.")
        (types . (general-music music-wrapper-music auto-change-instruction))
        ))
     (BarCheck
      . (
        (description .
                     "Check whether this music coincides with the start of the measure.")
-       (internal-class-name . "Music")
        (types . (general-music bar-check))
        (types . (general-music bar-check))
-       (iterator-ctor . ,Bar_check_iterator::constructor)
+       (iterator-ctor . ,ly:bar-check-iterator::constructor)
        ))
     (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
      . (
        (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")
 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.")
+    (BendAfterEvent
+     . ((description . "A drop/fall/doit jazz articulation")
+       (types . (general-music bend-after-event event))))
 
 
-       (internal-class-name . "Event")
-       (types . (general-music break-event event))
-       ))
-    (BreathingSignEvent
+    (BreathingEvent
      . (
      . (
-       (description .  "Creates a `breath mark' or `comma'.  Syntax:
+       (description .  "Creates a `breath mark' or `comma'.  
+
+Syntax:
 @var{note}\\breathe.")
 
 @var{note}\\breathe.")
 
-       (internal-class-name . "Event")
        (types . (general-music event breathing-event))
        )) 
        (types . (general-music event breathing-event))
        )) 
-    (BusyPlayingEvent
+    (ContextChange
      . (
      . (
-       (description .  "Used internally to signal beginning and ending of notes.")
+       (description .  "Change staffs in Piano staff. 
 
 
-       (internal-class-name . "Event")
-       (types . (general-music event busy-playing-event))
-       )) 
-    (ClusterEvent
-     . (
-       (description .  "Begins or ends a cluster.")
-       (internal-class-name . "Event")
-       (types . (general-music cluster-event span-event event))
-       )) 
+Syntax @code{\\translator Staff = @var{new-id}}.")
+       (iterator-ctor . , ly:change-iterator::constructor)
+       (types . (general-music translator-change-instruction))
+       ))
+
+    (ClusterNoteEvent
+     . ((description . "A note that is part of a cluster.")
+
+       ;; 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
      . (
     (ContextSpeccedMusic
      . (
-       (description .  "Interpret the argument music within a specific context.")
-       (iterator-ctor . ,Context_specced_music_iterator::constructor)
-       (internal-class-name . "Music_wrapper")
+       (description .  "Interpret the argument music within a specific context.")
+       (iterator-ctor . ,ly:context-specced-music-iterator::constructor)
+       (length-callback . ,ly:music-wrapper::length-callback)
+       (start-callback . ,ly:music-wrapper::start-callback)
        (types . (context-specification general-music music-wrapper-music))
        ))
        (types . (context-specification general-music music-wrapper-music))
        ))
+    
     (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.).")
 
-       (internal-class-name . "Event")
-       (types . (general-music dynamic-event crescendo-event event))
+       (types . (general-music span-event span-dynamic-event crescendo-event event))
        )) 
     (DecrescendoEvent
      . (
        )) 
     (DecrescendoEvent
      . (
-       (description .  "See @ref{CrescendoEvent}.")
+       (description .  "See @ref{CrescendoEvent}.")
 
 
-       (internal-class-name . "Event")
-       (types . (general-music dynamic-event decrescendo-event event))
+       (types . (general-music span-event span-dynamic-event decrescendo-event event))
        ))
        ))
+    
     (ExtenderEvent
      . (
     (ExtenderEvent
      . (
-       (description .  "Extend lyrics.")
+       (description .  "Extend lyrics.")
 
 
-       (internal-class-name . "Event")
        (types . (general-music extender-event event))
        ))
        (types . (general-music extender-event event))
        ))
-    (FingerEvent
+
+    (Event
+     . (
+       (description .  "Atomic music event.")
+       (types . (general-music event))
+       ))
+        
+    (EventChord
+     . (
+       (description .  "Internally used to group a set of events.")
+       (iterator-ctor . ,ly:event-chord-iterator::constructor)
+       (length-callback . ,ly:music-sequence::maximum-length-callback)
+       (to-relative-callback . ,ly:music-sequence::event-chord-relative-callback)
+       (types . (general-music event-chord simultaneous-music))
+       ))
+
+    
+    (FingeringEvent
      . (
        (description . "Specify what finger to use for this note.")
      . (
        (description . "Specify what finger to use for this note.")
-       (internal-class-name . "Event")
        (types . (general-music fingering-event event))
        ))
        (types . (general-music fingering-event event))
        ))
+    (BeamForbidEvent
+     . (
+       (description . "Specify that a note may not auto-beamed ")
+       (types . (general-music event beam-forbid-event))
+       ))
     (GlissandoEvent
      . (
     (GlissandoEvent
      . (
-       (description .  "Start  a glissando on this note.")
-       (internal-class-name . "Event")
+       (description .  "Start  a glissando on this note.")
        (types . (general-music glissando-event event))
        ))
     
     (GraceMusic
      . (
        (types . (general-music glissando-event event))
        ))
     
     (GraceMusic
      . (
-       (description .  "Interpret the argument as grace notes. ")
-
-       (internal-class-name . "Grace_music")
-       (iterator-ctor . ,Grace_iterator::constructor)
+       (description .  "Interpret the argument as grace notes. ")
+       (start-callback . ,ly:grace-music::start-callback)
+       (length . ,ZERO-MOMENT)
+       (iterator-ctor . ,ly:grace-iterator::constructor)
        (types . (grace-music music-wrapper-music general-music))
        ))
     (NoteGroupingEvent
      . (
        (description . "Start or stop grouping brackets.")
        (types . (grace-music music-wrapper-music general-music))
        ))
     (NoteGroupingEvent
      . (
        (description . "Start or stop grouping brackets.")
-       (internal-class-name . "Event")
        (types . (general-music event note-grouping-event))
        ))
        (types . (general-music event note-grouping-event))
        ))
+    (HarmonicEvent
+     . (
+       (description . "Mark a note as harmonic")
+       (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))
        ))
     
     (KeyChangeEvent
      . (
        (types . (general-music hyphen-event event))
        ))
     
     (KeyChangeEvent
      . (
-       (description .  "Change the key signature. Syntax: @code{\\key } @var{name} @var{scale}.")
+       (description .  "Change the key signature. 
 
 
-       (internal-class-name . "Key_change_ev")
+Syntax: @code{\\key } @var{name} @var{scale}.")
+       (to-relative-callback . ,(lambda (x p) p))
        (types . (general-music key-change-event event))
        ))
        (types . (general-music key-change-event event))
        ))
-    
+    (LaissezVibrerEvent
+     . ((description . "Don't damp this chord.
+
+Syntax: @var{note}\\laissezVibrer.")
+
+       (types . (general-music event laissez-vibrer-event))
+       ))
     (LigatureEvent
      . (
     (LigatureEvent
      . (
-       (description .  "(docme).")
-
-       (internal-class-name . "Event")
+       (description .  "Start or end a ligature.")
        (span-type . ligature)
        (types . (general-music span-event ligature-event event))
        ))
        (span-type . ligature)
        (types . (general-music span-event ligature-event event))
        ))
+    (LineBreakEvent
+     . (
+       (description .  "Allow, forbid or force a line break.")
+       (types . (general-music line-break-event break-event event))
+       ))
     
     (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.
 
 
-       (internal-class-name . "Lyric_combine_music")
+Syntax @var{\\lyricsto }@var{voicename} @var{lyrics}.")
+       (length . ,ZERO-MOMENT)
        (types . (general-music lyric-combine-music))
        (types . (general-music lyric-combine-music))
-       (iterator-ctor . ,Lyric_combine_music_iterator::constructor)
+       (iterator-ctor . ,ly: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 @} } .")
 
 @code{\\lyrics @{ twinkle4 twinkle4 @} } .")
 
-       (internal-class-name . "Event")
        (types . (general-music rhythmic-event lyric-event event))
        ))
     (MarkEvent
      . (
        (types . (general-music rhythmic-event lyric-event event))
        ))
     (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\"}.")
 
 e.g. @code{\\mark \"A\"}.")
 
-       (internal-class-name . "Event")
        (types . (general-music mark-event event))
        ))
        (types . (general-music mark-event event))
        ))
-    (MelismaPlayingEvent
+    (ManualMelismaEvent
      . (
      . (
-       (description .  "Used internally to signal melismas")
-       (internal-class-name . "Event")
-       (types . (general-music melisma-playing-event event))
+       (description .  "Start or stop a melisma.
+
+Syntax: @code{c4\\melisma d\\melismaEnd}.")
+       (types . (general-music melisma-span-event event))
        ))
        ))
-    
+
+    (MultiMeasureRestMusic
+     . (
+       (description . "Rests that may be compressed into Multi rests. 
+
+Syntax
+@code{R2.*4} for 4 measures in 3/4 time.")
+       (iterator-ctor . ,ly:sequential-iterator::constructor)
+       (elements-callback . ,mm-rest-child-list)
+       (types . (general-music multi-measure-rest))
+       ))
+
     (MultiMeasureRestEvent
      . (
     (MultiMeasureRestEvent
      . (
-       (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))
+       (description . "Used internally by MultiMeasureRestMusic to signal rests")
+       (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.")
 @code{R-\\markup @{ \\roman \"bla\" @}}. Note the explicit font switch.")
-       (internal-class-name . "Event")
        (types . (general-music event multi-measure-text-event))
        ))
 
     (Music
      . (
        (types . (general-music event multi-measure-text-event))
        ))
 
     (Music
      . (
-       (description .  "Generic type for music expressions.")
+       (description .  "Generic type for music expressions.")
 
 
-       (internal-class-name . "Music")
        (types . (general-music)) 
        ))
     (NoteEvent
      . (
        (types . (general-music)) 
        ))
     (NoteEvent
      . (
-       (description .  "A note.")
-
-       (internal-class-name . "Event")
+       (description .  "A note.")
        (types . (general-music event note-event rhythmic-event melodic-event))
        ))
     
     (OverrideProperty
      . (
        (types . (general-music event note-event rhythmic-event melodic-event))
        ))
     
     (OverrideProperty
      . (
-       (description .  "Extend the definition of a graphical object.
+       (description .  "Extend the definition of a graphical object.
 
 SYNTAX
 
 
 SYNTAX
 
-@code{\\propery Foo.Bar \\override} @var{SYMBOL} = @var{VALUE}
-
+@code{\\override [ @var{Ctxt} . ] @var{Obj} @var{prop} = @var{val}}
 ")
 ")
-
-       (internal-class-name . "Music")
-       (types . (general-music layout-instruction))
-       (iterator-ctor . ,      Push_property_iterator::constructor)
+       (types . (general-music layout-instruction-event override-property-event))
+       (iterator-ctor . ,ly:push-property-iterator::constructor)
+       ))
+    (PageBreakEvent
+     . (
+       (description .  "Allow, forbid or force a page break.")
+       (types . (general-music break-event page-break-event event))
+       ))
+    (PageTurnEvent
+     . (
+       (description .  "Allow, forbid or force a page turn.")
+       (types . (general-music break-event page-turn-event event))
        ))
        ))
-
     (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")
+       (length-callback . ,ly:music-sequence::maximum-length-callback)
+       (start-callback . ,ly: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 . ,ly:part-combine-iterator::constructor)
        ))
        ))
-    
     (PhrasingSlurEvent
      . (
     (PhrasingSlurEvent
      . (
-       (description . "Start or end phrasing slur. Syntax NOTE \\(  and \\) NOTE")
-       (internal-class-name . "Event")
-       (types . (general-music span-event phrasing-slur-event))
+       (description . "Start or end phrasing slur. 
+
+Syntax NOTE \\(  and \\) NOTE")
+       (types . (general-music span-event event phrasing-slur-event))
        ))
     
     (PropertySet
      . (
        ))
     
     (PropertySet
      . (
-       (description .  "Set a context property.
+       (description .  "Set a context property.
+
+Syntax: @code{\\property @var{context}.@var{prop} = @var{scheme-val}}.")
+       (types . (layout-instruction-event general-music))
+       (iterator-ctor . ,ly:property-iterator::constructor)
+       ))
 
 
-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
      . (
     (PropertyUnset
      . (
-       (description .  "Remove the definition of a context @code{\property}.")
+       (description .  "Remove the definition of a context @code{\\property}.")
+
+       (types . (layout-instruction-event general-music))
+       (iterator-ctor . ,ly:property-unset-iterator::constructor)
+       ))
+
+    (PercentEvent
+     . (
+       (description .  "Used internally to signal percent repeats.")
+       (types . (general-music event percent-event))
+       ))
 
 
-       (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).")
 
-       (internal-class-name . "Event")
        (types . (general-music pes-or-flexa-event event))
        ))
 
        (types . (general-music pes-or-flexa-event event))
        ))
 
+    (QuoteMusic
+     . (
+       (description . "Quote preprocessed snippets of music. ")
+       (iterator-ctor . ,ly:music-wrapper-iterator::constructor)
+       (length-callback . ,ly:music-wrapper::length-callback)
+       (start-callback . ,ly:music-wrapper::start-callback)
+       (types . (general-music music-wrapper-music))
+       ))
+    
+    (RelativeOctaveCheck
+     . ((description . "Check if a pitch is in the correct octave.")
+       (to-relative-callback . ,ly:relative-octave-check::relative-callback)
+       (types . (general-music relative-octave-check))
+       ))
+    
     (RepeatedMusic
      . (
     (RepeatedMusic
      . (
-       (description .  "Repeat music in different ways")
-
-       (type .  repeated-music)
+       (description .  "Repeat music in different ways")
        (types . (general-music repeated-music))
        ))
        (types . (general-music repeated-music))
        ))
-    
-    (Event
+    (RepeatTieEvent
      . (
      . (
-       (description .  "Atomic music event.")
-
-       (internal-class-name . "Event")
-       (types . (general-music event))
+       (description . "Ties for starting a second volta bracket.")
+       (types . (general-music event repeat-tie-event))
        ))
        ))
-    
     (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))
        )) 
        (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
+ ")
+
+       (types . (general-music layout-instruction-event))
+       (iterator-ctor . ,      ly:pop-property-iterator::constructor)
+       ))
+
     (SequentialMusic
      . (
     (SequentialMusic
      . (
-       (description .  "Music expressions concatenated. Syntax \\sequential @{..@} or simply @{..@} .")
+       (description .  "Music expressions concatenated. 
 
 
-       (internal-class-name . "Sequential_music")
-       (iterator-ctor . ,Sequential_music_iterator::constructor)
+Syntax \\sequential @{..@} or simply @{..@} .")
+
+       (length-callback . ,ly:music-sequence::cumulative-length-callback)
+       (start-callback . ,ly:music-sequence::first-start-callback)
+       (elements-callback . ,(lambda (m) (ly:music-property m 'elements)))
+       (iterator-ctor . ,ly:sequential-iterator::constructor)
        (types . (general-music sequential-music))
        ))
        (types . (general-music sequential-music))
        ))
-    
-    (MultiMeasureRestMusicGroup
+
+    (SoloOneEvent
      . (
      . (
-       (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")
-       (iterator-ctor . ,Sequential_music_iterator::constructor)
-       (types . (general-music sequential-music))
+       (description . "Print Solo.1")
+       (part-combine-status . solo1)
+       (types . (general-music event part-combine-event solo-one-event))
        ))
        ))
+    (SoloTwoEvent
+     . (
+       (description . "Print Solo.2")
+       (part-combine-status . solo2)
+       (types . (general-music event part-combine-event solo-two-event))
+       ))
+    (UnisonoEvent
+     . ((description . "Print a2")
+       (part-combine-status . unisono)
+       (types . (general-music event part-combine-event unisono-event))))
     
     (SimultaneousMusic
      . (
     
     (SimultaneousMusic
      . (
-       (description .  "Music playing together.
+       (description .  "Music playing together.
 
 SYNTAX
 
 
 SYNTAX
 
-@code{ \\simultaneous @{ .. @}} or < .. >.")
+@code{ \\simultaneous @{ .. @}} or << .. >>.")
 
 
-       (internal-class-name . "Simultaneous_music")
-       (iterator-ctor . ,Simultaneous_music_iterator::constructor)
+       (iterator-ctor . ,ly:simultaneous-music-iterator::constructor)
+       (start-callback . ,ly:music-sequence::minimum-start-callback)
+       (length-callback . ,ly:music-sequence::maximum-length-callback)
+       (to-relative-callback . ,ly:music-sequence::simultaneous-relative-callback)
        
        (types . (general-music simultaneous-music))
        ))
        
        (types . (general-music simultaneous-music))
        ))
+    
     (SlurEvent
      . (
     (SlurEvent
      . (
-       (description . "Start or end slur. Syntax NOTE(  and )NOTE")
-       (internal-class-name . "Event")
-       (types . (general-music span-event slur-event))
-       ))
+       (description . "Start or end slur. 
 
 
-    (RevertProperty
-     . (
-       (description .  "The opposite of @ref{OverrideProperty}: remove a
-previously added property from a graphical object definition
- ")
+Syntax NOTE(    and NOTE) ")
 
 
-       (internal-class-name . "Music")
-       (types . (general-music layout-instruction))
-       (iterator-ctor . ,      Pop_property_iterator::constructor)
-       ))
-
-    (OutputPropertySetMusic
-     . (
-       (description .  "Set grob properties in objects
-individually. Syntax @code{\\outputproperty @var{predicate} @var{prop}
-= @var{val}}.")
-
-       (internal-class-name . "Music")
-       (iterator-ctor . ,Output_property_music_iterator::constructor)
-       (types . (general-music layout-instruction))
+       (types . (general-music span-event event slur-event))
        ))
     
        ))
     
+    (StaffSpanEvent
+     . ((description . "Start or  stop a staff symbol.")
+       (types . (general-music event span-event staff-span-event))
+     ))
+    
     (TextSpanEvent
      . (
        (description . "Start a text spanner like 8va.....|")
     (TextSpanEvent
      . (
        (description . "Start a text spanner like 8va.....|")
-       (internal-class-name . "Event")
-       (types . (general-music span-event text-span-event))
+       (types . (general-music span-event 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))
-       ))
-    
-    (TimeScaledMusic
-     . (
-       (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")
-       (iterator-ctor . ,Time_scaled_music_iterator::constructor)
-       (types . (time-scaled-music music-wrapper-music general-music))
+       (description . "Start a trill spanner tr~~~")
+       (types . (general-music span-event event trill-span-event))
        ))
     
     (TransposedMusic
      . (
        ))
     
     (TransposedMusic
      . (
-       (description .  "Music that has been transposed.")
-       (internal-class-name . "Transposed_music")
+       (description .  "Music that has been transposed.")
+       (iterator-ctor . ,ly:music-wrapper-iterator::constructor)
+       (start-callback . ,ly:music-wrapper::start-callback)
+       (length-callback . ,ly:music-wrapper::length-callback)
+       (to-relative-callback . ,ly:relative-octave-music::no-relative-callback)
        (types . (music-wrapper-music general-music transposed-music))
        ))
 
        (types . (music-wrapper-music general-music transposed-music))
        ))
 
-    (UntransposableMusic
+    (TimeScaledMusic
      . (
      . (
-       (description .  "Music that can not be transposed.")
+       (description .  "Multiply durations, as in tuplets. 
 
 
-       (internal-class-name . "Untransposable_music")
-       (types . (music-wrapper-music general-music untransposable-music)) 
+Syntax @code{\\times @var{fraction} @var{music}}, e.g.
+@code{\\times 2/3 @{ ... @}} for triplets.
+ ")
+       (length-callback . ,ly:music-wrapper::length-callback)
+       (start-callback . ,ly:music-wrapper::start-callback)
+       (iterator-ctor . ,ly:time-scaled-music-iterator::constructor)
+       (types . (time-scaled-music music-wrapper-music general-music))
        ))
 
        ))
 
+    (TupletSpanEvent
+     . (
+       (description .  "Used internally to signal where tuplet brackets start and stop.")
+       (types . (tuplet-span-event span-event event general-music))
+       ))
+
     (UnrelativableMusic
      . (
     (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 . ,ly:relative-octave-music::no-relative-callback)
+       (iterator-ctor . ,ly:music-wrapper-iterator::constructor)
+       (length-callback . ,ly:music-wrapper::length-callback)
        (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 . ,ly:relative-octave-music::relative-callback)
+       (iterator-ctor . ,ly:music-wrapper-iterator::constructor)
+       (length-callback . ,ly:music-wrapper::length-callback)
+       (start-callback . ,ly:music-wrapper::start-callback)
        (types . (music-wrapper-music general-music relative-octave-music))
        ))
        (types . (music-wrapper-music general-music relative-octave-music))
        ))
-    
-    (EventChord
-     . (
-       (description .  "Internally used to group a set of events.")
-
-       (internal-class-name . "Simultaneous_music")
-       (iterator-ctor . ,Event_chord_iterator::constructor)
-       (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))
        ))
        (types . (general-music event))
        ))
+
+    (SkipMusic
+     . (
+       (description .  "Filler that takes up duration, does not print anything, and also
+does not create staffs or voices implicitly.
+
+
+
+Syntax: @code{\\skip }@var{duration}.")
+       (length-callback . ,ly:music-duration-length)
+       (iterator-ctor . ,ly: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))
        ))
        (types . (general-music event rhythmic-event skip-event))
        ))
-    
+
+    (SpacingSectionEvent
+     . ((description . "Start a new spacing section")
+       (types . (general-music event spacing-section-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))
        ))
     
     (SustainEvent
      . (
        (description . "Depress or release sustain pedal. ")
        (types . (general-music event))
        ))
     
     (SustainEvent
      . (
        (description . "Depress or release sustain pedal. ")
-       (internal-class-name . "Event")
-       (types . (general-music pedal-event sustain-pedal-event))
+       (types . (general-music event pedal-event sustain-event))
        ))
     
     (SostenutoEvent
      . (
        (description . "Depress or release sostenuto pedal. ")
        ))
     
     (SostenutoEvent
      . (
        (description . "Depress or release sostenuto pedal. ")
-       (internal-class-name . "Event")
-       (types . (general-music pedal-event sostenuto-pedal-event))
+       (types . (general-music event pedal-event sostenuto-event))
        ))
     
     (UnaCordaEvent
      . (
        (description . "Depress or release una-corda pedal.")
        ))
     
     (UnaCordaEvent
      . (
        (description . "Depress or release una-corda pedal.")
-       (internal-class-name . "Event")
-       (types . (general-music pedal-event una-corda-pedal-event))
+       (types . (general-music event pedal-event una-corda-event))
        ))
     
     (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))
        )) 
 
        (types . (general-music string-number-event event))
        )) 
 
-    (MetronomeChangeEvent
-     . (
-       (description .  "Change tempo setting (in beats per minute).")
-       (internal-class-name . "Event")
-       (types . (general-music metronome-change-event tempo-event event))
-       ))
-    
     (TextScriptEvent
      . (
     (TextScriptEvent
      . (
-       (description .  "")
-       (internal-class-name . "Event")
+       (description .  "")
        (types . (general-music script-event text-script-event event))
        )) 
     (TieEvent
      . (
        (types . (general-music script-event text-script-event event))
        )) 
     (TieEvent
      . (
-       (description .  "A tie.  Entered as @code{~}.")
-       (internal-class-name . "Event")
+       (description .  "A tie.  Entered as @var{note}-~.")
        (types . (general-music tie-event 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.")
-       (internal-class-name . "Event")
        (types . (general-music event tremolo-event))
        ))
     
        (types . (general-music event tremolo-event))
        ))
     
+    (TremoloSpanEvent
+     . (
+       (description . "Tremolo over two stems")
+       (types . (general-music event span-event tremolo-span-event))
+       ))
+
     (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))
        ))
 
     (VoltaRepeatedMusic
      . (
        (types . (separator general-music))
        ))
 
     (VoltaRepeatedMusic
      . (
-       (iterator-ctor . ,Volta_repeat_iterator::constructor)
-       (internal-class-name . "Repeated_music")
+       (iterator-ctor . ,ly:volta-repeat-iterator::constructor)
        (description . "")
        (description . "")
-       (start-moment-function .  ,Repeated_music::first_start)
-       (length . ,Repeated_music::volta_music_length)
+       (start-callback .  ,ly:repeated-music::first-start)
+       (length-callback . ,ly:repeated-music::volta-music-length)
        (types . (general-music repeated-music volta-repeated-music))
        ))
     
     (UnfoldedRepeatedMusic
      . (
        (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")
+       (iterator-ctor . ,ly:unfolded-repeat-iterator::constructor)
+       (description .  "")
+       (start-callback .  ,ly:repeated-music::first-start)
        (types . (general-music repeated-music unfolded-repeated-music))
        (types . (general-music repeated-music unfolded-repeated-music))
-       (length . ,Repeated_music::unfolded_music_length)
+       (length-callback . ,ly:repeated-music::unfolded-music-length)
        ))
     (PercentRepeatedMusic
      . (
        ))
     (PercentRepeatedMusic
      . (
-       (internal-class-name . "Repeated_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)
+       (description .  "Repeats encoded by percents.")
+       (iterator-ctor . ,ly:percent-repeat-iterator::constructor)
+       (start-callback .  ,ly:repeated-music::first-start)
+       (length-callback . ,ly:repeated-music::unfolded-music-length)
        (types . (general-music repeated-music percent-repeated-music))
        ))
     
     (TremoloRepeatedMusic
      . (
        (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)
+       (iterator-ctor . ,ly:chord-tremolo-iterator::constructor)
+       (description .  "Repeated notes denoted by tremolo beams.")
+       (start-callback .  ,ly: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 . ,ly: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)
+       (description .  "Repeats with alternatives placed in parallel. ")
+       (iterator-ctor  . ,ly:folded-repeat-iterator::constructor)
+       (start-callback .  ,ly:repeated-music::minimum-start)
+       (length-callback . ,ly:repeated-music::folded-music-length)
        (types . (general-music repeated-music folded-repeated-music))
        ))
     ))
        (types . (general-music repeated-music folded-repeated-music))
        ))
     ))
@@ -634,8 +705,7 @@ For example, transposed music.")
 (set! music-descriptions
       (sort music-descriptions alist<?))
 
 (set! music-descriptions
       (sort music-descriptions alist<?))
 
-(define music-name-to-property-table (make-vector 59 '()))
-
+(define-public music-name-to-property-table (make-vector 59 '()))
 
 ;; init hash table,
 ;; transport description to an object property.
 
 ;; init hash table,
 ;; transport description to an object property.
@@ -645,58 +715,47 @@ 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-safe-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))
+      (ly:error (_ "symbol expected: ~S") name))
+  (let ((props (hashq-ref music-name-to-property-table name '())))
+    (if (not (pair? props))
+       (ly:error (_ "can't find music object: ~S") name))
+    (let ((m (ly:make-music 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:warning (_ "unknown repeat type `~S'") name)
+                          (ly:warning (_ "See music-types.scm for supported repeats"))
+                          'VoltaRepeatedMusic))))
+    (make-music music-name)))