Hi Harm,
On Sun, Sep 11, 2016 at 4:53 AM, Thomas Morley <[email protected]> wrote:
>
> It's based on our scheme-text-spanner.ly from the reg-test
You may want to incorporate the attached, which corrects an error in
the regtest and adds a warning omitted there. (In addition, there are
some other changes which make the engraver follow the C++ original
more closely.)
The error fix allows the spanner to end on a spacer.
Best,
David
\version "2.19.46"
schemeTextSpannerEngraver =
#(lambda (context)
(let ((span '())
(finished '())
(current-event '())
(event-start '())
(event-stop '()))
(make-engraver
(listeners
((scheme-text-span-event engraver event)
(if (= START (ly:event-property event 'span-direction))
(set! event-start event)
(set! event-stop event))))
(acknowledgers
((note-column-interface engraver grob source-engraver)
(if (ly:spanner? span)
(begin
(ly:pointer-group-interface::add-grob span 'note-columns grob)
(if (null? (ly:spanner-bound span LEFT))
(add-bound-item span grob)))
(if (ly:spanner? finished)
(begin
(ly:pointer-group-interface::add-grob finished 'note-columns grob)
(if (null? (ly:spanner-bound finished RIGHT))
(add-bound-item finished grob)))))))
((process-music trans)
(if (ly:stream-event? event-stop)
(if (null? span)
(ly:warning "You're trying to end a scheme text spanner
but you haven't started one.")
(begin
(set! finished span)
(ly:engraver-announce-end-grob trans finished '())
(set! span '())
(set! current-event '()))))
(if (ly:stream-event? event-start)
(if (ly:stream-event? current-event)
(ly:warning "Already have a scheme text spanner")
(begin
(set! current-event event-start)
(set! span (ly:engraver-make-grob trans 'SchemeTextSpanner event-start))
(let ((dir (ly:event-property current-event 'direction)))
(if (ly:dir? dir)
(set! (ly:grob-property span 'direction) dir)))
(set-axis! span Y)
(set! event-start '())))))
((stop-translation-timestep trans)
(if (and (ly:spanner? span)
(null? (ly:spanner-bound span LEFT)))
(ly:spanner-set-bound! span LEFT
(ly:context-property context 'currentMusicalColumn)))
(typeset-all finished context)
(set! event-start '())
(set! event-stop '()))
((finalize trans)
(typeset-all finished context)
(if (ly:spanner? span)
(begin
(ly:warning "I think there's a dangling scheme text spanner :-(")
(ly:grob-suicide! span)
(set! span '())))))))
#(define typeset-all
(lambda (finished ctx)
(if (ly:spanner? finished)
(if (null? (ly:spanner-bound finished RIGHT))
(ly:spanner-set-bound! finished RIGHT
(ly:context-property ctx 'currentMusicalColumn)))
(set! finished '()))))
_______________________________________________
lilypond-user mailing list
[email protected]
https://lists.gnu.org/mailman/listinfo/lilypond-user