Le 24/12/2022 à 15:38, Paolo Prete a écrit :
Hello,I'm noting that the generated SVG of this...: { \once \override DynamicText.output-attributes.val = "x" \once \override DynamicText.output-attributes.val = "y" c'\mf } ... creates the following SVG tag, with a duplicate "val" attribute: <g val="y" val="x">
I've opened https://gitlab.com/lilypond/lilypond/-/issues/6494It is unusual, though, to do two \once \override for the same grob property at the same time.
I would say it's reasonable to expect this to work when the overrides are together in sequential music ({ ... }) like this, but it is preferable not to do it in parallel music like
\version "2.25.0" \new Voice << { \once \override NoteHead.color = red c' } { \once \override NoteHead.color = blue d' } >>because in more complex cases, it gets tricky for LilyPond to determine which override is meant to have precedence.
Is this a bug? Also note that the duplication doesn't happen if I use "\override" instead of "\once \override". In case of a bug, is there a workaround for it (I mean: is there a way to call \once \override multiple times for the same attribute without duplicating it)?
\version "2.25.0" #(define* (my-uniq-list lst #:optional (cmp equal?)) (reverse! (fold (lambda (x acc) (if (null? acc) (list x) (if (cmp x (car acc)) acc (cons x acc)))) '() lst) '())) #(set! (@@ (lily output-svg) stencil-dispatch-alist) (assq-set! (@@ (lily output-svg) stencil-dispatch-alist) 'start-group-node (lambda (attrs) (format #f "<g ~a>\n" (string-concatenate (map (match-lambda ((attr . val) (ly:format " ~a=\"~a\"" attr val))) (my-uniq-list (sort attrs(comparator-from-key car (comparator-from-key symbol->string string<?)))
(comparator-from-key car eq?)))))))) { \once \override DynamicText.output-attributes.val = "x" \once \override DynamicText.output-attributes.val = "y" c'\mf }With the usual warning when using @@ that you should not expect any sort of stability for this kind of code.
OpenPGP_signature
Description: OpenPGP digital signature