lilypond-user
[Top][All Lists]
Advanced

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

Re: String number spanner


From: Nick Payne
Subject: Re: String number spanner
Date: Sat, 29 Dec 2012 10:34:28 +1100
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/17.0 Thunderbird/17.0

On 29/12/12 04:14, Phil Burfitt wrote:
From: "Nick Payne"

I'm stuck on the last part of getting this working - the part that is eluding me is getting a short vertical line drawn at the RH end of the spanner. According the the Internals reference, UP = 1 and DOWN = -1, and that works fine when I use the return value from the updown function to set TextSpanner.direction in beginStringNum. But when I try to use the value returned from updown in the section of code that is commented out in beginStringNum, I get an error. If I hardcode 1 or -1 instead of updown then the line is drawn as expected.

I also tried the righttext function below to draw the line: no error is indicated but neither is the vertical line drawn.

\version "2.17.6"

#(define (updown grob)
  (let ((dirn (ly:event-property (event-cause grob) 'direction)))
    (if (eq? -1 dirn)
      DOWN
      UP)))

#(define (righttext grob)
  (let ((dirn (ly:event-property (event-cause grob) 'direction)))
    (if (eq? -1 dirn)
      (markup #:draw-line (cons 0 0.5))
      (markup #:draw-line (cons 0 -0.5)))))

beginStringNum = #(define-event-function (parser location strng)
  (number?)
  #{
    \tweak bound-details.left.text \markup\bold\teeny\concat
      { \circle { \finger #(number->string strng) } \char ##x2006 }
    \tweak font-shape #'upright
    \tweak direction #updown
    \tweak bound-details.left.stencil-align-dir-y #CENTER
    \tweak dash-period #0.8
    \tweak dash-fraction #0.6
    \tweak thickness #0.8
    \tweak bound-details.right.text #righttext
%    \tweak bound-details.right.text \markup {
%      \draw-line #(cons 0 (/ updown -2)) }
    \tweak bound-details.left.padding #0.25
    \tweak bound-details.right.padding #-1
    \tweak bound-details.right-broken.padding #0.5
    \tweak bound-details.left-broken.padding #2
    \tweak bound-details.left-broken.text ##f
    \tweak bound-details.right-broken.text ##f
    \startTextSpan
  #}
)
endStringNum = \stopTextSpan

\relative c {
  \clef "treble_8"
  c4_\beginStringNum 5 c c \times 2/3 { c8 c c\endStringNum }
}



Hi Nick,

Can't help you much with scheme, but this is the function I created for a string number spanner...


% use: stringNumberSpanner  #direction (UP/DOWN) #stringnumber #padding

stringNumberSpanner = #(define-music-function (parser location direction string padding) (number? number? number?)
 #{
  \once \override Voice.TextSpanner.padding = #padding
  \once \override Voice.TextSpanner.style = #'dashed-line
  \once \override Voice.TextSpanner.dash-period = #0.6
  \once \override Voice.TextSpanner.dash-fraction = #0.2
  \once \override Voice.TextSpanner.bound-details.left.padding = #-0.1
  \once \override Voice.TextSpanner.bound-details.right.padding = #-0.8
\once \override Voice.TextSpanner.bound-details.left.stencil-align-dir-y = #CENTER
  \once \override Voice.TextSpanner.font-encoding = #'latin1
  \once \override Voice.TextSpanner.font-series = #'normal
  \once \override Voice.TextSpanner.font-size = #-2.5
\once \override Voice.TextSpanner.bound-details.left.text = \markup { \override #'(circle-padding . 0.55) \circle \upright $(number->string string) } \once \override Voice.TextSpanner.bound-details.left-broken.text = \markup { \null } \once \override Voice.TextSpanner.bound-details.left-broken.padding = #-3 \once \override Voice.TextSpanner.bound-details.right-broken.text = \markup { \null } \once \override Voice.TextSpanner.bound-details.right-broken.padding = #0.5

  \once \override Voice.TextSpanner.direction = #direction
\once \override Voice.TextSpanner.bound-details.right.text = \markup { \draw-line $(cons 0 ( * -0.45 direction )) }
 #})


As you say...according the the Internals reference, UP = 1 and DOWN = -1, so I use that as a multiplier for the right hand end of the spanner to get an upward or downward pointing end line. (last line of above code).

I'm trying to avoid having to pass the direction as a parameter. I can retrieve the direction programmatically when setting TextSpanner.direction, as using ^\beginStringNum or _\beginStringNum is sufficient to place the spanner above or below the staff, but when trying to set TextSpanner.bound-details.right.text the direction isn't successfully retrieved.

Nick



reply via email to

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