((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 { ... }
1))
;; # of dots is equal to the 1 in bitwise representation (minus 1)!
(dots (1- (logcount (* times children))))
- ;; The remaining missing multiplicator to scale the notes by
+ ;; The remaining missing multiplicator to scale the notes by
;; times * children
(mult (/ (* times children (ash 1 dots)) (1- (ash 2 dots))))
(shift (- (ly:intlog2 (floor mult))))
(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)))
;;; Need to keep this definition for \time calls from parser
(define-public (make-time-signature-set num den)
"Set properties for time signature NUM/DEN."
- (make-beam-rule-time-signature-set num den '()))
+ (make-music 'TimeSignatureMusic
+ 'numerator num
+ 'denominator den
+ 'beat-structure '()))
;;; Used for calls that include beat-grouping setting
(define-public (set-time-signature num den . rest)
"Set properties for time signature @var{num/den}.
If @var{rest} is present, it is used to set
@code{beatStructure}."
- (ly:export (apply make-beam-rule-time-signature-set
- (list num den rest))))
-
-(define-public (make-beam-rule-time-signature-set num den rest)
- "Implement settings for new time signature. Can be
-called from either make-time-signature-set (used by \time
-in parser) or set-time-signature (called from scheme code
-included in .ly file)."
-
- (let ((m (make-music 'ApplyContext)))
- (define (make-time-settings context)
- (let* ((fraction (cons num den))
- (time-signature-settings (ly:context-property context 'timeSignatureSettings))
- (my-base-fraction (base-fraction fraction time-signature-settings))
- (my-beat-structure (if (null? rest)
- (beat-structure my-base-fraction
- fraction
- time-signature-settings)
- (car rest)))
- (beaming-exception
- (beam-exceptions fraction time-signature-settings))
- (new-measure-length (ly:make-moment num den)))
- (ly:context-set-property! context 'timeSignatureFraction fraction)
- (ly:context-set-property!
- context 'baseMoment (fraction->moment my-base-fraction))
- (ly:context-set-property! context 'beatStructure my-beat-structure)
- (ly:context-set-property! context 'beamExceptions beaming-exception)
- (ly:context-set-property! context 'measureLength new-measure-length)))
- (set! (ly:music-property m 'procedure) make-time-settings)
- (descend-to-context
- (context-spec-music m 'Timing)
- 'Score)))
-
-
-(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))))
+ (ly:export
+ (make-music 'TimeSignatureMusic
+ 'numerator num
+ 'denominator den
+ 'beat-structure (if (null? rest) rest (car rest)))))
(define-safe-public (make-articulation name)
(make-music 'ArticulationEvent
(if (vector? (ly:music-property quote-music 'quoted-events))
(let* ((dir (ly:music-property quote-music 'quoted-voice-direction))
+ (clef (ly:music-property quote-music 'quoted-music-clef))
(main-voice (if (eq? 1 dir) 1 0))
(cue-voice (if (eq? 1 dir) 0 1))
(main-music (ly:music-property quote-music 'element))
;; to have opposite stems.
(begin
(set! return-value
-
;; cannot context-spec Quote-music, since context
;; for the quotes is determined in the iterator.
(make-sequential-music
(list
+ (if (null? clef)
+ (make-music 'Music)
+ (make-cue-clef-set clef))
(context-spec-music (make-voice-props-set cue-voice) 'CueVoice "cue")
quote-music
- (context-spec-music (make-voice-props-revert) 'CueVoice "cue"))))
+ (context-spec-music (make-voice-props-revert) 'CueVoice "cue")
+ (if (null? clef)
+ (make-music 'Music)
+ (make-cue-clef-unset)))))
(set! main-music
(make-sequential-music
(list
(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