\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 '()))))