((and (not (string? arg)) (markup? arg)) ;; a markup
(inner-markup->make-markup arg))
(else ;; scheme arg
- arg)))
+ (music->make-music arg))))
(define (inner-markup->make-markup mrkup)
(if (string? mrkup)
`(#:simple ,mrkup)
(set! (ly:music-property r 'repeat-count) (max times 1))
(set! (ly:music-property r 'elements) talts)
(if (and (equal? name "tremolo")
- (pair? (ly:music-property main 'elements)))
+ (or (pair? (ly:music-property main 'elements))
+ (ly:music? (ly:music-property main 'element))))
;; This works for single-note and multi-note tremolos!
(let* ((children (if (music-is-of-type? main 'sequential-music)
;; \repeat tremolo n { ... }
(let* ((props (ly:music-mutable-properties music))
(old-name (ly:music-property music 'name))
(flattened (flatten-alist props)))
-
(set! music (apply make-music (cons 'UnfoldedRepeatedMusic
flattened)))
If @var{rest} is present, it is used to set
@code{beatStructure}."
(ly:export
- (make-music 'TimeSignatureMusic
- 'numerator num
- 'denominator den
- 'beat-structure (if (null? rest) rest (car rest)))))
-
-(define-public (make-mark-set label)
- "Make the music for the \\mark command."
- (let* ((set (if (integer? label)
- (context-spec-music (make-property-set 'rehearsalMark label)
- 'Score)
- #f))
- (ev (make-music 'MarkEvent))
- (ch (make-event-chord (list ev))))
- (if set
- (make-sequential-music (list set ch))
- (begin
- (set! (ly:music-property ev 'label) label)
- ch))))
+ (make-music 'TimeSignatureMusic
+ 'numerator num
+ 'denominator den
+ 'beat-structure (if (null? rest) rest (car rest)))))
(define-safe-public (make-articulation name)
(make-music 'ArticulationEvent
(ly:moment-main-numerator moment)
(ly:moment-main-denominator moment)))
-(define (skip-this moment)
- "set skipTypesetting, make SkipMusic of the given MOMENT length,
- and then unset skipTypesetting."
- (make-sequential-music
- (list
- (context-spec-music (make-property-set 'skipTypesetting #t)
- 'Score)
- (make-music 'SkipMusic 'duration
- (make-duration-of-length moment))
- (context-spec-music (make-property-set 'skipTypesetting #f)
- 'Score))))
-
-(define (unskip-this moment)
- "unset skipTypesetting, make SkipMusic of the given MOMENT length,
- and then set skipTypesetting."
+(define (make-skipped moment bool)
+ "Depending on BOOL, set or unset skipTypesetting,
+then make SkipMusic of the given MOMENT length, and
+then revert skipTypesetting."
(make-sequential-music
(list
- (context-spec-music (make-property-set 'skipTypesetting #f)
+ (context-spec-music (make-property-set 'skipTypesetting bool)
'Score)
(make-music 'SkipMusic 'duration
(make-duration-of-length moment))
- (context-spec-music (make-property-set 'skipTypesetting #t)
+ (context-spec-music (make-property-set 'skipTypesetting (not bool))
'Score))))
(define (skip-as-needed music parser)
- "Replace MUSIC by
+ "Replace MUSIC by
<< { \\set skipTypesetting = ##f
LENGTHOF(\\showFirstLength)
\\set skipTypesetting = ##t
When only showFirstLength is set,
the 'length property of the music is
overridden to speed up compiling."
- (let*
- ((show-last (ly:parser-lookup parser 'showLastLength))
- (show-first (ly:parser-lookup parser 'showFirstLength)))
- (cond
-
- ;; both properties may be set.
- ((and (ly:music? show-first) (ly:music? show-last))
- (let*
- ((orig-length (ly:music-length music))
- (skip-length (ly:moment-sub orig-length (ly:music-length show-last)))
- (begin-length (ly:music-length show-first)))
- (make-simultaneous-music
- (list
- (make-sequential-music
- (list
- (skip-this skip-length)
- ;; let's draw a separator between the beginning and the end
- (context-spec-music (make-property-set 'whichBar "||")
- 'Timing)))
- (unskip-this begin-length)
- music))))
-
- ;; we may only want to print the last length
- ((ly:music? show-last)
- (let*
- ((orig-length (ly:music-length music))
- (skip-length (ly:moment-sub orig-length (ly:music-length show-last))))
- (make-simultaneous-music
- (list
- (skip-this skip-length)
- music))))
-
- ;; we may only want to print the beginning; in this case
- ;; only the first length will be processed (much faster).
- ((ly:music? show-first)
- (let*
- ((orig-length (ly:music-length music))
- (begin-length (ly:music-length show-first)))
- ;; the first length must not exceed the original length.
- (if (ly:moment<? begin-length orig-length)
- (set! (ly:music-property music 'length)
- (ly:music-length show-first)))
- music))
-
- (else music))))
+ (let*
+ ((show-last (ly:parser-lookup parser 'showLastLength))
+ (show-first (ly:parser-lookup parser 'showFirstLength))
+ (show-last-length (if (ly:music? show-last)
+ (ly:music-length show-last)
+ #f))
+ (show-first-length (if (ly:music? show-first)
+ (ly:music-length show-first)
+ #f))
+ (orig-length (ly:music-length music)))
+
+ ;;FIXME: if using either showFirst- or showLastLength,
+ ;; make sure that skipBars is not set.
+
+ (cond
+
+ ;; both properties may be set.
+ ((and show-first-length show-last-length)
+ (let
+ ((skip-length (ly:moment-sub orig-length show-last-length)))
+ (make-simultaneous-music
+ (list
+ (make-sequential-music
+ (list
+ (make-skipped skip-length #t)
+ ;; let's draw a separator between the beginning and the end
+ (context-spec-music (make-property-set 'whichBar "||")
+ 'Timing)))
+ (make-skipped show-first-length #f)
+ music))))
+
+ ;; we may only want to print the last length
+ (show-last-length
+ (let
+ ((skip-length (ly:moment-sub orig-length show-last-length)))
+ (make-simultaneous-music
+ (list
+ (make-skipped skip-length #t)
+ music))))
+
+ ;; we may only want to print the beginning; in this case
+ ;; only the first length will be processed (much faster).
+ (show-first-length
+ ;; the first length must not exceed the original length.
+ (if (ly:moment<? show-first-length orig-length)
+ (set! (ly:music-property music 'length)
+ show-first-length))
+ music)
+
+ (else music))))
(define-public toplevel-music-functions