Hi Kieren, hi Caio et All,
Here's a trial to find a workaround avoiding the use of a TextSpanner:
\version "2.18.2"
\relative c'' {
\set Staff.pedalSustainStyle = #'mixed
\once\override Staff.SustainPedalLineSpanner.stencil =
#ly:line-spanner::print
\once\override Staff.SustainPedalLineSpanner.left-bound-info =
#ly:line-spanner::calc-left-bound-info-and-text
\once\override Staff.SustainPedalLineSpanner.right-bound-info =
#ly:line-spanner::calc-right-bound-info
\once\override Staff.SustainPedalLineSpanner.staff-padding = #3
\once\override Staff.SustainPedalLineSpanner.bound-details =
#`((right (Y . 0)(attach-dir . -1))
(left (attach-dir . 2)(Y . 0))
(left-broken
(Y . 0)
(attach-dir . 1)
(text . ,
#{
\markup
\normal-text
\whiteout
\pad-markup #.1
\concat { "(" \musicglyph #"pedal.Ped" ".) " }
#})))
c1 c\sustainOn \break c c\sustainOff c
}
However, I tried to make a useful music function with it without success:
\version "2.18.2"
%% Cautionary pedal mark after a line break:
cautionPed = \markup {
\normal-text
\whiteout
\pad-markup #.1
\concat { "(" \musicglyph #"pedal.Ped" ".) " }
}
%% Span:
sustainPedalSpan =
#(define-music-function (parser location music) (ly:music?)
(let ((elts (extract-named-music music '(NoteEvent EventChord))))
(if (pair? elts)
(let ((first-element (first elts))
(last-element (last elts)))
(set! (ly:music-property first-element 'articulation)
(cons (make-music 'SustainEvent 'span-direction -1)
(ly:music-property first-element 'articulation)))
(set! (ly:music-property last-element 'articulation)
(cons (make-music 'SustainEvent 'span-direction 1)
(ly:music-property last-element 'articulation))))))
#{
\set Staff.pedalSustainStyle = #'mixed
\once\override Staff.SustainPedalLineSpanner.stencil =
#ly:line-spanner::print
\once\override Staff.SustainPedalLineSpanner.left-bound-info =
#ly:line-spanner::calc-left-bound-info-and-text
\once\override Staff.SustainPedalLineSpanner.right-bound-info =
#ly:line-spanner::calc-right-bound-info
\once\override Staff.SustainPedalLineSpanner.staff-padding = #3
\once\override Staff.SustainPedalLineSpanner.bound-details =
#`((right (Y . 0)(attach-dir . -1))
(left (attach-dir . 2)(Y . 0))
(left-broken
(Y . 0)
(attach-dir . 1)
(text . ,cautionPed)))
$music
\unset Staff.pedalSustainStyle
#})
%% Syntax: \sustainPedSpan { notes }
%% Test:
\relative c'' {
c1 \sustainPedalSpan { c \break c c } c
}