lilypond-user
[Top][All Lists]
Advanced

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

Re: Changing volta number text


From: Ralph Palmer
Subject: Re: Changing volta number text
Date: Tue, 18 May 2021 07:47:57 -0700

On Fri, May 14, 2021 at 7:26 PM Aaron Hill <lilypond@hillvisions.com> wrote:
On 2021-05-14 6:40 pm, Ralph Palmer wrote:
> Excellent! Thank you, Aaron. I wish I could understand what your
> function
> does - how it works.

The technique involves querying the current Score.repeatCommands and
replacing any existing (volta "...") command with the user-provided
version.  This preserves the other repeat commands such as (end-repeat)
and (volta #f).

Here is a minorly-refactored version with some documentation, comments,
and a helpful usage warning:

%%%%
\version "2.22.0"
\include "english.ly"

changeVoltaText =
#(define-music-function
   (text) (markup?)
   (_i "Replaces the volta text within the currently-set
@code{repeatCommands}.")

   (define (volta-text? cmd)
    ;; Look for the (volta "...") pattern.
    (and (pair? cmd)
         (eq? 'volta (car cmd))
         (markup? (cadr cmd))))
   (define (replacer cmd)
    (if (volta-text? cmd) `(volta ,text) cmd))
   (define (proc ctxt)
    (let ((cmds (ly:context-property ctxt 'repeatCommands '())))
     (if (any volta-text? cmds)
      (ly:context-set-property! ctxt 'repeatCommands (map replacer cmds))
      (ly:input-warning (*location*) "No volta text was replaced."))))

   #{ \context Score \applyContext #proc #})

test = {
   \time 3/4
   \repeat volta 3
   {
     a'4 b' c' |
     \changeVoltaText "dud"
     #(ly:expect-warning "No volta text was replaced.")
     b'4 c' d' |
   }
   \alternative {
     {
       \changeVoltaText "1., 3."
       e'4 f' g' |
     }
     {
       d'4 c' b' |
     }
     {
       \changeVoltaText \markup \with-color #red "4."
       g'4 a' b' |
     }
   }
   c'1
}

\score {
   \test
}
%%%%



-- Aaron Hill

Thanks for this modification, Aaron Hill.
Ralph


--
Ralph Palmer
Seattle
USA
(he, him, his)
palmer.r.violin@gmail.com

reply via email to

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