lilypond-user
[Top][All Lists]
Advanced

[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 '())))))



reply via email to

[Prev in Thread] Current Thread [Next in Thread]