]> git.donarmstrong.com Git - lilypond.git/blobdiff - scm/define-music-types.scm
Merge branch 'master' of git+ssh://jneem@git.sv.gnu.org/srv/git/lilypond
[lilypond.git] / scm / define-music-types.scm
index 96a4b37076e308ef090b0b764d4978ead9576ce2..c421eefdf58690f562e9765d58e686441123e4df 100644 (file)
@@ -2,11 +2,24 @@
 ;;;;
 ;;;;  source file of the GNU LilyPond music typesetter
 ;;;; 
 ;;;;
 ;;;;  source file of the GNU LilyPond music typesetter
 ;;;; 
-;;;; (c)  1998--2004 Han-Wen Nienhuys <hanwen@cs.uu.nl>
+;;;; (c) 1998--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
 ;;;;                Jan Nieuwenhuizen <janneke@gnu.org>
 
 ;; TODO: should link back into user manual.
 
 ;;;;                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
   `(
     (AbsoluteDynamicEvent
 (define-public music-descriptions
   `(
     (AbsoluteDynamicEvent
 
 Syntax: @var{note}@code{\\x},
 where x is one of \\ppp, \\pp, \\p, \\mp, \\mf, \\f, \\ff, \\fff.")
 
 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))
        ))
        (types . (general-music event dynamic-event absolute-dynamic-event))
        ))
