]> git.donarmstrong.com Git - lilypond.git/commitdiff
* lily/include/translator.hh (ENTER_DESCRIPTION): add
authorHan-Wen Nienhuys <hanwen@xs4all.nl>
Sun, 22 Sep 2002 15:38:03 +0000 (15:38 +0000)
committerHan-Wen Nienhuys <hanwen@xs4all.nl>
Sun, 22 Sep 2002 15:38:03 +0000 (15:38 +0000)
events-accepted field.

* scm/music-types.scm: new file.

* lily/parser.yy: put music type initialization into scheme,
similar to grob initialization.  Changes throughout.

122 files changed:
ChangeLog
lily/a2-engraver.cc
lily/accidental-engraver.cc
lily/ambitus-engraver.cc
lily/arpeggio-engraver.cc
lily/auto-beam-engraver.cc
lily/axis-group-engraver.cc
lily/bar-check-iterator.cc
lily/bar-engraver.cc
lily/bar-number-engraver.cc
lily/beam-engraver.cc
lily/break-align-engraver.cc
lily/breathing-sign-engraver.cc
lily/chord-name-engraver.cc
lily/chord-tremolo-engraver.cc
lily/chord.cc
lily/clef-engraver.cc
lily/collision-engraver.cc
lily/completion-note-heads-engraver.cc
lily/context-specced-music.cc
lily/custos-engraver.cc
lily/dot-column-engraver.cc
lily/dynamic-engraver.cc
lily/dynamic-performer.cc
lily/engraver-group-engraver.cc
lily/engraver.cc
lily/extender-engraver.cc
lily/figured-bass-engraver.cc
lily/fingering-engraver.cc
lily/font-size-engraver.cc
lily/forbid-break-engraver.cc
lily/grace-music.cc
lily/grob-pq-engraver.cc
lily/hyphen-engraver.cc
lily/include/grace-music.hh
lily/include/lyric-combine-music.hh
lily/include/music-list.hh
lily/include/music-wrapper.hh
lily/include/music.hh
lily/include/relative-music.hh
lily/include/translator.hh
lily/include/type-swallow-translator.hh
lily/instrument-name-engraver.cc
lily/key-engraver.cc
lily/key-performer.cc
lily/ligature-bracket-engraver.cc
lily/ligature-engraver.cc
lily/lyric-combine-music.cc
lily/lyric-engraver.cc
lily/lyric-performer.cc
lily/lyric-phrasing-engraver.cc
lily/mark-engraver.cc
lily/melisma-engraver.cc
lily/mensural-ligature-engraver.cc
lily/multi-measure-rest-engraver.cc
lily/music-constructor.cc
lily/music-sequence.cc
lily/music-wrapper.cc
lily/music.cc
lily/note-head-line-engraver.cc
lily/note-heads-engraver.cc
lily/note-name-engraver.cc
lily/note-performer.cc
lily/output-property-engraver.cc
lily/parser.yy
lily/part-combine-music.cc
lily/percent-repeat-engraver.cc
lily/performer-group-performer.cc
lily/phrasing-slur-engraver.cc
lily/piano-pedal-engraver.cc
lily/piano-pedal-performer.cc
lily/pitch-squash-engraver.cc
lily/porrectus-engraver.cc
lily/relative-octave-music.cc
lily/repeat-acknowledge-engraver.cc
lily/repeated-music.cc
lily/request-chord.cc
lily/request.cc
lily/rest-collision-engraver.cc
lily/rest-engraver.cc
lily/rhythmic-column-engraver.cc
lily/score-engraver.cc
lily/score-performer.cc
lily/script-column-engraver.cc
lily/script-engraver.cc
lily/separating-line-group-engraver.cc
lily/sequential-music.cc
lily/simultaneous-music.cc
lily/slur-engraver.cc
lily/spacing-engraver.cc
lily/span-arpeggio-engraver.cc
lily/span-bar-engraver.cc
lily/span-dynamic-performer.cc
lily/staff-collecting-engraver.cc
lily/staff-performer.cc
lily/staff-symbol-engraver.cc
lily/stanza-number-engraver.cc
lily/stem-engraver.cc
lily/swallow-perf.cc
lily/system-start-delimiter-engraver.cc
lily/tab-note-heads-engraver.cc
lily/tempo-performer.cc
lily/text-engraver.cc
lily/text-spanner-engraver.cc
lily/thread-devnull-engraver.cc
lily/tie-engraver.cc
lily/tie-performer.cc
lily/time-scaled-music.cc
lily/time-signature-engraver.cc
lily/time-signature-performer.cc
lily/timing-engraver.cc
lily/timing-translator.cc
lily/transposed-music.cc
lily/tuplet-engraver.cc
lily/un-relativable-music.cc
lily/vertical-align-engraver.cc
lily/voice-devnull-engraver.cc
lily/volta-engraver.cc
scm/lily.scm
scm/music-functions.scm
scm/music-property-description.scm
scm/music-types.scm [new file with mode: 0644]

index cd50bb83540af8c22247246340f37829183a9aa4..cf8b439caeaff7fa97c68e62fd893f85001581d9 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,13 @@
+2002-09-22  Han-Wen Nienhuys  <hanwen@cs.uu.nl>
+
+       * lily/include/translator.hh (ENTER_DESCRIPTION): add
+       events-accepted field.
+
+       * scm/music-types.scm: new file.
+
+       * lily/parser.yy: put music type initialization into scheme,
+       similar to grob initialization.  Changes throughout.
+
 2002-09-22  Jan Nieuwenhuizen  <janneke@gnu.org>
 
        * Documentation/user/tutorial.itely: Fix links.
index ac7177ba91cdddc3759853c564185ff00cf5dda4..8c24c57b4bc323a1f78a952615bdf1c2ec3c3980 100644 (file)
@@ -211,6 +211,7 @@ up for the musicexpr called @code{one}, down for the musicexpr called
 
 ",
 /* creats*/       "TextScript",
+/* accepts */     "general-music",
 /* acks  */       "multi-measure-rest-interface
 slur-interface stem-interface tie-interface note-head-interface dynamic-interface text-interface"
 ,/* reads */       "combineParts noDirection soloADue soloText soloIIText aDueText split-interval unison solo unisilence unirhythm",
index 6a566d042341cd3b83b433518399dadea0bfc72d..96d90b21b6f2590c86f59596564ceef0c737b924 100644 (file)
@@ -482,6 +482,7 @@ events.  Due to interaction with ties (which don't come together
 with note heads), this needs to be in a context higher than Tie_engraver.",
                   
               "Accidental",
+/* accepts */     "general-music",
               "rhythmic-head-interface tie-interface arpeggio-interface",
               "localKeySignature extraNatural autoAccidentals autoCautionaries",
                   "localKeySignature");
index 21ec794a5797883fa4b6ffab3f09dbf7a3b794a9..d0086505d1fc2abf281f4f7a90e88c36ef7df32e 100644 (file)
@@ -197,6 +197,7 @@ Ambitus_engraver::finalize ()
 ENTER_DESCRIPTION(Ambitus_engraver,
 /* descr */       "",
 /* creats*/       "Ambitus",
-/* acks  */       "note-head-interface",
+/* accepts */ "general-music",
+/* acks  */     "note-head-interface",
 /* reads */       "",
 /* write */       "");
index 407f0265103716af3322e8f7099a6b1f5ff8fad3..19fc31342bd74f778adb30b972c439c3fe2de89c 100644 (file)
@@ -107,6 +107,7 @@ Arpeggio_engraver::stop_translation_timestep ()
 ENTER_DESCRIPTION(Arpeggio_engraver,
 /* descr */       "Generate an Arpeggio from a Arpeggio_req",
 /* creats*/       "Arpeggio",
-/* acks  */       "stem-interface rhythmic-head-interface note-column-interface",
+/* accepts */     "general-music",
+/* acks  */      "stem-interface rhythmic-head-interface note-column-interface",
 /* reads */       "",
 /* write */       "");
index bce4eac95687ba275dcee37e064f11bd02341b0b..7a37e5d3e76f1fcdfb7b21bee41d9c4f3aea7b84 100644 (file)
@@ -497,6 +497,7 @@ when to start and stop a beam.  Overriding beaming is done through
 stemRightBeamCount.
 ",
 /* creats*/       "Beam",
-/* acks  */       "stem-interface rest-interface beam-interface bar-line-interface",
+/* accepts */     "general-music",
+/* acks  */      "stem-interface rest-interface beam-interface bar-line-interface",
 /* reads */       "autoBeaming autoBeamSettings beatLength subdivideBeams",
 /* write */       "");
index bdaa7e93f8b070d0affb98173f0d3078bedfe484..841a24c656e1667fd743c14ff8993297c2661270 100644 (file)
@@ -168,13 +168,15 @@ ENTER_DESCRIPTION(Hara_kiri_engraver,
 interesting items (ie. note heads, lyric syllables and normal rests)
 ",
 /* creats*/       "HaraKiriVerticalGroup",
-/* acks  */       "grob-interface",
+/* accepts */     "general-music",
+/* acks  */      "grob-interface",
 /* reads */       "",
 /* write */       "");
 
 ENTER_DESCRIPTION(Axis_group_engraver,
 /* descr */       "Group all objects created in this context in a VerticalAxisGroup spanner.",
 /* creats*/       "VerticalAxisGroup",
-/* acks  */       "grob-interface",
+/* accepts */     "general-music",
+/* acks  */      "grob-interface",
 /* reads */       "verticalExtent minimumVerticalExtent extraVerticalExtent",
 /* write */       "");
index af227ca0d99dd93e18a723afcf4954a0548c8512..3de1771365e9e267f431e790ceff60f3a435afba 100644 (file)
@@ -26,14 +26,6 @@ public:
 };
 
 IMPLEMENT_CTOR_CALLBACK(Bar_check_iterator);
-
-Music * get_barcheck ()
-{
-  Music *bc = new Music;
-  bc->set_mus_property ("iterator-ctor", Bar_check_iterator::constructor_proc);
-  return bc;
-}
-
 Bar_check_iterator::Bar_check_iterator()
 {
 }
index 494ef463832b204a209cbdc4b2cd41449e03cd56..180193ec265a29a4c912aa76970f09c2cabd6161 100644 (file)
@@ -112,6 +112,7 @@ ENTER_DESCRIPTION(Bar_engraver,
 /* descr */       "Create barlines. This engraver is controlled through the
 @code{whichBar} property. If it has no bar line to create, it will forbid a linebreak at this point",
 /* creats*/       "BarLine",
-/* acks  */       "",
+/* accepts */     "general-music",
+/* acks  */      "",
 /* reads */       "whichBar",
 /* write */       "");
index 10eb2f45513e9ccc316c0c4948488264d01b4aea..28b73fd21e0f2cf5a0ac7d0699eea050c5e7aab2 100644 (file)
@@ -118,6 +118,7 @@ ENTER_DESCRIPTION(Bar_number_engraver,
 /* descr */       "A bar number is created whenever measurePosition is zero. It is
 put on top of all staves, and appears only at  left side of the staff.",
 /* creats*/       "BarNumber",
-/* acks  */       "break-aligned-interface",
+/* accepts */     "general-music",
+/* acks  */      "break-aligned-interface",
 /* reads */       "currentBarNumber stavesFound" ,
 /* write */       "");
index 9b3be1c57388580e472a07a415f7356d01dfb889..a126111fba0d5f6155dbb050936e05e4957ff8f5 100644 (file)
@@ -305,7 +305,8 @@ ENTER_DESCRIPTION(Beam_engraver,
 /* descr */       "Handles Beam_requests by engraving Beams.    If omitted, then notes will be
 printed with flags instead of beams.",
 /* creats*/       "Beam",
-/* acks  */       "stem-interface rest-interface",
+/* accepts */     "general-music",
+/* acks  */      "stem-interface rest-interface",
 /* reads */       "beamMelismaBusy beatLength subdivideBeams",
 /* write */       "");
 
@@ -347,7 +348,8 @@ be printed with flags instead of beams. Only engraves beams when we
 are at grace points in time.
 ",
 /* creats*/       "Beam",
-/* acks  */       "stem-interface rest-interface",
+/* accepts */     "general-music",
+/* acks  */      "stem-interface rest-interface",
 /* reads */       "beamMelismaBusy beatLength subdivideBeams",
 /* write */       "");
 
index 414d61db7b94022c15507fa5f1900134b736624a..d708eb5f86aebe84b18a8518afa2069d4c941a92 100644 (file)
@@ -148,6 +148,7 @@ Break_align_engraver::add_to_group(SCM align_name, Item*item)
 ENTER_DESCRIPTION(Break_align_engraver,
 /* descr */       "Align grobs with corresponding break-align-symbols into groups, and order the groups according to breakAlignOrder",
 /* creats*/       "BreakAlignment BreakAlignGroup LeftEdge",
+/* accepts */     "general-music",
 /* acks  */       "break-aligned-interface"
 ,/* reads */       "breakAlignOrder",
 /* write */       "");
index e4fc0551538d8a516a2ad25860e3804bdfe47316..fe0d3b531ddbc433317da6bf51121108d3dd3e2a 100644 (file)
@@ -88,6 +88,7 @@ Breathing_sign_engraver::start_translation_timestep ()
 ENTER_DESCRIPTION(Breathing_sign_engraver,
 /* descr */       "",
 /* creats*/       "BreathingSign",
-/* acks  */       "",
+/* accepts */     "general-music",
+/* acks  */      "",
 /* reads */       "",
 /* write */       "");
index bbccd04afee50aed36bd4055f133b46077bdfac9..10bff134a950ba9b9ff4c0eba01dcbb7663a6ce2 100644 (file)
@@ -107,6 +107,7 @@ ENTER_DESCRIPTION(Chord_name_engraver,
 /* descr */       "Catch Note_req's, Tonic_reqs, Inversion_reqs, Bass_req
 and generate the appropriate chordname.",
 /* creats*/       "ChordName",
-/* acks  */       "",
+/* accepts */     "general-music",
+/* acks  */      "",
 /* reads */       "chordChanges",
 /* write */       "");
index e580e177169b1165af31dc9b3673abe9fd65063f..05981c4c33287c3f06a6f22a0d63e0d076bac0fe 100644 (file)
@@ -218,6 +218,7 @@ Chord_tremolo_engraver::stop_translation_timestep ()
 ENTER_DESCRIPTION(Chord_tremolo_engraver,
 /* descr */       "Generates beams for  tremolo repeats.",
 /* creats*/       "Beam",
-/* acks  */       "stem-interface note-head-interface",
+/* accepts */     "general-music",
+/* acks  */      "stem-interface note-head-interface",
 /* reads */       "",
 /* write */       "");
index 45f7e6781dfc86e6d710f9b9a8daf834ba63d039..3e26dc847446870e5c5ab58d20b6eedcc7ff4ec4 100644 (file)
@@ -363,7 +363,7 @@ Chord::get_chord (SCM tonic, SCM add, SCM sub, SCM inversion, SCM bass, SCM dur)
       scm_gc_unprotect_object (n->self_scm ());
     }
 
-  Simultaneous_music*v = new Request_chord (SCM_EOL);
+  Simultaneous_music*v = new Request_chord ();
   v->set_mus_property ("elements", list);
 
   return v;
index 091ee979a0bb8a0fd93b235b18530ce8c7a26f9c..819ee2cedf1c8ca8568ed4277ea16c84bdfa3a28 100644 (file)
@@ -199,6 +199,7 @@ Clef_engraver::start_translation_timestep ()
 ENTER_DESCRIPTION(Clef_engraver,
 /* descr */       "Determine and set reference point for pitches",
 /* creats*/       "Clef OctavateEight",
-/* acks  */       "bar-line-interface",
+/* accepts */     "general-music",
+/* acks  */      "bar-line-interface",
 /* reads */       "clefPosition clefGlyph centralCPosition clefOctavation explicitClefVisibility",
 /* write */       "");
