]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/auto-beam-engraver.cc
2003 -> 2004
[lilypond.git] / lily / auto-beam-engraver.cc
index 9a816a42abbb55b7090439222adb5c7ace3b9fa6..96046d33410bda3deb1836c1cce577291bae35ba 100644 (file)
@@ -3,7 +3,7 @@
   
   source file of the GNU LilyPond music typesetter
   
-  (c) 1999--2003 Jan Nieuwenhuizen <janneke@gnu.org>
+  (c) 1999--2004 Jan Nieuwenhuizen <janneke@gnu.org>
   
  */
 
@@ -31,6 +31,7 @@ class Auto_beam_engraver : public Engraver
 protected:
   virtual void stop_translation_timestep ();
   virtual void start_translation_timestep ();
+  virtual void process_music ();
   virtual void finalize ();
   virtual void acknowledge_grob (Grob_info);
   virtual void process_acknowledged_grobs ();
@@ -73,6 +74,15 @@ private:
   Beaming_info_list*finished_grouping_;
 };
 
+void
+Auto_beam_engraver::process_music ()
+{
+  if (gh_string_p (get_property ("whichBar")))
+    {
+      consider_end (shortest_mom_);
+      junk_beam ();
+    }
+}
 
 
 Auto_beam_engraver::Auto_beam_engraver ()
@@ -256,9 +266,13 @@ Auto_beam_engraver::create_beam ()
 void
 Auto_beam_engraver::begin_beam ()
 {
-  assert (!stems_);
+  if (stems_ || grouping_ )
+    {
+      programming_error ("already have autobeam");
+      return; 
+    }
+  
   stems_ = new Link_array<Item>;
-  assert (!grouping_);
   grouping_ = new Beaming_info_list;
   beam_settings_ = get_property ("Beam");
   
@@ -268,11 +282,11 @@ Auto_beam_engraver::begin_beam ()
   beat_length_ = *unsmob_moment (get_property ("beatLength"));
 }
 
-
 void
 Auto_beam_engraver::junk_beam () 
 {
-  assert (stems_);
+  if (!stems_)
+    return ;
   
   delete stems_;
   stems_ = 0;
@@ -291,7 +305,6 @@ Auto_beam_engraver::end_beam ()
       junk_beam ();
     }
   else
-    
     {
       finished_beam_ = create_beam ();
       if (finished_beam_)