]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/local-key-engraver.cc
release: 1.5.13
[lilypond.git] / lily / local-key-engraver.cc
index fb491fdf4c00743a55f5920bea3be7bc63aeb18b..8ef57ed105436310af8e92d38fe2d21bf922fdb6 100644 (file)
@@ -33,7 +33,7 @@
 struct Local_key_engraver : Engraver {
   Item *key_item_p_;
 protected:
-  VIRTUAL_COPY_CONS (Translator);
+  TRANSLATOR_DECLARATIONS(Local_key_engraver);
   virtual void process_music ();
   virtual void acknowledge_grob (Grob_info);
   virtual void stop_translation_timestep ();
@@ -55,13 +55,12 @@ public:
   Link_array<Grob> support_l_arr_;
   Link_array<Item> forced_l_arr_;
   Link_array<Grob> tie_l_arr_;
-  Local_key_engraver ();
+
 };
 
 Local_key_engraver::Local_key_engraver ()
 {
   key_item_p_ =0;
-
   last_keysig_ = SCM_EOL;
 }
 
@@ -95,7 +94,7 @@ Local_key_engraver::create_grobs ()
          SCM prev = scm_assoc (gh_cons (gh_int2scm (o), gh_int2scm (n)), localsig);
          if (prev == SCM_BOOL_F)
            prev = scm_assoc (gh_int2scm (n), localsig);
-         SCM prev_acc = (prev == SCM_BOOL_F) ? gh_int2scm (0) : gh_cdr (prev);
+         SCM prev_acc = (prev == SCM_BOOL_F) ? gh_int2scm (0) : ly_cdr (prev);
          bool different = !gh_equal_p (prev_acc , gh_int2scm (a));
          int p = gh_number_p (prev_acc) ? gh_scm2int (prev_acc) : 0;
 
@@ -242,18 +241,18 @@ Local_key_engraver::acknowledge_grob (Grob_info info)
 {
   Note_req * note_l =  dynamic_cast <Note_req *> (info.req_l_);
 
-  if (note_l && Rhythmic_head::has_interface (info.elem_l_))
+  if (note_l && Rhythmic_head::has_interface (info.grob_l_))
     {
       mel_l_arr_.push (note_l);
-      support_l_arr_.push (info.elem_l_);
+      support_l_arr_.push (info.grob_l_);
     }
-  else if (Tie::has_interface (info.elem_l_))
+  else if (Tie::has_interface (info.grob_l_))
     {
-      tie_l_arr_.push (info.elem_l_);
+      tie_l_arr_.push (info.grob_l_);
     }
-  else if (Arpeggio::has_interface (info.elem_l_))
+  else if (Arpeggio::has_interface (info.grob_l_))
     {
-      arpeggios_.push (info.elem_l_); 
+      arpeggios_.push (info.grob_l_); 
     }
   
 }
@@ -277,7 +276,7 @@ Local_key_engraver::process_music ()
       daddy_trans_l_->set_property ("localKeySignature",  ly_deep_copy (sig));
       last_keysig_ = sig;
     }
-  else if (!mp)
+  else if (!mp.to_bool () )
     {
       if (!to_boolean (get_property ("noResetKey")))
        daddy_trans_l_->set_property ("localKeySignature",  ly_deep_copy (sig));
@@ -286,5 +285,13 @@ Local_key_engraver::process_music ()
 
 
 
-ADD_THIS_TRANSLATOR (Local_key_engraver);
 
+
+ENTER_DESCRIPTION(Local_key_engraver,
+/* descr */       "Make accidentals.  Catches note heads, ties and notices key-change
+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. FIXME",
+/* creats*/       "Accidentals",
+/* acks  */       "rhythmic-head-interface tie-interface arpeggio-interface",
+/* reads */       "localKeySignature forgetAccidentals noResetKey",
+/* write */       "");