index f6bbb7e1a7c04344fc8e0a5ffaceafe1a6c8814c..41399bbeca594b9ce7bd509453dedfcb19ceb24e 100644 (file)
@@ -78,6 +78,7 @@ Collision_engraver::Collision_engraver ()
 ENTER_DESCRIPTION(Collision_engraver,
 /* descr */       "",
 /* creats*/       "NoteCollision",
-/* acks  */       "note-column-interface",
+/* accepts */     "general-music",
+/* acks  */      "note-column-interface",
 /* reads */       "",
 /* write */       "");
index ca90b3d5db56156c7c90032625bef99329a8d05a..2188dedb816152d8a66c552b0cc637df40f20fbc 100644 (file)
@@ -313,6 +313,7 @@ ENTER_DESCRIPTION(Completion_heads_engraver,
 @code{Note_heads_engraver}. It plays some trickery to
 break long notes and automatically tie them into the next measure.",
 /* creats*/       "NoteHead Dots",
-/* acks  */       "",
+/* accepts */     "general-music",
+/* acks  */      "",
 /* reads */       "centralCPosition measurePosition measureLength",
 /* write */       "");
index 620c2e4a391bca500d685322e96249cc1c260994..333b74770ef261c550af7f3eeda5e705eed3142f 100644 (file)
@@ -7,18 +7,10 @@
   
  */
 #include "context-specced-music.hh"
-Context_specced_music::Context_specced_music (SCM m)
-  : Music_wrapper (m)
-{
-  set_mus_property ("type",
-                   ly_symbol2scm ("context-specced-music"));
-}
 
 
 Context_specced_music::Context_specced_music ()
 {
-  set_mus_property ("type",
-                   ly_symbol2scm ("context-specced-music"));
 }
 
 ADD_MUSIC (Context_specced_music);
index b16c637029e006e293f29e2c72f5d5fdbbdaab58..e8d9a820df48a87011db019439489dafc6c84b2b 100644 (file)
@@ -147,6 +147,7 @@ Custos_engraver::finalize ()
 ENTER_DESCRIPTION(Custos_engraver,
 /* descr */       "",
 /* creats*/       "Custos",
-/* acks  */       "bar-line-interface note-head-interface",
+/* accepts */     "general-music",
+/* acks  */      "bar-line-interface note-head-interface",
 /* reads */       "",
 /* write */       "");
index 10fd4a54484beacbe78928ac65b3720f50a00fe6..83953c5d54b89518e30c507281cc77db84785603 100644 (file)
@@ -84,6 +84,7 @@ ENTER_DESCRIPTION(Dot_column_engraver,
 If omitted, then dots appear on top of the notes.
 ",
 /* creats*/       "DotColumn",
-/* acks  */       "rhythmic-head-interface dot-column-interface stem-interface",
+/* accepts */     "general-music",
+/* acks  */      "rhythmic-head-interface dot-column-interface stem-interface",
 /* reads */       "",
 /* write */       "");
index 5c97d814decb24af1e62d05ac1eaab7cc741ee92..c6252d5a46504d9195133d31eb4b5db757ccaf54 100644 (file)
@@ -433,6 +433,7 @@ which takes care of vertical positioning.
 ",
                  
 /* creats*/       "DynamicLineSpanner DynamicText Hairpin TextSpanner",
-/* acks  */       "note-column-interface script-interface",
+/* accepts */     "general-music",
+/* acks  */      "note-column-interface script-interface",
 /* reads */       "",
 /* write */       "");
index e76f07cd62fb66641ad919d00db4699f456a8e16..c69267b5d904ca55988ded37c40366f6113edea5 100644 (file)
@@ -135,4 +135,9 @@ Dynamic_performer::try_music (Music* r)
 }
 
 ENTER_DESCRIPTION(Dynamic_performer,
-                 "","","","dynamicAbsoluteVolumeFunction midiMaximumVolume midiMinimumVolume midiInstrument instrumentEqualizer","");
+                 /*descr*/               "",
+                 /* creats*/ "",
+                 /* accepts */     "general-music",
+                 /* acks */ "",
+                 /*reads */"dynamicAbsoluteVolumeFunction midiMaximumVolume midiMinimumVolume midiInstrument instrumentEqualizer",
+                 /*writes*/"");
index ebf38811470662eb97b98ea332e2a0a586192959..403d62048907b6f3f892022a01c04f793d8a3485 100644 (file)
@@ -174,7 +174,8 @@ Engraver_group_engraver::Engraver_group_engraver() {}
 ENTER_DESCRIPTION(Engraver_group_engraver,
 /* descr */       "A group of engravers taken together",
 /* creats*/       "",
-/* acks  */       "",
+/* accepts */     "general-music",
+/* acks  */      "",
 /* reads */       "",
 /* write */       "");
 
index b8cb0f493949df5cbe3c96158c75ca7a0989e79b..dac68d8f0d766d810cf70822b2fbd50e2e3cc64a 100644 (file)
@@ -72,5 +72,7 @@ Engraver::top_engraver () const
 }
 
 ENTER_DESCRIPTION(Engraver,
-                  "", "", "", "", "");
+                  "", "",
+                 "general-music",
+                 "", "", "");
 
index 914eefbe63b857544c750c0f412600fadb30671d..b6ff094700a7814e49f899b0e3ece3caeaae63cd 100644 (file)
@@ -144,6 +144,7 @@ Extender_engraver::start_translation_timestep ()
 ENTER_DESCRIPTION(Extender_engraver,
 /* descr */       "Create lyric extenders",
 /* creats*/       "LyricExtender",
-/* acks  */       "lyric-syllable-interface",
+/* accepts */     "general-music",
+/* acks  */      "lyric-syllable-interface",
 /* reads */       "",
 /* write */       "");
index 4efd7644e9242793c8c3e4528c6862f55a199342..1cf1cc5cf26b62babd4e18f5ec6cd817b6a6cb01 100644 (file)
@@ -80,6 +80,7 @@ Figured_bass_engraver::process_music ()
 ENTER_DESCRIPTION(Figured_bass_engraver,
 /* descr */       "Make figured bass numbers.",
 /* creats*/       "BassFigure",
-/* acks  */       "",
+/* accepts */     "general-music",
+/* acks  */      "",
 /* reads */       "",
 /* write */       "");
index ee6612cc4e14724a3b2ea121eeb78f607d3a446e..d4b59e1d53eca505643d55841793d1110695e262 100644 (file)
@@ -244,6 +244,7 @@ Fingering_engraver::Fingering_engraver()
 ENTER_DESCRIPTION(Fingering_engraver,
 /* descr */       "Create fingering-scripts",
 /* creats*/       "Fingering",
-/* acks  */       "rhythmic-head-interface stem-interface",
+/* accepts */     "general-music",
+/* acks  */      "rhythmic-head-interface stem-interface",
 /* reads */       "scriptHorizontal",
 /* write */       "");
index c72b06a85fd9822bed9653d633b2f182c459bbd1..1e337b8c2e7f33d2daa0e7876db17f23ad88acfc 100644 (file)
@@ -47,6 +47,7 @@ Font_size_engraver::acknowledge_grob (Grob_info gi)
 ENTER_DESCRIPTION(Font_size_engraver,
 /* descr */       "Puts fontSize into font-relative-size grob property.",
 /* creats*/       "",
-/* acks  */       "font-interface",
+/* accepts */     "general-music",
+/* acks  */      "font-interface",
 /* reads */       "fontSize",
 /* write */       "");
index 3df1cdc6402098f0d31bc9a4456ecae313096953..07472512600af3ad82227fc9bc8892603ff544d5 100644 (file)
@@ -16,7 +16,8 @@ ENTER_DESCRIPTION(Forbid_line_break_engraver,
 /* descr */       "Forbid line breaks when note heads are still playing
 at some point.",
 /* creats*/       "",
-/* acks  */       "",
+/* accepts */     "general-music",
+/* acks  */      "",
 /* reads */       "busyGrobs",
 /* write */       "");
 
index 516e02ce0e5eb4ce196f0d04a7462303b5e20152..08fc36616fe43b0b2fc1a5ee08f835472a78e123 100644 (file)
@@ -39,11 +39,5 @@ Grace_music::Grace_music ()
                    Grace_iterator::constructor_proc);
 }
 
-Grace_music::Grace_music (SCM p)
-  : Music_wrapper (p)
-{
-  set_mus_property ("iterator-ctor",
-                   Grace_iterator::constructor_proc);
-}
 
 ADD_MUSIC (Grace_music);
index 3d1d350e0abb6b7d4d859715f50d7446aa49c57e..44ab000fa2e9c809a74c07f5dcf4e387d631ea77 100644 (file)
@@ -143,6 +143,7 @@ ENTER_DESCRIPTION(Grob_pq_engraver,
 engraver is a sort-of a failure, since it doesn't handle all sorts of borderline cases very well.
 ",
 /* creats*/       "",
-/* acks  */       "grob-interface",
+/* accepts */     "general-music",
+/* acks  */      "grob-interface",
 /* reads */       "busyGrobs",
 /* write */       "busyGrobs");
index 6d5fd573f7edf49b65a885dc638e1d4209d8d8ba..c15e3bee95da0385d7a6335ddea0a60b22220a97 100644 (file)
@@ -136,6 +136,7 @@ Hyphen_engraver::start_translation_timestep ()
 ENTER_DESCRIPTION(Hyphen_engraver,
 /* descr */       "Create lyric hyphens",
 /* creats*/       "LyricHyphen",
-/* acks  */       "lyric-syllable-interface",
+/* accepts */     "general-music",
+/* acks  */      "lyric-syllable-interface",
 /* reads */       "",
 /* write */       "");
index 5c70171f69aa0be9b78698f2baaa59f7565f0944..37d1888d87f89b50e9525185f5c0e48615d14bbd 100644 (file)
@@ -16,7 +16,6 @@ class Grace_music : public Music_wrapper
 {
 public:
   VIRTUAL_COPY_CONS (Music);
-  Grace_music (SCM);
   Grace_music ();
 protected:
   virtual void compress (Moment);
index b468b5b36ee0a19be2fd14e57fb993c5e1e170de..2885450af67f2197fc044f2238d98968b8a37ad4 100644 (file)
@@ -19,7 +19,6 @@ public:
   Music * get_lyrics () const;
   
   Lyric_combine_music ();
-  Lyric_combine_music (SCM);
   virtual void transpose (Pitch);
 
   VIRTUAL_COPY_CONS (Music);
index f69887aac2ac9a26e5d6b5b38cc20723f7cbeb89..1dcaaeb818517a4923b7eb10f685695349017f3f 100644 (file)
@@ -20,7 +20,6 @@ class Simultaneous_music : public Music_sequence
 {
 public:
   VIRTUAL_COPY_CONS (Music);
-  Simultaneous_music (SCM);
   virtual Pitch to_relative_octave (Pitch);
   virtual Moment length_mom () const;
   virtual Moment start_mom () const;
@@ -37,7 +36,6 @@ public:
   VIRTUAL_COPY_CONS (Music);
   virtual Pitch to_relative_octave (Pitch);
   virtual Moment start_mom () const;
-  Request_chord (SCM list);
 
   Request_chord ();
 };
@@ -49,7 +47,6 @@ class Sequential_music : public Music_sequence
 {
 public:
   VIRTUAL_COPY_CONS (Music);
-  Sequential_music (SCM);
   virtual Moment length_mom () const;
   virtual Moment start_mom () const;
   
index 887182b73f8f353bca168b2498e10e37a4fd4613..bd2ebb5056a1522e47e219522ba0e84ed6af637e 100644 (file)
@@ -22,7 +22,6 @@
 class Music_wrapper : public Music
 {
 public:
-  Music_wrapper (SCM);
   Music_wrapper ();
   Music * element () const;
   virtual void transpose (Pitch);
index b5cbab61a1e0e3ae324e8d0d863ea1afaf269006..84c40cc42fabb86d05e740a89e27e739a9046c77 100644 (file)
@@ -42,7 +42,9 @@ public:
 
   SCM internal_get_mus_property (SCM) const;
   void internal_set_mus_property (SCM , SCM val);
-
+  void add_music_type (SCM);
+  bool is_music_type (SCM) const;
+  
   virtual Pitch to_relative_octave (Pitch);
 
   /// The duration of this piece of music
@@ -57,11 +59,11 @@ public:
   VIRTUAL_COPY_CONS (Music);
   Music ();
   Music (Music const &m);
-  Music (SCM);
 protected:
   DECLARE_SMOBS (Music,);
   SCM immutable_property_alist_;
   SCM mutable_property_alist_;
+  friend SCM ly_extended_make_music(SCM,SCM);
 };
 
 
index e8576b1bef1e011572f67cc27d341413260dce35..3b8531e60c468a718ff1c039a477064ff77a9bc0 100644 (file)
@@ -15,7 +15,6 @@
 class Relative_octave_music : public Music_wrapper
 {
 public:
-  Relative_octave_music (SCM l);
   Relative_octave_music ();
   
   VIRTUAL_COPY_CONS (Music);
index 4b27559aa91c15b246b07ffc5df937d3dc857890..1e88b13451877f14563c7e6b3ece51a7c133720d 100644 (file)
@@ -109,7 +109,7 @@ ADD_GLOBAL_CTOR (_ ## T ## _adder);
 
 
 
-#define ENTER_DESCRIPTION(classname,desc,grobs,acked,read,write)                                               \
+#define ENTER_DESCRIPTION(classname,desc,grobs,accepted,acked,read,write)                                              \
 ADD_THIS_TRANSLATOR (classname);\
 SCM                                                                                            \
 classname::static_translator_description () const \
@@ -126,6 +126,8 @@ classname::static_translator_description () const \
                                                                                                \
   static_properties= scm_acons (ly_symbol2scm ("interfaces-acked"),                            \
                              parse_symbol_list (acked), static_properties);                    \
+  static_properties= scm_acons (ly_symbol2scm ("events-accepted"),                             \
+                             parse_symbol_list (accepted), static_properties);                 \
                                                                                                \
   static_properties= scm_acons (ly_symbol2scm ("properties-read"),                             \
                              parse_symbol_list (read), static_properties);                     \
index 96a783a25677b2ea5244de49f558645966414366..9bb4e68aeb313a5570b1894f3e1e157e6c223ef2 100644 (file)
@@ -34,6 +34,7 @@ struct TYPE ## _swallow_translator : public Type_swallow_translator { \
 ENTER_DESCRIPTION(TYPE ## _swallow_translator,                         \
                  "Swallow requests of " #TYPE " type.",                \
                  "",                                                   \
+       "general-music",\
                  "",                                                   \
                  "",                                                   \
                  "");
index 0a72163b1fe956ea3d71cba0dcbe2a9e3fb7cdb9..e166f48ec99e1242655a8b815fc5b06f90288bd8 100644 (file)
@@ -127,6 +127,7 @@ ENTER_DESCRIPTION(Instrument_name_engraver,
 at the left of the
 staff.",
 /* creats*/       "InstrumentName",
-/* acks  */       "bar-line-interface axis-group-interface",
+/* accepts */     "general-music",
+/* acks  */      "bar-line-interface axis-group-interface",
 /* reads */       "instrument instr",
 /* write */       "");
index 7dc697312305d010544cc0a56048e543bcb4bf09..cff86db881cabba6c3cd71223149186199ea8ea1 100644 (file)
@@ -198,6 +198,7 @@ Key_engraver::initialize ()
 ENTER_DESCRIPTION(Key_engraver,
 /* descr */       "",
 /* creats*/       "KeySignature",
-/* acks  */       "bar-line-interface clef-interface",
+/* accepts */     "general-music",
+/* acks  */      "bar-line-interface clef-interface",
 /* reads */       "keySignature lastKeySignature explicitKeySignatureVisibility createKeyOnClefChange keyAccidentalOrder keySignature",
 /* write */       "lastKeySignature");
index bb4094a1e6dbd198205678a2b596bd478e87818b..d52d563e6d3c6e15e5334cbe6adf68dbca52d482 100644 (file)
@@ -102,4 +102,7 @@ Key_performer::try_music (Music* req)
   return false;
 }
 
-ENTER_DESCRIPTION(Key_performer,"","","","","");
+ENTER_DESCRIPTION(Key_performer,
+                 "","",
+                 "general-music",
+                 "","","");
index 3230988cc57b9f0f99ee665a31b976481986853b..5797748366af5ab6d8633ff633dc24d826a70667 100644 (file)
@@ -35,6 +35,7 @@ Ligature_bracket_engraver::create_ligature_spanner ()
 ENTER_DESCRIPTION(Ligature_bracket_engraver,
 /* descr */       "Handles Ligature_requests by engraving Ligature brackets.",
 /* creats*/       "LigatureBracket",
-/* acks  */       "ligature-head-interface rest-interface",
+/* accepts */     "general-music",
+/* acks  */      "ligature-head-interface rest-interface",
 /* reads */       "",
 /* write */       "");
index f6e64da3e7197b6d8840ceb7a7931760f0fdd28c..29af32f4db1267fb1f443180857df36e4b594cb5 100644 (file)
@@ -191,6 +191,7 @@ Ligature_engraver::acknowledge_grob (Grob_info info)
 ENTER_DESCRIPTION (Ligature_engraver,
 /* descr */       "Abstract class; a concrete subclass handles Ligature_requests by engraving Ligatures in a concrete style.",
 /* creats*/       "Ligature",
-/* acks  */       "ligature-head-interface rest-interface",
+/* accepts */     "general-music",
+/* acks  */      "ligature-head-interface rest-interface",
 /* reads */       "",
 /* write */       "");
index 8e36faa6747190296c2ac9da5ed56b639fd40e76..3dbc4507077c7cf452136b8e5f53cc67be6c9bc0 100644 (file)
 #include "lyric-combine-music-iterator.hh"
 #include "pitch.hh"
 
-Lyric_combine_music::Lyric_combine_music (SCM l)
-  : Music (l)
+Lyric_combine_music::Lyric_combine_music ()
+  : Music ()
 {
-  set_mus_property ("iterator-ctor",
-                   Lyric_combine_music_iterator::constructor_proc);
 }
 
 
@@ -70,9 +68,5 @@ Lyric_combine_music::get_lyrics () const
   return unsmob_music (gh_car (l));
 }
 
-Lyric_combine_music::Lyric_combine_music ()
-  : Music (SCM_EOL)
-{
-}
 
 ADD_MUSIC (Lyric_combine_music);
index 07cec49ce6f85551baf07ba0723a8e5539552183..1da3c69a4b44bf0595b2deecd26bd1cbde3745a5 100644 (file)
@@ -98,6 +98,7 @@ Lyric_engraver::start_translation_timestep ()
 ENTER_DESCRIPTION(Lyric_engraver,
 /* descr */       "",
 /* creats*/       "",
-/* acks  */       "",
+/* accepts */     "general-music",
+/* acks  */      "",
 /* reads */       "",
 /* write */       "");
index 71ec1866843c355f9c5f09d34e92f8ad3340fd67..415fc9ce4d0d29a39fdd4e4fd43a55b1c8e37d74 100644 (file)
@@ -73,4 +73,4 @@ Lyric_performer::try_music (Music* req)
   return false;
 }
 
-ENTER_DESCRIPTION(Lyric_performer,"","","","","");
+ENTER_DESCRIPTION(Lyric_performer,"","","general-music","","","");
index 4f7a3c0d11750c87fe5c0ff7401f51cae0a4ee7e..0dba2673df993d90730de0e3fbc5756bd5e8c101 100644 (file)
@@ -361,6 +361,7 @@ This engraver is switched on by default. Turn it off for faster
 processing of orchestral scores.
 ",
                  /* creats*/       "",
-                 /* acks  */       "lyric-syllable-interface note-head-interface lyric-extender-interface",
+                 /* accepts */     "general-music",
+/* acks  */      "lyric-syllable-interface note-head-interface lyric-extender-interface",
                  /* reads */       "automaticPhrasing melismaEngraverBusy associatedVoice phrasingPunctuation",
                  /* write */       "");
