From d0db6fae69f63816ceda875088d0b6a488f91b99 Mon Sep 17 00:00:00 2001 From: tux Date: Thu, 22 Oct 2026 11:47:48 +0200 Subject: [PATCH] finetuning chord lyrics engraver --- private_includes/base/verses_with_chords.ily | 42 ++++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/private_includes/base/verses_with_chords.ily b/private_includes/base/verses_with_chords.ily index 78b5919..dcde8ba 100644 --- a/private_includes/base/verses_with_chords.ily +++ b/private_includes/base/verses_with_chords.ily @@ -249,6 +249,13 @@ Chord_lyrics_spacing_engraver = (lyrics-seen-since-break #f) (have-a-rest #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 (lambda (grob anchor padding) (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)) )))) (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 ((multi-measure-rest-event engraver event) (set! have-a-rest #t) @@ -263,8 +289,19 @@ Chord_lyrics_spacing_engraver = ((rest-event engraver event) (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) (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) ) ((break-event engraver event) @@ -274,6 +311,7 @@ Chord_lyrics_spacing_engraver = (set! last-printed-chord #f) (set! chord-width-since-last-lyric 0) (set! lyrics-seen-since-break #f) + (set! chord-on-lyric-skip #f) )) (acknowledgers ((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) ))) ) + (set! syllable-this-step grob) (set! last-lyric-syllable grob) (set! chord-width-since-last-lyric 0) (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))) ) (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-lyric-syllable #f) )