Le 06/04/2022 à 20:17, Jean Abou Samra a écrit :
Did I miss something?
Whoops, big problem at line breaks ...
\version "2.23.7"
#(define (Left_hyphen_pointer_engraver context)
(let ((hyphen #f)
(text #f))
(make-engraver
(acknowledgers
((lyric-syllable-interface engraver grob source-engraver)
(set! text grob)))
(end-acknowledgers
((lyric-hyphen-interface engraver grob source-engraver)
(when (not (grob::has-interface grob 'lyric-space-interface))
(set! hyphen grob))))
((stop-translation-timestep engraver)
(when (and text hyphen)
(ly:grob-set-object! text 'left-hyphen hyphen))
(set! text #f)
(set! hyphen #f)))))
#(define (lyric-text::apply-magnetic-offset! grob)
(let ((hyphen (ly:grob-object grob 'left-hyphen #f)))
(when hyphen
(let ((left-text (ly:spanner-bound hyphen LEFT)))
(when (grob::has-interface left-text 'lyric-syllable-interface)
(let* ((common (ly:grob-common-refpoint grob left-text X))
(my-x-ext (ly:grob-extent grob common X))
(left-x-ext (begin
;; Trigger magnetism for left-text
(ly:grob-property left-text
'after-line-breaking)
(ly:grob-extent left-text common X)))
(delta (- (interval-start my-x-ext)
(interval-end left-x-ext)))
(details (ly:grob-property grob 'details))
(threshold (assoc-get 'squash-threshold details 0.2)))
(when (< delta threshold)
(ly:grob-translate-axis! grob
(- delta)
X))))))))
#(define (lyric-hyphen::displace-bounds-first grob)
;; Make very sure this callback isn't triggered too early.
(let ((left (ly:spanner-bound grob LEFT))
(right (ly:spanner-bound grob RIGHT)))
(ly:grob-property left 'after-line-breaking)
(ly:grob-property right 'after-line-breaking)
(ly:lyric-hyphen::print grob)))
\layout {
\context {
\Lyrics
\consists #Left_hyphen_pointer_engraver
\override LyricText.after-line-breaking =
#lyric-text::apply-magnetic-offset!
\override LyricHyphen.stencil = #lyric-hyphen::displace-bounds-first
\override LyricText.details.squash-threshold = 10
\override LyricHyphen.minimum-distance = 0
\override LyricHyphen.minimum-length = 0.2
\override LyricSpace.minimum-distance = 1
}
}