Re: TextSpanner custom line
Dnia 2021-02-17, o godz. 16:41:24 David Nalesnik napisał(a): > Don't forget to "reply all" > Sorry... I'll reply all. Write me, that well or wrong... Well... thank you - very helpful people I prepared line spanner useful to drum part. Bravura font is required because special symbol. I think, that best will if I share this code for other users. %%% \version "2.21.5" %%% wiggleCircularChar = \markup { \concat { \scale #'(1.5 . 1) \override #'(font-name . "Bravura") \char ##xEAC3 } } #(define (wiggleCircular grob) (if (ly:stencil? (ly:line-spanner::print grob)) (let* ((stencil (ly:line-spanner::print grob)) ;(dot (ly:font-get-glyph (ly:grob-default-font grob) "scripts.turn")) (X-ext (ly:stencil-extent stencil X)) (Y-ext (ly:stencil-extent stencil Y)) ;(width 0.1) (len (interval-length X-ext)) (sym-stencil (grob-interpret-markup grob wiggleCircularChar)) (sym-X-ext (ly:stencil-extent sym-stencil X)) (sym-len (interval-length sym-X-ext))) (ly:stencil-translate (grob-interpret-markup grob (markup (#:pattern (inexact->exact (round (/ len sym-len))) X 0 (markup #:scale (cons 1 1) wiggleCircularChar (cons (interval-start X-ext) (interval-start Y-ext #f)) { \override Score.TextSpanner.stencil = #wiggleCircular \override Score.TextSpanner.to-barline = ##t c'1\startTextSpan c' c' c' c' c' c' c' c' c' c' c' c' c'\stopTextSpan } %%% \version "2.21.5" %%% wiggleCircularChar = \markup { \concat { \scale #'(1.5 . 1) \override #'(font-name . "Bravura") \char ##xEAC3 } } #(define (wiggleCircular grob) (if (ly:stencil? (ly:line-spanner::print grob)) (let* ((stencil (ly:line-spanner::print grob)) ;(dot (ly:font-get-glyph (ly:grob-default-font grob) "scripts.turn")) (X-ext (ly:stencil-extent stencil X)) (Y-ext (ly:stencil-extent stencil Y)) ;(width 0.1) (len (interval-length X-ext)) (sym-stencil (grob-interpret-markup grob wiggleCircularChar)) (sym-X-ext (ly:stencil-extent sym-stencil X)) (sym-len (interval-length sym-X-ext))) (ly:stencil-translate (grob-interpret-markup grob (markup (#:pattern (inexact->exact (round (/ len sym-len))) X 0 (markup #:scale (cons 1 1) wiggleCircularChar (cons (interval-start X-ext) (interval-start Y-ext #f)) { \override Score.TextSpanner.stencil = #wiggleCircular \override Score.TextSpanner.to-barline = ##t c'1\startTextSpan c' c' c' c' c' c' c' c' c' c' c' c' c'\stopTextSpan }
Re: TextSpanner custom line
Hi again, On Wed, Feb 17, 2021 at 11:16 AM Pierre Perol-Schneider 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 }
Re: TextSpanner custom line
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 Le mer. 17 févr. 2021 à 16:48, Artur Wrona a écrit : > Hi, dear Lilypond users. I ask at forum very rarement, always first > find at Google, DuckDuck.. but now I didn't found solution for one > thing. So... Is anybody, who knows, how to creat own symbol for > textspanner? I would like for example use chars pattern instead line. I > know that I must use \override TextSpanner.stencil or \override > TextSpanner.style . I didn't found, how to define own line style. In > future I'm going to use segment symbols from Bravura font (I know how > to input Unicode symbols - rather easy to find). > Thanks in advance. > Artur Wrona. > >
Re: TextSpanner custom line
Hi Artur, On Wed, Feb 17, 2021 at 9:48 AM Artur Wrona wrote: > > Hi, dear Lilypond users. I ask at forum very rarement, always first > find at Google, DuckDuck.. but now I didn't found solution for one > thing. So... Is anybody, who knows, how to creat own symbol for > textspanner? I would like for example use chars pattern instead line. I > know that I must use \override TextSpanner.stencil or \override > TextSpanner.style . I didn't found, how to define own line style. In > future I'm going to use segment symbols from Bravura font (I know how > to input Unicode symbols - rather easy to find). > Thanks in advance. > Artur Wrona. > This topic came up recently at https://www.mail-archive.com/lilypond-user@gnu.org/msg143436.html Hope this gets you started! Best, David