the following function (thanks to Stefano!) inserts the beam-thickness property of a Beam in the list of output-attributes of the corresponding SVG item. It does its job if I place the function soon before a beam symbol "[". But it doesn't work (no errors, but the output-attributes property is not set) if place it before a notename. How can I fix that? Should I map-some-music() and iterate until I find the BeamEvent? I tried that too, but without success.
Thanks.
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)))))
(begin
(ly:grob-set-property! grob 'output-attributes outprop)
(display "\n****\n")
(display beam-thickness)
(display "\n****\n"))))
#mexp #} )
(else mexp))))
mexp)))
\relative { c'4 d8-\token [ e ] \token f[ g ] c,4 }