%% need SRFI-1 for filter; optargs for lambda*
#(use-modules (srfi srfi-1)
- (ice-9 optargs))
+ (ice-9 optargs))
%% TODO: using define-music-function in a .scm causes crash.
(ly:music?)
(_i "Make @var{music} absolute. This does not actually change the
music itself but rather hides it from surrounding @code{\\relative}
-commands.")
+and @code{\\fixed} commands.")
(make-music 'RelativeOctaveMusic 'element music))
acciaccatura =
#(define-music-function (parser location main grace) (ly:music? ly:music?)
(_i "Create @var{grace} note(s) after a @var{main} music expression.")
(let ((main-length (ly:music-length main))
- (fraction (ly:parser-lookup parser 'afterGraceFraction)))
+ (fraction (ly:parser-lookup parser 'afterGraceFraction)))
(make-simultaneous-music
(list
main
(make-sequential-music
- (list
+ (list
- (make-music 'SkipMusic
- 'duration (ly:make-duration
- 0 0
- (* (ly:moment-main-numerator main-length)
- (car fraction))
- (* (ly:moment-main-denominator main-length)
- (cdr fraction))))
- (make-music 'GraceMusic
- 'element grace)))))))
+ (make-music 'SkipMusic
+ 'duration (ly:make-duration
+ 0 0
+ (* (ly:moment-main-numerator main-length)
+ (car fraction))
+ (* (ly:moment-main-denominator main-length)
+ (cdr fraction))))
+ (make-music 'GraceMusic
+ 'element grace)))))))
%% music identifiers not allowed at top-level,
(_i "Allow a page turn. May be used at toplevel (ie between scores or
markups), or inside a score.")
(make-music 'EventChord
- 'page-marker #t
- 'page-turn-permission 'allow
- 'elements (list (make-music 'PageTurnEvent
- 'break-permission 'allow))))
+ 'page-marker #t
+ 'page-turn-permission 'allow
+ 'elements (list (make-music 'PageTurnEvent
+ 'break-permission 'allow))))
alterBroken =
#(define-music-function (parser location property arg item)
(_i "Append @var{more} to the @code{elements} of all music
expressions in @var{music} that are tagged with @var{tag}.")
(music-map (lambda (m)
- (if (memq tag (ly:music-property m 'tags))
- (set! (ly:music-property m 'elements)
- (append (ly:music-property m 'elements)
- (list more))))
- m)
- music))
+ (if (memq tag (ly:music-property m 'tags))
+ (set! (ly:music-property m 'elements)
+ (append (ly:music-property m 'elements)
+ (list more))))
+ m)
+ music))
applyContext =
#(define-music-function (parser location proc) (procedure?)
(_i "Modify context properties with Scheme procedure @var{proc}.")
(make-music 'ApplyContext
- 'procedure proc))
+ 'procedure proc))
applyMusic =
#(define-music-function (parser location func music) (procedure? ly:music?)
#(define-music-function (parser location ctx proc) (symbol? procedure?)
(_i "Apply function @code{proc} to every layout object in context @code{ctx}")
(make-music 'ApplyOutputEvent
- 'procedure proc
- 'context-type ctx))
+ 'procedure proc
+ 'context-type ctx))
appoggiatura =
#(def-grace-function startAppoggiaturaMusic stopAppoggiaturaMusic
#(define-event-function (parser location offset text) (number-pair? markup?)
(_i "Attach @var{text} at @var{offset} (use like @code{\\tweak})")
(make-music 'AnnotateOutputEvent
- 'X-offset (car offset)
- 'Y-offset (cdr offset)
- 'text text))
+ 'X-offset (car offset)
+ 'Y-offset (cdr offset)
+ 'text text))
bar =
#(define-music-function (parser location type) (string?)
#(define-music-function (parser location n) (integer?)
(_i "Print a warning if the current bar number is not @var{n}.")
(make-music 'ApplyContext
- 'procedure
- (lambda (c)
- (let ((cbn (ly:context-property c 'currentBarNumber)))
- (if (and (number? cbn) (not (= cbn n)))
- (ly:input-warning location
- "Barcheck failed got ~a expect ~a"
- cbn n))))))
+ 'procedure
+ (lambda (c)
+ (let ((cbn (ly:context-property c 'currentBarNumber)))
+ (if (and (number? cbn) (not (= cbn n)))
+ (ly:input-warning location
+ "Barcheck failed got ~a expect ~a"
+ cbn n))))))
beamExceptions =
#(define-scheme-function (parser location music) (ly:music?)
#(define-event-function (parser location delta) (real?)
(_i "Create a fall or doit of pitch interval @var{delta}.")
(make-music 'BendAfterEvent
- 'delta-step delta))
+ 'delta-step delta))
bookOutputName =
#(define-void-function (parser location newfilename) (string?)
\set Timing.measureLength = #mlen
#} ))
+compressMMRests =
+#(define-music-function (parser location music) (ly:music?)
+ (_i "Remove the empty bars created by multi-measure rests,
+leaving just the first bar containing the MM rest itself.")
+ (music-map
+ (lambda (m)
+ (if (eq? 'MultiMeasureRestMusic (ly:music-property m 'name))
+ #{ \once \set Score.skipBars = ##t #m #}
+ #{ #m #} ))
+ music))
+
crossStaff =
#(define-music-function (parser location notes) (ly:music?)
(_i "Create cross-staff stems")
(_i "Insert contents of quote @var{what} corresponding to @var{main-music},
in a CueVoice oriented by @var{dir}.")
(make-music 'QuoteMusic
- 'element main-music
- 'quoted-context-type 'CueVoice
- 'quoted-context-id "cue"
- 'quoted-music-name what
- 'quoted-voice-direction dir))
+ 'element main-music
+ 'quoted-context-type 'CueVoice
+ 'quoted-context-id "cue"
+ 'quoted-music-name what
+ 'quoted-voice-direction dir))
cueDuringWithClef =
#(define-music-function
(_i "Insert contents of quote @var{what} corresponding to @var{main-music},
in a CueVoice oriented by @var{dir}.")
(make-music 'QuoteMusic
- 'element main-music
- 'quoted-context-type 'CueVoice
- 'quoted-context-id "cue"
- 'quoted-music-name what
- 'quoted-music-clef clef
- 'quoted-voice-direction dir))
+ 'element main-music
+ 'quoted-context-type 'CueVoice
+ 'quoted-context-id "cue"
+ 'quoted-music-name what
+ 'quoted-music-clef clef
+ 'quoted-voice-direction dir))
(_i "Terminate the next spanner prematurely after exactly one note
without the need of a specific end spanner.")
(let* ((start-span-evs (filter (lambda (ev)
- (equal? (ly:music-property ev 'span-direction)
- START))
- (extract-typed-music music 'span-event)))
- (stop-span-evs
- (map (lambda (m)
- (music-clone m 'span-direction STOP))
+ (equal? (ly:music-property ev 'span-direction)
+ START))
+ (extract-typed-music music 'span-event)))
+ (stop-span-evs
+ (map (lambda (m)
+ (music-clone m 'span-direction STOP))
start-span-evs))
- (end-ev-chord (make-music 'EventChord
- 'elements stop-span-evs))
- (total (make-music 'SequentialMusic
- 'elements (list music
- end-ev-chord))))
+ (end-ev-chord (make-music 'EventChord
+ 'elements stop-span-evs))
+ (total (make-music 'SequentialMusic
+ 'elements (list music
+ end-ev-chord))))
total))
eventChords =
#(define-music-function (parser location factor argument) (ly:moment? ly:music?)
(_i "Adjust durations of music in @var{argument} by rational @var{factor}.")
(let ((orig-duration (ly:music-length argument))
- (multiplier (ly:make-moment 1 1)))
+ (multiplier (ly:make-moment 1 1)))
(for-each
(lambda (mus)
- (if (< 0 (ly:moment-main-denominator (ly:music-length mus)))
- (begin
- (ly:music-compress mus multiplier)
- (set! multiplier (ly:moment-mul factor multiplier)))))
+ (if (< 0 (ly:moment-main-denominator (ly:music-length mus)))
+ (begin
+ (ly:music-compress mus multiplier)
+ (set! multiplier (ly:moment-mul factor multiplier)))))
(extract-named-music argument '(EventChord NoteEvent RestEvent SkipEvent)))
(ly:music-compress
argument
(if (number? finger) 'digit 'text)
finger))
+fixed =
+#(define-music-function (parser location pitch music)
+ (ly:pitch? ly:music?)
+ (_i "Use the octave of @var{pitch} as the default octave for @var{music}.")
+ (let ((octave-marks (1+ (ly:pitch-octave pitch))))
+ (cond ((not (= 0 octave-marks))
+ (ly:music-transpose music (ly:make-pitch octave-marks 0 0))
+ ;;In order to leave unchanged the notes in any enclosed
+ ;; \absolute or \fixed or \relative, make a cancelling shift
+ (map (lambda (m)
+ (ly:music-transpose m (ly:make-pitch (- octave-marks) 0 0)))
+ (extract-named-music music 'RelativeOctaveMusic)))))
+ (make-music 'RelativeOctaveMusic 'element music))
+
footnote =
#(define-music-function (parser location mark offset footnote item)
((markup?) number-pair? markup? symbol-list-or-music?)
post-event, the @code{\\footnote} command itself needs to be attached
to the preceding note or rest as a post-event with @code{-}.")
(let ((mus (make-music
- 'FootnoteEvent
- 'X-offset (car offset)
- 'Y-offset (cdr offset)
- 'automatically-numbered (not mark)
- 'text (or mark (make-null-markup))
- 'footnote-text footnote)))
+ 'FootnoteEvent
+ 'X-offset (car offset)
+ 'Y-offset (cdr offset)
+ 'automatically-numbered (not mark)
+ 'text (or mark (make-null-markup))
+ 'footnote-text footnote)))
#{ \once \tweak footnote-music #mus #item #}))
grace =
in the format of @code{all-grob-descriptions}.")
(ly:make-context-mod
(map (lambda (p)
- (list 'assign (car p) (ly:make-grob-properties (cdr p))))
+ (list 'assign (car p) (ly:make-grob-properties (cdr p))))
descriptions)))
harmonicByFret = #(define-music-function (parser location fret music) (number? ly:music?)
#{
\set harmonicDots = ##t
\temporary \override TabNoteHead.stencil = #(tab-note-head::print-custom-fret-label (ratio->fret ratio))
- \temporary \override NoteHead.Y-extent = #(ly:make-unpure-pure-container ly:grob::stencil-height
- (lambda (grob start end)
- (ly:grob::stencil-height grob)))
+ \temporary \override NoteHead.Y-extent = #(ly:make-unpure-pure-container ly:grob::stencil-height)
\temporary \override NoteHead.stencil = #(lambda (grob) (ly:grob-set-property! grob 'style 'harmonic-mixed)
(ly:note-head::print grob))
#(make-harmonic
(_i "Switch instrument to @var{name}, which must be predefined with
@code{\\addInstrumentDefinition}.")
(let* ((handle (assoc name instrument-definitions))
- (instrument-def (if handle (cdr handle) '())))
+ (instrument-def (if handle (cdr handle) '())))
(if (not handle)
- (ly:input-warning location "No such instrument: ~a" name))
+ (ly:input-warning location "No such instrument: ~a" name))
(context-spec-music
(make-music 'SimultaneousMusic
- 'elements
- (map (lambda (kv)
- (make-property-set
- (car kv)
- (cdr kv)))
- instrument-def))
+ 'elements
+ (map (lambda (kv)
+ (make-property-set
+ (car kv)
+ (cdr kv)))
+ instrument-def))
'Staff)))
(_i "Set key to @var{tonic} and scale @var{pitch-alist}.
If both are null, just generate @code{KeyChangeEvent}.")
(cond ((null? tonic) (make-music 'KeyChangeEvent))
- ((null? pitch-alist)
- (ly:parser-error parser (_ "second argument must be pitch list")
- location)
- (make-music 'SequentialMusic 'void #t))
- (else
- (ly:music-transpose
- (make-music 'KeyChangeEvent
- 'tonic (ly:make-pitch 0 0 0)
- 'pitch-alist pitch-alist)
- tonic))))
+ ((null? pitch-alist)
+ (ly:parser-error parser (_ "second argument must be pitch list")
+ location)
+ (make-music 'SequentialMusic 'void #t))
+ (else
+ (ly:music-transpose
+ (make-music 'KeyChangeEvent
+ 'tonic (ly:make-pitch 0 0 0)
+ 'pitch-alist pitch-alist)
+ tonic))))
killCues =
#(define-music-function (parser location music) (ly:music?)
(music-map
(lambda (mus)
(if (and (string? (ly:music-property mus 'quoted-music-name))
- (string=? (ly:music-property mus 'quoted-context-id "") "cue"))
- (ly:music-property mus 'element)
- mus))
+ (string=? (ly:music-property mus 'quoted-context-id "") "cue"))
+ (ly:music-property mus 'element)
+ mus))
music))
#(define-music-function (parser location label) (symbol?)
(_i "Create @var{label} as a bookmarking label.")
(make-music 'EventChord
- 'page-marker #t
- 'page-label label
- 'elements (list (make-music 'LabelEvent
- 'page-label label))))
+ 'page-marker #t
+ 'page-label label
+ 'elements (list (make-music 'LabelEvent
+ 'page-label label))))
language =
(parser location label) ((scheme? '()))
"Make the music for the \\mark command."
(let* ((set (and (integer? label)
- (context-spec-music (make-property-set 'rehearsalMark label)
- 'Score)))
- (ev (make-music 'MarkEvent
- 'origin location)))
+ (context-spec-music (make-property-set 'rehearsalMark label)
+ 'Score)))
+ (ev (make-music 'MarkEvent
+ 'origin location)))
(if set
- (make-sequential-music (list set ev))
- (begin
- (set! (ly:music-property ev 'label) label)
- ev))))
+ (make-sequential-music (list set ev))
+ (begin
+ (set! (ly:music-property ev 'label) label)
+ ev))))
musicMap =
#(define-music-function (parser location proc mus) (procedure? ly:music?)
(_i "Forbid a page break. May be used at toplevel (i.e., between scores or
markups), or inside a score.")
(make-music 'EventChord
- 'page-marker #t
- 'page-break-permission 'forbid
- 'elements (list (make-music 'PageBreakEvent
- 'break-permission '()))))
+ 'page-marker #t
+ 'page-break-permission 'forbid
+ 'elements (list (make-music 'PageBreakEvent
+ 'break-permission '()))))
noPageTurn =
#(define-music-function (location parser) ()
(_i "Forbid a page turn. May be used at toplevel (i.e., between scores or
markups), or inside a score.")
(make-music 'EventChord
- 'page-marker #t
- 'page-turn-permission 'forbid
- 'elements (list (make-music 'PageTurnEvent
- 'break-permission '()))))
+ 'page-marker #t
+ 'page-turn-permission 'forbid
+ 'elements (list (make-music 'PageTurnEvent
+ 'break-permission '()))))
#(define-music-function (parser location octave) (integer?)
(_i "Set the octavation.")
(make-music 'OttavaMusic
- 'ottava-number octave))
+ 'ottava-number octave))
overrideTimeSignatureSettings =
#(define-music-function
of @var{base-moment}, @var{beat-structure}, and @var{beam-exceptions}.")
;; TODO -- add warning if largest value of grouping is
- ;; greater than time-signature.
+ ;; greater than time-signature.
(let ((setting (make-setting base-moment beat-structure beam-exceptions)))
(override-time-signature-setting time-signature setting)))
(_i "Force a page break. May be used at toplevel (i.e., between scores or
markups), or inside a score.")
(make-music 'EventChord
- 'page-marker #t
- 'line-break-permission 'force
- 'page-break-permission 'force
- 'elements (list (make-music 'LineBreakEvent
- 'break-permission 'force)
- (make-music 'PageBreakEvent
- 'break-permission 'force))))
+ 'page-marker #t
+ 'line-break-permission 'force
+ 'page-break-permission 'force
+ 'elements (list (make-music 'LineBreakEvent
+ 'break-permission 'force)
+ (make-music 'PageBreakEvent
+ 'break-permission 'force))))
pageTurn =
#(define-music-function (location parser) ()
(_i "Force a page turn between two scores or top-level markups.")
(make-music 'EventChord
- 'page-marker #t
- 'line-break-permission 'force
- 'page-break-permission 'force
- 'page-turn-permission 'force
- 'elements (list (make-music 'LineBreakEvent
- 'break-permission 'force)
- (make-music 'PageBreakEvent
- 'break-permission 'force)
- (make-music 'PageTurnEvent
- 'break-permission 'force))))
+ 'page-marker #t
+ 'line-break-permission 'force
+ 'page-break-permission 'force
+ 'page-turn-permission 'force
+ 'elements (list (make-music 'LineBreakEvent
+ 'break-permission 'force)
+ (make-music 'PageBreakEvent
+ 'break-permission 'force)
+ (make-music 'PageTurnEvent
+ 'break-permission 'force))))
parallelMusic =
#(define-void-function (parser location voice-ids music) (list? ly:music?)
;; arg is an EventChord -> set the parenthesize property
;; on all child notes and rests
(for-each
- (lambda (ev)
- (if (or (memq 'note-event (ly:music-property ev 'types))
- (memq 'rest-event (ly:music-property ev 'types)))
- (set! (ly:music-property ev 'parenthesize) #t)))
- (ly:music-property arg 'elements))
+ (lambda (ev)
+ (if (or (memq 'note-event (ly:music-property ev 'types))
+ (memq 'rest-event (ly:music-property ev 'types)))
+ (set! (ly:music-property ev 'parenthesize) #t)))
+ (ly:music-property arg 'elements))
;; No chord, simply set property for this expression:
(set! (ly:music-property arg 'parenthesize) #t))
arg)
+#(define (make-directed-part-combine-music
+ parser direction chord-range part1 part2
+ one-context-settings
+ two-context-settings
+ shared-context-settings)
+
+ (let ((pc-music (make-part-combine-music
+ parser (list part1 part2) direction chord-range)))
+ #{ \context Staff <<
+ \context Voice = "one" \with #one-context-settings {}
+ \context Voice = "two" \with #two-context-settings {}
+ \context Voice = "shared" \with #shared-context-settings {}
+ #pc-music
+ #(make-part-combine-marks
+ default-part-combine-mark-state-machine
+ (ly:music-property pc-music 'split-list))
+ >> #} ))
+
partcombine =
#(define-music-function (parser location chord-range part1 part2)
((number-pair? '(0 . 8)) ly:music? ly:music?)
and @var{part2} are combined into one voice where appropriate.
Optional @var{chord-range} sets the distance in steps between notes
that may be combined into a chord or unison.")
- (make-part-combine-music parser
- (list part1 part2) #f chord-range))
+ (make-directed-part-combine-music parser #f chord-range part1 part2
+ #{ \with { \voiceOne \override DynamicLineSpanner.direction = #UP } #}
+ #{ \with { \voiceTwo \override DynamicLineSpanner.direction = #DOWN } #}
+ #{ #} ))
partcombineUp =
#(define-music-function (parser location chord-range part1 part2)
((number-pair? '(0 . 8)) ly:music? ly:music?)
(_i "Take the music in @var{part1} and @var{part2} and typeset so
that they share a staff with stems directed upward.")
- (make-part-combine-music parser
- (list part1 part2) UP chord-range))
+ (make-directed-part-combine-music parser UP chord-range part1 part2
+ #{ \with { \voiceOne \override DynamicLineSpanner.direction = #UP } #}
+ #{ \with { \voiceThree \override DynamicLineSpanner.direction = #UP } #}
+ #{ \with { \voiceOne \override DynamicLineSpanner.direction = #UP } #} ))
partcombineDown =
#(define-music-function (parser location chord-range part1 part2)
((number-pair? '(0 . 8)) ly:music? ly:music?)
(_i "Take the music in @var{part1} and @var{part2} and typeset so
that they share a staff with stems directed downward.")
- (make-part-combine-music parser
- (list part1 part2) DOWN chord-range))
+ (make-directed-part-combine-music parser DOWN chord-range part1 part2
+ #{ \with { \voiceFour \override DynamicLineSpanner.direction = #DOWN } #}
+ #{ \with { \voiceTwo \override DynamicLineSpanner.direction = #DOWN } #}
+ #{ \with { \voiceTwo \override DynamicLineSpanner.direction = #DOWN } #} ))
partcombineForce =
-#(define-music-function (location parser type once) (symbol-or-boolean? boolean?)
+#(define-music-function (location parser type once) (boolean-or-symbol? boolean?)
(_i "Override the part-combiner.")
(make-music 'EventChord
- 'elements (list (make-music 'PartCombineForceEvent
- 'forced-type type
- 'once once))))
+ 'elements (list (make-music 'PartCombineForceEvent
+ 'forced-type type
+ 'once once))))
partcombineApart = \partcombineForce #'apart ##f
partcombineApartOnce = \partcombineForce #'apart ##t
partcombineChords = \partcombineForce #'chords ##f
;; ensure \partial still works if the Timing_translator is moved
(descend-to-context
(context-spec-music (make-music 'PartialSet
- 'origin location
- 'duration dur)
- 'Timing)
+ 'origin location
+ 'duration dur)
+ 'Timing)
'Score))
pitchedTrill =
(_i "Print a trill with @var{main-note} as the main note of the trill and
print @var{secondary-note} as a stemless note head in parentheses.")
(let* ((get-notes (lambda (ev-chord)
- (extract-named-music ev-chord 'NoteEvent)))
+ (extract-named-music ev-chord 'NoteEvent)))
(sec-note-events (get-notes secondary-note))
(trill-events (extract-named-music main-note 'TrillSpanEvent)))
(if (pair? sec-note-events)
(_i "Add @var{more} to the front of @code{elements} of all music
expressions in @var{music} that are tagged with @var{tag}.")
(music-map (lambda (m)
- (if (memq tag (ly:music-property m 'tags))
- (set! (ly:music-property m 'elements)
- (cons more (ly:music-property m 'elements))))
- m)
- music))
+ (if (memq tag (ly:music-property m 'tags))
+ (set! (ly:music-property m 'elements)
+ (cons more (ly:music-property m 'elements))))
+ m)
+ music))
quoteDuring =
#(define-music-function (parser location what main-music) (string? ly:music?)
(ly:pitch-steps (ly:make-pitch 1 0))
2))))
(make-music 'RelativeOctaveMusic
- 'element music))
+ 'element music))
removeWithTag =
#(define-music-function (parser location tags music)
(fraction? ly:music?)
(_i "Multiply the duration of events in @var{music} by @var{fraction}.")
(ly:music-compress music
- (ly:make-moment (car fraction) (cdr fraction))))
+ (ly:make-moment (car fraction) (cdr fraction))))
settingsFrom =
#(define-scheme-function (parser location ctx music)
(let ((mods (ly:make-context-mod)))
(define (musicop m)
(if (music-is-of-type? m 'layout-instruction-event)
- (ly:add-context-mod
- mods
- (case (ly:music-property m 'name)
- ((PropertySet)
- (list 'assign
- (ly:music-property m 'symbol)
- (ly:music-property m 'value)))
- ((PropertyUnset)
- (list 'unset
- (ly:music-property m 'symbol)))
- ((OverrideProperty)
- (cons* 'push
- (ly:music-property m 'symbol)
- (ly:music-property m 'grob-value)
+ (ly:add-context-mod
+ mods
+ (case (ly:music-property m 'name)
+ ((PropertySet)
+ (list 'assign
+ (ly:music-property m 'symbol)
+ (ly:music-property m 'value)))
+ ((PropertyUnset)
+ (list 'unset
+ (ly:music-property m 'symbol)))
+ ((OverrideProperty)
+ (cons* 'push
+ (ly:music-property m 'symbol)
+ (ly:music-property m 'grob-value)
(cond
((ly:music-property m 'grob-property #f) => list)
(else
(ly:music-property m 'grob-property-path)))))
- ((RevertProperty)
- (cons* 'pop
- (ly:music-property m 'symbol)
+ ((RevertProperty)
+ (cons* 'pop
+ (ly:music-property m 'symbol)
(cond
((ly:music-property m 'grob-property #f) => list)
(else
(ly:music-property m 'grob-property-path)))))))
- (case (ly:music-property m 'name)
- ((ApplyContext)
- (ly:add-context-mod mods
- (list 'apply
- (ly:music-property m 'procedure))))
- ((ContextSpeccedMusic)
- (if (or (not ctx)
- (eq? ctx (ly:music-property m 'context-type)))
- (musicop (ly:music-property m 'element))))
- (else
- (let ((callback (ly:music-property m 'elements-callback)))
- (if (procedure? callback)
- (for-each musicop (callback m))))))))
+ (case (ly:music-property m 'name)
+ ((ApplyContext)
+ (ly:add-context-mod mods
+ (list 'apply
+ (ly:music-property m 'procedure))))
+ ((ContextSpeccedMusic)
+ (if (or (not ctx)
+ (eq? ctx (ly:music-property m 'context-type)))
+ (musicop (ly:music-property m 'element))))
+ (else
+ (let ((callback (ly:music-property m 'elements-callback)))
+ (if (procedure? callback)
+ (for-each musicop (callback m))))))))
(musicop music)
mods))
#(define-music-function (parser location dur) (ly:duration?)
(_i "Skip forward by @var{dur}.")
(make-music 'SkipMusic
- 'duration dur))
+ 'duration dur))
slashedGrace =
#{
\overrideProperty Score.NonMusicalPaperColumn.line-break-system-details
#(list (cons 'alignment-extra-space (cdr (assoc 'system-stretch parameters)))
- (cons 'system-Y-extent (cdr (assoc 'system-Y-extent parameters))))
+ (cons 'system-Y-extent (cdr (assoc 'system-Y-extent parameters))))
#})
styledNoteHeads =
(fraction? ly:music?)
(_i "Scale @var{music} in time by @var{fraction}.")
(make-music 'TimeScaledMusic
- 'element (ly:music-compress music (ly:make-moment (car fraction) (cdr fraction)))
- 'numerator (car fraction)
- 'denominator (cdr fraction)))
+ 'element (ly:music-compress music (ly:make-moment (car fraction) (cdr fraction)))
+ 'numerator (car fraction)
+ 'denominator (cdr fraction)))
transpose =
#(define-music-function
(_i "Insert notes from the part @var{what} into a voice called @code{cue},
using the transposition defined by @var{pitch}. This happens
-simultaneously with @var{main-music}, which is usually a rest. The
+simultaneously with @var{main-music}, which is usually a rest. The
argument @var{dir} determines whether the cue notes should be notated
as a first or second voice.")
(make-music 'QuoteMusic
- 'element main-music
- 'quoted-context-type 'CueVoice
- 'quoted-context-id "cue"
- 'quoted-music-name what
- 'quoted-voice-direction dir
+ 'element main-music
+ 'quoted-context-type 'CueVoice
+ 'quoted-context-id "cue"
+ 'quoted-music-name what
+ 'quoted-voice-direction dir
;; following is inverse of instrumentTransposition for
;; historical reasons
- 'quoted-transposition pitch))
+ 'quoted-transposition pitch))
transposition =
#(define-music-function (parser location pitch) (ly:pitch?)