index 2aa1de4ae873ee6dc45d33a14fac11f5e0ff11b2..2a5e2db53d7b14d3315e09f663094907647d8428 100644 (file)
@@ -190,6 +190,7 @@ Mark_engraver::process_music ()
 ENTER_DESCRIPTION(Mark_engraver,
 /* descr */       "",
 /* creats*/       "RehearsalMark",
-/* acks  */       "bar-line-interface", 
+/* accepts */     "general-music",
+/* acks  */      "bar-line-interface",
 /* reads */       "rehearsalMark stavesFound",
 /* write */       "");
index fd35082cdf98cc73a2331af4ad035b6b463c0080..7e1353a0cd99410de2114c997a74499078212a97 100644 (file)
@@ -52,6 +52,7 @@ Melisma_engraver::Melisma_engraver()
 ENTER_DESCRIPTION(Melisma_engraver,
 /* descr */       "",
 /* creats*/       "",
-/* acks  */       "",
+/* accepts */     "general-music",
+/* acks  */      "",
 /* reads */       "melismaBusy slurMelismaBusy tieMelismaBusy beamMelismaBusy",
 /* write */       "");
index 3c8637f04a132d381be31afca20417717cd3a7fb..0672e9b8d93ac1c2ee8c4e211af95bcb32738a23 100644 (file)
@@ -563,6 +563,7 @@ Mensural_ligature_engraver::acknowledge_grob (Grob_info info)
 ENTER_DESCRIPTION (Mensural_ligature_engraver,
 /* descr */       "Handles Mensural_ligature_requests by glueing special ligature heads together.",
 /* creats*/       "MensuralLigature",
-/* acks  */       "ligature-head-interface note-head-interface rest-interface",
+/* accepts */     "general-music",
+/* acks  */      "ligature-head-interface note-head-interface rest-interface",
 /* reads */       "",
 /* write */       "");
index 23c0c0007a9d57a26bc19e190dd550cce559535c..93a33b0a00c892169525957c5f9be403002c24eb 100644 (file)
@@ -181,6 +181,7 @@ ENTER_DESCRIPTION(Multi_measure_rest_engraver,
 measurePosition and currentBarNumber to determine what number to print over the MultiMeasureRest
 ",
 /* creats*/       "MultiMeasureRest",
-/* acks  */       "",
+/* accepts */     "general-music",
+/* acks  */      "",
 /* reads */       "currentBarNumber currentCommandColumn measurePosition",
 /* write */       "");
index 51a2497ec6f95e9752418d1d8f16e280e6659084..86b415100073921240653749aaa78b3b16440398 100644 (file)
@@ -35,6 +35,9 @@ get_music_ctor (String s)
 Music* 
 make_music (String s)
 {
-  return (*get_music_ctor (s)) () ;
+  Music_ctor c = get_music_ctor (s);
+  assert (c);
+  
+  return (*c) ();
 }
 
index 44ec103c4092f7f8ab39769b6f6d80fec7125302..1dc61a38661b8159477266e8affc3b8831cd568e 100644 (file)
@@ -28,8 +28,8 @@ Music_sequence::append_music (Music *m)
   scm_gc_unprotect_object (m->self_scm ());
 }
 
-Music_sequence::Music_sequence (SCM l)
-  : Music (l)
+Music_sequence::Music_sequence ( )
+  : Music ()
 {
 }
 
@@ -134,12 +134,6 @@ Music_sequence::compress_list (SCM l, Moment m)
 
 ADD_MUSIC (Music_sequence);
 
-Music_sequence::Music_sequence ()
-  : Music (SCM_EOL)
-{
-  
-}
-
 Moment
 Music_sequence::minimum_start (SCM l)
 {
index 3d58fca2ef3f6311465ce70df906f233faa6999e..222bda0fcd23962d43950c33bf7973fa08d7bd8a 100644 (file)
@@ -21,8 +21,8 @@ Music_wrapper::transpose (Pitch p)
 }
 
 
-Music_wrapper::Music_wrapper (SCM l)
-  : Music (l)
+Music_wrapper::Music_wrapper ()
+  : Music ()
 {
 }
 
@@ -53,11 +53,6 @@ Music_wrapper::compress (Moment m)
 
 ADD_MUSIC (Music_wrapper);
 
-Music_wrapper::Music_wrapper ()
-  : Music (SCM_EOL)
-{
-  
-}
 
 Moment
 Music_wrapper::start_mom () const
index 40d913266a9ae8551d1cccec448801a6d663866e..df0b9c11eba56643e65ffd5da447e496d9ebd8a3 100644 (file)
@@ -32,12 +32,24 @@ ly_deep_mus_copy (SCM m)
 }
 
 
-Music::Music ()
+
+
+void
+Music::add_music_type (SCM sym)
 {
-  self_scm_ = SCM_EOL; 
-  immutable_property_alist_ = SCM_EOL;
-  mutable_property_alist_ = SCM_EOL;
-  smobify_self ();
+  assert (gh_symbol_p (sym));
+
+  SCM types= get_mus_property ("types");
+  types = scm_cons (sym, types);
+  set_mus_property ("types", types);
+}
+
+bool
+Music::is_music_type (SCM k)const
+{
+  SCM ifs = get_mus_property ("types");
+
+  return scm_memq (k, ifs) != SCM_BOOL_F;
 }
 
 Music::Music (Music const &m)
@@ -54,13 +66,16 @@ Music::Music (Music const &m)
   smobify_self ();
   mutable_property_alist_ = ly_deep_mus_copy (m.mutable_property_alist_);
   set_spot (*m.origin ());
+
+  add_music_type (ly_symbol2scm ("general-music"));
 }
 
 
-Music::Music (SCM l)
+
+Music::Music ()
 {
   self_scm_ = SCM_EOL;
-  immutable_property_alist_ = l;
+  immutable_property_alist_ = SCM_EOL;
   mutable_property_alist_ = SCM_EOL;
   smobify_self ();
 }
@@ -117,7 +132,7 @@ print_alist (SCM a, SCM port)
   /*
     SCM_EOL  -> catch malformed lists.
   */
-  for (SCM s = a; s != SCM_EOL; s = ly_cdr (s))
+  for (SCM s = a; gh_pair_p (s); s = ly_cdr (s))
     {
       scm_display (ly_caar (s), port);
       scm_puts (" = ", port); 
@@ -279,6 +294,27 @@ LY_DEFINE(ly_music_name, "ly-music-name", 1, 0, 0,
   return scm_makfrom0str (nm);
 }
 
+
+// to do  property args 
+LY_DEFINE(ly_extended_make_music,
+         "ly-extended-make-music", 2, 0, 0,  (SCM type, SCM props),
+         "
+Make a music object/expression of type @var{type}, init with
+@var{props}. Warning: this interface will likely change in the near
+future.
+
+Music is the data type that music expressions are stored in. The data
+type does not yet offer many manipulations.
+")
+{
+  SCM_ASSERT_TYPE(gh_string_p (type), type, SCM_ARG1, __FUNCTION__, "string");
+
+  SCM s = make_music (ly_scm2string (type))->self_scm ();
+  unsmob_music (s)->immutable_property_alist_ = props;
+  scm_gc_unprotect_object (s);
+  return s;
+}
+
 LY_DEFINE(ly_music_list_p,"music-list?", 1, 0, 0, 
   (SCM l),"Type predicate: return true if @var{l} is a list of music objects.")
 {
index eb2fc894d53f112d09f8b4d273f88e4525e06b21..77839228ff798f4f5e50b6271125c42de4a00f4a 100644 (file)
@@ -154,6 +154,7 @@ ENTER_DESCRIPTION(Note_head_line_engraver,
 /* descr */       "Engrave a line between two note heads, for example a glissando.
 If followVoice is set, staff switches also generate a line.",
 /* creats*/       "Glissando VoiceFollower",
-/* acks  */       "rhythmic-head-interface",
+/* accepts */     "general-music",
+/* acks  */      "rhythmic-head-interface",
 /* reads */       "followVoice",
 /* write */       "");
index 97a8b973916672a099570ddab40d1873ea86821d..243783adb2590a17d8a1c5b68ed408b1688d5560 100644 (file)
@@ -142,6 +142,7 @@ Note_heads_engraver::start_translation_timestep ()
 ENTER_DESCRIPTION(Note_heads_engraver,
 /* descr */       "Generate one or more noteheads from Music of type Note_req.",
 /* creats*/       "NoteHead Dots",
-/* acks  */       "",
+/* accepts */     "general-music",
+/* acks  */      "",
 /* reads */       "centralCPosition",
 /* write */       "");
index 1e7806e676b9bd05c48d773df02fd97192bf5b00..0ffa2d00b07354715bd19fbad0fae25c42a4868f 100644 (file)
@@ -74,6 +74,7 @@ Note_name_engraver::Note_name_engraver()
 ENTER_DESCRIPTION(Note_name_engraver,
 /* descr */       "",
 /* creats*/       "NoteName",
-/* acks  */       "",
+/* accepts */     "general-music",
+/* acks  */      "",
 /* reads */       "",
 /* write */       "");
index fafcc82941d0f31a99cbccc4adb4ea9740dbf35b..ae8b1adf17cefc37fd5ec515c573546b053850d6 100644 (file)
@@ -125,7 +125,7 @@ Note_performer::try_music (Music* req)
   return false;
 }
 
-ENTER_DESCRIPTION(Note_performer,"","","","","");
+ENTER_DESCRIPTION(Note_performer,"","","general-music","","","");
 
 Note_performer::Note_performer()
 {
index 17b025423c3a73d8837ae2c7eec2d320b1733c5c..fc6b297a6e372b7c7b31cbb9a200f0a70cb99cd4 100644 (file)
@@ -84,6 +84,7 @@ ENTER_DESCRIPTION(Output_property_engraver,
 /* descr */       "Interpret Music of Output_property type, and apply a function
 to any Graphic objects that satisfies the predicate.",
 /* creats*/       "",
-/* acks  */       "grob-interface",
+/* accepts */     "general-music",
+/* acks  */      "grob-interface",
 /* reads */       "",
 /* write */       "");
index 9e8574733d2fe9445ef1c3266cc3b870f5e5541d..f53c27950774f7395c80c1126e62588dcc5ff39a 100644 (file)
@@ -78,18 +78,6 @@ regular_identifier_b (SCM id)
 }
 
 
-Music* 
-set_property_music (SCM sym, SCM value)
-{
-       Music * p = new Music (SCM_EOL);
-       p->set_mus_property ("symbol", sym);
-       p->set_mus_property ("iterator-ctor",
-       Property_iterator::constructor_proc);
-
-       p->set_mus_property ("value", value);
-       return p;
-}
-
 bool
 is_duration_b (int t)
 {
@@ -106,9 +94,37 @@ set_music_properties (Music *p, SCM a)
 }
 
 
+SCM make_music_proc;
 
+Music*
+parser_make_music (SCM sym)
+{
+       if (!make_music_proc)
+               make_music_proc = scm_primitive_eval (ly_symbol2scm ("make-music-by-name"));
+       
+       SCM rv = scm_call_1 (make_music_proc, sym);
 
+       /*
+       UGH.
+       */
+       scm_gc_protect_object (rv);
+       return unsmob_music (rv);
+}
+
+#define MY_MAKE_MUSIC(x)  parser_make_music (ly_symbol2scm (x))
 
+#define TYPED_MAKE_MUSIC(x,v,y) x *v = dynamic_cast<x*> (parser_make_music (ly_symbol2scm (y)));
+
+
+
+Music* 
+set_property_music (SCM sym, SCM value)
+{
+       Music * p = MY_MAKE_MUSIC("PropertySet");
+       p->set_mus_property ("symbol", sym);
+       p->set_mus_property ("value", value);
+       return p;
+}
 
 
 // needed for bison.simple's malloc () and free ()
@@ -136,18 +152,14 @@ of the parse stack onto the heap. */
 
 %union {
 
-    Link_array<Request> *reqvec;
+    Link_array<Music> *reqvec;
 
     String *string; // needed by the lexer as temporary scratch area.
     Music *music;
     Score *score;
     Scheme_hash_table *scmhash;
     Music_output_def * outputdef;
-
-    Request * request;
-
     SCM scm;
-
     Tempo_req *tempo;
     int i;
 }
@@ -276,8 +288,8 @@ yylex (YYSTYPE *s,  void * v)
 
 %type <outputdef> output_def
 %type <scm>    lilypond_header lilypond_header_body
-%type <request>        open_request_parens close_request_parens open_request close_request
-%type <request> request_with_dir request_that_take_dir verbose_request
+%type <music>  open_request_parens close_request_parens open_request close_request
+%type <music> request_with_dir request_that_take_dir verbose_request
 %type <i>      sub_quotes sup_quotes
 %type <music>  simple_element  request_chord command_element Simple_music  Composite_music 
 %type <music>  Repeated_music
@@ -291,7 +303,7 @@ yylex (YYSTYPE *s,  void * v)
 %type <scm>  verbose_duration
        
 %type <reqvec>  pre_requests post_requests
-%type <request> gen_text_def
+%type <music> gen_text_def
 %type <scm>   steno_pitch pitch absolute_pitch
 %type <scm>   explicit_pitch steno_tonic_pitch
 
@@ -306,12 +318,12 @@ yylex (YYSTYPE *s,  void * v)
 %type <music>  property_def translator_change  simple_property_def
 %type <scm> Music_list
 %type <outputdef>  music_output_def_body
-%type <request> shorthand_command_req
-%type <request>        post_request 
+%type <music> shorthand_command_req
+%type <music>  post_request 
 %type <music> command_req verbose_command_req
-%type <request>        extender_req
-%type <request> hyphen_req
-%type <request> string_request
+%type <music>  extender_req
+%type <music> hyphen_req
+%type <music> string_request
 %type <scm>    string bare_number number_expression number_term number_factor 
 
 %type <score>  score_block score_body
@@ -671,7 +683,8 @@ music_output_def_body:
 
 tempo_request:
        TEMPO steno_duration '=' bare_unsigned  {
-               $$ = new Tempo_req;
+               TYPED_MAKE_MUSIC(Tempo_req,t,"TempoEvent");
+               $$ = t;
                $$->set_mus_property ("duration", $2);
                $$->set_mus_property ("metronome-count", gh_int2scm ( $4));
        }
@@ -728,8 +741,8 @@ Repeated_music:
                    _("More alternatives than repeats.  Junking excess alternatives."));
                  alts = ly_truncate_list (times, alts);
                }
