]> git.donarmstrong.com Git - lilypond.git/commitdiff
(test_moment): robustify.
authorHan-Wen Nienhuys <hanwen@xs4all.nl>
Tue, 28 Sep 2004 22:35:07 +0000 (22:35 +0000)
committerHan-Wen Nienhuys <hanwen@xs4all.nl>
Tue, 28 Sep 2004 22:35:07 +0000 (22:35 +0000)
ChangeLog
lily/auto-beam-engraver.cc
lily/event.cc

index 3ba8dbbb63553e43b000a82ba106a66606cb1c2b..8ac2f3abcc387c5152293defa0006066eff2eb85 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+2004-09-29  Han-Wen Nienhuys   <hanwen@xs4all.nl>
+
+       * lily/auto-beam-engraver.cc (test_moment): robustify.
+
 2004-09-28  Werner Lemberg  <wl@gnu.org>
 
        * scm/framework-tex.scm (font-load-command): Define proper font
index d60fdb76a6353c225f436bdc883dafbf2d42e87c..13dd0466b622e3c37c63d0d7d3cb0787f886c18f 100644 (file)
@@ -154,10 +154,20 @@ Auto_beam_engraver::test_moment (Direction dir, Moment test_mom)
     function = scm_list_n (ly_symbol2scm ("begin"), SCM_UNDEFINED);
   else
     function = scm_list_n (ly_symbol2scm ("end"), SCM_UNDEFINED);
-
-  Moment one_beat = *unsmob_moment (get_property ("beatLength"));
-  int num = int ((*unsmob_moment (get_property ("measureLength")) / one_beat).main_part_);
-  int den = one_beat.den ();
+  
+  Moment beat_length (1,4);
+  if (Moment * m = unsmob_moment (get_property ("beatLength")))
+    {
+      beat_length = *m;
+    }
+  Moment measure_length (1,1);
+  int num = 4;
+  if (Moment* m = unsmob_moment (get_property ("measureLength")))
+    {
+      num = int ((*m / beat_length).main_part_);
+    }
+  
+  int den = beat_length.den ();
   SCM time = scm_list_n (scm_int2num (num), scm_int2num (den), SCM_UNDEFINED);
 
   SCM type = scm_list_n (scm_int2num (test_mom.num ()),
@@ -212,10 +222,20 @@ Auto_beam_engraver::test_moment (Direction dir, Moment test_mom)
         We may have to fix this elsewhere (timing translator)
        r = unsmob_moment (get_property ("measurePosition"))->mod_rat (moment);
       */
-      Moment pos = * unsmob_moment (get_property ("measurePosition"));
+      Moment pos (0);
+      if (Moment  *m = unsmob_moment (get_property ("measurePosition")))
+       {
+         pos = *m;
+       }
+         
       if (pos < Moment (0))
        {
-         Moment length = * unsmob_moment (get_property ("measureLength"));
+         Moment length(1);
+
+         if ( Moment *m =  unsmob_moment (get_property ("measureLength")))
+           {
+             length = *m;
+           }
          pos = length - pos;
        }
       r = pos.main_part_.mod_rat (moment.main_part_);
index ba190b0f999655fb5d5886b4ea0d4e46e77e81a1..aad0bd21101ca3e36e560acb41b0784651dfe641 100644 (file)
@@ -33,24 +33,23 @@ Event::compress (Moment m)
 void
 Event::transpose (Pitch delta)
 {
-  /*
-    TODO: should change music representation such that
-    _all_ pitch values are transposed automatically.
-   */
-  
-  Pitch *p = unsmob_pitch (get_property ("pitch"));
-  if (!p)
-    return ;
-
-  Pitch np = p->transposed (delta);
-  
-  if (abs (np.get_alteration ()) > DOUBLE_SHARP)
+  for (SCM s = this->get_property_alist (true); scm_is_pair (s); s = ly_cdr (s))
     {
-       warning (_f ("Transposition by %s makes alteration larger than two",
-         delta.to_string ()));
-    }
+      SCM entry = ly_car (s);
+      SCM val = ly_cdr (entry);
 
-  set_property ("pitch", np.smobbed_copy ());
+      if (Pitch * p = unsmob_pitch (val))
+       {
+         Pitch transposed =  p->transposed (delta);
+         scm_set_cdr_x (entry, transposed.smobbed_copy ());
+
+         if (abs (transposed.get_alteration ()) > DOUBLE_SHARP)
+           {
+             warning (_f ("Transposition by %s makes alteration larger than two",
+                          delta.to_string ()));
+           }
+       }
+    }
 }
 
 Pitch