+2002-09-05 Rune Zedeler <rune@zedeler.dk>
+
+ * scm/output-lib.scm (make-molecule-boxer): Fixed and moved from
+ input/test/boxed-molecule.ly
+
+ * input/test/boxed-molecule.ly: Fixed to use default
+ make-molecule-boxer
+
+ * input/test/bar-number-every-fifth.ly: Added
+
+ * lily/bar-number-engraver.cc: Add property barNumberVisibility
+ and use it to decide which BarNumbers to suicide.
+
2002-09-05 Han-Wen Nienhuys <hanwen@cs.uu.nl>
* input/test/poly-metric.ly: new file.
--- /dev/null
+\score {
+ \context Staff \notes \transpose c'' {
+ \property Score.BarNumber \override #'break-visibility = #end-of-line-invisible
+ \property Score.barNumberVisibility = #(lambda(n) (= 0 (modulo n 5)))
+ \property Score.BarNumber \override #'molecule-callback =
+ #(make-molecule-boxer 0.1 0.25 0.25 Text_item::brew_molecule)
+ \property Score.BarNumber \override #'font-relative-size = #1
+
+ \repeat unfold 11 { c d e f g a b c' } \bar "|."
+ }
+}
+
-\version "1.5.68"
+\version "1.6.1"
\header {
texidoc = "overriding the molecule callback can also be used to draw a
box around arbitrary grobs.
- TODO: check whether the corners are really correct.
-
TODO: circled molecules.
"
}
-#(define (make-molecule-boxer callback)
- (define (molecule-boxer grob)
- (let*
- (
- (mol (callback grob))
- (box-padding 0.1)
- (x-ext (widen-interval (ly-get-molecule-extent mol 0) box-padding))
- (y-ext (widen-interval (ly-get-molecule-extent mol 1) box-padding))
- (rule-thick 0.1)
- (x-rule (box-molecule (widen-interval x-ext rule-thick)
- (cons 0 rule-thick)))
- (y-rule (box-molecule (cons 0 rule-thick) y-ext))
- )
-
- (set! mol (ly-combine-molecule-at-edge mol 0 1 y-rule (* 0.5 box-padding)))
- (set! mol (ly-combine-molecule-at-edge mol 0 -1 y-rule (* 0.5 box-padding)))
- (set! mol (ly-combine-molecule-at-edge mol 1 1 x-rule 0.0))
- (set! mol (ly-combine-molecule-at-edge mol 1 -1 x-rule 0.0))
-
- mol
- ))
- molecule-boxer
- )
-
\score { \notes \relative c'' {
\property Voice.TextScript \override #'molecule-callback =
- #(make-molecule-boxer Text_item::brew_molecule)
+ #(make-molecule-boxer 0.1 0.3 0.2 Text_item::brew_molecule)
c'4^"foo"
\property Voice.Stem \override #'molecule-callback =
- #(make-molecule-boxer Stem::brew_molecule)
+ #(make-molecule-boxer 0.05 0.25 0.25 Stem::brew_molecule)
\property Score.RehearsalMark \override #'molecule-callback =
- #(make-molecule-boxer Text_item::brew_molecule)
+ #(make-molecule-boxer 0.15 0.3 0.3 Text_item::brew_molecule)
c8
\property Voice.Stem \revert #'molecule-callback
if (gh_string_p (wb))
{
- SCM bn = get_property ("currentBarNumber");
SCM smp = get_property ("measurePosition");
- int ibn = gh_number_p (bn) ? gh_scm2int(bn) : 1;
Moment mp = (unsmob_moment (smp)) ? *unsmob_moment (smp) : Moment (0);
- if (mp.main_part_ == Rational (0)
- && ibn != 1)
+ if (mp.main_part_ == Rational (0))
{
- create_items ();
-
- // guh.
- text_->set_grob_property ("text",
- scm_makfrom0str (to_string (gh_scm2int (bn)).to_str0 ()));
+ SCM bn = get_property ("currentBarNumber");
+ SCM proc = get_property ("barNumberVisibility");
+ if (to_boolean(gh_call1(proc, bn)))
+ {
+ create_items ();
+ // guh.
+ text_->set_grob_property
+ ("text", scm_makfrom0str (to_string (gh_scm2int (bn)).to_str0 ()));
+ }
}
}
automaticMelismata = ##t
defaultBarType = #"|"
+ barNumberVisibility = #(lambda (n) (> n 1))
explicitClefVisibility = #all-visible
explicitKeySignatureVisibility = #all-visible
; end of tablature functions
+(define (make-molecule-boxer line-thick x-padding y-padding callback)
+ "Makes a routine that adds a box around the grob parsed as argument"
+ (define (molecule-boxer grob)
+ (let*
+ (
+ (mol (callback grob))
+ (x-ext (widen-interval (ly-get-molecule-extent mol 0) x-padding))
+ (y-ext (widen-interval (ly-get-molecule-extent mol 1) y-padding))
+ (x-rule (box-molecule (widen-interval x-ext line-thick)
+ (cons 0 line-thick)))
+ (y-rule (box-molecule (cons 0 line-thick) y-ext))
+ )
+
+ (set! mol (ly-combine-molecule-at-edge mol 0 1 y-rule x-padding))
+ (set! mol (ly-combine-molecule-at-edge mol 0 -1 y-rule x-padding))
+ (set! mol (ly-combine-molecule-at-edge mol 1 1 x-rule 0))
+ (set! mol (ly-combine-molecule-at-edge mol 1 -1 x-rule 0))
+
+ mol
+ ))
+ molecule-boxer
+ )
+
+
(define (arg->string arg)
(cond ((number? arg) (inexact->string arg 10))
((string? arg) (string-append "\"" arg "\""))
still counted. Bar generation will resume according to that
count if this property is set to zero.
")
+(translator-property-description 'barNumberVisibility procedure? "Procedure that takes an int and returns whether the corresponding bar number should be printed")
(translator-property-description 'beamMelismaBusy boolean? "Signal if a beam is set when automaticMelismata is set")
(translator-property-description 'beatLength moment? "The length of one beat in this time signature.")
(translator-property-description 'breakAlignOrder list? "Defines the order in which