]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/accidental-engraver.cc
release commit
[lilypond.git] / lily / accidental-engraver.cc
index 96d90b21b6f2590c86f59596564ceef0c737b924..b7c9289eab27db460c0e2057bca1b3e87428d775 100644 (file)
@@ -5,8 +5,8 @@
   Modified 2001-2002 by Rune Zedeler <rz@daimi.au.dk>
 */
 
-#include "musical-request.hh"
-#include "command-request.hh"
+#include "event.hh"
+
 #include "item.hh"
 #include "tie.hh"
 #include "rhythmic-head.hh"
@@ -32,7 +32,7 @@ tweakable.
 
 struct Accidental_entry {
   bool done_;
-  Note_req * melodic_;
+  Music * melodic_;
   Grob * accidental_;
   Translator_group *origin_;
   Grob*  head_;
@@ -125,7 +125,7 @@ calculates the number of accidentals on basis of the current local key sig
 
 */
 static int
-number_accidentals (SCM sig, Note_req * note, Pitch *pitch, SCM curbarnum, SCM lazyness, 
+number_accidentals (SCM sig, Music * note, Pitch *pitch, SCM curbarnum, SCM lazyness, 
                    bool ignore_octave_b)
 {
   int n = pitch->notename_;
@@ -158,9 +158,7 @@ number_accidentals (SCM sig, Note_req * note, Pitch *pitch, SCM curbarnum, SCM l
   int p = gh_number_p (prev_acc) ? gh_scm2int (prev_acc) : 0;
 
   int num;
-  if (a == p
-      && !to_boolean (note->get_mus_property ("force-accidental"))
-      && gh_number_p (prev_acc))
+  if (a == p && gh_number_p (prev_acc))
     num = 0;
   else if ( (abs (a)<abs (p) || p*a<0) && a != 0 )
     num = 2;
@@ -171,7 +169,7 @@ number_accidentals (SCM sig, Note_req * note, Pitch *pitch, SCM curbarnum, SCM l
 }
 
 static int
-number_accidentals (Note_req * note, Pitch *pitch, Translator_group * origin, 
+number_accidentals (Music * note, Pitch *pitch, Translator_group * origin, 
                    SCM accidentals, SCM curbarnum)
 {
   int number = 0;
@@ -241,7 +239,7 @@ Accidental_engraver::process_acknowledged_grobs ()
       SCM barnum = get_property ("currentBarNumber");
       SCM smp = get_property("measurePosition");
       Moment mp = (unsmob_moment (smp)) ? *unsmob_moment (smp) : Moment (0);
-      if(mp<0 && gh_number_p(barnum)) barnum = scm_int2num(gh_scm2int(barnum)-1);
+      if(mp.main_part_<Rational(0) && gh_number_p(barnum)) barnum = scm_int2num(gh_scm2int(barnum)-1);
       bool extra_natural_b = get_property ("extraNatural") == SCM_BOOL_T;
       for (int i = 0; i  < accidentals_.size (); i++) 
        {
@@ -249,7 +247,7 @@ Accidental_engraver::process_acknowledged_grobs ()
            continue;
          accidentals_[i].done_  = true;
          Grob * support = accidentals_[i].head_;
-         Note_req * note = accidentals_[i].melodic_;
+         Music * note = accidentals_[i].melodic_;
          Translator_group * origin = accidentals_[i].origin_;
 
          Pitch * pitch = unsmob_pitch (note->get_mus_property ("pitch"));
@@ -262,6 +260,9 @@ Accidental_engraver::process_acknowledged_grobs ()
              num = num_caut;
              cautionary = true;
            }
+
+         if(num==0 && to_boolean (note->get_mus_property ("force-accidental")))
+            num=1;
          
          bool different = num < 0;
          num = abs (num);
@@ -428,9 +429,11 @@ Accidental_engraver::stop_translation_timestep ()
 void
 Accidental_engraver::acknowledge_grob (Grob_info info)
 {
-  Note_req * note =  dynamic_cast <Note_req *> (info.music_cause ());
+  Music * note =  info.music_cause ();
 
-  if (note && Rhythmic_head::has_interface (info.grob_))
+  if (note
+      && note->is_mus_type("note-event")
+      && Rhythmic_head::has_interface (info.grob_))
     {
       Accidental_entry entry ;
       entry.head_ = info.grob_;
@@ -477,12 +480,11 @@ Accidental_engraver::process_music ()
 
 
 ENTER_DESCRIPTION (Accidental_engraver,
-"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.",
-                  
+"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.",
               "Accidental",
-/* accepts */     "general-music",
+/* accepts */     "",
               "rhythmic-head-interface tie-interface arpeggio-interface",
               "localKeySignature extraNatural autoAccidentals autoCautionaries",
                   "localKeySignature");