(and (or split-elt split-elts)
(map
(lambda (e es)
- (apply music-clone music
- (append
- ;; reassigning the origin of the parent only
- ;; makes sense if the first expression in the
- ;; result is from a distributed origin
- (let ((origin
- (if (ly:music? elt)
- (and (ly:music? e) (ly:music-property e 'origin #f))
- (and (pair? es) (ly:music-property (car es) 'origin #f)))))
- (if origin (list 'origin origin) '()))
- (if (ly:music? e) (list 'element e) '())
- (if (pair? es) (list 'elements es) '()))))
+ (let ((m (ly:music-deep-copy music
+ ;;; reassigning the origin of the parent only
+ ;;; makes sense if the first expression in the
+ ;;; result is from a distributed origin
+ (or (and (ly:music? e) e)
+ (and (pair? es) (car es))))))
+ (if (ly:music? e)
+ (set! (ly:music-property m 'element) e))
+ (if (pair? es)
+ (set! (ly:music-property m 'elements) es))
+ m))
(or split-elt (circular-list #f))
(or split-elts (circular-list #f))))))
(let ((voices (recurse-and-split music)))
#:use-module (lily)
#:use-module (srfi srfi-1))
-;; Sets music origin to (*location*)
-(define (here! m)
- (set! (ly:music-property m 'origin) (*location*))
- m)
-
(define-public (music-function-call-error fun m)
(let* ((sig (ly:music-function-signature fun))
(pred (if (pair? (car sig)) (caar sig) (car sig))))
(m (and good (apply (ly:music-function-extract fun)
(reverse! args rest)))))
(if (and good (pred m))
- (if (ly:music? m) (here! m) m)
+ (if (ly:music? m) (ly:set-origin! m) m)
(if good
(music-function-call-error fun m)
(and (pair? (car sig)) (cdar sig))))))
(*location*)))
(define-public (void-music)
- (here! (make-music 'Music)))
+ (ly:set-origin! (make-music 'Music)))
(define-public (sequential-music mlist)
- (here! (make-sequential-music mlist)))
+ (ly:set-origin! (make-sequential-music mlist)))
(define-public (simultaneous-music mlist)
- (here! (make-simultaneous-music mlist)))
+ (ly:set-origin! (make-simultaneous-music mlist)))
(define-public (event-chord mlist)
- (here! (make-music 'EventChord
- 'elements mlist)))
+ (ly:set-origin! (make-music 'EventChord
+ 'elements mlist)))
(define-public (unrelativable-music mus)
- (here! (make-music 'UnrelativableMusic
- 'element mus)))
+ (ly:set-origin! (make-music 'UnrelativableMusic
+ 'element mus)))
(define-public (context-change type id)
- (here! (make-music 'ContextChange
- 'change-to-type type
- 'change-to-id id)))
+ (ly:set-origin! (make-music 'ContextChange
+ 'change-to-type type
+ 'change-to-id id)))
(define-public (tempo text . rest)
(let* ((unit (and (pair? rest)
(count (and unit
(cadr rest)))
(range-tempo? (pair? count))
- (tempo-change (here! (make-music 'TempoChangeEvent
- 'text text
- 'tempo-unit unit
- 'metronome-count count)))
+ (tempo-change (ly:set-origin! (make-music 'TempoChangeEvent
+ 'text text
+ 'tempo-unit unit
+ 'metronome-count count)))
(tempo-set
(and unit
(context-spec-music
tempo-change)))
(define-public (repeat type num body alts)
- (here! (make-repeat type num body alts)))
+ (ly:set-origin! (make-repeat type num body alts)))
(define (script-to-mmrest-text music)
"Extract @code{'direction} and @code{'text} from @var{music}, and transform
music))
(define-public (multi-measure-rest duration articulations)
- (here! (make-music 'MultiMeasureRestMusic
- 'articulations (map script-to-mmrest-text articulations)
- 'duration duration)))
+ (ly:set-origin! (make-music 'MultiMeasureRestMusic
+ 'articulations (map script-to-mmrest-text articulations)
+ 'duration duration)))
(define-public (repetition-chord duration articulations)
- (here! (make-music 'EventChord
- 'duration duration
- 'elements articulations)))
+ (ly:set-origin! (make-music 'EventChord
+ 'duration duration
+ 'elements articulations)))
(define-public (context-specification type id ops create-new mus)
(let ((csm (context-spec-music mus type id)))
(set! (ly:music-property csm 'property-operations) ops)
(if create-new (set! (ly:music-property csm 'create-new) #t))
- (here! csm)))
+ (ly:set-origin! csm)))
(define-public (composed-markup-list commands markups)
;; `markups' being a list of markups, eg (markup1 markup2 markup3),
(list 'grob-property-path (car args))
(list 'grob-property-path args)))
(else (ly:error (_ "Invalid property operation ~a") music-type))))
- (m (here! (apply make-music music-type
- 'symbol symbol
- props))))
- (here! (make-music 'ContextSpeccedMusic
- 'element m
- 'context-type ctx))))
+ (m (ly:set-origin! (apply make-music music-type
+ 'symbol symbol
+ props))))
+ (ly:set-origin! (make-music 'ContextSpeccedMusic
+ 'element m
+ 'context-type ctx))))
(define (get-first-context-id! mus)
"Find the name of a ContextSpeccedMusic, possibly naming it"
'())))
(define-public (lyric-event text duration)
- (here! (make-lyric-event text duration)))
+ (ly:set-origin! (make-lyric-event text duration)))
(define-public (lyric-combine sync sync-type music)
;; CompletizeExtenderEvent is added following the last lyric in MUSIC
;; be completed if the lyrics end before the associated voice.
(append! (ly:music-property music 'elements)
(list (make-music 'CompletizeExtenderEvent)))
- (here!
+ (ly:set-origin!
(make-music 'LyricCombineMusic
'element music
'associated-context sync
(lambda (mus)
(with-location
(ly:music-property mus 'origin)
- (here! (make-music 'ContextSpeccedMusic
- 'create-new #t
- 'context-type 'Lyrics
- 'element
- (lyric-combine
- voice-name voice-type mus)))))
+ (ly:set-origin! (make-music 'ContextSpeccedMusic
+ 'create-new #t
+ 'context-type 'Lyrics
+ 'element
+ (lyric-combine
+ voice-name voice-type mus)))))
addlyrics-list)))
(make-simultaneous-music (cons voice lyricstos))))
(define (keep-element? m)
(any (lambda (t) (music-is-of-type? m t))
event-types))
- (define origin (ly:music-property repeat-chord 'origin #f))
- (define (set-origin! l)
- (if origin
- (for-each (lambda (m) (set! (ly:music-property m 'origin) origin)) l))
- l)
(for-each
(lambda (field)
;; now treat the elements
(set! (ly:music-property repeat-chord 'elements)
(let ((elts
- (set-origin! (ly:music-deep-copy
- (filter keep-element?
- (ly:music-property original-chord
- 'elements))))))
+ (ly:music-deep-copy (filter keep-element?
+ (ly:music-property original-chord
+ 'elements))
+ repeat-chord)))
(for-each
(lambda (m)
(let ((arts (ly:music-property m 'articulations)))
(if (pair? arts)
(set! (ly:music-property m 'articulations)
- (set-origin! (filter! keep-element? arts))))
+ (ly:set-origin! (filter! keep-element? arts)
+ repeat-chord)))
(if (ly:duration? (ly:music-property m 'duration))
(set! (ly:music-property m 'duration) duration))
(if (ly:music-property m 'cautionary #f)
(if (pair? arts)
(set! (ly:music-property repeat-chord 'articulations)
(append!
- (set-origin! (ly:music-deep-copy arts))
+ (ly:music-deep-copy arts repeat-chord)
(ly:music-property repeat-chord 'articulations)))))
repeat-chord)