Thanks Stefano. Currently I'm working for making generic the template. I'll
test your snippet soon after.
Best,
Paolo

On Fri, Dec 20, 2019 at 1:04 AM Stefano Troncaro <stefanotronc...@gmail.com>
wrote:

> Hi Paolo,
>
> AFAIK the problem here is that \tweak reads the next event of the input
> and you can't access those properties because the event has not been
> translated to a grob yet so lilypond has not yet calculated those values
> (others more suited than me may be able to explain it more elegantly or
> correct me if I have conceptual errors).
>
> For these types of situations I use both the "before-line-breaking" and
> the "after-line-breaking" properties, both can be set to a function that is
> passed the grob as a variable. So we can do the following to achieve what
> you want:
>
> \version "2.19.83"
>
> token = #(let* ((ctr 0)
>                 (ctr! (lambda ()
>                         (set! ctr (1+ ctr))
>                         ctr)))
>    (define-music-function (mus) (ly:music?)
>      (let* ((id (format #f "foobar_~a" (ctr!)))
>             (mexp #{ \tweak output-attributes.id #id #mus #} )
>             (type (ly:music-property mus 'name))
>             (mexp (case type
>                     ('BeamEvent
>                       #{ \tweak Beam.after-line-breaking #(lambda (grob)
>                            (let* ((outprop (ly:grob-property grob
> 'output-attributes))
>                                   (beam-thickness (ly:grob-property grob
> 'beam-thickness))
>                                   (outprop (append outprop
> `((beam-thickness . ,beam-thickness)))))
>                              (ly:grob-set-property! grob
> 'output-attributes outprop)))
>                       #mexp #} )
>                     (else mexp))))
>        mexp)))
>
> \relative { c'4 d8 -\token [ e ] f -\token [ g ] c,4 }
>
>
> I wrote the token function in a way that I think will be easy for you to
> expand, testing for different types of events and saving different
> properties to the output attributes property.
>
> Hope this helps,
> Stéfano
>
> El mié., 18 dic. 2019 a las 17:11, Paolo Prete (<paolopr...@gmail.com>)
> escribió:
>
>> Hi Jaap,
>>
>> it doesn't fit with what I'm searching for (sorry: my question was not
>> enough clear) .
>> I need to obtain the property set/calculated by Lilypond, not the one set
>> by me.
>> Shortly: for a Beam, how can I:
>>
>> (set! myVar positions-of-the-beam-set-by-lilypond)
>>
>> or:
>>
>> (set! myVar Y-offset-of-the-beam-set-by-lilypond)
>>
>> ?
>>
>> I don't understand if these properties are user-only settable, or if they
>> are set by Lilypond too.
>> If they are not set by Lilypond, how can I obtain them and  put them into
>> myVar ?
>>
>> My aim is to pass these properties to the SVG script through the "
>> output-attributes" mechanism, instead of having to parse the SVG output
>> with JS (which is possible too, but I would like to avoid that)
>>
>> Thanks,
>> P
>>
>> On Wed, Dec 18, 2019 at 6:57 PM <lilyp...@de-wolff.org> wrote:
>>
>>> Without giving you any solution, I can give you a hint:
>>>
>>>
>>>
>>> Write the music in the traditional way, with and without your
>>> modification.
>>>
>>>
>>>
>>> In your lilypond file put:
>>>
>>> \displayMusic oldmusic
>>>
>>> \displayMusic newmusic
>>>
>>>
>>>
>>> And what you can see wht you have to write by observing the differences
>>>
>>>
>>>
>>> Jaap
>>>
>>>
>>>
>>> *From:* lilypond-user <lilypond-user-bounces+lilypond=
>>> de-wolff....@gnu.org> *On Behalf Of *Paolo Prete
>>> *Sent:* Wednesday, December 18, 2019 3:30 PM
>>> *To:* Aaron Hill <lilyp...@hillvisions.com>
>>> *Cc:* lilypond-user <lilypond-user@gnu.org>
>>> *Subject:* Re: Need help with Scheme code
>>>
>>>
>>>
>>> Thanks again.
>>>
>>> Now, from what I see, I can extract if #mus is a Beam
>>> with  (ly:music-property mus 'name)  --> BeamEvent
>>>
>>> After that, how can I set, inside the same function you wrote, a
>>> variable with the  beam-thickness value of the corresponding Beam?
>>>
>>> something like (pseudo code):  (set! myVar
>>> current-value-of-beam-thickness )
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>> On Wed, Dec 18, 2019 at 5:14 AM Aaron Hill <lilyp...@hillvisions.com>
>>> wrote:
>>>
>>> On 2019-12-17 6:01 pm, Paolo Prete wrote:
>>> > And thanks again to the Scheme-master Aaron.
>>>
>>> I appreciate the kind words, though I doubt my experience rises to the
>>> level of "master".
>>>
>>> > One last thing:
>>> >
>>> > how can I arrange that function so to obtain output-attributes =
>>> > output-attributes + id ?
>>> >
>>> > For example: if output-attributes is (('a' . 'aa') ('i' . 'ii'))  it
>>> > must
>>> > become:    (('a' . 'aa') ('i' . 'ii') ('id' . 'foobar_1'))
>>>
>>> Where or how are the other output-attributes being set?  It is my
>>> understanding that output-attributes is unset by default, so any
>>> \override or \tweak would not need to worry about existing definitions.
>>>
>>> That said, consider this pattern:
>>>
>>> %%%%
>>> \version "2.19.83"
>>> { \tweak Accidental.output-attributes.id 123 bes'4 }
>>> %%%%
>>>
>>> Keep in mind this only *adds* a new key-value pair to the alist; it does
>>> not change an existing entry with the same key.
>>>
>>>
>>> -- Aaron Hill
>>>
>>>

Reply via email to