David Kastrup wrote:
>> 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))


David, 

sorry for the delayed response.  Your solution is excellent!
I'm learning so much from you.

Thanks again.
- Mark

_______________________________________________
lilypond-user mailing list
lilypond-user@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-user

Reply via email to