Niols <ni...@niols.fr> writes:

> Hello again,

[...]

> I have not managed to override the "\repeat" music function.

It isn't a music function but a "reserved" word in LilyPond.

> I suspect there is something I do not understand in the order in which
> things are executed in LilyPond.
>
> I have however found a solution based on overriding "make-music". I
> replace "make-music" by a wrapper around it that adds the callback
> from the snippet to all 'VoltaRepeatedMusic and leaves the rest
> alone. This is actually just a few lines:
>
>     #(define the-make-music make-music)
>
>     #(define (make-music-wrapped name . music-properties)
>       (let ((music (apply the-make-music (cons name music-properties))))
>        (if (equal? name 'VoltaRepeatedMusic)
>         (ly:music-set-property! music 'elements-callback new-volta-set))
>        music))
>
>     #(set! make-music make-music-wrapped)
>
> It might not be the cleanest, but that is all I have, and that seems
> to work.

It would be easier to do

music-descriptions.VoltaRepeatedMusic.elements-callback = ...

A cursory glance would suggest that might work (though its effect would
not be limited to one session).

You could also try to redefine the make-volta-set function.

>> 2. Maybe there is a way to define a function that will be ran before
>> processing on any music? But this I have no idea if this is
>> possible, or how to do it, and my research has proven ineffective so
>> far.

There are the scorification hooks.

>> 3. Maybe there is a way to override the "make-volta-set" callback 
>> instead of creating a new one? Such that then, in LilyPond's normal
>> execution, it uses the new definition and not and old one that then 
>> needs to be replaced?
>
> For 2. and 3., I still have no idea as this is far beyond my
> understanding of the internals of LilyPond. I am not really looking
> into it though.

Not a matter of internals.

#(define original-make-volta-set make-volta-set)

(define (make-volta-set ...) ...)

Possibly

(set! make-volta-set (lambda (...) ...))

but I think that the define probably works.


>
> Thank you for your help; have a great Summer!
> — Niols
>
>

-- 
David Kastrup

Reply via email to