Compare commits
2 Commits
5af41cebae
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
| 2d14a5b632 | |||
| 368a1b96aa |
@@ -134,18 +134,23 @@ override-stanza =
|
|||||||
#}
|
#}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
#(define (handle-stanza-numbers context numbers number-formater)
|
||||||
|
(let* ((stanzanumbers (ly:assoc-get 'custom-stanzanumber-override (ly:assoc-get 'details (ly:context-grob-definition context 'StanzaNumber) '()) numbers))
|
||||||
|
(stanza-style (ly:assoc-get 'style (ly:context-grob-definition context 'StanzaNumber)))
|
||||||
|
(roman-format (lambda (stanzanumber) (format #f "~@r" stanzanumber))))
|
||||||
|
(ly:context-set-property! context 'stanza
|
||||||
|
(number-formater
|
||||||
|
(if (eq? stanza-style 'roman)
|
||||||
|
(map roman-format stanzanumbers)
|
||||||
|
stanzanumbers)))))
|
||||||
|
|
||||||
#(define (stanza . stanzanumbers)
|
#(define (stanza . stanzanumbers)
|
||||||
#{
|
#{
|
||||||
\once \override StanzaNumber.details.custom-realstanza = ##t % set this to signal that there is a real stanza and no repeat signs
|
\once \override StanzaNumber.details.custom-realstanza = ##t % set this to signal that there is a real stanza and no repeat signs
|
||||||
\applyContext
|
\applyContext
|
||||||
#(lambda (context)
|
#(lambda (context)
|
||||||
(let* ((stanzanumbers-override (ly:assoc-get 'custom-stanzanumber-override (ly:assoc-get 'details (ly:context-grob-definition context 'StanzaNumber) '()) #f))
|
(handle-stanza-numbers context stanzanumbers
|
||||||
(stanza-style (ly:assoc-get 'style (ly:context-grob-definition context 'StanzaNumber)))
|
(lambda (numbers) (string-join (map (lambda (n) (format #f stanzaFormat n)) numbers) ", "))))
|
||||||
(stanza-format (lambda (stanzanumber) (format #f (if (eq? stanza-style 'roman) romanStanzaFormat stanzaFormat) stanzanumber))))
|
|
||||||
(ly:context-set-property! context 'stanza
|
|
||||||
(string-join (map stanza-format
|
|
||||||
(if stanzanumbers-override stanzanumbers-override stanzanumbers))
|
|
||||||
", "))))
|
|
||||||
#}
|
#}
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -153,7 +158,14 @@ ref =
|
|||||||
#(define-music-function (stanzanumbers lyrics) ((number-list? (list)) ly:music?)
|
#(define-music-function (stanzanumbers lyrics) ((number-list? (list)) ly:music?)
|
||||||
#{ \lyricmode {
|
#{ \lyricmode {
|
||||||
\once \override StanzaNumber.details.custom-realstanza = ##t % set this to signal that there is a real stanza and no repeat signs
|
\once \override StanzaNumber.details.custom-realstanza = ##t % set this to signal that there is a real stanza and no repeat signs
|
||||||
\set stanza = #(make-on-the-fly-markup (lambda (layout props m) ((ly:output-def-lookup layout 'refMarkupFormatter) layout props stanzanumbers)) (make-null-markup))
|
\applyContext
|
||||||
|
#(lambda (context)
|
||||||
|
(handle-stanza-numbers context stanzanumbers
|
||||||
|
(lambda (numbers)
|
||||||
|
(make-on-the-fly-markup
|
||||||
|
(lambda (layout props m)
|
||||||
|
((ly:output-def-lookup layout 'refMarkupFormatter) layout props numbers))
|
||||||
|
(make-null-markup)))))
|
||||||
#lyrics
|
#lyrics
|
||||||
}
|
}
|
||||||
#}
|
#}
|
||||||
|
|||||||
@@ -16,7 +16,6 @@ songTocColumns = 3
|
|||||||
globalSize = 15
|
globalSize = 15
|
||||||
lyricSize = 1.6
|
lyricSize = 1.6
|
||||||
stanzaFormat = "~a."
|
stanzaFormat = "~a."
|
||||||
romanStanzaFormat = "~@r."
|
|
||||||
refString = "Ref.:"
|
refString = "Ref.:"
|
||||||
refStringWithNumbers = "Ref. ~a:"
|
refStringWithNumbers = "Ref. ~a:"
|
||||||
% hübsche Wiederholungszeichen für den Liedtext
|
% hübsche Wiederholungszeichen für den Liedtext
|
||||||
|
|||||||
@@ -253,6 +253,100 @@
|
|||||||
(make-pad-right-markup -0.1 (make-tied-lyric-markup text))
|
(make-pad-right-markup -0.1 (make-tied-lyric-markup text))
|
||||||
text))))
|
text))))
|
||||||
|
|
||||||
|
Chord_lyrics_spacing_engraver =
|
||||||
|
#(lambda (ctx)
|
||||||
|
(let ((last-lyric-syllable #f)
|
||||||
|
(lyric-width-since-last-chord 0)
|
||||||
|
(music-columns-for-last-syllable 0)
|
||||||
|
(last-printed-chord #f)
|
||||||
|
(chord-width-since-last-lyric 0)
|
||||||
|
(lyrics-seen-since-break #f)
|
||||||
|
(have-a-rest #f)
|
||||||
|
(stanza #f)
|
||||||
|
(place-at-right-edge
|
||||||
|
(lambda (grob anchor padding)
|
||||||
|
(let ((anchor-width (interval-length (ly:grob-extent anchor anchor X))))
|
||||||
|
(ly:grob-set-parent! grob X anchor)
|
||||||
|
(ly:grob-set-property! grob 'X-offset (+ padding anchor-width))
|
||||||
|
))))
|
||||||
|
(make-engraver
|
||||||
|
(listeners
|
||||||
|
((multi-measure-rest-event engraver event)
|
||||||
|
(set! have-a-rest #t)
|
||||||
|
)
|
||||||
|
((rest-event engraver event)
|
||||||
|
(set! have-a-rest #t)
|
||||||
|
)
|
||||||
|
((lyric-event engraver event)
|
||||||
|
(set! have-a-rest #f)
|
||||||
|
(set! music-columns-for-last-syllable 0)
|
||||||
|
)
|
||||||
|
((break-event engraver event)
|
||||||
|
(set! last-lyric-syllable #f)
|
||||||
|
(set! lyric-width-since-last-chord 0)
|
||||||
|
(set! music-columns-for-last-syllable 0)
|
||||||
|
(set! last-printed-chord #f)
|
||||||
|
(set! chord-width-since-last-lyric 0)
|
||||||
|
(set! lyrics-seen-since-break #f)
|
||||||
|
))
|
||||||
|
(acknowledgers
|
||||||
|
((musical-paper-column-interface this-engraver grob source-engraver)
|
||||||
|
(set! music-columns-for-last-syllable (+ 1 music-columns-for-last-syllable))
|
||||||
|
)
|
||||||
|
((lyric-syllable-interface this-engraver grob source-engraver)
|
||||||
|
(let ((syllable-width (interval-length (ly:grob-extent grob grob X))))
|
||||||
|
(set! lyric-width-since-last-chord (+ lyric-width-since-last-chord syllable-width))
|
||||||
|
)
|
||||||
|
(if (> chord-width-since-last-lyric 0)
|
||||||
|
(if lyrics-seen-since-break
|
||||||
|
(ly:grob-set-property! grob 'extra-spacing-width
|
||||||
|
(cons (- chord-width-since-last-lyric) (cdr (ly:grob-property grob 'extra-spacing-width '(0 . 0)))))
|
||||||
|
(if last-printed-chord
|
||||||
|
(let ((gap-for-starting-rest 2.0))
|
||||||
|
(if stanza (ly:grob-set-property! stanza 'padding (+ 1 gap-for-starting-rest)))
|
||||||
|
(ly:grob-set-parent! grob X last-printed-chord)
|
||||||
|
(ly:grob-set-property! grob 'X-offset gap-for-starting-rest)
|
||||||
|
)))
|
||||||
|
)
|
||||||
|
(set! last-lyric-syllable grob)
|
||||||
|
(set! chord-width-since-last-lyric 0)
|
||||||
|
(set! lyrics-seen-since-break #t)
|
||||||
|
)
|
||||||
|
((chord-name-interface this-engraver grob source-engraver)
|
||||||
|
(if (not (and
|
||||||
|
(boolean? (ly:grob-property grob 'begin-of-line-visible))
|
||||||
|
(ly:grob-property grob 'begin-of-line-visible)
|
||||||
|
lyrics-seen-since-break))
|
||||||
|
(let* ((last-printed-chord-width (if last-printed-chord (interval-length (ly:grob-extent last-printed-chord last-printed-chord X)) 0))
|
||||||
|
(chord-overwidth (- last-printed-chord-width lyric-width-since-last-chord))
|
||||||
|
(chord-gap 0.5))
|
||||||
|
(if have-a-rest
|
||||||
|
(let ((chord-width (interval-length (ly:grob-extent grob grob X))))
|
||||||
|
(if last-lyric-syllable
|
||||||
|
(if (and last-printed-chord (> chord-overwidth 0))
|
||||||
|
(place-at-right-edge grob last-printed-chord chord-gap)
|
||||||
|
(place-at-right-edge grob last-lyric-syllable 0))
|
||||||
|
(if last-printed-chord
|
||||||
|
(place-at-right-edge grob last-printed-chord chord-gap)))
|
||||||
|
(set! chord-width-since-last-lyric (+ chord-width-since-last-lyric chord-width chord-gap))
|
||||||
|
))
|
||||||
|
(if (and last-lyric-syllable last-printed-chord (> chord-overwidth 0))
|
||||||
|
(ly:grob-set-property! last-lyric-syllable 'extra-spacing-width
|
||||||
|
(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! last-printed-chord grob)
|
||||||
|
(set! last-lyric-syllable #f)
|
||||||
|
)
|
||||||
|
(ly:grob-set-property! grob 'X-extent '(+inf.0 . -inf.0))
|
||||||
|
)
|
||||||
|
)
|
||||||
|
((stanza-number-interface this-engraver grob source-engraver)
|
||||||
|
(set! stanza grob)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)))
|
||||||
|
|
||||||
#(define-markup-command (chordlyrics layout props lyrics) (ly:music?)
|
#(define-markup-command (chordlyrics layout props lyrics) (ly:music?)
|
||||||
#:properties ((verse-chords #{#})
|
#:properties ((verse-chords #{#})
|
||||||
(verse-reference-voice #{#})
|
(verse-reference-voice #{#})
|
||||||
@@ -293,9 +387,11 @@
|
|||||||
\context {
|
\context {
|
||||||
\Score
|
\Score
|
||||||
\override PaperColumn.keep-inside-line = ##f
|
\override PaperColumn.keep-inside-line = ##f
|
||||||
% \override SpacingSpanner.strict-note-spacing = ##t
|
% \override SpacingSpanner.strict-note-spacing = ##t
|
||||||
\override SpacingSpanner.uniform-stretching = ##t
|
\override SpacingSpanner.uniform-stretching = ##t
|
||||||
\override SpacingSpanner.spacing-increment = 0
|
\override SpacingSpanner.spacing-increment = 0
|
||||||
|
% \override SpacingSpanner.packed-spacing = ##t
|
||||||
|
\consists \Chord_lyrics_spacing_engraver
|
||||||
\remove Bar_number_engraver
|
\remove Bar_number_engraver
|
||||||
\remove Mark_engraver
|
\remove Mark_engraver
|
||||||
\remove Jump_engraver
|
\remove Jump_engraver
|
||||||
@@ -325,14 +421,6 @@
|
|||||||
\remove Note_heads_engraver
|
\remove Note_heads_engraver
|
||||||
\remove Script_engraver
|
\remove Script_engraver
|
||||||
}
|
}
|
||||||
\context {
|
|
||||||
\NullVoice
|
|
||||||
\consists Rest_engraver
|
|
||||||
\omit Rest
|
|
||||||
\undo \omit NoteHead
|
|
||||||
\hide NoteHead
|
|
||||||
\override NoteHead.X-extent = #'(0 . 0)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user