Thanks Aaron, it did the trick. However, how can I make it work for multiple pages output?
On Sat, Dec 14, 2019 at 4:26 AM Aaron Hill <lilyp...@hillvisions.com> wrote: > On 2019-12-13 5:59 pm, Paolo Pr wrote: > > First of all, I need to add with Lilypond a <script> tag to the svg > > file > > just before the ending </svg> tag in the following way: > > > > 1) > > .... > > <script xlink:href="lilyEasySlurs.js"></script> > > </svg> > > > > OR in the following way: > > > > 2) > > .... > > <script> > > <![CDATA[ > > ...javascript code... > > ]]> > > </script> > > </svg> > > Well, one could use (abuse?) the embedded-svg stencil command: > > %%%% > \version "2.19.83" > > svg-script = #(define-scheme-function (body) (string?) > (markup #:stencil (ly:make-stencil (list 'embedded-svg > (string-join (list "<script type=\"text/javascript\"><![CDATA[" > body "]]></script>") "\n")) '(0 . 0) '(0 . 0)))) > > { g'4 a' \tweak Accidental.output-attributes #'((id . "flat")) bes'2 } > > \svg-script > #"var flat = document.getElementById('flat'); > flat.style.color = 'red'; > function spin(what, amount) { > let angle = 0.0; > return function () { > const bbox = what.getBBox(); > const xform = ['rotate(', > (angle = (angle + amount) % 360.0), > bbox.x + 0.5 * bbox.width, > bbox.y + 0.75 * bbox.height, ')']; > what.setAttribute('transform', xform.join(' ')); > } > } > setInterval(spin(flat, 5), 100);" > %%%% > > This adds a top-level \markup that contains a stencil to instruct > output-svg.scm to write the specified string to the output. > > > -- Aaron Hill > >