On Wed, Jun 30, 2021 at 3:32 AM Aaron Hill <[email protected]> wrote: > > On 2021-06-29 9:43 am, Jean Abou Samra wrote: > > However, this problem can be solved by writing > > an engraver (those are the powerful tools that > > \applyOutput uses under the hood). > > > > \version "2.22.0" > > > > \layout { > > \context { > > \Score > > \consists > > #(lambda (context) > > (make-engraver > > (acknowledgers > > ((grob-interface engraver grob source-engraver) > > (set! (ly:grob-property grob 'output-attributes) > > `((class . ,(grob::name grob)))))))) > > } > > } > > > > << > > { c d e f } > > \\ > > { g a b c' } > >>> > > NOTE: You might want this engraver to *append* to the class attribute, > so you can still specify classes on an individual basis: > > %%%% > \version "2.22.0" > > SvgAddClassName = > #(lambda (ctxt) > (define (add-class-name grob) > (let* ((attribs (ly:grob-property grob 'output-attributes '())) > (class (ly:assoc-get 'class attribs '())) > (name (grob::name grob))) > (set! class (if (null? class) name (format #f "~a ~a" class name))) > (set! attribs (assoc-set! attribs 'class class)) > (ly:grob-set-property! grob 'output-attributes attribs))) > (make-engraver > (acknowledgers > ((grob-interface engraver grob source) > (add-class-name grob))))) > > \layout { \context { \Score \consists \SvgAddClassName } } > > { \tweak output-attributes #'((class . foo)) b'4 } > %%%% > > > -- Aaron Hill
Hi Aaron, thanks for your response and solution. I just tried it out and it works an absolute treat! Thanks for taking the time to put it together, I really appreciate it. Cheers, Matt.
