-\version "2.15.31"
+\version "2.19.21"
\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))
(class (assoc-get 'class meta-entry))
(ifaces-entry (assoc-get 'interfaces meta-entry)))
- (set-object-property! grob-name 'translation-type? list?)
+ (set-object-property! grob-name 'translation-type? ly:grob-properties?)
(set-object-property! grob-name 'is-grob? #t)
(set! ifaces-entry (append (case class
((Item) '(item-interface))
(interfaces . (font-interface
line-interface
line-spanner-interface
+ outside-staff-interface
side-position-interface))))))
#(define scheme-event-spanner-types
(SchemeTextSpanEvent
. ((description . "Used to signal where scheme text spanner brackets
start and stop.")
- (types . (general-music scheme-text-span-event span-event event))
+ (types . (post-event scheme-text-span-event span-event event))
))
))
(ly:spanner-set-bound! spanner RIGHT item)))
#(define (axis-offset-symbol axis)
- (if (eq? axis X) 'X-offset 'Y-offset))
+ (if (eqv? axis X) 'X-offset 'Y-offset))
#(define (set-axis! grob axis)
(if (not (number? (ly:grob-property grob 'side-axis)))
(set! (ly:grob-property grob 'side-axis) axis)
(ly:grob-chain-callback
grob
- (if (eq? axis X)
+ (if (eqv? 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 '(() . ())))
+ (event-start '())
+ (event-stop '()))
(make-engraver
(listeners ((scheme-text-span-event engraver event)
- (if (= START (ly:event-property event 'span-direction))
- (set-car! event-drul event)
- (set-cdr! event-drul 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)))))
+ (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? (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 '()))))
+ (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)))
+ (null? (ly:spanner-bound span LEFT)))
+ (ly:spanner-set-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 '(() . ())))))
+ (begin
+ (if (null? (ly:spanner-bound finished RIGHT))
+ (ly:spanner-set-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 '())))
+ (begin
+ (if (null? (ly:spanner-bound finished RIGHT))
+ (ly:spanner-set-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)
+ (begin
+ (ly:warning "I think there's a dangling scheme text spanner :-(")
+ (ly:grob-suicide! span)
(set! span '())))))))
schemeTextSpannerStart =
}
}
-\relative c' {
+\relative {
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 |