Mark Polesky <[email protected]> writes:
> I'm trying to write a conditional version of the \transpose
> function, that would work something like this:
>
> input = {
> c c
> \conditionalTransposition c c' { c c }
> }
>
> \input
> => { c c c c }
>
> \processConditionalTransposition \input
> => { c c c' c' }
conditionalTransposition =
#(define-music-function (parser location from to music)
(ly:pitch? ly:pitch? ly:music?)
(set! music #{ \transpose c' c' #music #})
(set! (ly:music-property 'from-to music) (cons from to))
music)
processConditionalTransposition =
#(define-music-function (parser location music) (ly:music?)
(map-some-music
(lambda (m)
(and (music-is-of-type? m 'transposed-music)
(pair? (ly:music-property m 'from-to music))
#{ \transpose #(car (ly:music-property m 'from-to-music))
#(cdr (ly:music-property m 'from-to-music))
#(ly:music-property m 'element)
#}))
music))
This is assuming that you don't nest processConditionalTransposition, if
you do, you need to write
\processConditionalTransposition #(ly:music-property m 'element) at the
appropriate place.
Untested.
--
David Kastrup
_______________________________________________
lilypond-user mailing list
[email protected]
https://lists.gnu.org/mailman/listinfo/lilypond-user