|
|
|
|
@@ -60,19 +60,19 @@
|
|
|
|
|
|
|
|
|
|
% Text über Text mittig darstellen
|
|
|
|
|
#(define-markup-command (textup layout props text uptext) (markup? markup?)
|
|
|
|
|
#:properties ((verselayout generalLayout))
|
|
|
|
|
"Markup über Text mittig darstellen."
|
|
|
|
|
(let ((verselayout (chain-assoc-get 'verselayout props generalLayout)))
|
|
|
|
|
(interpret-markup layout props
|
|
|
|
|
#{\markup {
|
|
|
|
|
\size-box-to-box-style-dependent ##t ##f
|
|
|
|
|
\general-align #X #LEFT \override #`(direction . ,UP) \override #'(baseline-skip . 1.0) \dir-column \chord-alignment-style-dependent {
|
|
|
|
|
\pad-to-box #'(0 . 0) #'(0 . 2.0) { #text }
|
|
|
|
|
\size-box-to-box ##f ##t #uptext \score { \chords { g4:m a } \layout { \verselayout } }
|
|
|
|
|
\size-box-to-box ##f ##t #uptext \score { \chords { g4:m a } \layout { $verselayout } }
|
|
|
|
|
}
|
|
|
|
|
#text
|
|
|
|
|
}
|
|
|
|
|
#}
|
|
|
|
|
)))
|
|
|
|
|
))
|
|
|
|
|
|
|
|
|
|
#(define-markup-command (anchor-x-between layout props arga argb)
|
|
|
|
|
(markup? markup?)
|
|
|
|
|
@@ -82,16 +82,15 @@
|
|
|
|
|
(ly:stencil-aligned-to m X (- (/ (* la 2) l) 1))
|
|
|
|
|
))
|
|
|
|
|
|
|
|
|
|
#(define-markup-command (stanza-raw layout props arg)
|
|
|
|
|
(string-or-music?)
|
|
|
|
|
(let ((verselayout (chain-assoc-get 'verselayout props generalLayout)))
|
|
|
|
|
#(define-markup-command (stanza-raw layout props arg) (string-or-music?)
|
|
|
|
|
#:properties ((verselayout generalLayout))
|
|
|
|
|
(interpret-markup layout props
|
|
|
|
|
(if (and (string? arg) (string-null? arg))
|
|
|
|
|
" "
|
|
|
|
|
#{\markup
|
|
|
|
|
\score { \new Lyrics { \lyricmode { #(if (ly:music? arg) arg #{ \set stanza = #arg #}) "" } } \layout { \verselayout } }
|
|
|
|
|
\score { \new Lyrics { \lyricmode { #(if (ly:music? arg) arg #{ \set stanza = #arg #}) "" } } \layout { $verselayout } }
|
|
|
|
|
#}
|
|
|
|
|
))))
|
|
|
|
|
)))
|
|
|
|
|
|
|
|
|
|
#(define-markup-command (stanza layout props arg)
|
|
|
|
|
(string-or-music?)
|
|
|
|
|
@@ -141,7 +140,7 @@
|
|
|
|
|
(make-wrap-newline-markup
|
|
|
|
|
(ly:regex-replace (ly:make-regex "\\(( *)([^,()]*)( *),([^)]*)\\)")
|
|
|
|
|
(ly:regex-replace (ly:make-regex "(([^ \n]*\\([^()]*,[^()]+\\)[^ \n(]*)+)") (handle-custom-newlines custom-verse-breaks verse) " \\concat { " 1 " } ")
|
|
|
|
|
"\\textup \\line { \"" 1 "\" " 2 " \"" 3 "\" } \\score { " transp " \\chords { s4 " 4 " } \\layout { \\verselayout } }")
|
|
|
|
|
"\\textup \\line { \"" 1 "\" " 2 " \"" 3 "\" } \\score { " transp " \\chords { s4 " 4 " } \\layout { $verselayout } }")
|
|
|
|
|
)
|
|
|
|
|
))))
|
|
|
|
|
|
|
|
|
|
@@ -253,6 +252,99 @@
|
|
|
|
|
(make-pad-right-markup -0.1 (make-tied-lyric-markup 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
|
|
|
|
|
(begin
|
|
|
|
|
(if stanza (ly:grob-set-property! stanza 'padding chord-width-since-last-lyric))
|
|
|
|
|
(place-at-right-edge grob last-printed-chord 0)
|
|
|
|
|
)))
|
|
|
|
|
)
|
|
|
|
|
(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?)
|
|
|
|
|
#:properties ((verse-chords #{#})
|
|
|
|
|
(verse-reference-voice #{#})
|
|
|
|
|
@@ -272,10 +364,7 @@
|
|
|
|
|
\new Lyrics \lyricsto "dummyvoice" { #lyrics }
|
|
|
|
|
>>
|
|
|
|
|
\layout {
|
|
|
|
|
\verselayout
|
|
|
|
|
#(let
|
|
|
|
|
((custom-size (ly:output-def-lookup verselayout 'size #f)))
|
|
|
|
|
(if custom-size (layout-set-staff-size custom-size)))
|
|
|
|
|
$verselayout
|
|
|
|
|
ragged-right = ##t
|
|
|
|
|
\context {
|
|
|
|
|
\Lyrics
|
|
|
|
|
@@ -296,9 +385,11 @@
|
|
|
|
|
\context {
|
|
|
|
|
\Score
|
|
|
|
|
\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.spacing-increment = 0
|
|
|
|
|
% \override SpacingSpanner.packed-spacing = ##t
|
|
|
|
|
\consists \Chord_lyrics_spacing_engraver
|
|
|
|
|
\remove Bar_number_engraver
|
|
|
|
|
\remove Mark_engraver
|
|
|
|
|
\remove Jump_engraver
|
|
|
|
|
@@ -328,14 +419,6 @@
|
|
|
|
|
\remove Note_heads_engraver
|
|
|
|
|
\remove Script_engraver
|
|
|
|
|
}
|
|
|
|
|
\context {
|
|
|
|
|
\NullVoice
|
|
|
|
|
\consists Rest_engraver
|
|
|
|
|
\omit Rest
|
|
|
|
|
\undo \omit NoteHead
|
|
|
|
|
\hide NoteHead
|
|
|
|
|
\override NoteHead.X-extent = #'(0 . 0)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|