On 1 June 2011 20:31, Graham Percival <gra...@percival-music.ca> wrote:

> However, I'm confused/concerned about getting the text value of
> text spanners.  I'm currently doing:
>
> #(define (format-textspan engraver event)
>   (let* ((context (ly:translator-context engraver))
>          (moment (ly:context-current-moment context))
>          (spanner-props (ly:context-property context TextSpanner))
>          (details (chain-assoc-get 'bound-details spanner-props))
>          (left-props (assoc-get 'left details '()))
>          (left-text (assoc-get 'text left-props '())))
>     (print-line engraver
>                 "set_string"
>                 (ly:event-property event 'span-direction)
>                 left-text)))
>
> which uses the engraver.  I couldn't see any event-specific way to
> get the text of a text spanner -- the information appears to exist
> on the engraver level only.

Hmm, this is one situation where listening to events isn't as user-friendly.

The event for a text spanner doesn't carry the text info since it's
applied via an override (a separate event class).  You'd need to
listen for overrides and check the symbol being set (which is the grob
the override's applied to):

\version "2.15.0"

listen =
#(define-music-function (parser location music) (ly:music?)

   (define (add-stream-listener global listener . types)
     (apply ly:add-listener
            (cons* listener (ly:context-events-below global) types))
     global)

   (define (process-event event)
     (case (ly:event-property event 'class)
       ((text-span-event)
        (newline)
        (display (ly:event-property event 'span-direction)))
       ((Override)
        (newline)
        (display (ly:event-property event 'symbol)))))

   (let* ((global (ly:make-global-context $defaultlayout))
          (listener (ly:make-listener process-event))
          (global-disp (ly:context-events-below global)))

     (ly:connect-dispatchers (ly:make-dispatcher) global-disp)
     (add-stream-listener global listener 'StreamEvent)
     (ly:interpret-music-expression music global)
     music))

\listen
\relative c' {
  \override TextSpanner #'(bound-details left text) = #"foo"
  c1\startTextSpan
  c1\stopTextSpan
}

Cheers,
Neil

_______________________________________________
lilypond-devel mailing list
lilypond-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-devel

Reply via email to