-\version "2.16.0"
+\version "2.19.21"
\header {
texidoc = "Use @code{define-event-class}, scheme engraver methods,
in scheme."
}
-#(define my-grob-descriptions '())
-
-#(define my-event-classes (ly:make-context-mod))
-
-defineEventClass =
-#(define-void-function (parser location class parent)
- (symbol? symbol?)
- (ly:add-context-mod
- my-event-classes
- `(apply
- ,(lambda (context class parent)
- (ly:context-set-property!
- context
- 'EventClasses
- (event-class-cons
- class
- parent
- (ly:context-property context 'EventClasses '()))))
- ,class ,parent)))
-
-\defineEventClass #'scheme-text-span-event #'span-event
+#(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))
(set! meta-entry (assoc-set! meta-entry 'interfaces
ifaces-entry))
(set! grob-entry (assoc-set! grob-entry 'meta meta-entry))
- (set! my-grob-descriptions
+ (set! all-grob-descriptions
(cons (cons grob-name grob-entry)
- my-grob-descriptions))))
+ all-grob-descriptions))))
#(add-grob-definition
'SchemeTextSpanner
(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 =
\layout {
\context {
\Global
- \grobdescriptions #my-grob-descriptions
- #my-event-classes
+ \grobdescriptions #all-grob-descriptions
}
\context {
\Voice
}
}
-\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 |