-
-               Repeated_music * r = new Repeated_music (SCM_EOL);
+               
+               TYPED_MAKE_MUSIC(Repeated_music,r,"RepeatedMusic");
                if (beg)
                        {
                        r-> set_mus_property ("element", beg->self_scm ());
@@ -764,12 +777,12 @@ Repeated_music:
 
 Sequential_music:
        SEQUENTIAL '{' Music_list '}'           {
-               $$ = new Sequential_music (SCM_EOL);
+               $$ = MY_MAKE_MUSIC("SequentialMusic");
                $$->set_mus_property ("elements", ly_car ($3));
                $$->set_spot(THIS->here_input());
        }
        | '{' Music_list '}'            {
-               $$ = new Sequential_music (SCM_EOL);
+               $$ = MY_MAKE_MUSIC("SequentialMusic");
                $$->set_mus_property ("elements", ly_car ($2));
                $$->set_spot(THIS->here_input());
        }
@@ -777,13 +790,13 @@ Sequential_music:
 
 Simultaneous_music:
        SIMULTANEOUS '{' Music_list '}'{
-               $$ = new Simultaneous_music (SCM_EOL);
+               $$ = MY_MAKE_MUSIC("SimultaneousMusic");
                $$->set_mus_property ("elements", ly_car ($3));
                $$->set_spot(THIS->here_input());
 
        }
        | '<' Music_list '>'    {
-               $$ = new Simultaneous_music (SCM_EOL);
+               $$ = MY_MAKE_MUSIC("SimultaneousMusic");
                $$->set_mus_property ("elements", ly_car ($2));
                $$->set_spot(THIS->here_input());
        }
@@ -803,12 +816,10 @@ Simple_music:
                        THIS->parser_error (_ ("First argument must be a procedure taking one argument"));
                }
 
-               Music *m = new Music (SCM_EOL);
+       TYPED_MAKE_MUSIC(Music,m,"OutputPropertySetMusic");
                m->set_mus_property ("predicate", pred);
                m->set_mus_property ("grob-property", $3);
                m->set_mus_property ("grob-value",  $5);
-               m->set_mus_property ("iterator-ctor",
-               Output_property_music_iterator::constructor_proc);
 
                $$ = m;
        }
@@ -824,7 +835,8 @@ Simple_music:
 
 Composite_music:
        CONTEXT STRING Music    {
-               Context_specced_music *csm =  new Context_specced_music (SCM_EOL);
+       TYPED_MAKE_MUSIC(Music,csm, "ContextSpeccedMusic");
+
                csm->set_mus_property ("element", $3->self_scm ());
                scm_gc_unprotect_object ($3->self_scm ());
 
@@ -834,9 +846,8 @@ Composite_music:
                $$ = csm;
        }
        | AUTOCHANGE STRING Music       {
-               Music * chm = new Music_wrapper (SCM_EOL);
+       TYPED_MAKE_MUSIC(Music,chm,"AutoChangeMusic");
                chm->set_mus_property ("element", $3->self_scm ());
-               chm->set_mus_property ("iterator-ctor", Auto_change_iterator::constructor_proc);
 
                scm_gc_unprotect_object ($3->self_scm ());
                chm->set_mus_property ("what", $2); 
@@ -870,20 +881,23 @@ Composite_music:
                        scm_gc_unprotect_object (startm->self_scm ());
                }
 
-               Music* seq = new Sequential_music (SCM_EOL);
+       
+               Music* seq = MY_MAKE_MUSIC("SequentialMusic");
                seq->set_mus_property ("elements", ms);
 
-               $$ = new Grace_music (SCM_EOL);
+               
+               $$ = MY_MAKE_MUSIC("GraceMusic");
                $$->set_mus_property ("element", seq->self_scm ());
                scm_gc_unprotect_object (seq->self_scm ());
 #else
