Hello Trevor, instead of trying to use a callback on bound-details.left.text you can use the before-line-breaking and after-line-breaking hooks to modifiy this property:
%%% BEGIN %%%
\version "2.24"
% no left text set
{
\once \override TextSpanner.before-line-breaking =
#(lambda (grob)
(let* ((bound-details (ly:grob-property grob 'bound-details))
(left (assoc-get 'left bound-details))
(left (assoc-set!
left
'text
(if (equal? red (ly:grob-property grob 'color))
(markup "foo")
(markup "bar"))))
(bound-details (assoc-set! bound-details 'left left)))
(ly:grob-set-property! grob 'bound-details bound-details)))
c'1
- \tweak color #red
\startTextSpan
c'1
\stopTextSpan
}
%%% END %%%
In your case you want to use after-line-breaking, as you want to work with the
broken copies.
Then basically what you want to do is:
- If you want to handle the case of an unbroken spanner differently, use
(unbroken-spanner? grob) to check if the spanner is not broken
- Use (unbroken-or-last-broken-spanner? grob) to determine if the grob is the
last broken sibling.
- Decide whether your endpoint condition applies (e.g. from (ly:grob-property
grob 'right-bound-info))
- If so set bound-info.right.text to bound-info.right.right-broken
Cheers,
Valentin
>
> The problem I'm wanting to solve has to do with swapping a text spanner's
> right text for its right-broken text, conditionally based on the spanner's
> end position. The problem looks complicated, so I'll introduce it as a
> separate thread.
>
> Trevor.
signature.asc
Description: This is a digitally signed message part.
