displayLilyMusic =
-#(define-music-function (parser location port music) ((port?) ly:music?)
+#(define-music-function (parser location music) (ly:music?)
(_i "Display the LilyPond input representation of @var{music}
-to @var{port}, defaulting to the console.")
- (if (not port)
- (set! port (current-output-port)))
- (newline port)
- (display-lily-music music parser port)
+to the console.")
+ (newline)
+ (display-lily-music music parser)
music)
displayMusic =
-#(define-music-function (parser location port music) ((port?) ly:music?)
- (_i "Display the internal representation of @var{music} to
-@var{port}, default to the console.")
- (if (not port)
- (set! port (current-output-port)))
- (newline port)
- (display-scheme-music music port)
+#(define-music-function (parser location music) (ly:music?)
+ (_i "Display the internal representation of @var{music} to the console.")
+ (newline)
+ (display-scheme-music music)
music)
(and (not (null? origins)) (car origins)))))))
;;
;; first, split the music and fill in voices
- (for-each (lambda (m)
- (push-music m)
- (if (bar-check? m) (change-voice)))
- (ly:music-property music 'elements))
+ ;; We flatten direct layers of SequentialMusic since they are
+ ;; pretty much impossible to avoid when writing music functions.
+ (let rec ((music music))
+ (for-each (lambda (m)
+ (if (eq? (ly:music-property m 'name) 'SequentialMusic)
+ (rec m)
+ (begin
+ (push-music m)
+ (if (bar-check? m) (change-voice)))))
+ (ly:music-property music 'elements)))
(if (not (null? current-sequence)) (change-voice))
;; un-circularize `voices' and reorder the voices
(set! voices (map-in-order (lambda (dummy seqs)