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

_______________________________________________
lilypond-user mailing list
[email protected]
https://lists.gnu.org/mailman/listinfo/lilypond-user

Reply via email to