X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=scm%2Fdefine-music-callbacks.scm;h=5cc1db14cd7b12fd22ebc664fe18b5ea1f9ae1c4;hb=85294fd1b1a79f2ea094e4d6a4befb8fe0c0cada;hp=667a7c631505aa85556721845a122b6dd2aa37a1;hpb=05ae3ee407193d492f9baede0498eb81a05d93ab;p=lilypond.git diff --git a/scm/define-music-callbacks.scm b/scm/define-music-callbacks.scm index 667a7c6315..5cc1db14cd 100644 --- a/scm/define-music-callbacks.scm +++ b/scm/define-music-callbacks.scm @@ -1,6 +1,6 @@ ;;;; This file is part of LilyPond, the GNU music typesetter. ;;;; -;;;; Copyright (C) 1998--2014 Han-Wen Nienhuys +;;;; Copyright (C) 1998--2015 Han-Wen Nienhuys ;;;; Jan Nieuwenhuizen ;;;; Neil Puttock ;;;; Carl Sorensen @@ -23,16 +23,24 @@ (define (mm-rest-child-list music) "Generate events for multimeasure rests, to be used by the sequential-iterator" - (let ((location (ly:music-property music 'origin)) - (duration (ly:music-property music 'duration))) - (list (make-music 'BarCheck - 'origin location) - (make-event-chord (cons (make-music 'MultiMeasureRestEvent - 'origin location - 'duration duration) - (ly:music-property music 'articulations))) - (make-music 'BarCheck - 'origin location)))) + (ly:set-origin! (list (make-music 'BarCheck) + (make-music 'MultiMeasureRestEvent + (ly:music-deep-copy music)) + (make-music 'BarCheck)) + music)) + +(define (make-unfolded-set music) + (let ((n (ly:music-property music 'repeat-count)) + (alts (ly:music-property music 'elements)) + (body (ly:music-property music 'element))) + (cond ((<= n 0) '()) + ((null? alts) (make-list n body)) + (else + (concatenate + (zip (make-list n body) + (append! (make-list (max 0 (- n (length alts))) + (car alts)) + alts))))))) (define (make-volta-set music) (let* ((alts (ly:music-property music 'elements)) @@ -115,7 +123,24 @@ to be used by the sequential-iterator" context 'measureLength new-measure-length)))) 'Timing) 'Score) - (make-music 'TimeSignatureEvent music)))) + ;; (make-music 'TimeSignatureEvent music) would always + ;; create a Bottom context. So instead, we just send the + ;; event to whatever context may be currently active. If + ;; that is not contained within an existing context with + ;; TimeSignatureEngraver at the time \time is iterated, it + ;; will drop through the floor which mostly means that + ;; point&click and tweaks are not available for any time + ;; signatures engraved due to the Timing property changes + ;; but without a \time of its own. This is more a + ;; "notification" rather than an "event" (which is always + ;; sent to Bottom) but we don't currently have iterators for + ;; that. + (make-apply-context + (lambda (context) + (ly:broadcast (ly:context-event-source context) + (ly:make-stream-event + (ly:make-event-class 'time-signature-event) + (ly:music-mutable-properties music)))))))) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Some MIDI callbacks -- is this a good place for them?