lilypond-user
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

RE: Changing the bar-number string


From: Trevor Daniels
Subject: RE: Changing the bar-number string
Date: Sat, 8 Mar 2008 10:56:31 -0000

Hi Keiren

Rather than just give you a Scheme procedure to do
this, I thought it might be more helpful to say
how I arrived at this code, as I'm still learning
too, and needed to work this out.

First I looked at the BarNumber grob in the IR and
saw that the stencil property is set by default to
ly:text-interface::print, and in this interface we
find that the 'text property contains the text to
be printed.  As this text needs to vary with the
bar number it must be set up by Lily before the
stencil procedure is called.

As the value of 'text is set up dynamically
in this way we cannot simply change it with an
override - it has to be changed *after* Lily has
set up the current bar number, so we need a Scheme
call-back procedure.  This procedure needs to lift
out the current value of the 'text property, append
" bis" to it, and store it back, finally calling
ly:text-interface::print to print it.

Having worked out what to do, we have to generate
the correct Scheme code to do it.  I needed to look
up how to append text to a string, but otherwise
this is fairly straight-forward.  The stencil
call-back is called with the BarNumber grob as its
argument, so the text property is immediately
available, and we need to pass on the BarNumber
grob to the ::print procedure.  The only remaining
difficulty, as always with Scheme, is to get all
the brackets in the right places!

Here it is, well-annotated, with some artificial
code to demonstrate it working:

#(define (bis-bar-number BarNumber)
  "Append bis to the bar number."
  (let* (
        ; Set barNumber to the current value
      (barNumber (ly:grob-property BarNumber 'text))
      ; Append " bis" to it
      (bisBarNumber (string-append barNumber " bis")))
    ; Store the new value back
    (ly:grob-set-property! BarNumber 'text bisBarNumber))
  ; and print it
  (ly:text-interface::print BarNumber))

music = \relative
{
  \override Score.BarNumber #'self-alignment-X = #center
  \override Score.BarNumber #'break-visibility =
#all-visible
  \repeat unfold 4 { a1 }
  \override Score.BarNumber #'stencil = #bis-bar-number
  \repeat unfold 4 { a1 }
  \revert Score.BarNumber #'stencil
  \repeat unfold 4 { a1 }
}

\score { \music }


> -----Original Message-----
> From: address@hidden
> [mailto:lilypond-user-bounces+t.daniels=treda.co.u
> address@hidden Behalf Of
> Kieren MacMillan
> Sent: 07 March 2008 17:23
> To: Francesco Guglie
> Cc: address@hidden
> Subject: Re: Changing the bar-number string
>
>
> Hi Francesco,
>
> > I'd like to change the bar-numbers of a
> repeated section so that it
> > shows the bar-number of the first time with a
> "bis" added.
>
> If I knew Scheme, I would write something like
>
> %%%%%%%%%%
> \version "2.11.37"
>
> #(define (special-bar-number context)
>       (markup (#:line ((ly:context-property
> 'Score 'currentBarNumber)
> "bis"))))
>
> music = \relative
> {
>       \override Score.BarNumber #'stencil =
> #special-bar-number
>       \repeat unfold 16 { a1 }
> }
>
> \score { \music }
> %%%%%%%%%%
>
> Unfortunately, the code I wrote doesn't work...  =\
> Maybe someone out there can fix it -- or tell us
> why this idea can't
> possibly work.
>
> Cheers,
> Kieren.
>
>
> _______________________________________________
> lilypond-user mailing list
> address@hidden
> http://lists.gnu.org/mailman/listinfo/lilypond-user
>





reply via email to

[Prev in Thread] Current Thread [Next in Thread]