Hi Paolo, Since Aaron's svg-script function creates an empty \markup, you can use the properties oddFooterMarkup and evenFooterMarkup of the \paper block to have your script embedded at the end of every page. Look:
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \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)))) script-for-every-page = \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);" \paper { oddFooterMarkup = \script-for-every-page evenFooterMarkup = \script-for-every-page } { g'4 a' \tweak Accidental.output-attributes #'((id . "flat")) bes'2 \pageBreak g'4 a' \tweak Accidental.output-attributes #'((id . "flat")) bes'2 } %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Love what your script is doing so far! Hope that helps, Stefano El sáb., 14 dic. 2019 a las 18:39, Paolo Prete (<paolopr...@gmail.com>) escribió: > 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 >> >>