-               $$ = new Grace_music (SCM_EOL);
+               $$ = MY_MAKE_MUSIC("GraceMusic");
                $$->set_mus_property ("element", $2->self_scm ());
                scm_gc_unprotect_object ($2->self_scm ());
 #endif
        }
        | CONTEXT string '=' string Music {
-               Context_specced_music *csm =  new Context_specced_music (SCM_EOL);
+               Music * csm = MY_MAKE_MUSIC("ContextSpeccedMusic");
+
                csm->set_mus_property ("element", $5->self_scm ());
                scm_gc_unprotect_object ($5->self_scm ());
 
@@ -901,7 +915,7 @@ Composite_music:
        {
                int n = gh_scm2int (ly_car ($3)); int d = gh_scm2int (ly_cdr ($3));
                Music *mp = $4;
-               $$ = new Time_scaled_music (SCM_EOL);
+       $$= MY_MAKE_MUSIC("TimeScaledMusic");
                $$->set_spot (THIS->pop_spot ());
 
 
@@ -916,7 +930,7 @@ Composite_music:
        | Simultaneous_music            { $$ = $1; }
        | Sequential_music              { $$ = $1; }
        | TRANSPOSE pitch Music {
-               $$ = new Transposed_music (SCM_EOL);
+               $$ = MY_MAKE_MUSIC("TransposedMusic");
                Music *p = $3;
                Pitch pit = *unsmob_pitch ($2);
 
@@ -925,7 +939,7 @@ Composite_music:
                scm_gc_unprotect_object (p->self_scm ());
        }
        | TRANSPOSE steno_tonic_pitch Music {
-               $$ = new Transposed_music (SCM_EOL);
+               $$ = MY_MAKE_MUSIC("TransposedMusic");
                Music *p = $3;
                Pitch pit = *unsmob_pitch ($2);
 
@@ -939,7 +953,7 @@ Composite_music:
                Music *m = unsmob_music (ret);
                if (!m) {
                        THIS->parser_error ("\\apply must return a Music");
-                       m = new Music (SCM_EOL);
+                       m = MY_MAKE_MUSIC("Music");
                        }
                $$ = m;
        }
@@ -953,7 +967,7 @@ Composite_music:
                { THIS->lexer_->push_figuredbass_state (); }
        Music
                {
-                 Music * chm = new Untransposable_music () ;
+                 Music * chm = MY_MAKE_MUSIC("UntransposableMusic");
                  chm->set_mus_property ("element", $3->self_scm ());
                  $$ = chm;
                  scm_gc_unprotect_object ($3->self_scm());
@@ -964,7 +978,7 @@ Composite_music:
                { THIS->lexer_->push_chord_state (); }
        Music
                {
-                 Music * chm = new Un_relativable_music ;
+                 Music * chm = MY_MAKE_MUSIC("UnrelativableMusic");
                  chm->set_mus_property ("element", $3->self_scm ());
                  scm_gc_unprotect_object ($3->self_scm());
                  $$ = chm;
@@ -987,7 +1001,7 @@ relative_music:
        RELATIVE absolute_pitch Music {
                Music * p = $3;
                Pitch pit = *unsmob_pitch ($2);
-               $$ = new Relative_octave_music (SCM_EOL);
+               $$ = MY_MAKE_MUSIC("RelativeOctaveMusic");
 
                $$->set_mus_property ("element", p->self_scm ());
                scm_gc_unprotect_object (p->self_scm ());
@@ -999,7 +1013,7 @@ relative_music:
 
 re_rhythmed_music:
        ADDLYRICS Music Music {
-         Lyric_combine_music * l = new Lyric_combine_music (SCM_EOL);
+       TYPED_MAKE_MUSIC(Lyric_combine_music, l,"LyricCombineMusic");
          l->set_mus_property ("elements", gh_list ($2->self_scm (), $3->self_scm (), SCM_UNDEFINED));
          scm_gc_unprotect_object ($3->self_scm ());
          scm_gc_unprotect_object ($2->self_scm ());
@@ -1009,8 +1023,7 @@ re_rhythmed_music:
 
 part_combined_music:
        PARTCOMBINE STRING Music Music {
-               Part_combine_music * p = new Part_combine_music (SCM_EOL);
-
+TYPED_MAKE_MUSIC(Part_combine_music,p, "PartCombineMusic");
                p->set_mus_property ("what", $2);
                p->set_mus_property ("elements", gh_list ($3->self_scm (),$4->self_scm (), SCM_UNDEFINED));  
 
@@ -1023,9 +1036,7 @@ part_combined_music:
 
 translator_change:
        TRANSLATOR STRING '=' STRING  {
-               Music * t = new Music (SCM_EOL);
-               t->set_mus_property ("iterator-ctor",
-                       Change_iterator::constructor_proc);
+               TYPED_MAKE_MUSIC(Music,t,"TranslatorChange");
                t-> set_mus_property ("change-to-type", $2);
                t-> set_mus_property ("change-to-id", $4);
 
@@ -1045,11 +1056,10 @@ property_def:
 
 simple_property_def:
        PROPERTY STRING '.' STRING '='  scalar {
-               
                Music *t = set_property_music (scm_string_to_symbol ($4), $6);
-               Context_specced_music *csm = new Context_specced_music (SCM_EOL);
+               Music *csm = MY_MAKE_MUSIC("ContextSpeccedMusic");
 
-               csm->set_mus_property ("element", t->self_scm ());
+               csm->set_mus_property ("element", t->self_scm ());
                scm_gc_unprotect_object (t->self_scm ());
 
                $$ = csm;
@@ -1058,13 +1068,11 @@ simple_property_def:
                csm-> set_mus_property ("context-type", $2);
        }
        | PROPERTY STRING '.' STRING UNSET {
-               Music *t = new Music (SCM_EOL);
-
-               t->set_mus_property ("iterator-ctor",
-                       Property_unset_iterator::constructor_proc);
+               
+               Music *t = MY_MAKE_MUSIC("PropertyUnset");
                t->set_mus_property ("symbol", scm_string_to_symbol ($4));
 
-               Context_specced_music *csm = new Context_specced_music (SCM_EOL);
+               Music *csm = MY_MAKE_MUSIC("ContextSpeccedMusic");
                csm->set_mus_property ("element", t->self_scm ());
                scm_gc_unprotect_object (t->self_scm ());
 
@@ -1077,9 +1085,8 @@ simple_property_def:
                bool autobeam
                  = gh_equal_p ($4, scm_makfrom0str ("autoBeamSettings"));
                bool itc = internal_type_checking_global_b;
-               Music *t = new Music (SCM_EOL);
-               t->set_mus_property ("iterator-ctor",
-                       Push_property_iterator::constructor_proc);
+               Music *t = MY_MAKE_MUSIC("OverrideProperty");
+
                t->set_mus_property ("symbol", scm_string_to_symbol ($4));
                t->set_mus_property ("pop-first", SCM_BOOL_T);
                if (autobeam)
@@ -1088,7 +1095,8 @@ simple_property_def:
                if (autobeam)
                        internal_type_checking_global_b = itc;
                t->set_mus_property ("grob-value", $8);
-               Context_specced_music *csm = new Context_specced_music (SCM_EOL);
+
+               Music *csm = MY_MAKE_MUSIC("ContextSpeccedMusic");
                csm->set_mus_property ("element", t->self_scm ());
                scm_gc_unprotect_object (t->self_scm ());
                $$ = csm;
@@ -1106,11 +1114,8 @@ simple_property_def:
                  = gh_equal_p ($4, scm_makfrom0str ("autoBeamSettings"));
                bool itc = internal_type_checking_global_b;
 
-               Music *t = new Music (SCM_EOL);
-               t->set_mus_property ("iterator-ctor",
-                       Push_property_iterator::constructor_proc);
+               Music *t = MY_MAKE_MUSIC("OverrideProperty");
                t->set_mus_property ("symbol", scm_string_to_symbol ($4));
-
                if (autobeam)
                        internal_type_checking_global_b = false;
                t->set_mus_property ("grob-property", $6);
@@ -1118,7 +1123,7 @@ simple_property_def:
                if (autobeam)
                        internal_type_checking_global_b = itc;
 
-               Context_specced_music *csm = new Context_specced_music (SCM_EOL);
+               Music *csm = MY_MAKE_MUSIC("ContextSpeccedMusic");
                csm->set_mus_property ("element", t->self_scm ());
                scm_gc_unprotect_object (t->self_scm ());
 
@@ -1129,13 +1134,11 @@ simple_property_def:
 
        }
        | PROPERTY STRING '.' STRING REVERT embedded_scm {
-               Music *t = new Music (SCM_EOL);
+               Music *t = MY_MAKE_MUSIC("RevertProperty");
                bool autobeam
                  = gh_equal_p ($4, scm_makfrom0str ("autoBeamSettings"));
                bool itc = internal_type_checking_global_b;
 
-               t->set_mus_property ("iterator-ctor",
-                       Pop_property_iterator::constructor_proc);
                t->set_mus_property ("symbol", scm_string_to_symbol ($4));
                if (autobeam)
                        internal_type_checking_global_b = false;
@@ -1143,7 +1146,7 @@ simple_property_def:
                if (autobeam)
                        internal_type_checking_global_b = itc;
        
-               Context_specced_music *csm = new Context_specced_music (SCM_EOL);
+               Music *csm = MY_MAKE_MUSIC("ContextSpeccedMusic");
                csm->set_mus_property ("element", t->self_scm ());
                scm_gc_unprotect_object (t->self_scm ());
 
@@ -1183,7 +1186,7 @@ request_chord:
 
 command_element:
        command_req {
-               $$ = new Request_chord (SCM_EOL);
+               $$ = MY_MAKE_MUSIC("RequestChord");
                $$->set_mus_property ("elements", scm_cons ($1->self_scm (), SCM_EOL));
          scm_gc_unprotect_object ($1->self_scm());
 
@@ -1191,42 +1194,41 @@ command_element:
                $1-> set_spot (THIS->here_input ());
        }
        | E_LEFTSQUARE {
-               Span_req *l = new Span_req;
-               l->set_span_dir (START);
+               Music *l = MY_MAKE_MUSIC("SpanEvent");
+               l->set_mus_property ("span-direction", gh_int2scm (START));
                l->set_mus_property ("span-type", scm_makfrom0str ("ligature"));
                l->set_spot (THIS->here_input ());
 
-               $$ = new Request_chord (SCM_EOL);
+               $$ = MY_MAKE_MUSIC("RequestChord");
                $$->set_mus_property ("elements", scm_cons (l->self_scm (), SCM_EOL));
          scm_gc_unprotect_object (l->self_scm());
                $$->set_spot (THIS->here_input ());
        }
        | E_RIGHTSQUARE {
-               Span_req *l = new Span_req;
-               l->set_span_dir (STOP);
+               Music *l = MY_MAKE_MUSIC("SpanEvent");
+               l->set_mus_property ("span-direction", gh_int2scm (STOP));
                l->set_mus_property ("span-type", scm_makfrom0str ("ligature"));
                l->set_spot (THIS->here_input ());
 
-               $$ = new Request_chord (SCM_EOL);
+               $$ = MY_MAKE_MUSIC("RequestChord");
                $$->set_mus_property ("elements", scm_cons (l->self_scm (), SCM_EOL));
                $$->set_spot (THIS->here_input ());
          scm_gc_unprotect_object (l->self_scm());
 
        }
        | E_BACKSLASH {
-               $$ = new Music (gh_list (scm_cons (ly_symbol2scm ("name"), ly_symbol2scm ("separator")), SCM_UNDEFINED));
+               $$ = MY_MAKE_MUSIC("VoiceSeparator");
                $$->set_spot (THIS->here_input ());
        }
        | '|'      {
 
-               extern Music * get_barcheck();
-               $$ = get_barcheck ();
+               $$ = MY_MAKE_MUSIC("BarCheck");
                $$->set_spot (THIS->here_input ());
        }
        | BAR STRING                    {
                Music *t = set_property_music (ly_symbol2scm ("whichBar"), $2);
 
-               Context_specced_music *csm = new Context_specced_music (SCM_EOL);
+               Music *csm = MY_MAKE_MUSIC("ContextSpeccedMusic");
                csm->set_mus_property ("element", t->self_scm ());
                scm_gc_unprotect_object (t->self_scm ());
 
@@ -1239,7 +1241,7 @@ command_element:
                Moment m = - unsmob_duration ($2)->length_mom ();
                Music * p = set_property_music (ly_symbol2scm ( "measurePosition"),m.smobbed_copy ());
 
-               Context_specced_music * sp = new Context_specced_music (SCM_EOL);
+               Music * sp = MY_MAKE_MUSIC("ContextSpeccedMusic");
                sp->set_mus_property ("element", p->self_scm ());
                scm_gc_unprotect_object (p->self_scm ());
 
@@ -1252,15 +1254,15 @@ command_element:
 
                SCM l = SCM_EOL;
                for (SCM s = result ; gh_pair_p (s); s = ly_cdr (s)) {
-                       Music * p = new Music (SCM_EOL);
+                       Music * p = MY_MAKE_MUSIC("Music");
                        set_music_properties (p, ly_car (s));
                        l = scm_cons (p->self_scm (), l);
                        scm_gc_unprotect_object (p->self_scm ());
                }
-               Sequential_music * seq = new Sequential_music (SCM_EOL);
+               Music * seq = MY_MAKE_MUSIC("SequentialMusic");
                seq->set_mus_property ("elements", l);
 
-               Context_specced_music * sp = new Context_specced_music (SCM_EOL);
+               Music * sp = MY_MAKE_MUSIC("ContextSpeccedMusic");
                sp->set_mus_property ("element", seq->self_scm ());
                scm_gc_unprotect_object (seq->self_scm ());
 
@@ -1281,11 +1283,11 @@ command_element:
                Music *p3 = set_property_music (ly_symbol2scm ("beatLength"), one_beat.smobbed_copy ());
 
                SCM list = scm_list_n (p1->self_scm (), p2->self_scm (), p3->self_scm(), SCM_UNDEFINED);
-               Sequential_music *seq = new Sequential_music (SCM_EOL);
+               Music *seq = MY_MAKE_MUSIC("SequentialMusic");
                seq->set_mus_property ("elements", list);
                
 
-               Context_specced_music * sp = new Context_specced_music (SCM_EOL);
+               Music * sp = MY_MAKE_MUSIC("ContextSpeccedMusic");
                sp->set_mus_property ("element", seq->self_scm ());
 
                scm_gc_unprotect_object (p3->self_scm ());
@@ -1312,11 +1314,12 @@ shorthand_command_req:
                $$ = $1;
        }
        | '~'   {
-               $$ = new Tie_req;
+               $$ = MY_MAKE_MUSIC("TieEvent");
        }
        | '['           {
-               Span_req*b= new Span_req;
-               b->set_span_dir (START);
+               Music *b= MY_MAKE_MUSIC("SpanEvent");
+               b->set_mus_property ("span-direction", gh_int2scm (START))
+;
                b->set_mus_property ("span-type", scm_makfrom0str ("beam"));
                $$ =b;
 
@@ -1324,38 +1327,39 @@ shorthand_command_req:
                THIS->last_beam_start_ = b->self_scm ();
        }
        | ']'           {
-               Span_req*b= new Span_req;
-               b->set_span_dir ( STOP);
+               Music *b= MY_MAKE_MUSIC("SpanEvent");
+               b->set_mus_property ("span-direction", gh_int2scm (STOP))
+;
                b->set_mus_property ("span-type", scm_makfrom0str ("beam"));
                $$ = b;
        }
        | BREATHE {
-               $$ = new Breathing_sign_req;
+               $$ = MY_MAKE_MUSIC("BreathingSignEvent");
        }
        | E_TILDE {
-               $$ = new Porrectus_req;
+               $$ = MY_MAKE_MUSIC("PorrectusEvent");
        }
        ;
 
 verbose_command_req:
        COMMANDSPANREQUEST bare_int STRING { /*TODO: junkme */
-               Span_req * sp = new Span_req;
-               sp-> set_span_dir ( Direction ($2));
+               Music * sp = MY_MAKE_MUSIC("SpanEvent");
+               sp->set_mus_property ("span-direction", gh_int2scm (Direction ($2)));
                sp->set_mus_property ("span-type",$3);
                sp->set_spot (THIS->here_input ());
                $$ = sp;
        }
        | MARK DEFAULT  {
-               Mark_req * m = new Mark_req;
+               Music * m = MY_MAKE_MUSIC("MarkEvent");
                $$ = m;
        }
        | MARK scalar {
-               Mark_req *m = new Mark_req;
+               Music *m = MY_MAKE_MUSIC("MarkEvent");
                m->set_mus_property ("label", $2);
                $$ = m;
        }
        | PENALTY SCM_T         {
-               Break_req * b = new Break_req;
+               Music * b = MY_MAKE_MUSIC("BreakEvent");
                SCM s = $2;
                if (!gh_number_p (s))
                        s  =gh_int2scm (0);
@@ -1365,7 +1369,7 @@ verbose_command_req:
                $$ = b;
        }
        | SKIP duration_length {
-               Skip_req * skip = new Skip_req;
+               Music * skip = MY_MAKE_MUSIC("SkipEvent");
                skip->set_mus_property ("duration", $2);
 
                $$ = skip;
@@ -1374,11 +1378,11 @@ verbose_command_req:
                $$ = $1;
        }
        | KEY DEFAULT {
-               Key_change_req *key= new Key_change_req;
+               Music *key= MY_MAKE_MUSIC("KeyChangeEvent");
                $$ = key;
        }
        | KEY NOTENAME_PITCH SCM_IDENTIFIER     {
-               Key_change_req *key= new Key_change_req;
+               Music *key= MY_MAKE_MUSIC("KeyChangeEvent");
                
                key->set_mus_property ("pitch-alist", $3);
                ((Music*)key)->transpose (* unsmob_pitch ($2));
@@ -1388,7 +1392,7 @@ verbose_command_req:
 
 post_requests:
        {
-               $$ = new Link_array<Request>;
+               $$ = new Link_array<Music>;
        }
        | post_requests post_request {
                $2->set_spot (THIS->here_input ());
@@ -1406,7 +1410,7 @@ post_request:
 
 string_request:
        E_UNSIGNED {
-               String_number_req* s = new String_number_req;
+               Music * s = MY_MAKE_MUSIC("StringNumberEvent");
                s->set_mus_property ("string-number",  gh_int2scm($1));
                s->set_spot (THIS->here_input ());
                $$ = s;
@@ -1419,7 +1423,7 @@ request_that_take_dir:
        | verbose_request
        | script_abbreviation {
                SCM s = THIS->lexer_->lookup_identifier ("dash" + ly_scm2string ($1));
-               Articulation_req *a = new Articulation_req;
+               Music *a = MY_MAKE_MUSIC("ArticulationEvent");
                if (gh_string_p (s))
                        a->set_mus_property ("articulation-type", s);
                else THIS->parser_error (_ ("Expecting string as script definition"));
@@ -1429,24 +1433,21 @@ request_that_take_dir:
 
 request_with_dir:
        script_dir request_that_take_dir        {
-               if (Script_req * gs = dynamic_cast<Script_req*> ($2))
-                       gs->set_direction (Direction ($1));
-               else if ($1)
-                       $2->origin ()->warning (_ ("Can't specify direction for this request"));
+               $2->set_mus_property ("direction", gh_int2scm ($1));
                $$ = $2;
        }
        ;
        
 verbose_request:
        REQUEST_IDENTIFIER      {
-               $$ = dynamic_cast<Request*> (unsmob_music ($1)->clone ());
+               $$ = unsmob_music ($1)->clone ();
                $$->set_spot (THIS->here_input ());
        }
        | DYNAMICSCRIPT embedded_scm {
                /*
                        TODO: junkme, use text-type == dynamic
                */
-               Text_script_req *d = new Text_script_req;
+               Music *d = MY_MAKE_MUSIC("TextScriptEvent");
                SCM dyn = ly_symbol2scm ("dynamic");
                d->set_mus_property ("text-type" , dyn);
                d->set_mus_property ("text", $2);
@@ -1454,34 +1455,35 @@ verbose_request:
                $$ = d;
        }
        | SPANREQUEST bare_int STRING {
-               Span_req * sp = new Span_req;
-               sp->set_span_dir ( Direction ($2));
+               Music * sp = MY_MAKE_MUSIC("SpanEvent");
+               sp->set_mus_property ("span-direction", gh_int2scm ( $2));
                sp->set_mus_property ("span-type", $3);
                sp->set_spot (THIS->here_input ());
                $$ = sp;
        }
        | tremolo_type  {
-               Tremolo_req* a = new Tremolo_req;
+               Music * a = MY_MAKE_MUSIC("TremoloEvent");
                a->set_spot (THIS->here_input ());
                a->set_mus_property ("tremolo-type", gh_int2scm ($1));
                $$ = a;
         }
        | SCRIPT STRING         { 
-               Articulation_req * a = new Articulation_req;
+               Music * a = MY_MAKE_MUSIC("ArticulationEvent");
                a->set_mus_property ("articulation-type", $2);
                a->set_spot (THIS->here_input ());
                $$ = a;
        }
+
        /*
-duh, junk this syntax from the parser, if possible. 
+               duh, junk this syntax from the parser, if possible. 
        */
        | ARPEGGIO {
-               Arpeggio_req *a = new Arpeggio_req;
+               Music *a = MY_MAKE_MUSIC("ArpeggioEvent");
                a->set_spot (THIS->here_input ());
                $$ = a;
        }
        | GLISSANDO {
-               Glissando_req *g = new Glissando_req;
+               Music *g = MY_MAKE_MUSIC("GlissandoEvent");
                g->set_spot /* No pun intended */ (THIS->here_input ());
                $$ = g;
        }       
@@ -1579,7 +1581,7 @@ extender_req:
        EXTENDER {
                if (!THIS->lexer_->lyric_state_b ())
                        THIS->parser_error (_ ("Have to be in Lyric mode for lyrics"));
-               $$ = new Extender_req;
+               $$ = MY_MAKE_MUSIC("ExtenderEvent");
        }
        ;
 
@@ -1587,38 +1589,39 @@ hyphen_req:
        HYPHEN {
                if (!THIS->lexer_->lyric_state_b ())
                        THIS->parser_error (_ ("Have to be in Lyric mode for lyrics"));
-               $$ = new Hyphen_req;
+               $$ = MY_MAKE_MUSIC("HyphenEvent");
        }
        ;
 
 close_request:
        close_request_parens {
                $$ = $1;
-               dynamic_cast<Span_req*> ($$)->set_span_dir ( START);
+               dynamic_cast<Music *> ($$)->set_mus_property ("span-direction", gh_int2scm (START))
+;
        }
        ;
  
 close_request_parens:
        '('     {
-               Span_req* s= new Span_req;
+               Music * s= MY_MAKE_MUSIC("SpanEvent");
                $$ = s;
                s->set_mus_property ("span-type", scm_makfrom0str ( "slur"));
                s->set_spot (THIS->here_input());
        }
        | E_OPEN        {
-               Span_req* s= new Span_req;
+               Music * s= MY_MAKE_MUSIC("SpanEvent");
                $$ = s;
                s->set_mus_property ("span-type", scm_makfrom0str ( "phrasing-slur"));
                s->set_spot (THIS->here_input());
        }
        | E_SMALLER {
-               Span_req*s =new Span_req;
+               Music *s =MY_MAKE_MUSIC("SpanEvent");
                $$ = s;
                s->set_mus_property ("span-type", scm_makfrom0str ( "crescendo"));
                s->set_spot (THIS->here_input());
        }
        | E_BIGGER {
-               Span_req*s =new Span_req;
+               Music *s =MY_MAKE_MUSIC("SpanEvent");
                $$ = s;
                s->set_mus_property ("span-type", scm_makfrom0str ("decrescendo"));
                s->set_spot (THIS->here_input());
@@ -1629,27 +1632,28 @@ close_request_parens:
 open_request:
        open_request_parens {
                $$ = $1;
-               dynamic_cast<Span_req*> ($$)->set_span_dir (STOP);
+               dynamic_cast<Music *> ($$)->set_mus_property ("span-direction", gh_int2scm (STOP))
+;
        }
        ;
 
 open_request_parens:
        E_EXCLAMATION   {
-               Span_req *s =  new Span_req;
+               Music *s =  MY_MAKE_MUSIC("SpanEvent");
                s->set_mus_property ("span-type", scm_makfrom0str ( "crescendo"));
                s->set_spot (THIS->here_input());
 
                $$ = s;
        }
        | ')'   {
-               Span_req* s= new Span_req;
+               Music * s= MY_MAKE_MUSIC("SpanEvent");
                $$ = s;
                s->set_mus_property ("span-type", scm_makfrom0str ( "slur"));
                s->set_spot (THIS->here_input());
 
        }
        | E_CLOSE       {
-               Span_req* s= new Span_req;
+               Music * s= MY_MAKE_MUSIC("SpanEvent");
                $$ = s;
                s->set_mus_property ("span-type", scm_makfrom0str ( "phrasing-slur"));
                s->set_spot (THIS->here_input());
@@ -1658,20 +1662,20 @@ open_request_parens:
 
 gen_text_def:
        embedded_scm {
-               Text_script_req *t = new Text_script_req;
+               Music *t = MY_MAKE_MUSIC("TextScriptEvent");
                t->set_mus_property ("text", $1);
                t->set_spot (THIS->here_input ());
                $$ = t;
        }
        | string {
-               Text_script_req *t = new Text_script_req;
+               Music *t = MY_MAKE_MUSIC("TextScriptEvent");
                t->set_mus_property ("text", $1);
                t->set_spot (THIS->here_input ());
                $$ = t;
        }
        | DIGIT {
                String ds = to_string ($1);
-               Text_script_req* t = new Text_script_req;
+               Music * t = MY_MAKE_MUSIC("TextScriptEvent");
                SCM finger = ly_symbol2scm ("finger");
                t->set_mus_property ("text",  scm_makfrom0str (ds.to_str0 ()));
                t->set_mus_property ("text-type" , finger);
@@ -1712,7 +1716,7 @@ script_dir:
 
 pre_requests:
        {
-               $$ = new Link_array<Request>;
+               $$ = new Link_array<Music>;
        }
        | pre_requests open_request {
                $$->push ($2);
@@ -1829,12 +1833,12 @@ bass_mod:
 
 bass_figure:
        FIGURE_SPACE {
-               Bass_figure_req *bfr = new Bass_figure_req;
+               Music *bfr = MY_MAKE_MUSIC("BassFigureEvent");
                $$ = bfr->self_scm();
                scm_gc_unprotect_object ($$);
        }
        | bass_number  {
-               Bass_figure_req *bfr = new Bass_figure_req;
+               Music *bfr = MY_MAKE_MUSIC("BassFigureEvent");
                $$ = bfr->self_scm();
 
                bfr->set_mus_property ("figure", gh_int2scm ($1));
@@ -1879,7 +1883,7 @@ figure_list:
 
 figure_spec:
        FIGURE_OPEN figure_list FIGURE_CLOSE {
-               Music * m = new Request_chord (SCM_EOL);
+               Music * m = MY_MAKE_MUSIC("RequestChord");
                $2 = scm_reverse_x ($2, SCM_EOL);
                m->set_mus_property ("elements",  $2);
                $$ = m->self_scm ();
@@ -1901,9 +1905,9 @@ simple_element:
 
                Music *n = 0;
                if ($5)
-                       n =  new Rest_req ;
+                       n =  MY_MAKE_MUSIC("RestEvent");
                else
-                       n =  new Note_req;
+                       n =  MY_MAKE_MUSIC("NoteEvent");
                
                n->set_mus_property ("pitch", $1);
                n->set_mus_property ("duration", $4);
@@ -1914,7 +1918,7 @@ simple_element:
                if ($2 % 2 || $3 % 2)
                        n->set_mus_property ("force-accidental", SCM_BOOL_T);
 
-               Simultaneous_music*v = new Request_chord (SCM_EOL);
+               Music *v = MY_MAKE_MUSIC("RequestChord");
                v->set_mus_property ("elements", scm_list_n (n->self_scm (), SCM_UNDEFINED));
                scm_gc_unprotect_object (n->self_scm());
 
@@ -1938,18 +1942,18 @@ simple_element:
                SCM e = SCM_UNDEFINED;
                if (ly_scm2string ($1) =="s") {
                        /* Space */
-                       Skip_req * skip = new Skip_req;
+                       Music * skip = MY_MAKE_MUSIC("SkipEvent");
                        skip->set_mus_property ("duration" ,$2);
                        skip->set_spot (i);
                        e = skip->self_scm ();
                  }
                  else {
-                       Rest_req * rest_req = new Rest_req;
+                       Music * rest_req = MY_MAKE_MUSIC("RestEvent");
                        rest_req->set_mus_property ("duration", $2);
                        rest_req->set_spot (i);
                        e = rest_req->self_scm ();
                    }
-               Simultaneous_music* velt = new Request_chord (SCM_EOL);
+               Music * velt = MY_MAKE_MUSIC("RequestChord");
                velt-> set_mus_property ("elements", scm_list_n (e,SCM_UNDEFINED));
                velt->set_spot (i);
 
@@ -1958,36 +1962,38 @@ simple_element:
        | MULTI_MEASURE_REST optional_notemode_duration         {
                THIS->pop_spot ();
 
-               Skip_req * sk = new Skip_req;
+               Music * sk = MY_MAKE_MUSIC("SkipEvent");
                sk->set_mus_property ("duration", $2);
-               Span_req *sp1 = new Span_req;
-               Span_req *sp2 = new Span_req;
-               sp1-> set_span_dir ( START);
-               sp2-> set_span_dir ( STOP);
+               Music *sp1 = MY_MAKE_MUSIC("SpanEvent");
+               Music *sp2 = MY_MAKE_MUSIC("SpanEvent");
+               sp1-> set_mus_property ("span-direction", gh_int2scm (START))
+;
+               sp2-> set_mus_property ("span-direction", gh_int2scm (STOP))
+;
                SCM r = scm_makfrom0str ("rest");
                sp1->set_mus_property ("span-type", r);
                sp2->set_mus_property ("span-type", r);
 
-               Request_chord * rqc1 = new Request_chord (SCM_EOL);
+               Music *rqc1 = MY_MAKE_MUSIC("RequestChord");
                rqc1->set_mus_property ("elements", scm_list_n (sp1->self_scm (), SCM_UNDEFINED));
-               Request_chord * rqc2 = new Request_chord (SCM_EOL);
+               Music *rqc2 = MY_MAKE_MUSIC("RequestChord");
                rqc2->set_mus_property ("elements", scm_list_n (sk->self_scm (), SCM_UNDEFINED));;
-               Request_chord * rqc3 = new Request_chord (SCM_EOL);
+               Music *rqc3 = MY_MAKE_MUSIC("RequestChord");
                rqc3->set_mus_property ("elements", scm_list_n (sp2->self_scm (), SCM_UNDEFINED));;
 
                SCM ms = scm_list_n (rqc1->self_scm (), rqc2->self_scm (), rqc3->self_scm (), SCM_UNDEFINED);
 
-               $$ = new Sequential_music (SCM_EOL);
+               $$ = MY_MAKE_MUSIC("SequentialMusic");
                $$->set_mus_property ("elements", ms);
        }
        | STRING optional_notemode_duration     {
                Input i = THIS->pop_spot ();
 
-               Lyric_req* lreq = new Lyric_req;
+               Music * lreq = MY_MAKE_MUSIC("LyricEvent");
                 lreq->set_mus_property ("text", $1);
                lreq->set_mus_property ("duration",$2);
                lreq->set_spot (i);
-               Simultaneous_music* velt = new Request_chord (SCM_EOL);
+               Music * velt = MY_MAKE_MUSIC("RequestChord");
                velt->set_mus_property ("elements", scm_list_n (lreq->self_scm (), SCM_UNDEFINED));
 
                $$= velt;
index da76cf1e941b84a20ec82f5121d19e3651cd42dc..8ad0fd6e98a910c48f7c271795d8809de25d41d7 100644 (file)
 #include "part-combine-music-iterator.hh"
 #include "pitch.hh"
 
-Part_combine_music::Part_combine_music (SCM l)
-  : Music (l)
+Part_combine_music::Part_combine_music ()
 {
-  set_mus_property ("iterator-ctor",
-                   Part_combine_music_iterator::constructor_proc);
 }
 
 void
@@ -67,10 +64,4 @@ Part_combine_music::get_second () const
   return unsmob_music (gh_car (l));
 }
 
-
-Part_combine_music::Part_combine_music ()
-  : Music (SCM_EOL)
-{
-}
-
 ADD_MUSIC (Part_combine_music);
index 70f12528794343487c4538574fc815e861e7576a..1f9023ae723cf9613adacf123ddbd6ba40b99653 100644 (file)
@@ -240,6 +240,7 @@ Percent_repeat_engraver::stop_translation_timestep ()
 ENTER_DESCRIPTION(Percent_repeat_engraver,
 /* descr */       "Make beat, whole bar and double bar repeats.",
 /* creats*/       "PercentRepeat RepeatSlash DoublePercentRepeat",
-/* acks  */       "",
+/* accepts */     "general-music",
+/* acks  */      "",
 /* reads */       "measureLength currentCommandColumn",
 /* write */       "");
index 9a10e3d16fd3f7f71e9668b2e757ee29ff954745..0e099f0259db50d98fe1c5e4749e9a00a86b27f6 100644 (file)
@@ -16,7 +16,8 @@
 ENTER_DESCRIPTION(Performer_group_performer,
 /* descr */       "",
 /* creats*/       "",
-/* acks  */       "",
+/* accepts */     "general-music",
+/* acks  */      "",
 /* reads */       "",
 /* write */       "");
 
index 9240e7854285dbe5d4e97b2e6436aeb1aff0a396..8495817d09591073c68a63b195710b83202e009f 100644 (file)
@@ -174,6 +174,7 @@ Phrasing_slur_engraver::start_translation_timestep ()
 ENTER_DESCRIPTION(Phrasing_slur_engraver,
 /* descr */       "Print phrasing slurs. Similar to Slur_engraver",
 /* creats*/       "PhrasingSlur",
-/* acks  */       "note-column-interface",
+/* accepts */     "general-music",
+/* acks  */      "note-column-interface",
 /* reads */       "slurMelismaBusy",
 /* write */       "");
index 13ed7a6990b289aff28b5afe4e7deb0dfe994b81..4f478bea9bf5fe7dd6951b01ca7aca4f02924379 100644 (file)
@@ -509,6 +509,7 @@ Piano_pedal_engraver::start_translation_timestep ()
 ENTER_DESCRIPTION (Piano_pedal_engraver,
 /* descr */       "Engrave piano pedal symbols and brackets.",
 /* creats*/       "SostenutoPedal SustainPedal UnaCordaPedal SostenutoPedalLineSpanner SustainPedalLineSpanner UnaCordaPedalLineSpanner",
-/* acks  */       "note-column-interface",
+/* accepts */     "general-music",
+/* acks  */      "note-column-interface",
 /* reads */       "pedalSostenutoStrings pedalSustainStrings pedalUnaCordaStrings",
 /* write */       "");
index 59ed0a4469bc130154b227ce972d8278ade908d4..940a14828586809ae25f14c32abbcc75b73a645f 100644 (file)
@@ -139,4 +139,7 @@ Piano_pedal_performer::try_music (Music* r)
     }
   return false;
 }
-ENTER_DESCRIPTION (Piano_pedal_performer, "","","","","" );
+
+ENTER_DESCRIPTION (Piano_pedal_performer, "","",
+                  "general-music",
+                  "","","" );
index 8008d4d9ccf8c8860f54fdc0f53626eeac9bbfca..002d28440eadc2ef6211bbf77bf1e36380768425 100644 (file)
@@ -40,6 +40,7 @@ the locations of accidentals stay the same.
 Set the position field of all note heads to zero. This useful for
 making a single line staff that demonstrates the rhythm of a melody.",
 /* creats*/       "",
-/* acks  */       "note-head-interface",
+/* accepts */     "general-music",
+/* acks  */      "note-head-interface",
 /* reads */       "squashedPosition",
 /* write */       "");
index cf1b8962f5309ba03a51cb2ad852b23440fe4f40..578389b1ab6a20ecb30c5db8b26a4ac0d02a02f8 100644 (file)
@@ -168,6 +168,7 @@ Porrectus_engraver::start_translation_timestep ()
 ENTER_DESCRIPTION(Porrectus_engraver,
 /* descr */       "Join adjacent notes to a porrectus ligature.",
 /* creats*/       "Porrectus",
-/* acks  */       "rhythmic-head-interface",
+/* accepts */     "general-music",
+/* acks  */      "rhythmic-head-interface",
 /* reads */       "",
 /* write */       "");
index 14890694c3efad70de98e64c9038af43714ad49d..6487921b17ad23d5859ef51e48165745dec3b413 100644 (file)
@@ -17,15 +17,8 @@ Relative_octave_music::to_relative_octave (Pitch)
 }
 
 
-Relative_octave_music::Relative_octave_music (SCM l)
-  : Music_wrapper (l)
-{
-  set_mus_property ("type", ly_symbol2scm ("relative-octave-music"));  
-}
-
 Relative_octave_music::Relative_octave_music ()
 {
-  set_mus_property ("type", ly_symbol2scm ("relative-octave-music"));
 }
 
 ADD_MUSIC (Relative_octave_music);
index 1b7d91104f2a7bcc70c9abda724796d0bbe420b4..0c6921feca505a05562a5562f0ab332880b21d30 100644 (file)
@@ -114,6 +114,7 @@ ENTER_DESCRIPTION(Repeat_acknowledge_engraver,
 /* descr */       "Acknowledge repeated music, and convert the contents of
 repeatCommands ainto an appropriate setting for whichBar",
 /* creats*/       "",
-/* acks  */       "",
+/* accepts */     "general-music",
+/* acks  */      "",
 /* reads */       "repeatCommands whichBar",
 /* write */       "");
index 7b3ffe6e4d8f1e686922ca634b29fc2ed376ae00..3a2ed5eb6c6fd69043b7dd9610d9d0471d7cf9da 100644 (file)
@@ -26,11 +26,6 @@ Repeated_music::alternatives ()const
 }
 
 
-Repeated_music::Repeated_music (SCM l)
-  : Music (l)
-{
-  set_mus_property ("type", ly_symbol2scm ("repeated-music"));
-}
 
 
 Pitch
@@ -164,9 +159,8 @@ Repeated_music::volta_music_length (SCM m)
 ADD_MUSIC (Repeated_music);
 
 Repeated_music::Repeated_music ()
-  : Music (SCM_EOL)
+  : Music ()
 {
- set_mus_property ("type", ly_symbol2scm ("repeated-music"));
 }
 
 
index 3de20f4b4f92535ef6d651ae9ef8bb81e92c9905..7d9cb184f4d346f3fac339642746cb218f183672 100644 (file)
@@ -3,17 +3,8 @@
 #include "music-list.hh"
 #include "musical-request.hh"
 
-Request_chord::Request_chord (SCM s)
-  : Simultaneous_music (s)
-{
-  set_mus_property ("iterator-ctor",
-                   Request_chord_iterator::constructor_proc);
-}
-
 Request_chord::Request_chord ()
 {
-  set_mus_property ("iterator-ctor",
-                   Request_chord_iterator::constructor_proc);
 }
 
 Pitch
index 5b0911a2dab71ece99fc16f4df5c02d3cc7c993c..152a67aa8884a4fa76cf8a24269ea7e4d692ee35 100644 (file)
@@ -22,9 +22,8 @@ Request::do_equal_b (Request const*) const
 }
   
 Request::Request ()
-  : Music (SCM_EOL)
+  : Music ()
 {
-  set_mus_property ("type", ly_symbol2scm ("request"));
 }
 
 Script_req::Script_req ()
@@ -60,7 +59,4 @@ Span_req::set_span_dir (Direction d)
   set_mus_property ("span-direction", gh_int2scm (d));
 }
 
-
-
-
-
+ADD_MUSIC(Request);
index b5aaa7722e31360a6cd8be93fa836b2e58230c73..cff3fbff873f0d0795235e67eef8b8daabda737c 100644 (file)
@@ -65,6 +65,7 @@ Rest_collision_engraver::stop_translation_timestep ()
 ENTER_DESCRIPTION(Rest_collision_engraver,
 /* descr */       "Handles collisions of rests.",
 /* creats*/       "RestCollision",
-/* acks  */       "note-column-interface",
+/* accepts */     "general-music",
+/* acks  */      "note-column-interface",
 /* reads */       "",
 /* write */       "");
index 96d169824977ec21640044ad00d5141a359f9bc1..dc617ef3b750b00f202c72f031830b86d4162942 100644 (file)
@@ -122,6 +122,7 @@ Rest_engraver::try_music (Music *m)
 ENTER_DESCRIPTION(Rest_engraver,
 /* descr */       "",
 /* creats*/       "Rest Dots",
-/* acks  */       "",
+/* accepts */     "general-music",
+/* acks  */      "",
 /* reads */       "centralCPosition",
 /* write */       "");
index edea4d8a95b69bcdfb50b23dc3c802e1c9e464ec..20c86a3b115206ace4d88fbecd608d1b1d8ecb62 100644 (file)
@@ -182,6 +182,7 @@ Rhythmic_column_engraver::start_translation_timestep ()
 ENTER_DESCRIPTION(Rhythmic_column_engraver,
 /* descr */       "Generates NoteColumn, an objects that groups stems, noteheads and rests.",
 /* creats*/       "NoteColumn NoteSpacing",
-/* acks  */       "stem-interface rhythmic-head-interface dot-column-interface",
+/* accepts */     "general-music",
+/* acks  */      "stem-interface rhythmic-head-interface dot-column-interface",
 /* reads */       "",
 /* write */       "");
index ce13f5ec447eee430d1a684c00f92d29a064aa66..f50c398aff58df0c687c0a4d32a0982721f2d328 100644 (file)
@@ -351,6 +351,7 @@ that there are no beams or notes that prevent a breakpoint.)
 
 ",
 /* creats*/       "System PaperColumn NonMusicalPaperColumn",
-/* acks  */       "note-spacing-interface staff-spacing-interface",
+/* accepts */     "general-music",
+/* acks  */      "note-spacing-interface staff-spacing-interface",
 /* reads */       "currentMusicalColumn currentCommandColumn",
 /* write */       "");
index 04262d3b8a607b3aaad90189fc3749dfff2eaa5b..686574f9d1e7c19780cf65cc8039d78aa569018e 100644 (file)
@@ -21,7 +21,8 @@
 ENTER_DESCRIPTION(Score_performer,
 /* descr */       "",
 /* creats*/       "",
-/* acks  */       "",
+/* accepts */     "general-music",
+/* acks  */      "",
 /* reads */       "",
 /* write */       "");
 
index 6141568630d6b851dc49ceb3bfe312c74977ad81..7af91365b702659dcaf35c7eba77a9f6b24906b4 100644 (file)
@@ -87,6 +87,7 @@ Script_column_engraver::process_acknowledged_grobs ()
 ENTER_DESCRIPTION(Script_column_engraver,
 /* descr */       "",
 /* creats*/       "ScriptColumn",
-/* acks  */       "side-position-interface",
+/* accepts */     "general-music",
+/* acks  */      "side-position-interface",
 /* reads */       "",
 /* write */       "");
index aa16108eddc2fc43d4e73751415402d712ae82d8..a153242688d73e09f58fee6fdb79b51db83f1b62 100644 (file)
@@ -209,6 +209,7 @@ ENTER_DESCRIPTION(Script_engraver,
 /* descr */       "    Handles note ornaments generated by @code{\\script}.  
 ",
 /* creats*/       "Script",
-/* acks  */       "stem-interface rhythmic-head-interface note-column-interface",
+/* accepts */     "general-music",
+/* acks  */      "stem-interface rhythmic-head-interface note-column-interface",
 /* reads */       "scriptDefinitions scriptHorizontal",
 /* write */       "");
index 28ea1082c09f2f59edccda6beef43ff1a645c8e6..cd1fa23a022118690459bb11b1110534659151f2 100644 (file)
@@ -213,6 +213,7 @@ Separating_line_group_engraver::stop_translation_timestep ()
 ENTER_DESCRIPTION(Separating_line_group_engraver,
 /* descr */       "Generates objects for computing spacing parameters.",
 /* creats*/       "SeparationItem SeparatingGroupSpanner",
-/* acks  */       "item-interface",
+/* accepts */     "general-music",
+/* acks  */      "item-interface",
 /* reads */       "",
 /* write */       "");
index 6a1c6f5240ef8dfe4c96bdf3ee467025e99e9f45..10acadf4cc120b83f02a5ab044bde8452bcc2062 100644 (file)
@@ -2,17 +2,9 @@
 #include "music-list.hh"
 #include "sequential-music-iterator.hh"
 
-Sequential_music::Sequential_music (SCM head)
-  : Music_sequence (head)
-{
-  set_mus_property ("iterator-ctor",
-                   Sequential_music_iterator::constructor_proc);
-}
 Sequential_music::Sequential_music ()
   : Music_sequence ()
 {
-  set_mus_property ("iterator-ctor",
-                   Sequential_music_iterator::constructor_proc);
 }
 
 
index 580a6f9b9d4fd44e5f33e4efdf2370960333218e..dcfa4c561bc555b483292bfb9da27bb96963c232 100644 (file)
@@ -16,19 +16,8 @@ Simultaneous_music::start_mom () const
   return Music_sequence::minimum_start (get_mus_property ("elements"));
 }
 
-Simultaneous_music::Simultaneous_music (SCM head)
-  : Music_sequence (head)
+Simultaneous_music::Simultaneous_music()
 {
-  set_mus_property ("iterator-ctor",
-                   Simultaneous_music_iterator::constructor_proc);
-}
-
-Simultaneous_music::Simultaneous_music ()
-  : Music_sequence ()
-{
-  set_mus_property ("iterator-ctor",
-                   Simultaneous_music_iterator::constructor_proc);
-  
 }
 
 Pitch
index 1f0355795ad225c93dae1723caed7469bd1897ff..b703078f6235eb44da0720244c1384ecda84e1f3 100644 (file)
@@ -205,6 +205,7 @@ Slur_engraver::start_translation_timestep ()
 ENTER_DESCRIPTION (Slur_engraver,
 /* descr */       "Build slurs from Slur_reqs",
 /* creats*/       "Slur",
-/* acks  */       "note-column-interface",
+/* accepts */     "general-music",
+/* acks  */      "note-column-interface",
 /* reads */       "slurMelismaBusy",
 /* write */       "");
index 52db8636823f7e8b3164d0509b31d1e7c53b4b5d..9903b10070378a71f3795dd246e43acaa7014260 100644 (file)
@@ -171,6 +171,7 @@ Spacing_engraver::start_translation_timestep ()
 ENTER_DESCRIPTION(Spacing_engraver,
 /* descr */       "make a SpacingSpanner and do bookkeeping of shortest starting and playing notes  ",
 /* creats*/       "SpacingSpanner",
-/* acks  */       "grob-interface",
+/* accepts */     "general-music",
+/* acks  */      "grob-interface",
 /* reads */       "",
 /* write */       "");
index 137c5a70632fb9f345287e064fb38099a709a397..92f6d0f42bf6f44677997c1c831922845cb21e23 100644 (file)
@@ -105,6 +105,7 @@ Span_arpeggio_engraver::stop_translation_timestep ()
 ENTER_DESCRIPTION(Span_arpeggio_engraver,
 /* descr */       "",
 /* creats*/       "Arpeggio",
-/* acks  */       "arpeggio-interface",
+/* accepts */     "general-music",
+/* acks  */      "arpeggio-interface",
 /* reads */       "connectArpeggios",
 /* write */       "");
index 053a88c7c58d235c4f4f525930cb851faa855293..503e563a1d96efca3e4348304fd6239f0f8e9b73 100644 (file)
@@ -93,6 +93,7 @@ ENTER_DESCRIPTION(Span_bar_engraver,
 /* descr */       "This engraver makes cross-staff barlines: It catches all normal
 bar lines, and draws a single span-bar across them.",
 /* creats*/       "SpanBar",
-/* acks  */       "bar-line-interface",
+/* accepts */     "general-music",
+/* acks  */      "bar-line-interface",
 /* reads */       "",
 /* write */       "");
index 8f6cfc95e00db8799167306355e8de15b8caa5d5..6c5386758487dd65d42ddaaf092be52ed1dae73d 100644 (file)
@@ -184,4 +184,7 @@ Span_dynamic_performer::try_music (Music* r)
     }
   return false;
 }
-ENTER_DESCRIPTION (Span_dynamic_performer, "","","","","" );
+ENTER_DESCRIPTION (Span_dynamic_performer,
+                  "", "",
+                  "general-music", 
+                  "", "", "");
index efc7f8df378822f8ef4a30bee4fd634dad8ea9fe..23792a7332f583b319461bc0434cc363f2bab171 100644 (file)
@@ -40,6 +40,7 @@ ENTER_DESCRIPTION(Staff_collecting_engraver,
 /* descr */       "Maintain the stavesFound variable",
 
 /* creats*/       "",
-/* acks  */       "staff-symbol-interface",
+/* accepts */     "general-music",
+/* acks  */      "staff-symbol-interface",
 /* reads */       "stavesFound",
 /* write */       "stavesFound");
index 0d64b09cecef78ff303ff308cdf853cb81a58770..d666fb6064d6fbbf2e333350c0e291ffa436ef1f 100644 (file)
@@ -41,7 +41,9 @@ private:
   Audio_tempo* tempo_;
 };
 
-ENTER_DESCRIPTION (Staff_performer, "","","","","" );
+ENTER_DESCRIPTION (Staff_performer, "", "",
+                  "general-music",
+                  "", "", "");
 
 Staff_performer::Staff_performer ()
 {
index 7e19c900c5534c46328e24c3af9d622c840b87e9..956f9a0c5bd202b08b300c63450195cb9835ad65 100644 (file)
@@ -74,6 +74,7 @@ ENTER_DESCRIPTION(Staff_symbol_engraver,
 /* descr */       "create the constellation of five (default)
 staff lines.",
 /* creats*/       "StaffSymbol",
-/* acks  */       "grob-interface",
+/* accepts */     "general-music",
+/* acks  */      "grob-interface",
 /* reads */       "",
 /* write */       "");
index cf64afb4d1eedce2f961c2ec2bc2e9028db43b18..9e1f3d1fc1675c1a537d580856433a6a8ae71302 100644 (file)
@@ -94,6 +94,7 @@ Stanza_number_engraver::create_text (SCM txt)
 ENTER_DESCRIPTION(Stanza_number_engraver,
 /* descr */       "",
 /* creats*/       "StanzaNumber",
-/* acks  */       "",
+/* accepts */     "general-music",
+/* acks  */      "",
 /* reads */       "stz stanza",
 /* write */       "");
index b1f3eb4b9957c5a26ba92dd7ce005b53fbb640c3..b18a94074f6abdcf42f235c4e23c744bffe1fb3f 100644 (file)
@@ -172,6 +172,7 @@ ENTER_DESCRIPTION(Stem_engraver,
 /* descr */       "Create stems and single-stem tremolos.  It also works together with
 the beam engraver for overriding beaming.",
 /* creats*/       "Stem StemTremolo",
-/* acks  */       "rhythmic-head-interface",
+/* accepts */     "general-music",
+/* acks  */      "rhythmic-head-interface",
 /* reads */       "tremoloFlags stemLeftBeamCount stemRightBeamCount",
 /* write */       "");
index c374d78675642ceaad4b7218a4b592682b14f678..8f00a789c23b8a0b9e12217d2a01f6ca83b4d70c 100644 (file)
@@ -22,6 +22,7 @@ Swallow_performer::Swallow_performer()
 ENTER_DESCRIPTION(Swallow_performer,
 /* descr */       "",
 /* creats*/       "",
-/* acks  */       "",
+/* accepts */     "general-music",
+/* acks  */      "",
 /* reads */       "",
 /* write */       "");
index 88646057f179036777e561962b9f2e67d258ff14..682cf4f069a18cb0a7c5de9eaf29d13c17073cc0 100644 (file)
@@ -87,6 +87,7 @@ System_start_delimiter_engraver::finalize ()
 ENTER_DESCRIPTION(System_start_delimiter_engraver,
 /* descr */       "Creates a system start delimiter (ie. SystemStart@{Bar,Brace,Bracket@} spanner",
 /* creats*/       "SystemStartBar SystemStartBrace SystemStartBracket",
-/* acks  */       "system-start-delimiter-interface staff-symbol-interface",
+/* accepts */     "general-music",
+/* acks  */      "system-start-delimiter-interface staff-symbol-interface",
 /* reads */       "systemStartDelimiter",
 /* write */       "");
index 9e8062a42fc93efd9b3cff0732466f34366cd4f8..603074d23485f66a8148f026f0c65459e4736054 100644 (file)
@@ -173,7 +173,8 @@ Tab_note_heads_engraver::start_translation_timestep ()
 ENTER_DESCRIPTION(Tab_note_heads_engraver,
 /* descr */       "Generate one or more tablature noteheads from Music of type Note_req.",
 /* creats*/       "TabNoteHead Dots",
-/* acks  */       "",
+/* accepts */     "general-music",
+/* acks  */      "",
 /* reads */       "centralCPosition stringTunings minimumFret tablatureFormat highStringOne stringOneTopmost",
 /* write */       "");
 
index a6d864b5c7210d87f70dd0a75e7c050f961993d0..682a6869d4824f211ee99fb8687a6a5d592f4762 100644 (file)
@@ -27,7 +27,9 @@ private:
   Audio_tempo* audio_;
 };
 
-ENTER_DESCRIPTION (Tempo_performer, "","","","","" );
+ENTER_DESCRIPTION (Tempo_performer, "","",
+                  "general-music",
+                  "","","" );
 
 
 Tempo_performer::Tempo_performer ()
index 723e111741e04760f4bac5cde99403b68eb8f5cf..505a74505a71ac27242a24d06f1536d66cb6bd99 100644 (file)
@@ -144,6 +144,7 @@ Text_engraver::Text_engraver(){}
 ENTER_DESCRIPTION(Text_engraver,
 /* descr */       "Create text-scripts",
 /* creats*/       "TextScript",
-/* acks  */       "rhythmic-head-interface stem-interface",
+/* accepts */     "general-music",
+/* acks  */      "rhythmic-head-interface stem-interface",
 /* reads */       "scriptHorizontal",
 /* write */       "");
index 7be64f5283281f88e43a5a142a59ec009febbfb1..0ac0944fa77a7dac17c91fc13864cc1767f5b211 100644 (file)
@@ -177,6 +177,7 @@ Text_spanner_engraver::finalize ()
 ENTER_DESCRIPTION(Text_spanner_engraver,
 /* descr */       "Create text spanner from a Span_req.",
 /* creats*/       "TextSpanner",
-/* acks  */       "note-column-interface",
+/* accepts */     "general-music",
+/* acks  */      "note-column-interface",
 /* reads */       "",
 /* write */       "");
index 19f4621f43e63eaa5849d663d348f64c02ceeded..569b911a32456f07b60e2b5e0c990a6ff7a647ad 100644 (file)
@@ -58,6 +58,7 @@ identical, it tells the @code{Thread_devnull_engraver} to discard
 everything in the second thread.
 ",
 /* creats*/       "",
-/* acks  */       "grob-interface",
+/* accepts */     "general-music",
+/* acks  */      "grob-interface",
 /* reads */       "",
 /* write */       "");
index e5f9efddf9cb953c35d2d0af184c61a77600db66..2e97956165cb4992da035577fba93419ffbd1159 100644 (file)
@@ -281,6 +281,7 @@ Tie_engraver::start_translation_timestep ()
 ENTER_DESCRIPTION(Tie_engraver,
 /* descr */       "Generate ties between noteheads of equal pitch.",
 /* creats*/       "Tie TieColumn",
-/* acks  */       "rhythmic-head-interface",
+/* accepts */     "general-music",
+/* acks  */      "rhythmic-head-interface",
 /* reads */       "sparseTies tieMelismaBusy",
 /* write */       "");
index b721cc963c21892a644933d503aee857c7dd7008..eb7b0f3c7808f40c5253442f71aa25a88d90a80c 100644 (file)
@@ -64,7 +64,9 @@ Tie_performer::Tie_performer ()
   done_ = false;
 }
 
-ENTER_DESCRIPTION (Tie_performer, "", "", "", "", "");
+ENTER_DESCRIPTION (Tie_performer, "", "",
+                  "general-music",
+                  "", "", "");
 
 
 void
index a46483a491c27d1b2b474abfd5c3924ef3e5e54e..18ea0436de55aa04f43b597d458dfef135acb903 100644 (file)
 #include "time-scaled-music.hh"
 #include "time-scaled-music-iterator.hh"
 
-Time_scaled_music::Time_scaled_music (SCM l)
-  : Music_wrapper (l)
-{
-  set_mus_property ("iterator-ctor",
-                   Time_scaled_music_iterator::constructor_proc);
-  
-}
-
 Time_scaled_music::Time_scaled_music ()
 {
   
 }
-
-
-
 ADD_MUSIC (Time_scaled_music);
index 5d3d7a6fb7b2044c2e16141b18d09869a2f6e663..5b7b384e79b53fbc878ce6c3d850a59fe9c8478e 100644 (file)
@@ -65,6 +65,7 @@ Time_signature_engraver::stop_translation_timestep ()
 ENTER_DESCRIPTION(Time_signature_engraver,
 /* descr */       "Create a TimeSignature whenever @code{timeSignatureFraction} changes",
 /* creats*/       "TimeSignature",
-/* acks  */       "",
+/* accepts */     "general-music",
+/* acks  */      "",
 /* reads */       "",
 /* write */       "");
index 4aad0091e3128b5aa91890df393205cf1006ad3e..e9a556807c497a28903693be1e7d84043de49052 100644 (file)
@@ -67,4 +67,4 @@ Time_signature_performer::stop_translation_timestep ()
     }
 }
 
-ENTER_DESCRIPTION (Time_signature_performer, "","","","","" );
+ENTER_DESCRIPTION(Time_signature_performer,"","","general-music","","","");
index dfdf4d51d02a5cf646379f95d122012db2d1601a..741956cbf315114c03b38edd4ed0ae2fb05b4aac 100644 (file)
@@ -95,6 +95,7 @@ Normally in @code{Score}.  In order to create polyrhythmic music,
 this engraver should be removed from @code{Score} and placed in
 @code{Staff}.",
 /* creats*/       "",
-/* acks  */       "",
+/* accepts */     "general-music",
+/* acks  */      "",
 /* reads */       "timeSignatureFraction barNonAuto whichBar barAlways defaultBarType skipBars timing oneBeat measureLength measurePosition currentBarNumber",
 /* write */       "");
index 2fb3654523d300527339482716c1badfb6486aff..01a67a8effdd152e9eb3fb850f9bd2f4ad002c15 100644 (file)
@@ -152,4 +152,4 @@ Timing_translator::start_translation_timestep ()
   daddy_trans_->set_property ("measurePosition", measposp.smobbed_copy ());
 }
 
