diff --git a/orchestrallily.ily b/orchestrallily.ily index 3fe2f1ede799596002eec5e9bde94b57100610ae..f1257319076d057653e66e19a71bb211abb4aa50 100644 --- a/orchestrallily.ily +++ b/orchestrallily.ily @@ -1104,33 +1104,72 @@ hairpinOffset = #(define-music-function (parser location posY) (number?) \once \override DynamicLineSpanner #'Y-extent = #(cons +0 -0.01) #}) -#(define ((line-break-offset before after) grob) - (let* ((orig (ly:grob-original grob)) - ; All siblings if line-broken: - (siblings (if (ly:grob? orig) (ly:spanner-broken-into orig) '() ))) - (if (>= (length siblings) 2) - ; We have been line-broken - (if (eq? (car (last-pair siblings)) grob) - ; Last sibling: - (ly:grob-set-property! grob 'Y-offset after) - ; Others get the before value: - (ly:grob-set-property! grob 'Y-offset before) - ) - ) - ) -) +% #(define ((line-break-offset before after) grob) +% (let* ((orig (ly:grob-original grob)) +% ; All siblings if line-broken: +% (siblings (if (ly:grob? orig) (ly:spanner-broken-into orig) '() ))) +% (if (>= (length siblings) 2) +% ; We have been line-broken +% (if (eq? (car (last-pair siblings)) grob) +% ; Last sibling: +% (ly:grob-set-property! grob 'Y-offset after) +% ; Others get the before value: +% (ly:grob-set-property! grob 'Y-offset before) +% ) +% ) +% ) +% ) + + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%% Custom dynamic commands (with optional text before/after the dynamic) +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +% calculate x-alignment based on attribute text + dynamic text +% this has to be a markup-command to get stencil-extent based on (interpret-markup layout props ...) +#(define-markup-command (center-dyn layout props pre-text dyn post-text)(markup? string? markup?) + "x-align on center of dynamic with pre- and post-texts" + (let* ( + (pre-stencil (interpret-markup layout props (markup #:normal-text #:italic pre-text ))) + (post-stencil (interpret-markup layout props (markup #:normal-text #:italic post-text))) + (dyn-stencil (interpret-markup layout props (markup #:dynamic dyn))) + (pre-x (interval-length (ly:stencil-extent pre-stencil X))) + (dyn-x (interval-length (ly:stencil-extent dyn-stencil X))) + (post-x (interval-length (ly:stencil-extent post-stencil X))) + (x-align + (* (- + (/ (+ pre-x (/ dyn-x 2)) (+ pre-x dyn-x post-x) ) + 0.5) 2) + ) + ) + (interpret-markup layout props (markup #:halign x-align #:line (#:normal-text #:italic pre-text #:dynamic dyn #:normal-text #:italic post-text))) +)) +% define a 'new' attributed dynamic script +#(define (make-attr-dynamic-script pre dyn post) + (let ((dynamic (make-dynamic-script (markup #:center-dyn pre dyn post)))) + (ly:music-set-property! dynamic 'tweaks (acons 'X-offset 0 (ly:music-property dynamic 'tweaks))) + dynamic)) +#(define (make-whiteout-attr-dynamic-script pre dyn post) + (let ((dynamic (make-dynamic-script (markup #:whiteout #:center-dyn pre dyn post)))) + (ly:music-set-property! dynamic 'tweaks (acons 'X-offset 0 (ly:music-property dynamic 'tweaks))) + dynamic)) + + rf = #(make-dynamic-script "rf") ffz = #(make-dynamic-script "ffz") pf = #(make-dynamic-script "pf") -sempp = #(make-dynamic-script (markup #:line( #:with-dimensions '(0 . 0) -'(0 . 0) #:right-align #:normal-text #:italic "sempre" #:dynamic "pp"))) +sempp = #(make-attr-dynamic-script "sempre" "pp" "") +pdolce = #(make-attr-dynamic-script "" "p" "dolce") +ppdolce = #(make-attr-dynamic-script "" "pp" "dolce") +dolce = -\tweak #'X-offset #0 #(make-dynamic-script (markup #:halign -0.25 #:whiteout #:pad-markup 0.5 #:normal-text #:italic "dolce")) +sfpdolce = #(make-attr-dynamic-script "" "sfp" "dolce") + + parenf = #(make-dynamic-script (markup #:line(#:normal-text #:italic #:fontsize 2 "(" #:dynamic "f" #:normal-text #:italic #:fontsize 2 ")"))) parenp = #(make-dynamic-script (markup #:line(#:normal-text #:italic #:fontsize 2 "(" #:dynamic "p" #:normal-text #:italic #:fontsize 2 ")"))) -pdolce = #(make-dynamic-script (markup #:line(#:dynamic "p" #:with-dimensions '(0 . 0) '(0 . 0) #:normal-text #:italic "dolce"))) -ppdolce = #(make-dynamic-script (markup #:line(#:dynamic "pp" #:with-dimensions '(0 . 0) '(0 . 0) #:normal-text #:italic "dolce"))) -dolce = #(make-dynamic-script (markup #:line(#:concat (#:normal-text #:italic "do" #:with-dimensions '(0 . 0) '(0 . 0) #:normal-text #:italic "lce")))) -sfpdolce = #(make-dynamic-script (markup #:line(#:dynamic "sfp" #:with-dimensions '(0 . 0) '(0 . 0) #:normal-text #:italic "dolce" ))) + bracketf = #(make-dynamic-script (markup #:line(#:concat(#:normal-text #:fontsize 3 "[" #:dynamic "f" #:hspace 0.1 #:normal-text #:fontsize 3 "]")))) bracketmf = #(make-dynamic-script (markup #:line(#:concat(#:normal-text #:fontsize 3 "[" #:dynamic "mf" #:hspace 0.1 #:normal-text #:fontsize 3 "]")))) bracketmp = #(make-dynamic-script (markup #:line(#:concat(#:normal-text #:fontsize 2 "[" #:hspace 0.2 #:dynamic "mp" #:normal-text #:fontsize 2 "]")))) @@ -1141,6 +1180,12 @@ whiteoutpp = #(make-dynamic-script (markup #:whiteout #:pad-markup 0.5 #:dynamic whiteoutf = #(make-dynamic-script (markup #:whiteout #:pad-markup 0.5 #:dynamic "f")) whiteoutff = #(make-dynamic-script (markup #:whiteout #:pad-markup 0.5 #:dynamic "ff")) + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + + + sim = ^\markup{\italic "sim."} %%% Thanks to "Gilles THIBAULT" <gilles.thibault@free.fr>, there is a way