X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=ly%2Fmusic-functions-init.ly;h=c88759853991c1f7265c931bd3b37bbf49d64dc7;hb=39751041842d8c46770a852d93b2b935629fe451;hp=2a8af551e98aaacd049907d738126b74c238958e;hpb=91f01637f31c7d904fd8016b49184e935bf1c8ab;p=lilypond.git diff --git a/ly/music-functions-init.ly b/ly/music-functions-init.ly index 2a8af551e9..c887598539 100644 --- a/ly/music-functions-init.ly +++ b/ly/music-functions-init.ly @@ -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