-ENTER_DESCRIPTION (Timing_translator, "","","","","" );
+ENTER_DESCRIPTION(Timing_translator,"","","general-music","","","");
index 42f797cc75eefade748b599d45093b8424c49f6e..3f32cd7627ec23f1e6aef34b966b923f8bd1e887 100644 (file)
 #include "transposed-music.hh"
 #include "warn.hh"
 
-Transposed_music::Transposed_music (SCM l)
-  : Music_wrapper (l)
-{
-  set_mus_property ("type", ly_symbol2scm ("transposed-music"));
-}
-
-
 Pitch
 Transposed_music::to_relative_octave (Pitch p)
 {
index 2f4b38ffd4be0b995a32c13063b954512ab086be..052eda58a1e6d73a836b2697fcaab503dc5c1a3b 100644 (file)
@@ -155,6 +155,7 @@ Tuplet_engraver::Tuplet_engraver(){}
 ENTER_DESCRIPTION(Tuplet_engraver,
 /* descr */       "Catch Time_scaled_music and generate appropriate bracket  ",
 /* creats*/       "TupletBracket",
-/* acks  */       "note-column-interface",
+/* accepts */     "general-music",
+/* acks  */      "note-column-interface",
 /* reads */       "tupletNumberFormatFunction tupletSpannerDuration tupletInvisible",
 /* write */       "");
index fc3b9a03b033b8fc26df11543249f4b70a1591c0..b9eebf144007f783a3579661f94f30f33c19d079 100644 (file)
@@ -12,7 +12,6 @@
 
 Un_relativable_music::Un_relativable_music ( )
 {
-  set_mus_property ("type", ly_symbol2scm ("un-relativable-music"));
 }
 
 Pitch
index 7e266f7cf4cd55c16a9afdb143ed241d9faa1030..a607a32f3c6b8688851e8467cbf17a089bef1161 100644 (file)
@@ -69,6 +69,7 @@ Vertical_align_engraver::acknowledge_grob (Grob_info i)
 ENTER_DESCRIPTION(Vertical_align_engraver,
 /* descr */       "Catch Vertical axis groups and stack them.",
 /* creats*/       "VerticalAlignment",
-/* acks  */       "axis-group-interface",
+/* accepts */     "general-music",
+/* acks  */      "axis-group-interface",
 /* reads */       "",
 /* write */       "");
index de4988d7f39b31ee19eb1f4c7649b9801b555cad..70204ee2f556073a8ba1b475f6b7a187c2c9cf0c 100644 (file)
@@ -123,6 +123,7 @@ Voice_devnull_engraver::Voice_devnull_engraver(){}
 ENTER_DESCRIPTION(Voice_devnull_engraver,
 /* descr */       "Kill off certain items and spanners if we're Voice `two' and unison or unisilence is set.",
 /* creats*/       "",
-/* acks  */       "grob-interface",
+/* accepts */     "general-music",
+/* acks  */      "grob-interface",
 /* reads */       "",
 /* write */       "");
index 587a9e0981392cd8b6100914b6e12e67e8d9133d..fd65be42e0d7748a9c960a81f8f3558d4b52ade6 100644 (file)
@@ -211,6 +211,7 @@ Volta_engraver::stop_translation_timestep ()
 ENTER_DESCRIPTION(Volta_engraver,
 /* descr */       "Make volta brackets",
 /* creats*/       "VoltaBracket",
-/* acks  */       "bar-line-interface staff-symbol-interface note-column-interface",
+/* accepts */     "general-music",
+/* acks  */      "bar-line-interface staff-symbol-interface note-column-interface",
 /* reads */       "repeatCommands voltaSpannerDuration stavesFound",
 /* write */       "");
index 1bab46f71ec23a510755e29430dddb0ed26a1c6c..4bc71012e95290486696e111ea0f98237970b871 100644 (file)
@@ -208,7 +208,8 @@ is the  first to satisfy CRIT
 (if (not standalone)
     (map ly-load
                                        ; load-from-path
-        '("output-lib.scm"
+        '("music-types.scm"
+          "output-lib.scm"
           "c++.scm"
           "molecule.scm"
           "bass-figure.scm"
index d734535f31e17a7db81037cf3980998cebe43ec4..afddac1866f78ac7e284abc706fd958f4e68c7b9 100644 (file)
@@ -161,8 +161,7 @@ Fingering_engraver."
 this is not an override 
 "
   
-   (let* ((m (ly-make-music  "Music")))
-     (ly-set-mus-property! m 'iterator-ctor Push_property_iterator::constructor)
+   (let* ((m (make-music-by-name  'OverrideProperty)))
      (ly-set-mus-property! m 'symbol grob)
      (ly-set-mus-property! m 'grob-property gprop)
      (ly-set-mus-property! m 'grob-value val)
@@ -175,8 +174,7 @@ this is not an override
 
 (define-public (make-grob-property-revert grob gprop)
   "Revert the grob property GPROP for GROB."
-   (let* ((m (ly-make-music  "Music")))
-     (ly-set-mus-property! m 'iterator-ctor Pop_property_iterator::constructor)
+   (let* ((m (make-music-by-name  'OverrideProperty)))
      (ly-set-mus-property! m 'symbol grob)
      (ly-set-mus-property! m 'grob-property gprop)
                
@@ -326,7 +324,7 @@ this is not an override
      ))
 
 (define-public (empty-music)
-  (ly-id (ly-make-music "Music"))
+  (ly-id (make-music-by-name "Music"))
   )
 ;;;
 
index f1eaf73f7f8bb722faf989d3325355bf2b4eca7c..c6ddde46ec067485c4c702ca37fd132bc9fd1959 100644 (file)
@@ -58,6 +58,7 @@ TODO: consider making type into symbol ")
 
 (music-property-description 'predicate procedure? "the predicate of a \outputproperty")
 (music-property-description 'type symbol? "The type of this music object. Determines iteration in some cases.")
+(music-property-description 'types list? "The types of this music object. Determines iteration in some cases.")
 (music-property-description 'repeat-count  integer? "do a @code{\repeat} how ofen?")
 (music-property-description 'span-direction dir? "Does this start or stop a spanner?")
 
diff --git a/scm/music-types.scm b/scm/music-types.scm
new file mode 100644 (file)
index 0000000..3b7685a
--- /dev/null
@@ -0,0 +1,306 @@
+
+(define-public music-descriptions
+  `(
+    (ArpeggioEvent 
+     . (
+       (name . "Arpeggio_req")
+       (types . (general-music event ))
+       ))
+    (ArticulationEvent
+     . (
+       (name . "Articulation_req")
+       (types . (general-music event articulation-event script-event))
+       )) 
+    (BassFigureEvent
+     . (
+       (name . "Bass_figure_req")
+       (types . (general-music event rhythmic-event bass-figure-event))
+       ))  
+    (BreakEvent
+     . (
+       (name . "Break_req")
+
+       (types . (general-music event))
+       )) 
+    (BreathingSignEvent
+     . (
+       (name . "Breathing_sign_req")
+
+       (types . (general-music event breathing-event))
+       )) 
+    (BusyPlayingEvent
+     . (
+       (name . "Busy_playing_req")
+
+       (types . (general-music event busy-playing-event))
+       )) 
+    (ExtenderEvent
+     . (
+       (name . "Extender_req")
+       (types . (general-music event))
+       ))   
+    (GlissandoEvent
+     . (
+       (name . "Glissando_req")
+       (types . (general-music event))
+       )) 
+   (GraceMusic
+     . (
+       (name . "Grace_music")
+       (iterator-ctor . ,Grace_iterator::constructor)
+       (types . (grace-music music-wrapper-music general-music))
+       ))
+   (HyphenEvent
+     . (
+       (name . "Hyphen_req")
+       (types . (general-music event))
+       ))   
+    (KeyChangeEvent
+     . (
+       (name . "Key_change_req")
+       (types . (general-music event))
+       )) 
+    (LyricEvent
+     . (
+       (name . "Lyric_req")
+       (types . (general-music rhythmic-event event))
+       )) 
+    (MarkEvent
+     . (
+       (name . "Mark_req")
+       (types . (general-music event))
+       ))  
+    (MelismaEvent
+     . (
+       (name . "Melisma_playing_req")
+       (types . (general-music span-event event))
+       )) 
+    (Melisma_playingEvent
+     . (
+       (name . "Melisma_req")
+       (types . (general-music event))
+       ))
+    (Music
+     . (
+       (name . "Music")
+       (types . (general-music)) 
+       ))
+    (NoteEvent
+     . (
+       (name . "Note_req")
+       (types . (general-music event rhythmic-event melodic-event))
+       ))
+    (PorrectusEvent
+     . (
+       (name . "Porrectus_req")
+       (types . (general-music event))
+       ))
+    (RepeatedMusic
+     . (
+       (name . "Repeated_music")
+       (type .  repeated-music)g
+       (types . (general-music repeat-music))
+       ))
+    (Request
+     . (
+       (name . "Request")
+       (types . (general-music event))
+       )) 
+    (RestEvent
+     . (
+       (name . "Rest_req")
+       (types . (general-music event rhythmic-event ))
+       )) 
+    (RhythmicEvent
+     . (
+       (name . "Rhythmic_req")
+       (types . (general-music rhythmic-event  event))
+       )) 
+    (SequentialMusic
+     . (
+       (name . "Sequential_music")
+       (iterator-ctor . ,Sequential_music_iterator::constructor)
+       (types . (general-music sequential-music))
+       ))
+    (SimultaneousMusic
+     . (
+       (name . "Simultaneous_music")
+       (iterator-ctor . ,Simultaneous_music_iterator::constructor)
+       
+       (types . (general-music simultaneous-music))
+       ))
+    (PropertySet
+     . (
+       (name . "Music")
+       (types . (layout-instruction general-music))
+       (iterator-ctor . ,Property_iterator::constructor)
+       )
+     )
+     (PropertyUnset
+     . (
+       (name . "Music")
+       (types . (layout-instruction general-music))
+       (iterator-ctor . ,Property_unset_iterator::constructor)
+       )
+     )
+     (VoiceSeparator
+      . (
+        (name . "Music")
+        (types . (separator general-music))
+        ))
+     (BarCheck
+      . (
+        (name . "Music")
+        (types . (general-music bar-check))
+        (iterator-ctor . ,Bar_check_iterator::constructor)
+        ))
+     (OverrideProperty
+      . (
+        (name . "Music")
+        (types . (general-music layout-instruction))
+        (iterator-ctor . ,     Push_property_iterator::constructor)
+        ))
+
+     (RevertProperty
+      . (
+        (name . "Music")
+        (types . (general-music layout-instruction))
+        (iterator-ctor . ,     Pop_property_iterator::constructor)
+        ))
+     
+    (OutputPropertySetMusic
+     . (
+       (name . "Music")
+       (iterator-ctor . ,Output_property_music_iterator::constructor)
+       (types . (general-music layout-instruction))
+       ))
+    (ContextSpeccedMusic
+     . (
+       (name . "Context_specced_music")
+       (types . (context-specification general-music music-wrapper-music))
+       ))
+    (AutoChangeMusic
+     . (
+       (name . "Music_wrapper")
+       (iterator-ctor . ,Auto_change_iterator::constructor)
+       (types . (general-music music-wrapper-music auto-change-instruction))
+       ))
+    (TranslatorChange
+     . (
+       (name . "Music")
+       (iterator-ctor . , Change_iterator::constructor)
+       (types . (general-music translator-change-instruction))
+       ))
+
+    (TimeScaledMusic
+     . (
+       (name . "Time_scaled_music")
+       (iterator-ctor . ,Time_scaled_music_iterator::constructor)
+       (types . (time-scaled-music music-wrapper-music general-music))
+       ))
+    (TransposedMusic
+     . (
+       (name . "Transposed_music")
+       (types . (music-wrapper-music general-music transposed-music))
+       ))
+
+    (UntransposableMusic
+     . (
+       (name . "Untransposable_music")
+       (types . (music-wrapper-music general-music untransposable-music)) 
+       ))
+
+    (UnrelativableMusic
+     . (
+       (name . "Un_relativable_music")
+       (types . (music-wrapper-music general-music unrelativable-music))
+       ))
+
+    (RelativeOctaveMusic
+     . (
+       (name . "Relative_octave_music")
+       (types . (music-wrapper-music general-music relative-octave-music))
+       ))
+
+    (LyricCombineMusic
+     . (
+       (name . "Lyric_combine_music")
+       (types . (general-music lyric-combine-music))
+       (iterator-ctor . ,Lyric_combine_music_iterator::constructor)
+       ))
+
+    (PartCombineMusic
+     . (
+       (name . "Part_combine_music")
+       (types . (general-music part-combine-music))
+       (iterator-ctor . ,Part_combine_music_iterator::constructor)
+     ))
+    (RequestChord
+     . (
+       (name . "Request_chord")
+       (iterator-ctor . ,Request_chord_iterator::constructor)
+       (types . (general-music simultaneous-music))
+       )
+     )
+     
+    (ScriptEvent
+     . (
+       (name . "Script_req")
+
+       (types . (general-music event))
+       )) 
+    (SkipEvent
+     . (
+       (name . "Skip_req")
+
+       (types . (general-music event rhythmic-event ))
+       )) 
+    (SpanEvent
+     . (
+       (name . "Span_req")
+       (types . (general-music event))
+       )) 
+    (StringNumberEvent
+     . (
+       (name . "String_number_req")
+
+       (types . (general-music event))
+       )) 
+    (TempoEvent
+     . (
+       (name . "Tempo_req")
+
+       (types . (general-music event))
+       )) 
+    (TextScriptEvent
+     . (
+       (name . "Text_script_req")
+       (types . (general-music script-event text-script-event event))
+       )) 
+    (TieEvent
+     . (
+       (name . "Tie_req")
+       (types . (general-music tie-event event))
+       ))
+    ))
+
+
+
+(define music-name-to-property-table (make-vector 59))
+(map (lambda (x)
+       (hashq-set! music-name-to-property-table (car x) (cdr x))
+       )
+     music-descriptions)
+
+(define-public (make-music-by-name x)
+  (let*
+      (
+       (props (hashq-ref music-name-to-property-table x '()))
+       (name (if (pair? props) (cdr (assoc 'name props)) "Music"))
+       )
+
+    (if (eq? props '())
+       (ly-warn (format "Could not find music type `~a'" x)))  
+    (ly-extended-make-music name props)
+  ))