-\version "2.14.0"
+\version "2.17.6"
\header {
texidoc = "Use @code{define-event-class}, scheme engraver methods,
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))
(interfaces . (font-interface
line-interface
line-spanner-interface
+ outside-staff-interface
side-position-interface))))))
#(define scheme-event-spanner-types
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)
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 |