]> git.donarmstrong.com Git - lilypond.git/commitdiff
Set percent counter visibility using repeatCountVisibility.
authorNeil Puttock <n.puttock@gmail.com>
Sat, 15 Nov 2008 16:00:39 +0000 (16:00 +0000)
committerNeil Puttock <n.puttock@gmail.com>
Sat, 15 Nov 2008 16:00:39 +0000 (16:00 +0000)
input/regression/repeat-percent-count-visibility.ly [new file with mode: 0644]
lily/percent-repeat-engraver.cc
ly/engraver-init.ly
scm/define-context-properties.scm
scm/output-lib.scm

diff --git a/input/regression/repeat-percent-count-visibility.ly b/input/regression/repeat-percent-count-visibility.ly
new file mode 100644 (file)
index 0000000..39e3fdd
--- /dev/null
@@ -0,0 +1,15 @@
+\version "2.11.64"
+\header {
+  texidoc = "
+Percent repeat counters can be shown at regular
+intervals by setting @code{repeatCountVisibility}.
+"
+}
+
+\relative c'' {
+  \set countPercentRepeats = ##t
+  \set repeatCountVisibility = #(every-nth-repeat-count-visible 5)
+  \repeat percent 10 { c1 } \break
+  \set repeatCountVisibility = #(every-nth-repeat-count-visible 2)
+  \repeat percent 6 { c1 d1 }
+}
index fc3d2a727a119aa95c39190dfe5c4fb323d439b9..b00eac52f6c8704b9ef79c92f2421fa238dd5df6 100644 (file)
@@ -1,5 +1,5 @@
 /*
-  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
 
@@ -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,8 +169,8 @@ 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 ());
@@ -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
@@ -239,7 +249,8 @@ ADD_TRANSLATOR (Percent_repeat_engraver,
                /* read */
                "countPercentRepeats "
                "currentCommandColumn "
-               "measureLength ",
+               "measureLength "
+               "repeatCountVisibility ",
 
                /* write */
                "forbidBreak "
index 49f22c1b3de9010015e172cf9a5928f7b22d4471..b1be75d1cb2777c5d52cd4b6209c3f156e26260f 100644 (file)
@@ -522,6 +522,8 @@ automatically when an output definition (a @code{\score} or
   explicitKeySignatureVisibility = #all-visible
   implicitTimeSignatureVisibility = #end-of-line-invisible
   
+  repeatCountVisibility = #all-repeat-counts-visible
+  
   autoBeamSettings = #default-auto-beam-settings
   autoBeaming = ##t
   autoBeamCheck = #default-auto-beam-check
index e3245477eedf5c1d6860405b16c09c2339f24228..29a633ef3c7b34735fb23c8e028ebee08c72234f 100644 (file)
@@ -374,6 +374,10 @@ context.")
      (repeatCommands ,list? "This property is a list of commands
 of the form @code{(list 'volta @var{x})}, where @var{x} is a string or
 @code{#f}.  @code{'end-repeat} is also accepted as a command.")
+     (repeatCountVisibility ,procedure? "A procedure taking as
+arguments an integer and context, returning whether the corresponding
+percent repeat number should be printed when @code{countPercentRepeats}
+is set.")
      (restNumberThreshold ,number? "If a multimeasure rest has more
 measures than this, a number is printed.")
 
index 22e4377046c47ed3034bea7a7c52ebc9a055a2a3..dcb1129004a7fb9a0c6cc523793c6535acdee967 100644 (file)
@@ -202,6 +202,13 @@ centered, X==1 is at the right, X == -1 is at the left."
 
 (define-public (first-bar-number-invisible barnum) (> barnum 1))
 
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;; percent repeat counters
+
+(define-public ((every-nth-repeat-count-visible n) count context) (= 0 (modulo count n)))
+
+(define-public (all-repeat-counts-visible count context) #t)
+
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;; break visibility