]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/key.cc
patch::: 1.3.15.jcn4
[lilypond.git] / lily / key.cc
index b7d9f22a23e9ef414e4750e051ebea0f43e72f17..40e5c7de94293cb760871926cc5257cb38f365db 100644 (file)
@@ -3,10 +3,8 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c)  1997--1998 Han-Wen Nienhuys <hanwen@stack.nl>
+  (c)  1997--1999 Han-Wen Nienhuys <hanwen@cs.uu.nl>
 
-  TODO
-  transposition.
 */
 
 #include "key.hh"
@@ -21,7 +19,7 @@ void
 Octave_key::print () const
 {
   for (int i= 0; i < 7 ; i++)
-    DOUT << "note " << i << " acc: " << accidental_i_arr_[i] << "\n";
+    DEBUG_OUT << "note " << i << " acc: " << accidental_i_arr_[i] << " iforce: " << internal_forceacc_b_arr_[i] << '\n';
 }
 
 
@@ -29,6 +27,7 @@ Octave_key::print () const
 Octave_key::Octave_key()
 {
   accidental_i_arr_.set_size (7);
+  internal_forceacc_b_arr_.set_size(7);
   clear ();
 }
 
@@ -36,7 +35,10 @@ void
 Octave_key::clear ()
 {
   for (int i= 0; i < 7 ; i++)
+  {
     accidental_i_arr_[i] = 0;
+    internal_forceacc_b_arr_[i] = false;
+  }
 }
 
 Key::Key()
@@ -51,12 +53,12 @@ Key::octave_to_index (int o) const
   int i = o + ZEROOCTAVE;
   if (i < 0)
     {
-      warning ("Don't have that many octaves (" + String (o) + ")");
+      warning (_f ("Don't have that many octaves (%s)", to_str (o)));
       i = 0;
     }
   if (i >= NUMBER_OF_OCTAVES)
     {
-      warning ("Don't have that many octaves (" + String (o) + ")");
+      warning (_f ("Don't have that many octaves (%s)", to_str (o)));
       i = NUMBER_OF_OCTAVES -1;
     }
   return i;
@@ -74,12 +76,12 @@ Octave_key::set (int i, int a)
 {
   if (a <= -3)
     {
-      warning ("Underdone accidentals (" + String (a)+ ")");
+      warning (_f ("underdone accidentals (%s)", to_str (a)));
       a = -2;
     }
   if (a >= 3)
     {
-      warning ("Overdone accidentals (" + String (a) + ")");
+      warning (_f ("overdone accidentals (%s)", to_str (a)));
       a = 2;
     }
   accidental_i_arr_[i]=a;
@@ -92,6 +94,20 @@ Key::set (Musical_pitch p)
   octaves_[i].set (p.notename_i_,p.accidental_i_);
 }
 
+void
+Key::set_internal_forceacc (Musical_pitch p)
+{
+  int   i = octave_to_index (p.octave_i_);
+  octaves_[i].internal_forceacc_b_arr_[p.notename_i_] = true;
+}
+
+void
+Key::clear_internal_forceacc (Musical_pitch p)
+{
+  int   i = octave_to_index (p.octave_i_);
+  octaves_[i].internal_forceacc_b_arr_[p.notename_i_] = false;
+}
+
 void
 Key::set (int n, int a)
 {
@@ -109,9 +125,9 @@ Key::print () const
 {
   for (int i= 0; i < NUMBER_OF_OCTAVES ; i++)
     {
-      DOUT << "octave " << i - ZEROOCTAVE << " Octave_key { ";
+      DEBUG_OUT << "octave " << i - ZEROOCTAVE << " Octave_key { ";
       octaves_[i].print ();
-      DOUT << "}\n";
+      DEBUG_OUT << "}\n";
     }
 }
 
@@ -120,3 +136,21 @@ Key::different_acc (Musical_pitch p)const
 {
   return oct (p.octave_i_).acc (p.notename_i_) == p.accidental_i_;
 }
+
+
+bool
+Key::internal_forceacc (Musical_pitch p)const
+{
+  return oct (p.octave_i_).internal_forceacc_b_arr_[p.notename_i_];
+}
+
+
+bool
+Key::double_to_single_acc (Musical_pitch p) const
+{
+  return ((oct (p.octave_i_).acc (p.notename_i_) == -2
+      && p.accidental_i_ == -1)
+         
+        || (oct (p.octave_i_).acc (p.notename_i_) == 2
+           && p.accidental_i_ == 1));
+}