+
+    (AnnotateOutputEvent
+     . ((description . "Print an annotation of an output element.")
+       (types . (general-music event annotate-output-event))
+       ))
+       
     (ApplyContext
      . (
        (description . "Call the argument with the current context during interpreting phase")
     (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 . "
     (ApplyOutputEvent
      . (
        (description . "
@@ -32,15 +50,13 @@ 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 
      . (
@@ -48,7 +64,6 @@ arguments to func are 1. the grob, 2. the originating context,
 
 Syntax:
 @var{note}-@code{\\arpeggio}")
 
 Syntax:
 @var{note}-@code{\\arpeggio}")
-       (internal-class-name .  "Event")
        (types . (general-music arpeggio-event event))
        ))
 
        (types . (general-music arpeggio-event event))
        ))
 
@@ -64,89 +79,73 @@ Syntax:
 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
      . (
        (description .  "Used for making voices that switch between piano staves automatically.")
        (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)
+       (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
      . (
        (description .  "Print a bass-figure text")
 
        ))
     (BassFigureEvent
      . (
        (description .  "Print a bass-figure text")
 
-       (internal-class-name . "Event")
        (types . (general-music event rhythmic-event bass-figure-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")
     (BeamEvent
      . (
        (description .  "Starts or stops a beam.  
 
 Syntax for manual control:
 c8-[ c c-] c8")
-       (internal-class-name . "Event")
        (types . (general-music event beam-event span-event))
        ))
        (types . (general-music event beam-event span-event))
        ))
-    (BreakEvent
-     . (
-       (description .  "Create a line break, Syntax: \\break or page break, Syntax: \\pagebreak.")
+    (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:
 @var{note}\\breathe.")
 
      . (
        (description .  "Creates a `breath mark' or `comma'.  
 
 Syntax:
 @var{note}\\breathe.")
 
-       (internal-class-name . "Event")
        (types . (general-music event breathing-event))
        )) 
        (types . (general-music event breathing-event))
        )) 
-    (BusyPlayingEvent
-     . (
-       (description .  "Used internally to signal beginning and ending of notes.")
-
-       (internal-class-name . "Event")
-       (types . (general-music event busy-playing-event))
-       ))
     (ContextChange
      . (
        (description .  "Change staffs in Piano staff. 
 
 Syntax @code{\\translator Staff = @var{new-id}}.")
     (ContextChange
      . (
        (description .  "Change staffs in Piano staff. 
 
 Syntax @code{\\translator Staff = @var{new-id}}.")
-       (internal-class-name . "Music")
-       (iterator-ctor . , Change_iterator::constructor)
+       (iterator-ctor . , ly:change-iterator::constructor)
        (types . (general-music translator-change-instruction))
        ))
 
     (ClusterNoteEvent
        (types . (general-music translator-change-instruction))
        ))
 
     (ClusterNoteEvent
-     . (
-       (description .  "A note that is part of a cluster.")
-       (internal-class-name . "Event")
+     . ((description . "A note that is part of a cluster.")
 
 
-                                       ; not a note-event, to ensure that Note_engraver doesn't eat it. 
+       ;; not a note-event, to ensure that Note_engraver doesn't eat it. 
        (types . (general-music cluster-note-event melodic-event rhythmic-event event))
        ))
     
     (ContextSpeccedMusic
      . (
        (description .  "Interpret the argument music within a specific context.")
        (types . (general-music cluster-note-event melodic-event rhythmic-event event))
        ))
     
     (ContextSpeccedMusic
      . (
        (description .  "Interpret the argument music within a specific context.")
-       (iterator-ctor . ,Context_specced_music_iterator::constructor)
-       (internal-class-name . "Music_wrapper")
+       (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))
        ))
     
@@ -158,69 +157,76 @@ 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
      . (
        (description .  "See @ref{CrescendoEvent}.")
 
        )) 
     (DecrescendoEvent
      . (
        (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
      . (
        (description .  "Extend lyrics.")
 
        ))
     
     (ExtenderEvent
      . (
        (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))
        ))
     (BeamForbidEvent
      . (
        (description . "Specify that a note may not auto-beamed ")
        (types . (general-music fingering-event event))
        ))
     (BeamForbidEvent
      . (
        (description . "Specify that a note may not auto-beamed ")
-       (internal-class-name . "Event")
        (types . (general-music event beam-forbid-event))
        ))
     (GlissandoEvent
      . (
        (description .  "Start  a glissando on this note.")
        (types . (general-music event beam-forbid-event))
        ))
     (GlissandoEvent
      . (
        (description .  "Start  a glissando on this note.")
-       (internal-class-name . "Event")
        (types . (general-music glissando-event event))
        ))
     
     (GraceMusic
      . (
        (description .  "Interpret the argument as grace notes. ")
        (types . (general-music glissando-event event))
        ))
     
     (GraceMusic
      . (
        (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)
+       (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))
        ))
     (HarmonicEvent
      . (
        (description . "Mark a note as harmonic")
        (types . (general-music event note-grouping-event))
        ))
     (HarmonicEvent
      . (
        (description . "Mark a note as harmonic")
-       (internal-class-name . "Event")
        (types . (general-music event harmonic-event))
        ))
     (HyphenEvent
      . (
        (description .  "A hyphen between lyric syllables.")
 
        (types . (general-music event harmonic-event))
        ))
     (HyphenEvent
      . (
        (description .  "A hyphen between lyric syllables.")
 
-       (internal-class-name . "Event")
        (types . (general-music hyphen-event event))
        ))
     
        (types . (general-music hyphen-event event))
        ))
     
@@ -229,42 +235,36 @@ Syntax: @var{note}\\cr
        (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")
+       (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))
        ))
-    
-    (LyricCombineMusic
+    (LineBreakEvent
      . (
      . (
-       (description .  "Align lyrics to the start of notes.
-
-Syntax @var{\\oldaddlyrics }@var{music} @var{lyrics}.")
-
-       (internal-class-name . "Music")
-       (types . (general-music lyric-combine-music))
-       (length-callback . ,Lyric_combine_music::length_callback)
-       (start-callback . ,Music_sequence::first_start_callback)
-       (iterator-ctor . ,Lyric_combine_music_iterator::constructor)
+       (description .  "Allow, forbid or force a line break.")
+       (types . (general-music line-break-event break-event event))
        ))
     
        ))
     
-    (NewLyricCombineMusic
+    (LyricCombineMusic
      . (
        (description .  "Align lyrics to the start of notes.
 
 Syntax @var{\\lyricsto }@var{voicename} @var{lyrics}.")
      . (
        (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))
+       (length . ,ZERO-MOMENT)
        (types . (general-music lyric-combine-music))
        (types . (general-music lyric-combine-music))
-       (iterator-ctor . ,New_lyric_combine_music_iterator::constructor)
+       (iterator-ctor . ,ly:lyric-combine-music-iterator::constructor)
        ))
 
     (LyricEvent
        ))
 
     (LyricEvent
@@ -272,7 +272,6 @@ Syntax @var{\\lyricsto }@var{voicename} @var{lyrics}.")
        (description .  "A lyric syllable. Must be entered in lyrics mode, i.e.
 @code{\\lyrics @{ twinkle4 twinkle4 @} } .")
 
        (description .  "A lyric syllable. Must be entered in lyrics mode, i.e.
 @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
@@ -282,31 +281,22 @@ Syntax @var{\\lyricsto }@var{voicename} @var{lyrics}.")
 Syntax: @code{\\mark} @var{marker},
 e.g. @code{\\mark \"A\"}.")
 
 Syntax: @code{\\mark} @var{marker},
 e.g. @code{\\mark \"A\"}.")
 
-       (internal-class-name . "Event")
        (types . (general-music mark-event event))
        ))
        (types . (general-music mark-event event))
        ))
-    (MelismaPlayingEvent
-     . (
-       (description .  "Used internally to signal melismas.")
-       (internal-class-name . "Event")
-       (types . (general-music melisma-playing-event event))
-       ))
-    (ManualMelismaEvent
+    (MultiMeasureRestMusic
      . (
      . (
-       (description .  "Start or stop a melisma.
+       (description . "Rests that may be compressed into Multi rests. 
 
 
-Syntax: @code{c4\\melisma d\\melismaEnd}.")
-       (internal-class-name . "Event")
-       (types . (general-music melisma-span-event event))
+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")
+       (description . "Used internally by MultiMeasureRestMusic to signal rests")
        (types . (general-music event rhythmic-event multi-measure-rest-event))
        ))
     
        (types . (general-music event rhythmic-event multi-measure-rest-event))
        ))
     
@@ -316,7 +306,6 @@ Syntax
 
 Syntax
 @code{R-\\markup @{ \\roman \"bla\" @}}. Note the explicit font switch.")
 
 Syntax
 @code{R-\\markup @{ \\roman \"bla\" @}}. Note the explicit font switch.")
-       (internal-class-name . "Event")
        (types . (general-music event multi-measure-text-event))
        ))
 
        (types . (general-music event multi-measure-text-event))
        ))
 
@@ -324,14 +313,11 @@ Syntax
      . (
        (description .  "Generic type for music expressions.")
 
      . (
        (description .  "Generic type for music expressions.")
 
-       (internal-class-name . "Music")
        (types . (general-music)) 
        ))
     (NoteEvent
      . (
        (description .  "A note.")
        (types . (general-music)) 
        ))
     (NoteEvent
      . (
        (description .  "A note.")
-
-       (internal-class-name . "Event")
        (types . (general-music event note-event rhythmic-event melodic-event))
        ))
     
        (types . (general-music event note-event rhythmic-event melodic-event))
        ))
     
@@ -341,30 +327,36 @@ Syntax
 
 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
      . (
        (description .  "Combine two parts on a staff, either merged or
 as separate voices.")
        ))
     (PartCombineMusic
      . (
        (description .  "Combine two parts on a staff, either merged or
 as separate voices.")
-       (internal-class-name . "Simultaneous_music")
-       (length-callback . ,Music_sequence::maximum_length_callback)
-       (start-callback . ,Music_sequence::minimum_start_callback)
+       (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_iterator::constructor)
+       (iterator-ctor . ,ly:part-combine-iterator::constructor)
        ))
     (PhrasingSlurEvent
      . (
        (description . "Start or end phrasing slur. 
 
 Syntax NOTE \\(  and \\) NOTE")
        ))
     (PhrasingSlurEvent
      . (
        (description . "Start or end phrasing slur. 
 
 Syntax NOTE \\(  and \\) NOTE")
-       (internal-class-name . "Event")
-       (types . (general-music span-event phrasing-slur-event))
+       (types . (general-music span-event event phrasing-slur-event))
        ))
     
     (PropertySet
        ))
     
     (PropertySet
@@ -372,66 +364,64 @@ Syntax NOTE \\(  and \\) NOTE")
        (description .  "Set a context property.
 
 Syntax: @code{\\property @var{context}.@var{prop} = @var{scheme-val}}.")
        (description .  "Set a context property.
 
 Syntax: @code{\\property @var{context}.@var{prop} = @var{scheme-val}}.")
-       (internal-class-name . "Music")
-       (types . (layout-instruction general-music))
-       (iterator-ctor . ,Property_iterator::constructor)
+       (types . (layout-instruction-event general-music))
+       (iterator-ctor . ,ly:property-iterator::constructor)
        ))
 
     (PropertyUnset
      . (
        (description .  "Remove the definition of a context @code{\\property}.")
 
        ))
 
     (PropertyUnset
      . (
        (description .  "Remove the definition of a context @code{\\property}.")
 
-       (internal-class-name . "Music")
-       (types . (layout-instruction general-music))
-       (iterator-ctor . ,Property_unset_iterator::constructor)
+       (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 rhythmic-event))
+       ))
+
     (PesOrFlexaEvent
      . (
        (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).")
 
     (PesOrFlexaEvent
      . (
        (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).")
 
-       (internal-class-name . "Event")
        (types . (general-music pes-or-flexa-event event))
        ))
 
     (QuoteMusic
      . (
        (description . "Quote preprocessed snippets of music. ")
        (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))
+       (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.")
        ))
     
     (RelativeOctaveCheck
      . ((description . "Check if a pitch is in the correct octave.")
-       (internal-class-name . "Relative_octave_check")
+       (to-relative-callback . ,ly:relative-octave-check::relative-callback)
        (types . (general-music relative-octave-check))
        ))
     
     (RepeatedMusic
      . (
        (description .  "Repeat music in different ways")
        (types . (general-music relative-octave-check))
        ))
     
     (RepeatedMusic
      . (
        (description .  "Repeat music in different ways")
-       (type .  repeated-music)
        (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
      . (
        (description .  "A Rest. 
 
 Syntax @code{r4} for a quarter rest. ")
 
     (RestEvent
      . (
        (description .  "A Rest. 
 
 Syntax @code{r4} for a quarter rest. ")
 
-       (internal-class-name . "Event")
        (types . (general-music event rhythmic-event rest-event))
        )) 
     (RevertProperty
        (types . (general-music event rhythmic-event rest-event))
        )) 
     (RevertProperty
@@ -440,9 +430,8 @@ Syntax @code{r4} for a quarter rest. ")
 previously added property from a graphical object definition
  ")
 
 previously added property from a graphical object definition
  ")
 
-       (internal-class-name . "Music")
-       (types . (general-music layout-instruction))
-       (iterator-ctor . ,      Pop_property_iterator::constructor)
+       (types . (general-music layout-instruction-event))
+       (iterator-ctor . ,      ly:pop-property-iterator::constructor)
        ))
 
     (SequentialMusic
        ))
 
     (SequentialMusic
@@ -451,45 +440,29 @@ previously added property from a graphical object definition
 
 Syntax \\sequential @{..@} or simply @{..@} .")
 
 
 Syntax \\sequential @{..@} or simply @{..@} .")
 
-       (internal-class-name . "Music")
-       (length-callback . ,Music_sequence::cumulative_length_callback)
-       (start-callback . ,Music_sequence::first_start_callback)
-       (iterator-ctor . ,Sequential_music_iterator::constructor)
-       (types . (general-music sequential-music))
-       ))
-    
-    (MultiMeasureRestMusicGroup
-     . (
-       (description .  "Like sequential-music, but specifically intended
-to group start-mmrest, skip, stop-mmrest sequence. 
-
-Syntax @code{R2.*5} for 5 measures in 3/4 time.")
-       (internal-class-name . "Music")
-       (length-callback . ,Music_sequence::cumulative_length_callback)
-       (start-callback . ,Music_sequence::first_start_callback)
-       (iterator-ctor . ,Sequential_music_iterator::constructor)
+       (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))
        ))
 
     (SoloOneEvent
      . (
        (description . "Print Solo.1")
        (types . (general-music sequential-music))
        ))
 
     (SoloOneEvent
      . (
        (description . "Print Solo.1")
-       (internal-class-name . "Event")
        (part-combine-status . solo1)
        (part-combine-status . solo1)
-       (types . (general-music event part-combine-event))
+       (types . (general-music event part-combine-event solo-one-event))
        ))
     (SoloTwoEvent
      . (
        (description . "Print Solo.2")
        ))
     (SoloTwoEvent
      . (
        (description . "Print Solo.2")
-       (internal-class-name . "Event")
        (part-combine-status . solo2)
        (part-combine-status . solo2)
-       (types . (general-music event part-combine-event))
+       (types . (general-music event part-combine-event solo-two-event))
        ))
     (UnisonoEvent
      . ((description . "Print a2")
        ))
     (UnisonoEvent
      . ((description . "Print a2")
-       (internal-class-name .  "Event")
        (part-combine-status . unisono)
        (part-combine-status . unisono)
-       (types . (general-music event part-combine-event))))
+       (types . (general-music event part-combine-event unisono-event))))
     
     (SimultaneousMusic
      . (
     
     (SimultaneousMusic
      . (
@@ -497,12 +470,12 @@ Syntax @code{R2.*5} for 5 measures in 3/4 time.")
 
 SYNTAX
 
 
 SYNTAX
 
-@code{ \\simultaneous @{ .. @}} or < .. >.")
+@code{ \\simultaneous @{ .. @}} or << .. >>.")
 
 
-       (internal-class-name . "Simultaneous_music")
-       (iterator-ctor . ,Simultaneous_music_iterator::constructor)
-       (start-callback . ,Music_sequence::minimum_start_callback)
-       (length-callback . ,Music_sequence::maximum_length_callback)
+       (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))
        ))
@@ -511,46 +484,38 @@ SYNTAX
      . (
        (description . "Start or end slur. 
 
      . (
        (description . "Start or end slur. 
 
-Syntax NOTE(    and )NOTE")
-       (internal-class-name . "Event")
-       (types . (general-music span-event slur-event))
-       ))
-
-    (StartPlayingEvent
-     . (
-       (description .  "Used internally to signal beginning of notes.")
+Syntax NOTE(    and NOTE) ")
 
 
-       (internal-class-name . "Event")
-       (types . (general-music event start-playing-event))
+       (types . (general-music span-event event slur-event))
        ))
     
        ))
     
-    (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))
-       ))
+    (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))
        ))
     
     (TrillSpanEvent
      . (
        (description . "Start a trill spanner tr~~~")
        ))
     
     (TrillSpanEvent
      . (
        (description . "Start a trill spanner tr~~~")
-       (internal-class-name . "Event")
-       (types . (general-music span-event trill-span-event))
+       (types . (general-music span-event event trill-span-event))
        ))
     
        ))
     
+    (TransposedMusic
+     . (
+       (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))
+       ))
+
     (TimeScaledMusic
      . (
        (description .  "Multiply durations, as in tuplets. 
     (TimeScaledMusic
      . (
        (description .  "Multiply durations, as in tuplets. 
@@ -558,57 +523,41 @@ Syntax @code{\\outputproperty @var{predicate} @var{prop}
 Syntax @code{\\times @var{fraction} @var{music}}, e.g.
 @code{\\times 2/3 @{ ... @}} for triplets.
  ")
 Syntax @code{\\times @var{fraction} @var{music}}, e.g.
 @code{\\times 2/3 @{ ... @}} for triplets.
  ")
-       (internal-class-name . "Music_wrapper")
-       (iterator-ctor . ,Time_scaled_music_iterator::constructor)
+       (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))
        ))
        (types . (time-scaled-music music-wrapper-music general-music))
        ))
-    
-    (TransposedMusic
-     . (
-       (description .  "Music that has been transposed.")
-       (internal-class-name . "Transposed_music")
-       (types . (music-wrapper-music general-music transposed-music))
-       ))
 
 
-    (UntransposableMusic
+    (TupletSpanEvent
      . (
      . (
-       (description .  "Music that can not be transposed.")
-       (untransposable . #t)
-       (internal-class-name . "Untransposable_music")
-       (types . (music-wrapper-music general-music untransposable-music)) 
-       ))
+       (description .  "Used internally to signal where tuplet brackets start and stop.")
+       (types . (tuplet-span-event span-event event general-music))
+       ))
 
     (UnrelativableMusic
      . (
        (description .  "Music that can not be converted from relative to absolute notation.
 For example, transposed music.")
 
     (UnrelativableMusic
      . (
        (description .  "Music that can not be converted from relative to absolute notation.
 For example, transposed music.")
-       (internal-class-name . "Un_relativable_music")
+       (to-relative-callback . ,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
      . (
        (description .  "Music that was entered in relative octave notation.")
        (types . (music-wrapper-music general-music unrelativable-music))
        ))
 
     (RelativeOctaveMusic
      . (
        (description .  "Music that was entered in relative octave notation.")
-
-       (internal-class-name . "Relative_octave_music")
+       (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 . "Event_chord")
-       (iterator-ctor . ,Event_chord_iterator::constructor)
-       (length-callback . ,Music_sequence::maximum_length_callback)
-       (types . (general-music event-chord simultaneous-music))
-       )
-     )
-    
     (ScriptEvent
      . (
        (description .  "Add an articulation mark to a note. ")
 
     (ScriptEvent
      . (
        (description .  "Add an articulation mark to a note. ")
 
-       (internal-class-name . "Event")
        (types . (general-music event))
        ))
 
        (types . (general-music event))
        ))
 
@@ -620,9 +569,8 @@ does not create staffs or voices implicitly.
 
 
 Syntax: @code{\\skip }@var{duration}.")
 
 
 Syntax: @code{\\skip }@var{duration}.")
-       (internal-class-name . "Music")
        (length-callback . ,ly:music-duration-length)
        (length-callback . ,ly:music-duration-length)
-       (iterator-ctor . ,Simple_music_iterator::constructor)
+       (iterator-ctor . ,ly:simple-music-iterator::constructor)
        (types . (general-music event rhythmic-event skip-event))
        ))
     
        (types . (general-music event rhythmic-event skip-event))
        ))
     
@@ -634,36 +582,36 @@ Syntax: @code{\\skip }@var{duration}.")
 
 Syntax: @code{s}@var{duration}")
 
 
 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
      . (
        (description .  "Event for anything that is started at a different time than stopped.")
 
     (SpanEvent
      . (
        (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
@@ -672,95 +620,93 @@ Syntax: @code{s}@var{duration}")
 
 Syntax: @code{\\@var{number}}.")
 
 
 Syntax: @code{\\@var{number}}.")
 
-       (internal-class-name . "Event")
        (types . (general-music string-number-event event))
        )) 
 
        (types . (general-music string-number-event event))
        )) 
 
-    (MetronomeChangeEvent
+    (StrokeFingerEvent
      . (
      . (
-       (description .  "Change tempo setting (in beats per minute).")
-       (internal-class-name . "Event")
-       (types . (general-music metronome-change-event tempo-event event))
-       ))
+       (description .  "Specify with which finger to pluck a string. 
+
+Syntax: @code{\\rightHandFinger @var{text}}.")
+
+       (types . (general-music stroke-finger-event event))
+       )) 
     
     (TextScriptEvent
      . (
        (description .  "")
     
     (TextScriptEvent
      . (
        (description .  "")
-       (internal-class-name . "Event")
        (types . (general-music script-event text-script-event event))
        )) 
     (TieEvent
      . (
        (description .  "A tie.  Entered as @var{note}-~.")
        (types . (general-music script-event text-script-event event))
        )) 
     (TieEvent
      . (
        (description .  "A tie.  Entered as @var{note}-~.")
-       (internal-class-name . "Event")
        (types . (general-music tie-event event))
        ))
     (TremoloEvent
      . (
        (description . "Un measured tremolo.")
        (types . (general-music tie-event event))
        ))
     (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
      . (
        (description .  "Separate polyphonic voices in simultaneous music. 
 
 Syntax: @code{\\\\}")
 
     (VoiceSeparator
      . (
        (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-callback .  ,Repeated_music::first_start)
-       (length-callback . ,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)
+       (iterator-ctor . ,ly:unfolded-repeat-iterator::constructor)
        (description .  "")
        (description .  "")
-       (start-callback .  ,Repeated_music::first_start)
-       (internal-class-name . "Repeated_music")
+       (start-callback .  ,ly:repeated-music::first-start)
        (types . (general-music repeated-music unfolded-repeated-music))
        (types . (general-music repeated-music unfolded-repeated-music))
-       (length-callback . ,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.")
        (description .  "Repeats encoded by percents.")
-       (iterator-ctor . ,Percent_repeat_iterator::constructor)
-       (start-callback .  ,Repeated_music::first_start)
-       (length-callback . ,Repeated_music::unfolded_music_length)
+       (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)
+       (iterator-ctor . ,ly:chord-tremolo-iterator::constructor)
        (description .  "Repeated notes denoted by tremolo beams.")
        (description .  "Repeated notes denoted by tremolo beams.")
-       (internal-class-name . "Repeated_music")
-       (start-callback .  ,Repeated_music::first_start)
+       (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-callback . ,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. ")
        (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)
+       (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))
        ))
     ))
@@ -768,7 +714,7 @@ Syntax: @code{\\\\}")
 (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.
@@ -785,7 +731,7 @@ Syntax: @code{\\\\}")
          (cons (car x) lst)))
       music-descriptions))
 
          (cons (car x) lst)))
       music-descriptions))
 
-(define-public (make-music name . music-properties)
+(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:
   "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:
@@ -794,11 +740,11 @@ and values. E.g:
              'grob-property 'thickness
              'grob-value (* 2 1.5))"
   (if (not (symbol? name))
              'grob-property 'thickness
              'grob-value (* 2 1.5))"
   (if (not (symbol? name))
-      (error (format "Not a symbol: ~a" name)))
+      (ly:error (_ "symbol expected: ~S") name))
   (let ((props (hashq-ref music-name-to-property-table name '())))
     (if (not (pair? props))
   (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)))
+       (ly:error (_ "cannot 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))))
       (define (set-props mus-props)
        (if (and (not (null? mus-props))
                 (not (null? (cdr mus-props))))
@@ -817,7 +763,8 @@ and values. E.g:
         (music-name (if (pair? handle)
                         (cdr handle)
                         (begin
         (music-name (if (pair? handle)
                         (cdr handle)
                         (begin
-                          (ly:warn "Unknown repeat type `~S'\nSee music-types.scm for supported repeats" name)
+                          (ly:warning (_ "unknown repeat type `~S'") name)
+                          (ly:warning (_ "See music-types.scm for supported repeats"))
                           'VoltaRepeatedMusic))))
     (make-music music-name)))
 
                           'VoltaRepeatedMusic))))
     (make-music music-name)))