]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/percent-repeat-engraver.cc
nested grace beams
[lilypond.git] / lily / percent-repeat-engraver.cc
index cd11b6a89d5d4d1be779272f699c8a44870dfaee..f31329b7b6049eb83cc57578dba13ea858c8f0c0 100644 (file)
@@ -3,7 +3,7 @@
   
   source file of the GNU LilyPond music typesetter
   
-  (c) 2000--2001 Han-Wen Nienhuys <hanwen@cs.uu.nl>
+  (c) 2000--2002 Han-Wen Nienhuys <hanwen@cs.uu.nl>
   
  */
 
@@ -16,7 +16,7 @@
 #include "spanner.hh"
 #include "item.hh"
 #include "percent-repeat-iterator.hh"
-#include "bar.hh"
+#include "bar-line.hh"
 
 #include "score-engraver.hh"
 #include "translator-group.hh"
@@ -36,8 +36,7 @@ class Percent_repeat_engraver : public Engraver
 {
   void typeset_perc ();
 public:
-  VIRTUAL_COPY_CONS (Translator);
-  Percent_repeat_engraver ();
+  TRANSLATOR_DECLARATIONS(Percent_repeat_engraver);
 protected:
   Repeated_music * repeat_;
 
@@ -103,7 +102,7 @@ Percent_repeat_engraver::try_music (Music * m)
        meas_len = *unsmob_moment (m);
 
       if (body_length_ < meas_len &&
-         meas_len.mod_rat (body_length_) == Moment (0,0))
+         meas_len.main_part_.mod_rat (body_length_.main_part_) == Moment (Rational (0,0)))
        repeat_sign_type_ = BEAT;
       else if (meas_len == body_length_)
        repeat_sign_type_ = MEASURE;
@@ -147,7 +146,7 @@ Percent_repeat_engraver::process_music ()
       if (repeat_sign_type_ == BEAT)
        {
          beat_slash_ = new Item (get_property ("RepeatSlash"));
-         announce_grob (beat_slash_, repeat_);
+         announce_grob(beat_slash_, repeat_->self_scm());
        }
       else if (repeat_sign_type_ == MEASURE)
        {
@@ -156,28 +155,19 @@ Percent_repeat_engraver::process_music ()
          perc_p_ = new Spanner (get_property ("PercentRepeat"));
          SCM col =get_property ("currentCommandColumn");
          perc_p_->set_bound (LEFT, unsmob_grob (col));
-         announce_grob (perc_p_, repeat_);
+         announce_grob(perc_p_, repeat_->self_scm());
        }
       else if (repeat_sign_type_ == DOUBLE_MEASURE)
        
        {
          double_percent_ = new Item (get_property ("DoublePercentRepeat"));
-         announce_grob (double_percent_, repeat_);
+         announce_grob(double_percent_, repeat_->self_scm());
 
       /*
        forbid breaks on a % line. Should forbid all breaks, really.
        */
-         Score_engraver * e = 0;
-         Translator * t  =  daddy_grav_l ();
-         for (; !e && t;  t = t->daddy_trans_l_)
-           {
-             e = dynamic_cast<Score_engraver*> (t);
-           }
-
-         if (!e)
-           programming_error ("No score engraver!");
-         else
-           e->forbid_breaks ();        // guh. Use properties!      
+
+           top_engraver()->forbid_breaks ();   // guh. Use properties!      
        }
       next_moment_ = next_moment_ + body_length_;
     }
@@ -244,6 +234,12 @@ Percent_repeat_engraver::stop_translation_timestep ()
   typeset_perc ();
 }
 
-ADD_THIS_TRANSLATOR (Percent_repeat_engraver);
 
 
+
+ENTER_DESCRIPTION(Percent_repeat_engraver,
+/* descr */       "Make beat, whole bar and double bar repeats.",
+/* creats*/       "PercentRepeat RepeatSlash DoublePercentRepeat",
+/* acks  */       "",
+/* reads */       "measureLength currentCommandColumn",
+/* write */       "");