lilypond-user
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Fwd: SVG export - how might you add classes for all graphical objects?


From: Matt Hood
Subject: Fwd: SVG export - how might you add classes for all graphical objects?
Date: Wed, 30 Jun 2021 11:28:36 +1000

On Wed, Jun 30, 2021 at 3:32 AM Aaron Hill <lilypond@hillvisions.com> 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.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]