]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/percent-repeat-engraver.cc
Run `make grand-replace'.
[lilypond.git] / lily / percent-repeat-engraver.cc
index e76bbaeb086c017c8c7b13ac8da8477e70e029ea..dff1f5aae4816ad1c2247522ba83eddfaac6e46e 100644 (file)
@@ -1,9 +1,9 @@
 /*
-  new-chord-tremolo-engraver.cc -- implement Chord_tremolo_engraver
+  percent-repeat-engraver.cc -- implement Percent_repeat_engraver
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2000--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>, Erik Sandberg <mandolaerik@gmail.com>
+  (c) 2000--2008 Han-Wen Nienhuys <hanwen@xs4all.nl>, Erik Sandberg <mandolaerik@gmail.com>
 */
 
 
@@ -30,6 +30,7 @@
 class Percent_repeat_engraver : public Engraver
 {
   void typeset_perc ();
+  bool check_count_visibility (SCM count);
 public:
   TRANSLATOR_DECLARATIONS (Percent_repeat_engraver);
   
@@ -120,7 +121,7 @@ Percent_repeat_engraver::listen_percent (Stream_event *ev)
          /*
            don't warn about percent repeats: slash repeats are not
            exactly 1 or 2 measures long.
-          */
+         */
          return;
        }
       percent_event_ = ev;
@@ -147,7 +148,8 @@ Percent_repeat_engraver::process_music ()
          percent_->set_bound (LEFT, col);
 
          SCM count = percent_event_->get_property ("repeat-count");
-          if (count != SCM_EOL && to_boolean (get_property ("countPercentRepeats")))
+         if (count != SCM_EOL && to_boolean (get_property ("countPercentRepeats"))
+             && check_count_visibility (count))
            {
              percent_counter_
                = make_spanner ("PercentRepeatCounter", percent_event_->self_scm ());
@@ -167,11 +169,11 @@ Percent_repeat_engraver::process_music ()
          Item *double_percent = make_item ("DoublePercentRepeat", percent_event_->self_scm ());
 
          SCM count = percent_event_->get_property ("repeat-count");
-         if (count != SCM_EOL
-             && to_boolean (get_property ("countPercentRepeats")))
+         if (count != SCM_EOL && to_boolean (get_property ("countPercentRepeats"))
+             && check_count_visibility (count))
            {
              Item *double_percent_counter = make_item ("DoublePercentRepeatCounter",
-                                                       percent_event_->self_scm());
+                                                       percent_event_->self_scm ());
 
              SCM text = scm_number_to_string (count,
                                               scm_from_int (10));
@@ -199,7 +201,7 @@ Percent_repeat_engraver::finalize ()
     {
       percent_event_->origin ()->warning (_ ("unterminated percent repeat"));
       percent_->suicide ();
-      percent_counter_->suicide();
+      percent_counter_->suicide ();
     }
 }
 
@@ -219,6 +221,14 @@ Percent_repeat_engraver::typeset_perc ()
     }
 }
 
+bool
+Percent_repeat_engraver::check_count_visibility (SCM count)
+{
+  SCM proc = get_property ("repeatCountVisibility");
+  return (ly_is_procedure (proc) && to_boolean (scm_call_2 (proc,
+                                                           count,
+                                                           context ()->self_scm ())));
+}
 
 
 void
@@ -235,14 +245,12 @@ ADD_TRANSLATOR (Percent_repeat_engraver,
                "DoublePercentRepeatCounter "
                "PercentRepeat "
                "PercentRepeatCounter ",
-               
-               /* accept */
-               "percent-event ",
 
                /* read */
                "countPercentRepeats "
                "currentCommandColumn "
-               "measureLength ",
+               "measureLength "
+               "repeatCountVisibility ",
 
                /* write */
                "forbidBreak "