X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=input%2Fregression%2Fscheme-text-spanner.ly;h=fc60c5b33964bf8eb11cebe61224ae26225d704f;hb=e7aa6c445f463844dbaa52d38ea4aac2882b5601;hp=6541f05a3463941d0e0b7d8cc350dbb4c4061227;hpb=2055f35c47a045a50a01ff4dba8524322cfc3b48;p=lilypond.git diff --git a/input/regression/scheme-text-spanner.ly b/input/regression/scheme-text-spanner.ly index 6541f05a34..fc60c5b339 100644 --- a/input/regression/scheme-text-spanner.ly +++ b/input/regression/scheme-text-spanner.ly @@ -1,4 +1,4 @@ -\version "2.14.0" +\version "2.17.6" \header { texidoc = "Use @code{define-event-class}, scheme engraver methods, @@ -6,11 +6,7 @@ and grob creation methods to create a fully functional text spanner in scheme." } -#(define-event-class 'scheme-text-span-event - '(scheme-text-span-event - span-event - music-event - StreamEvent)) +#(define-event-class 'scheme-text-span-event 'span-event) #(define (add-grob-definition grob-name grob-entry) (let* ((meta-entry (assoc-get 'meta grob-entry)) @@ -64,6 +60,7 @@ in scheme." (interfaces . (font-interface line-interface line-spanner-interface + outside-staff-interface side-position-interface)))))) #(define scheme-event-spanner-types @@ -110,73 +107,66 @@ start and stop.") grob (if (eq? axis X) ly:side-position-interface::x-aligned-side - ly:side-position-interface::y-aligned-side) + side-position-interface::y-aligned-side) (axis-offset-symbol axis))))) schemeTextSpannerEngraver = #(lambda (context) (let ((span '()) (finished '()) - (current-event '()) - (event-drul '(() . ()))) - (list (cons 'listeners - (list (cons 'scheme-text-span-event - (lambda (engraver event) - (if (= START (ly:event-property event 'span-direction)) - (set-car! event-drul event) - (set-cdr! event-drul event)))))) - (cons 'acknowledgers - (list (cons 'note-column-interface - (lambda (engraver grob source-engraver) - (if (ly:spanner? span) - (begin - (ly:pointer-group-interface::add-grob span 'note-columns grob) - (add-bound-item span grob))) - (if (ly:spanner? finished) - (begin - (ly:pointer-group-interface::add-grob finished 'note-columns grob) - (add-bound-item finished grob))))))) - (cons 'process-music - (lambda (trans) - (if (ly:stream-event? (cdr event-drul)) - (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 current-event) - (set! span '()) - (set! current-event '()) - (set-cdr! event-drul '())))) - (if (ly:stream-event? (car event-drul)) - (begin (set! current-event (car event-drul)) - (set! span (ly:engraver-make-grob trans 'SchemeTextSpanner current-event)) - (set-axis! span Y) - (set-car! event-drul '()))))) - (cons 'stop-translation-timestep - (lambda (trans) - (if (and (ly:spanner? span) - (null? (ly:spanner-bound span LEFT))) - (set! (ly:spanner-bound span LEFT) - (ly:context-property context 'currentMusicalColumn))) - (if (ly:spanner? finished) - (begin - (if (null? (ly:spanner-bound finished RIGHT)) - (set! (ly:spanner-bound finished RIGHT) - (ly:context-property context 'currentMusicalColumn))) - (set! finished '()) - (set! event-drul '(() . ())))))) - (cons 'finalize - (lambda (trans) - (if (ly:spanner? finished) - (begin - (if (null? (ly:spanner-bound finished RIGHT)) - (set! (ly:spanner-bound finished RIGHT) - (ly:context-property context 'currentMusicalColumn))) - (set! finished '()))) - (if (ly:spanner? span) - (begin - (ly:warning "I think there's a dangling scheme text spanner :-(") - (ly:grob-suicide! span) - (set! span '())))))))) + (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) + (add-bound-item span grob))) + (if (ly:spanner? finished) + (begin + (ly:pointer-group-interface::add-grob finished 'note-columns grob) + (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 event-start) + (set! span '()) + (set! event-stop '())))) + (if (ly:stream-event? event-start) + (begin (set! span (ly:engraver-make-grob trans 'SchemeTextSpanner event-start)) + (set-axis! span Y) + (set! event-start '())))) + ((stop-translation-timestep trans) + (if (and (ly:spanner? span) + (null? (ly:spanner-bound span LEFT))) + (set! (ly:spanner-bound span LEFT) + (ly:context-property context 'currentMusicalColumn))) + (if (ly:spanner? finished) + (begin + (if (null? (ly:spanner-bound finished RIGHT)) + (set! (ly:spanner-bound finished RIGHT) + (ly:context-property context 'currentMusicalColumn))) + (set! finished '()) + (set! event-start '()) + (set! event-stop '())))) + ((finalize trans) + (if (ly:spanner? finished) + (begin + (if (null? (ly:spanner-bound finished RIGHT)) + (set! (ly:spanner-bound finished RIGHT) + (ly:context-property context 'currentMusicalColumn))) + (set! finished '()))) + (if (ly:spanner? span) + (begin + (ly:warning "I think there's a dangling scheme text spanner :-(") + (ly:grob-suicide! span) + (set! span '()))))))) schemeTextSpannerStart = #(make-span-event 'SchemeTextSpanEvent START) @@ -199,7 +189,7 @@ schemeTextSpannerEnd = a4 b\schemeTextSpannerStart c d | \repeat unfold 20 { a4 b c d | } a4 b c\schemeTextSpannerEnd d | - \override SchemeTextSpanner #'to-barline = ##t + \override SchemeTextSpanner.to-barline = ##t a4\schemeTextSpannerStart b d c | \repeat unfold 20 { a4 b c d | } a1\schemeTextSpannerEnd |