finetuning chord lyrics engraver

This commit is contained in:
tux committed 2026-10-22 11:47:48 +02:00
1 parent 2359a7c5ae
commit d0db6fae69
1 file changed
+42
@@ -249,6 +249,13 @@ Chord_lyrics_spacing_engraver =
(lyrics-seen-since-break #f) (lyrics-seen-since-break #f)
(have-a-rest #f) (have-a-rest #f)
(stanza #f) (stanza #f)
; Akkord auf einer Skip-Silbe "_" nach Wortende soll über die folgende Silbe
(word-continues #f)
(continuation-this-step #f)
(lyric-skip-this-step #f)
(syllable-this-step #f)
(chord-this-step #f)
(chord-on-lyric-skip #f)
(place-at-right-edge (place-at-right-edge
(lambda (grob anchor padding) (lambda (grob anchor padding)
(let ((anchor-width (interval-length (ly:grob-extent anchor anchor X)))) (let ((anchor-width (interval-length (ly:grob-extent anchor anchor X))))
@@ -256,6 +263,25 @@ Chord_lyrics_spacing_engraver =
(ly:grob-set-property! grob 'X-offset (+ padding anchor-width)) (ly:grob-set-property! grob 'X-offset (+ padding anchor-width))
)))) ))))
(make-engraver (make-engraver
((start-translation-timestep engraver)
(set! continuation-this-step #f)
(set! lyric-skip-this-step #f)
(set! syllable-this-step #f)
(set! chord-this-step #f)
)
((stop-translation-timestep engraver)
(if (and chord-on-lyric-skip (not (eq? chord-on-lyric-skip chord-this-step)))
(begin
(if (and syllable-this-step (not chord-this-step))
(begin
(ly:grob-set-parent! chord-on-lyric-skip X syllable-this-step)
(ly:grob-set-property! chord-on-lyric-skip 'X-offset 0)
(ly:grob-set-property! chord-on-lyric-skip 'extra-spacing-width '(+inf.0 . -inf.0))
(set! lyric-width-since-last-chord (interval-length (ly:grob-extent syllable-this-step syllable-this-step X)))))
(set! chord-on-lyric-skip #f)))
(if syllable-this-step
(set! word-continues continuation-this-step))
)
(listeners (listeners
((multi-measure-rest-event engraver event) ((multi-measure-rest-event engraver event)
(set! have-a-rest #t) (set! have-a-rest #t)
@@ -263,8 +289,19 @@ Chord_lyrics_spacing_engraver =
((rest-event engraver event) ((rest-event engraver event)
(set! have-a-rest #t) (set! have-a-rest #t)
) )
((hyphen-event engraver event)
(set! continuation-this-step #t)
)
((extender-event engraver event)
(set! continuation-this-step #t)
)
((lyric-event engraver event) ((lyric-event engraver event)
(set! have-a-rest #f) (set! have-a-rest #f)
; "_" wird zu " " und erzeugt keine LyricText
(if (equal? (ly:event-property event 'text) " ")
(begin
(set! lyric-skip-this-step #t)
(set! chord-on-lyric-skip #f)))
(set! music-columns-for-last-syllable 0) (set! music-columns-for-last-syllable 0)
) )
((break-event engraver event) ((break-event engraver event)
@@ -274,6 +311,7 @@ Chord_lyrics_spacing_engraver =
(set! last-printed-chord #f) (set! last-printed-chord #f)
(set! chord-width-since-last-lyric 0) (set! chord-width-since-last-lyric 0)
(set! lyrics-seen-since-break #f) (set! lyrics-seen-since-break #f)
(set! chord-on-lyric-skip #f)
)) ))
(acknowledgers (acknowledgers
((musical-paper-column-interface this-engraver grob source-engraver) ((musical-paper-column-interface this-engraver grob source-engraver)
@@ -294,6 +332,7 @@ Chord_lyrics_spacing_engraver =
(ly:grob-set-property! grob 'X-offset gap-for-starting-rest) (ly:grob-set-property! grob 'X-offset gap-for-starting-rest)
))) )))
) )
(set! syllable-this-step grob)
(set! last-lyric-syllable grob) (set! last-lyric-syllable grob)
(set! chord-width-since-last-lyric 0) (set! chord-width-since-last-lyric 0)
(set! lyrics-seen-since-break #t) (set! lyrics-seen-since-break #t)
@@ -321,6 +360,9 @@ Chord_lyrics_spacing_engraver =
(cons (car (ly:grob-property last-lyric-syllable 'extra-spacing-width '(0 . 0))) (+ chord-gap chord-overwidth))) (cons (car (ly:grob-property last-lyric-syllable 'extra-spacing-width '(0 . 0))) (+ chord-gap chord-overwidth)))
) )
(set! lyric-width-since-last-chord (* (if last-lyric-syllable (interval-length (ly:grob-extent last-lyric-syllable last-lyric-syllable X)) 0) (- 1 (/ 1.0 music-columns-for-last-syllable)))) (set! lyric-width-since-last-chord (* (if last-lyric-syllable (interval-length (ly:grob-extent last-lyric-syllable last-lyric-syllable X)) 0) (- 1 (/ 1.0 music-columns-for-last-syllable))))
(set! chord-this-step grob)
(if (and lyric-skip-this-step (not have-a-rest) (not word-continues))
(set! chord-on-lyric-skip grob))
(set! last-printed-chord grob) (set! last-printed-chord grob)
(set! last-lyric-syllable #f) (set! last-lyric-syllable #f)
) )