|
From: | Aaron Hill |
Subject: | Re: SVG export - how might you add classes for all graphical objects? |
Date: | Tue, 29 Jun 2021 10:32:38 -0700 |
User-agent: | Roundcube Webmail/1.4.9 |
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
[Prev in Thread] | Current Thread | [Next in Thread] |