X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=ly%2Fmusic-functions-init.ly;h=129f6a3ade08d91a79ecfc446d1ffd13dee96e0c;hb=f1734aceeb2c9e184104fcbf8c06117070d08266;hp=2a8af551e98aaacd049907d738126b74c238958e;hpb=93e65fdd05c82e674d188e0388332d3f950a0b33;p=lilypond.git diff --git a/ly/music-functions-init.ly b/ly/music-functions-init.ly index 2a8af551e9..129f6a3ade 100644 --- a/ly/music-functions-init.ly +++ b/ly/music-functions-init.ly @@ -144,7 +144,7 @@ breathe = '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)) @@ -157,7 +157,7 @@ clef = (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)))) @@ -187,6 +187,32 @@ displayMusic = (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 @@ -272,7 +298,15 @@ killCues = (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 @@ -323,6 +357,65 @@ or @code{\"GrobName\"}") 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 @@ -362,7 +455,7 @@ pitchedTrill = (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 @@ -383,7 +476,16 @@ parenthesize = #(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*