]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/event.cc
* lily/ambitus-engraver.cc (create_ambitus): change name to
[lilypond.git] / lily / event.cc
index fad850caf4dc7dc7745fa30635bec485636b912a..1c1112379bf68a5dd2a8fd478fe6965351e85997 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1996--2002 Han-Wen Nienhuys <hanwen@cs.uu.nl>
+  (c) 1996--2004 Han-Wen Nienhuys <hanwen@cs.uu.nl>
 */
 
 #include "event.hh"
@@ -13,7 +13,7 @@
 Moment
 Event::get_length () const
 {
-  Duration *d = unsmob_duration (get_mus_property ("duration"));
+  Duration *d = unsmob_duration (get_property ("duration"));
   if (!d)
     {
       Moment m ;
@@ -25,39 +25,57 @@ Event::get_length () const
 void
 Event::compress (Moment m)
 {
-  Duration *d =  unsmob_duration (get_mus_property ("duration"));
+  Duration *d =  unsmob_duration (get_property ("duration"));
   if (d)
-    set_mus_property ("duration", d ->compressed (m.main_part_).smobbed_copy ());
+    set_property ("duration", d ->compressed (m.main_part_).smobbed_copy ());
 }
 
 void
 Event::transpose (Pitch delta)
 {
-  Pitch *p = unsmob_pitch (get_mus_property ("pitch"));
+  /*
+    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;
-  np.transpose (delta);
+  Pitch np = p->transposed (delta);
   
-  if (abs (np.alteration_) > 2)
+  if (abs (np.get_alteration ()) > DOUBLE_SHARP)
     {
-       warning (_f ("Transposition by %s makes accidental larger than two",
-         delta.string ()));
+       warning (_f ("Transposition by %s makes alteration larger than two",
+         delta.to_string ()));
     }
 
-  set_mus_property ("pitch", np.smobbed_copy ());
+  set_property ("pitch", np.smobbed_copy ());
 }
 
 Pitch
- Event::to_relative_octave (Pitch last)
+Event::to_relative_octave (Pitch last)
 {
-  Pitch *old_pit = unsmob_pitch (get_mus_property ("pitch"));
+  Pitch *old_pit = unsmob_pitch (get_property ("pitch"));
   if (old_pit)
     {
       Pitch new_pit = *old_pit;
-      new_pit.to_relative_octave (last);
-      set_mus_property ("pitch", new_pit.smobbed_copy ());
+      new_pit = new_pit.to_relative_octave (last);
+
+      SCM check = get_property ("absolute-octave");
+      if (ly_c_number_p (check) &&
+         new_pit.get_octave () != ly_scm2int (check))
+       {
+         Pitch expected_pit (ly_scm2int (check),
+                             new_pit.get_notename (),
+                             new_pit.get_alteration ());
+         origin ()->warning (_f ("octave check failed; expected %s, found: %s",
+                                 expected_pit.to_string (),
+                                 new_pit.to_string ()));
+         new_pit = expected_pit;
+       }
+      
+      set_property ("pitch", new_pit.smobbed_copy ());
   
       return new_pit;
     }
@@ -69,15 +87,16 @@ Event::Event ()
 {
 }
 
-ADD_MUSIC(Event);
-LY_DEFINE(music_duration_length, "music-duration-length", 1, 0,0,
+ADD_MUSIC (Event);
+
+LY_DEFINE (ly_music_duration_length, "ly:music-duration-length", 1, 0,0,
          (SCM mus),
          "Extract the duration field from @var{mus}, and return the length.")
 {
-  Music* m =   unsmob_music(mus);
-  SCM_ASSERT_TYPE(m, mus, SCM_ARG1, __FUNCTION__, "Music");
+  Music* m =   unsmob_music (mus);
+  SCM_ASSERT_TYPE (m, mus, SCM_ARG1, __FUNCTION__, "Music");
   
-  Duration *d = unsmob_duration (m->get_mus_property ("duration"));
+  Duration *d = unsmob_duration (m->get_property ("duration"));
 
   Moment l ;
   
@@ -86,24 +105,24 @@ LY_DEFINE(music_duration_length, "music-duration-length", 1, 0,0,
       l = d->get_length ();  
     }
   else
-    programming_error("Music has no duration");
-  return l.smobbed_copy();
+    programming_error ("Music has no duration");
+  return l.smobbed_copy ();
   
 }
 
 
-LY_DEFINE(music_duration_compress, "ly:music-duration-compress", 2, 0,0,
-         (SCM mus, SCM factor),
-         "Extract the duration field from @var{mus}, and compress it.")
+LY_DEFINE (ly_music_duration_compress, "ly:music-duration-compress", 2, 0,0,
+         (SCM mus, SCM fact),
+         "Compress @var{mus} by factor @var{fact}, which is a @code{Moment}.")
 {
-  Music* m =   unsmob_music(mus);
-  Moment * f = unsmob_moment (factor);
-  SCM_ASSERT_TYPE(m, mus, SCM_ARG1, __FUNCTION__, "Music");
-  SCM_ASSERT_TYPE(f, factor, SCM_ARG2, __FUNCTION__, "Moment");
+  Music* m =   unsmob_music (mus);
+  Moment * f = unsmob_moment (fact);
+  SCM_ASSERT_TYPE (m, mus, SCM_ARG1, __FUNCTION__, "Music");
+  SCM_ASSERT_TYPE (f, fact, SCM_ARG2, __FUNCTION__, "Moment");
   
-  Duration *d = unsmob_duration (m->get_mus_property ("duration"));
+  Duration *d = unsmob_duration (m->get_property ("duration"));
   if (d)
-    m->set_mus_property ("duration", d->compressed (f->main_part_).smobbed_copy());
+    m->set_property ("duration", d->compressed (f->main_part_).smobbed_copy ());
   return SCM_UNSPECIFIED;
 }
 
@@ -112,81 +131,74 @@ LY_DEFINE(music_duration_compress, "ly:music-duration-compress", 2, 0,0,
 /*
   This is hairy, since the scale in a key-change event may contain
   octaveless notes.
+
+
+  TODO: this should use ly:pitch. 
  */
-LY_DEFINE(transpose_key_alist, "ly:transpose-key-alist",
-         2, 0,0, (SCM l, SCM pitch),
-         "Make a new key alist of @var{l} transposed by pitch @var{pitch}")
+LY_DEFINE (ly_transpose_key_alist, "ly:transpose-key-alist",
+         2, 0, 0, (SCM l, SCM pit),
+         "Make a new key alist of @var{l} transposed by pitch @var{pit}")
 {
   SCM newlist = SCM_EOL;
-  Pitch *p = unsmob_pitch (pitch);
+  Pitch *p = unsmob_pitch (pit);
   
-  for (SCM s = l; gh_pair_p (s); s = ly_cdr (s))
+  for (SCM s = l; ly_c_pair_p (s); s = ly_cdr (s))
     {
       SCM key = ly_caar (s);
       SCM alter = ly_cdar (s);
-      if (gh_pair_p (key))
+      if (ly_c_pair_p (key))
        {
-         Pitch orig (gh_scm2int (ly_car (key)),
-                             gh_scm2int (ly_cdr (key)),
-                             gh_scm2int (alter));
+         Pitch orig (ly_scm2int (ly_car (key)),
+                     ly_scm2int (ly_cdr (key)),
+                     ly_scm2int (alter));
 
-         orig.transpose (*p);
+         orig =orig.transposed (*p);
 
-         SCM key = gh_cons (scm_int2num (orig.get_octave ()),
-                            scm_int2num (orig.notename_));
+         SCM key = scm_cons (scm_int2num (orig.get_octave ()),
+                            scm_int2num (orig.get_notename ()));
 
-         newlist = gh_cons (gh_cons (key, scm_int2num (orig.alteration_)),
+         newlist = scm_cons (scm_cons (key, scm_int2num (orig.get_alteration ())),
                             newlist);
        }
-      else if (gh_number_p (key))
+      else if (ly_c_number_p (key))
        {
-         Pitch orig (0, gh_scm2int (key), gh_scm2int (alter));
-         orig.transpose (*p);
+         Pitch orig (0, ly_scm2int (key), ly_scm2int (alter));
+         orig = orig.transposed (*p);
 
-         key =scm_int2num (orig.notename_);
-         alter = scm_int2num (orig.alteration_);
-         newlist = gh_cons (gh_cons (key, alter), newlist);
+         key =scm_int2num (orig.get_notename ());
+         alter = scm_int2num (orig.get_alteration ());
+         newlist = scm_cons (scm_cons (key, alter), newlist);
        }
     }
   return scm_reverse_x (newlist, SCM_EOL);
 }
 
 void
-Key_change_req::transpose (Pitch p)
+Key_change_ev::transpose (Pitch p)
 {
-  SCM pa = get_mus_property ("pitch-alist");
+  SCM pa = get_property ("pitch-alist");
 
-  set_mus_property ("pitch-alist", transpose_key_alist (pa, p.smobbed_copy()));
+  set_property ("pitch-alist", ly_transpose_key_alist (pa, p.smobbed_copy ()));
+  Pitch tonic = *unsmob_pitch (get_property ("tonic"));
+  set_property ("tonic",
+                   tonic.smobbed_copy ());
 }
 
-
 bool
 alist_equal_p (SCM a, SCM b)
 {
   for (SCM s = a;
-       gh_pair_p (s); s = ly_cdr (s))
+       ly_c_pair_p (s); s = ly_cdr (s))
     {
       SCM key = ly_caar (s);
       SCM val = ly_cdar (s);
       SCM l = scm_assoc (key, b);
 
       if (l == SCM_BOOL_F
-         || !gh_equal_p ( ly_cdr (l), val))
+         || !ly_c_equal_p ( ly_cdr (l), val))
 
        return false;
     }
   return true;
 }
-
-bool
-Key_change_req::do_equal_b (Event const * m )const
-{
-  Key_change_req const * kc =dynamic_cast<Key_change_req const*> (m);
-
-  if(!kc)
-    return false;
-  return alist_equal_p (get_mus_property ("pitch-alist"),
-                       kc->get_mus_property ("pitch-alist"));
-}
-
-ADD_MUSIC (Key_change_req);
+ADD_MUSIC (Key_change_ev);