finetuning chord lyrics engraver
This commit is contained in:
1 parent
2359a7c5ae
commit
d0db6fae69
1 file changed
+42
@@ -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)
|
||||
)
|
||||
|
||||
Reference in new issue
Block a user