acciaccatura =
#(def-grace-function startAcciaccaturaMusic stopAcciaccaturaMusic)
-addquote =
+addQuote =
#(define-music-function (parser location name music) (string? ly:music?)
(_i "Add a piece of music to be quoted ")
(add-quotable parser name music)
'elements (list (make-music 'BreathingEvent))))
bendAfter =
-#(define-music-function (parser location delta) (integer?)
+#(define-music-function (parser location delta) (real?)
(make-music 'BendAfterEvent
'delta-step delta))
(make-clef-set type))
-compressMusic =
+scaleDurations =
#(define-music-function
(parser location fraction music) (number-pair? ly:music?)
(ly:music-compress music (ly:make-moment (car fraction) (cdr fraction))))
'quoted-voice-direction dir
'origin location))
-%% The following causes an error with guile 1.6.8 (guile 1.6.7 and 1.8.x are fine)
-#(use-modules (scm display-lily))
-
displayLilyMusic =
#(define-music-function (parser location music) (ly:music?)
(newline)
(display-scheme-music music)
music)
+
+endSpanners =
+#(define-music-function (parser location music) (ly:music?)
+ (if (eq? (ly:music-property music 'name) 'EventChord)
+ (let*
+ ((elts (ly:music-property music 'elements))
+ (start-span-evs (filter (lambda (ev)
+ (and (music-has-type ev 'span-event)
+ (equal? (ly:music-property ev 'span-direction)
+ START)))
+ elts))
+ (stop-span-evs
+ (map (lambda (m)
+ (let* ((c (music-clone m)))
+ (set! (ly:music-property c 'span-direction) STOP)
+ c))
+ start-span-evs))
+ (end-ev-chord (make-music 'EventChord
+ 'elements stop-span-evs))
+ (total (make-music 'SequentialMusic
+ 'elements (list music
+ end-ev-chord))))
+ total)
+
+ (ly:input-message location (_ "argument endSpanners is not an EventChord: ~a" music))))
+
featherDurations=
#(define-music-function (parser location factor argument) (ly:moment? ly:music?)
(_i "Rearrange durations in ARGUMENT so there is an
(if (string? (ly:music-property mus 'quoted-music-name))
(ly:music-property mus 'element)
mus)) music))
-
+
+label =
+#(define-music-function (parser location label) (symbol?)
+ (_i "Place a bookmarking label, either at top-level or inside music.")
+ (make-music 'EventChord
+ 'page-marker #t
+ 'page-label label
+ 'elements (list (make-music 'LabelEvent
+ 'page-label label))))
makeClusters =
#(define-music-function
grob-name)
(set! (ly:grob-property grob property) value))))))
+%% These are music functions (iso music indentifiers), because music identifiers
+%% are not allowed at top-level.
+pageBreak =
+#(define-music-function (location parser) ()
+ (_i "Force a page break. May be used at toplevel (ie 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))))
+
+noPageBreak =
+#(define-music-function (location parser) ()
+ (_i "Forbid a page break. May be used at toplevel (ie 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 '()))))
+
+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))))
+
+noPageTurn =
+#(define-music-function (location parser) ()
+ (_i "Forbid 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 'forbid
+ 'elements (list (make-music 'PageTurnEvent
+ 'break-permission '()))))
+
+allowPageTurn =
+#(define-music-function (location parser) ()
+ (_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))))
removeWithTag =
#(define-music-function
(lambda (m) (eq? 'NoteEvent (ly:music-property m 'name)))
(ly:music-property ev-chord 'elements))))
(sec-note-events (get-notes secondary-note))
- (trill-events (filter (lambda (m) (memq 'trill-span-event (ly:music-property m 'types)))
+ (trill-events (filter (lambda (m) (music-has-type m 'trill-span-event))
(ly:music-property main-note 'elements)))
(trill-pitch
#(define-music-function (parser loc arg) (ly:music?)
(_i "Tag @var{arg} to be parenthesized.")
- (set! (ly:music-property arg 'parenthesize) #t)
+ (if (memq 'event-chord (ly:music-property arg 'types))
+ ; arg is an EventChord -> set the parenthesize property on all child notes and rests
+ (map
+ (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)
%% for lambda*
#{
\overrideProperty #"Score.NonMusicalPaperColumn"
#'line-break-system-details
- #$(list (cons 'alignment-extra-space (cdr (assoc 'system-stretch parameters))))
+ #$(list (cons 'alignment-extra-space (cdr (assoc 'system-stretch parameters)))
+ (cons 'system-Y-extent (cdr (assoc 'system-Y-extent parameters))))
#})
%% Parser used to read page-layout file, and then retreive score tweaks.