lilypond-user
[Top][All Lists]
Advanced

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

Re: TextSpanner custom line


From: David Nalesnik
Subject: Re: TextSpanner custom line
Date: Wed, 17 Feb 2021 13:12:33 -0600

Hi again,

On Wed, Feb 17, 2021 at 11:16 AM Pierre Perol-Schneider
<pierre.schneider.paris@gmail.com> wrote:
>
> Hi Artur,
> This is not exactly what you ask for but you could do something like:
>
> \version "2.22.0"
> {
>   c'1
>   -\tweak X-extent #'(0 . 0)
>   ^\markup\pattern #25 #X #0 \musicglyph #"scripts.turn"
>   1 1 1 1 1 1 1 1 1
> }
>
> Cheers,
> Pierre
>

I'm a little out of practice, but here's my attempt at automating:
\version "2.21.5"

#(define (patterned-markup glyph)
   (lambda (grob)
     (let* ((stil (ly:line-spanner::print grob))
            (spanner-extent-X (ly:stencil-extent stil X))
            (spanner-extent-Y (ly:stencil-extent stil Y))
            (spanner-length-X (interval-length spanner-extent-X))
            (spanner-angle (atan (/ (interval-length spanner-extent-Y)
                                   spanner-length-X)))
            (spanner-angle (degrees->radians spanner-angle))
            (glyph-stil (ly:font-get-glyph (ly:grob-default-font grob) glyph))
            (glyph-stil (ly:stencil-rotate glyph-stil spanner-angle 0 0))
            (glyph-extent-X (ly:stencil-extent glyph-stil X))
            (glyph-length-X (interval-length glyph-extent-X))
            (reps (round (/ spanner-length-X glyph-length-X))))
       (let loop ((x 0) (new-stil empty-stencil))
         (if (> x reps)
             (ly:grob-set-property! grob 'stencil new-stil)
             (loop
              (1+ x)
              (ly:stencil-combine-at-edge new-stil X RIGHT glyph-stil 0.0)))))))


{
  \override TextSpanner.after-line-breaking = #(patterned-markup "scripts.turn")
  c'1\startTextSpan
  e'1
  g'1
  c''1\stopTextSpan
  \override TextSpanner.rotation = #'(5 -1 0)
  c'1\startTextSpan
  e'1
  g'1
  c''1\stopTextSpan

}



reply via email to

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