]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/ambitus-engraver.cc
Merge commit 'origin/dev/jneeman' into systems-per-page
[lilypond.git] / lily / ambitus-engraver.cc
index e00ea133dddac7055db68426c2a0a0fe9ffc8d5f..202e691d21d6515060cad0b0325fecc7af781200 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2002--2007 Juergen Reuter <reuter@ipd.uka.de>
+  (c) 2002--2009 Juergen Reuter <reuter@ipd.uka.de>
 
   Han-Wen Nienhuys <hanwen@xs4all.nl
 */
@@ -19,7 +19,7 @@
 #include "protected-scm.hh"
 #include "side-position-interface.hh"
 #include "separation-item.hh"
-#include "staff-symbol-referencer.hh" 
+#include "staff-symbol-referencer.hh"
 #include "stream-event.hh"
 
 #include "translator.icc"
@@ -28,8 +28,10 @@ class Ambitus_engraver : public Engraver
 {
 public:
   TRANSLATOR_DECLARATIONS (Ambitus_engraver);
+protected:
+  DECLARE_ACKNOWLEDGER (note_head);
+
   void process_music ();
-  void acknowledge_note_head (Grob_info);
   void stop_translation_timestep ();
   virtual void finalize ();
   virtual void derived_mark () const;
@@ -119,9 +121,16 @@ void
 Ambitus_engraver::acknowledge_note_head (Grob_info info)
 {
   Stream_event *nr = info.event_cause ();
+  SCM p = nr->get_property ("pitch");
+  /*
+    If the engraver is added to a percussion context,
+    filter out unpitched note heads.
+  */
+  if (!unsmob_pitch (p))
+    return;
   if (nr && nr->in_event_class ("note-event"))
     {
-      Pitch pitch = *unsmob_pitch (nr->get_property ("pitch"));
+      Pitch pitch = *unsmob_pitch (p);
       Drul_array<bool> expands = pitch_interval_.add_point (pitch);
       if (expands[UP])
        causes_[UP] = nr;
@@ -135,7 +144,7 @@ Ambitus_engraver::finalize ()
 {
   if (ambitus_ && !pitch_interval_.is_empty ())
     {
-      Grob * accidental_placement =
+      Grob *accidental_placement =
        make_item ("AccidentalPlacement",
                   accidentals_[DOWN]->self_scm ());
 
@@ -194,11 +203,19 @@ Ambitus_engraver::finalize ()
 
 ADD_ACKNOWLEDGER (Ambitus_engraver, note_head);
 ADD_TRANSLATOR (Ambitus_engraver,
-               /* doc */ "",
+               /* doc */
+               "",
+
                /* create */
+               "AccidentalPlacement "
                "Ambitus "
+               "AmbitusAccidental "
                "AmbitusLine "
-               "AmbitusNoteHead "
-               "AmbitusAccidental",
-               /* read */ "",
-               /* write */ "");
+               "AmbitusNoteHead ",
+
+               /* read */
+               "",
+
+               /* write */
+               ""
+               );