[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Aleatoric / modern notation
From: |
David Nalesnik |
Subject: |
Re: Aleatoric / modern notation |
Date: |
Tue, 11 Dec 2012 17:04:50 -0600 |
On Sat, Dec 8, 2012 at 7:21 PM, David Nalesnik <address@hidden> wrote:
[...]
>
> Trying to work out the problem, I've done a little rewriting so I'll
> include the engraver here. You can just substitute this in the
> problematic file.
>
Well, I did break something. Here's the fix:
frameEngraver =
#(lambda (context)
(let ((span '())
(stub '())
(event-drul (cons '() '())))
(make-engraver
(listeners ((frame-event engraver event)
(if (= START (ly:event-property event 'span-direction))
(set-car! event-drul event)
(begin
(set-cdr! event-drul event)
(set-car! event-drul '())))))
(acknowledgers
((note-column-interface engraver grob source-engraver)
(if (ly:spanner? span)
(begin
(ly:pointer-group-interface::add-grob span 'elements grob)
(add-bound-item span grob)))
(if (ly:item? stub)
(ly:pointer-group-interface::add-grob stub 'elements grob)))
((script-interface engraver grob source-engraver)
(if (ly:spanner? span)
(ly:pointer-group-interface::add-grob span 'elements grob))
(if (ly:item? stub)
(ly:pointer-group-interface::add-grob stub 'elements grob)))
((dynamic-interface engraver grob source-engraver)
(if (ly:spanner? span)
(ly:pointer-group-interface::add-grob span 'elements grob))
(if (ly:item? stub)
(ly:pointer-group-interface::add-grob stub 'elements grob)))
((inline-accidental-interface engraver grob source-engraver)
(if (ly:spanner? span)
(ly:pointer-group-interface::add-grob span 'elements grob))
(if (ly:item? stub)
(ly:pointer-group-interface::add-grob stub 'elements grob))))
((process-music trans)
(if (ly:stream-event? (car event-drul))
(begin
(set! span (ly:engraver-make-grob trans 'Frame (car event-drul)))
(set! stub (ly:engraver-make-grob trans 'FrameStub (car
event-drul)))
(ly:grob-set-object! stub 'frame span)
(ly:grob-set-property! stub 'direction LEFT)
(set-car! event-drul '())))
(if (ly:stream-event? (cdr event-drul))
(if (null? span)
(ly:warning "No start to this box.")
(begin
(set! stub (ly:engraver-make-grob trans 'FrameStub
(cdr event-drul)))
(ly:grob-set-property! stub 'direction RIGHT)
(ly:grob-set-object! stub 'frame span)
(ly:engraver-announce-end-grob trans span (cdr event-drul))))))
((stop-translation-timestep trans)
(if (ly:stream-event? (cdr event-drul))
(begin
(set! span '())
(set-cdr! event-drul '())))
(set! stub '())))))