From b293e2046fc5a4cedf01d602c77b55ff41376735 Mon Sep 17 00:00:00 2001 From: David Nalesnik Date: Tue, 23 Oct 2012 12:13:19 -0500 Subject: [PATCH] Add support for measures split across lines. - All pieces are numbered. The number before the break has its default appearance, and any following numbers are parenthesized. - A regtest for this feature is provided. --- input/regression/measure-counter-broken.ly | 30 ++++++++++++++ scm/music-functions.scm | 46 ++++++++++++++++------ 2 files changed, 65 insertions(+), 11 deletions(-) create mode 100644 input/regression/measure-counter-broken.ly diff --git a/input/regression/measure-counter-broken.ly b/input/regression/measure-counter-broken.ly new file mode 100644 index 0000000000..06e1508a2d --- /dev/null +++ b/input/regression/measure-counter-broken.ly @@ -0,0 +1,30 @@ +\version "2.17.6" + +\header { + texidoc = "Measures split across line breaks may be numbered in a measure +count. Each segment receives a number. The first number has its ordinary +appearance, but numbers after the break are enclosed in parentheses." +} + +\layout { + indent = 0 + ragged-right = ##t +} + +\relative c' { + \startMeasureCount + a4 b c d + a4 b + \bar "" + \break + c4 d + a4 b c d + \stopMeasureCount +} + +\layout { + \context { + \Staff + \consists #Measure_counter_engraver + } +} diff --git a/scm/music-functions.scm b/scm/music-functions.scm index 22d731fe4e..42102a1ee8 100644 --- a/scm/music-functions.scm +++ b/scm/music-functions.scm @@ -1962,15 +1962,34 @@ of list @var{arg}." ;; measure counter (define (measure-counter-stencil grob) - "Create a number for a measure count. The number is centered using -the extents of the @code{BreakAlignment} grobs associated with the -@code{NonMusicalPaperColumn} grobs which form the left and right bounds -of the spanner." - (let* ((cols (ly:grob-object grob 'columns)) - (refp (ly:grob-common-refpoint-of-array grob cols X)) - (col-list (ly:grob-array->list cols)) - (elts-L (ly:grob-array->list (ly:grob-object (car col-list) 'elements))) - (elts-R (ly:grob-array->list (ly:grob-object (cadr col-list) 'elements))) + "Print a number for a measure count. The number is centered using +the extents of @code{BreakAlignment} grobs associated with +@code{NonMusicalPaperColumn} grobs. In the case of an unbroken measure, these +columns are the left and right bounds of a @code{MeasureCounter} spanner. +Broken measures are numbered in parentheses." + (let* ((orig (ly:grob-original grob)) + (siblings (ly:spanner-broken-into orig)) ; have we been split? + (bounds (ly:grob-array->list (ly:grob-object grob 'columns))) + (refp (ly:grob-system grob)) + ; we use the first and/or last NonMusicalPaperColumn grob(s) of + ; a system in the event that a MeasureCounter spanner is broken + (all-cols (ly:grob-array->list (ly:grob-object refp 'columns))) + (all-cols + (filter + (lambda (col) (eq? #t (ly:grob-property col 'non-musical))) + all-cols)) + (left-bound + (if (or (null? siblings) ; spanner is unbroken + (eq? grob (car siblings))) ; or the first piece + (car bounds) + (car all-cols))) + (right-bound + (if (or (null? siblings) + (eq? grob (car (reverse siblings)))) + (car (reverse bounds)) + (car (reverse all-cols)))) + (elts-L (ly:grob-array->list (ly:grob-object left-bound 'elements))) + (elts-R (ly:grob-array->list (ly:grob-object right-bound 'elements))) (break-alignment-L (filter (lambda (elt) (grob::has-interface elt 'break-alignment-interface)) @@ -1981,8 +2000,13 @@ of the spanner." elts-R)) (break-alignment-L-ext (ly:grob-extent (car break-alignment-L) refp X)) (break-alignment-R-ext (ly:grob-extent (car break-alignment-R) refp X)) - (counter (ly:grob-property grob 'count-from)) - (num (grob-interpret-markup grob (markup (number->string counter)))) + (num (markup (number->string (ly:grob-property grob 'count-from)))) + (num + (if (or (null? siblings) + (eq? grob (car siblings))) + num + (make-parenthesize-markup num))) + (num (grob-interpret-markup grob num)) (num (ly:stencil-aligned-to num X (ly:grob-property grob 'self-alignment-X))) (num (ly:stencil-translate-axis -- 2.39.2