464 lines
		
	
	
		
			20 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			464 lines
		
	
	
		
			20 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| % parsing line by line
 | |
| #(define-markup-command (wrap-newline layout props text) (string?)
 | |
|    "Text Zeile für Zeile parsen"
 | |
|    (interpret-markup layout props
 | |
|      #{ \markup { \column {
 | |
|      $(let ((verse-markup-string (
 | |
|         string-append "\\line { "
 | |
|           (ly:regex-replace (ly:make-regex "\r?\n") text " } \\line { ")
 | |
|           " \\size-box-to-box ##f ##t \"\" \"Agj\" }" )))
 | |
|        (ly:parser-include-string verse-markup-string))
 | |
|      }}#}
 | |
|    )
 | |
| )
 | |
| 
 | |
| #(define-markup-command (size-box-to-box layout props use-x use-y abox bbox)
 | |
|   (boolean? boolean? markup? markup?)
 | |
|   (let* ((ma (interpret-markup layout props abox))
 | |
|          (mb (interpret-markup layout props bbox))
 | |
|          (ax (ly:stencil-extent ma X))
 | |
|          (ay (ly:stencil-extent ma Y))
 | |
|          (bx (ly:stencil-extent mb X))
 | |
|          (by (ly:stencil-extent mb Y))
 | |
|          (halfdiffabx (* (- (interval-length bx) (interval-length ax)) 0.5)))
 | |
|     (ly:stencil-translate (ly:make-stencil (ly:stencil-expr ma)
 | |
|                      (if use-x
 | |
|                           (if (< halfdiffabx 0)
 | |
|                               (cons
 | |
|                                 (- (interval-bound ax DOWN) halfdiffabx)
 | |
|                                 (+ (interval-bound ax UP) halfdiffabx))
 | |
|                               bx)
 | |
|                        ax)
 | |
|                      (if use-y by ay))
 | |
|       (cons (if (and use-x (< halfdiffabx 0)) halfdiffabx 0) 0) )))
 | |
| 
 | |
| #(define-markup-command (size-box-to-box-left-aligned layout props use-x use-y abox bbox)
 | |
|   (boolean? boolean? markup? markup?)
 | |
|   (let* ((ma (interpret-markup layout props abox))
 | |
|          (mb (interpret-markup layout props bbox))
 | |
|          (ax (ly:stencil-extent ma X))
 | |
|          (ay (ly:stencil-extent ma Y))
 | |
|          (bx (ly:stencil-extent mb X))
 | |
|          (by (ly:stencil-extent mb Y)))
 | |
|     (ly:make-stencil (ly:stencil-expr ma)
 | |
|                      (if use-x bx ax)
 | |
|                      (if use-y by ay))
 | |
|     ))
 | |
| 
 | |
| #(define-markup-command (size-box-to-box-style-dependent layout props use-x use-y abox bbox)
 | |
|    (boolean? boolean? markup? markup?)
 | |
|    (interpret-markup layout props
 | |
|    (case songTextChordAlignment
 | |
|      ((center) (make-size-box-to-box-markup use-x use-y abox bbox))
 | |
|      ((left) (make-size-box-to-box-left-aligned-markup use-x use-y abox bbox)))))
 | |
| 
 | |
| #(define-markup-command (chord-alignment-style-dependent layout props chord-with-text) (markup?)
 | |
|    (interpret-markup layout props
 | |
|    (case songTextChordAlignment
 | |
|      ((center) (make-center-align-markup chord-with-text))
 | |
|      ((left) (make-left-align-markup chord-with-text)))))
 | |
| 
 | |
| % Text über Text mittig darstellen
 | |
| #(define-markup-command (textup layout props text uptext) (markup? markup?)
 | |
|    "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 } }
 | |
|          }
 | |
|          #text
 | |
|        }
 | |
|      #}
 | |
|    )))
 | |
| 
 | |
| #(define-markup-command (anchor-x-between layout props arga argb)
 | |
|    (markup? markup?)
 | |
|    (let* ((la (interval-length (ly:stencil-extent (interpret-markup layout props arga) X)))
 | |
|           (m (interpret-markup layout props (markup #:general-align Y DOWN arga argb (make-size-box-to-box-markup #t #t (markup #:null) arga))))
 | |
|           (l (interval-length (ly:stencil-extent m X))))
 | |
|             (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)))
 | |
|    (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 } }
 | |
|          #}
 | |
|      ))))
 | |
| 
 | |
| #(define-markup-command (stanza layout props arg)
 | |
|    (string-or-music?)
 | |
|    (interpret-markup layout props
 | |
|      (make-size-box-to-box-markup #f #t (make-stanza-raw-markup arg) (make-stanza-raw-markup "x"))))
 | |
| 
 | |
| #(define (handle-custom-newlines custom-verse-breaks text)
 | |
|   (if (null? custom-verse-breaks)
 | |
|     text
 | |
|     (let make-custom-linebreaks
 | |
|       ((break-words custom-verse-breaks)
 | |
|        (newtext (ly:regex-replace (ly:make-regex "\r?\n") text " ")))
 | |
|       (if (null? break-words)
 | |
|           newtext
 | |
|           (make-custom-linebreaks
 | |
|             (cdr break-words)
 | |
|             (ly:regex-replace
 | |
|               (ly:make-regex
 | |
|                 (string-append
 | |
|                   "("
 | |
|                   (string-concatenate
 | |
|                     (map
 | |
|                       (lambda (character)
 | |
|                         (let ((escaped_char (ly:regex-quote (string character))))
 | |
|                              (string-append "(?: *,[^,)]+\\)" escaped_char "|\\(?" escaped_char ")")))
 | |
|                       (string->list (car break-words))))
 | |
|                   "(?: *,[^,)]+\\))?)(.*)$"))
 | |
|               newtext
 | |
|               1 "\n" 2))))))
 | |
| 
 | |
| #(use-modules (lily display-lily))
 | |
| 
 | |
| % Kompletten Vers mit Akkorden
 | |
| #(define-markup-command (chordverse layout props stanza verse) (string-or-music? string?)
 | |
|    #:properties (
 | |
|     (intraverse-vspace 0)
 | |
|     (custom-verse-breaks '())
 | |
|     (transposition (cons #f #f))
 | |
|     (verselayout generalLayout)
 | |
|     )
 | |
|    "Vers mit Akkorden"
 | |
|    (let ((transp (if (car transposition)
 | |
|                     (string-append "\\transpose " (symbol->string (note-name->lily-string (car transposition))) " " (symbol->string (note-name->lily-string (cdr transposition))))
 | |
|                     "")))
 | |
|    (interpret-markup layout props
 | |
|      (markup #:override `(baseline-skip . ,(+ intraverse-vspace songTextLineHeigth)) #:anchor-x-between #:stanza stanza
 | |
|        (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 } }")
 | |
|                 )
 | |
|      ))))
 | |
| 
 | |
| % Kompletter Vers aus dem Akkorde entfernt werden
 | |
| #(define-markup-command (nochordverse layout props stanza verse) (string-or-music? string?)
 | |
|    #:properties ((intraverse-vspace 0)(custom-verse-breaks '()))
 | |
|    "Vers ohne Akkorde"
 | |
|    (interpret-markup layout props
 | |
|      (markup #:override `(baseline-skip . ,(+ intraverse-vspace 3.0)) #:anchor-x-between #:stanza stanza
 | |
|            #:wrap-newline (ly:regex-replace (ly:make-regex "\\(([^,]*),([^)]*)\\)") (handle-custom-newlines custom-verse-breaks verse) 1)
 | |
|      )
 | |
|    )
 | |
| )
 | |
| 
 | |
| #(define-markup-command (verseformat layout props verse) (markup?)
 | |
|    #:properties ((verselayout generalLayout))
 | |
|    "Textformatierung für Strophen"
 | |
|    (interpret-markup layout props
 | |
|      (let* (
 | |
|          (layout-scale (ly:output-def-lookup layout 'output-scale 1.0))
 | |
|          (verselayout-scale (ly:output-def-lookup verselayout 'output-scale layout-scale))
 | |
|          (mag-scale (/ verselayout-scale layout-scale))
 | |
|          (lyric-context-props (ly:context-def-lookup (ly:assoc-get 'Lyrics (ly:output-find-context-def verselayout 'Lyrics)) 'property-ops))
 | |
|          (lyric-size (caddr (find (lambda (prop) (and (equal? 'push (car prop)) (equal? 'LyricText (cadr prop)) (equal? 'font-size (cadddr prop)))) lyric-context-props)))
 | |
|        )
 | |
|        (make-magnify-markup mag-scale (make-sans-markup (make-fontsize-markup lyric-size verse)))
 | |
|      )
 | |
|    )
 | |
| )
 | |
| 
 | |
| #(define-markup-command (group-verses layout props versegroup) (markup-list?)
 | |
|    #:properties ((verse-cols 1)
 | |
|                  (verse-vspace 1)
 | |
|                  (verse-hspace 1)
 | |
|                  (verse-ordering-horizontal #f))
 | |
|    "Gruppiere Strophen in einem Markup auf Wunsch spaltenweise"
 | |
|    (define (add-markup-between-elements reverses markup-between elements)
 | |
|      ((if reverses fold fold-right) (lambda (element filled-list)
 | |
|               (cons element (if (null? filled-list) '() (cons markup-between filled-list))))
 | |
|         '() elements))
 | |
|    (let* ((column-item-count (ceiling (/ (length versegroup) verse-cols)))
 | |
|           (column-data (make-list verse-cols)))
 | |
|     (let columnize-list ((index 0) (items versegroup))
 | |
|       (if (not (null? items))
 | |
|         (let* ((column-index (if verse-ordering-horizontal
 | |
|                                  (modulo index verse-cols)
 | |
|                                  (floor (/ index column-item-count))))
 | |
|                (column-markups (list-ref column-data column-index)))
 | |
|           (list-set! column-data column-index (cons (car items) column-markups))
 | |
|           (columnize-list (+ index 1) (cdr items)))))
 | |
|     (interpret-markup layout props
 | |
|       (make-fill-line-markup (list (make-verseformat-markup (make-line-markup
 | |
|         (add-markup-between-elements #f
 | |
|           (make-hspace-markup verse-hspace)
 | |
|           (map (lambda (column-markups)
 | |
|               (make-column-markup
 | |
|                 (add-markup-between-elements #t (make-vspace-markup verse-vspace) column-markups)))
 | |
|             column-data)))))))))
 | |
| 
 | |
| #(define-markup-command (pad-left layout props amount arg)
 | |
|   (number? markup?)
 | |
|   (let* ((m (interpret-markup layout props arg))
 | |
|          (x (ly:stencil-extent m X))
 | |
|          (y (ly:stencil-extent m Y)))
 | |
|     (ly:stencil-translate
 | |
|       (ly:make-stencil (ly:stencil-expr m)
 | |
|                        (cons (- (car x) amount) (cdr x))
 | |
|                        y)
 | |
|       `(,amount . 0))))
 | |
| 
 | |
| #(define-markup-command (pad-right layout props amount arg)
 | |
|   (number? markup?)
 | |
|   (let* ((m (interpret-markup layout props arg))
 | |
|          (x (ly:stencil-extent m X))
 | |
|          (y (ly:stencil-extent m Y)))
 | |
|       (ly:make-stencil (ly:stencil-expr m)
 | |
|                        (cons (car x) (+ (cdr x) amount))
 | |
|                        y)))
 | |
| 
 | |
| #(define-markup-command (score-equal-height-with-indents layout props lines)
 | |
|   (markup-list?)
 | |
|   #:category music
 | |
|   #:properties ((intraverse-vspace 0)
 | |
|                 (verse-line-height songTextLineHeigth)
 | |
|                 (line-indents '()))
 | |
|     (let ((indents-max-index (- (length line-indents) 1)))
 | |
|       (stack-stencils Y DOWN intraverse-vspace
 | |
|         (index-map
 | |
|           (lambda (index line)
 | |
|             (let ((stil
 | |
|                     (ly:make-stencil
 | |
|                       (ly:stencil-expr line)
 | |
|                       (ly:stencil-extent line X)
 | |
|                       `(,(/ verse-line-height -2.0) . ,(/ verse-line-height 2.0)))))
 | |
|               (if (<= index indents-max-index)
 | |
|                 (ly:stencil-translate-axis
 | |
|                   stil
 | |
|                   (list-ref line-indents index)
 | |
|                   X)
 | |
|                 stil)))
 | |
|           (interpret-markup-list layout props lines)))))
 | |
| 
 | |
| #(define-public (custom-lyric-text::print grob)
 | |
|   "Allow interpretation of tildes as lyric tieing marks."
 | |
|   ;; See also similar code in Lyric_performer.
 | |
|   (let ((text (ly:grob-property grob 'text)))
 | |
| 
 | |
|     (grob-interpret-markup grob (if (string? text)
 | |
|                                     (make-pad-right-markup -0.1 (make-tied-lyric-markup text))
 | |
|                                     text))))
 | |
| 
 | |
| Chord_lyrics_spacing_engraver =
 | |
| #(lambda (ctx)
 | |
|    (let ((last-note-head #f)
 | |
|          (note-head-extended #f)
 | |
|          (last-lyric-syllable-width 0)
 | |
|          (lyric-width-since-last-chord 0)
 | |
|          (notes-on-syllable-count 0)
 | |
|          (last-chord-name #f)
 | |
|          (remaining-chord-width 0)
 | |
|          (last-rest #f)
 | |
|          (rest-count 0)
 | |
|          (multi-measure-rest-count 0)
 | |
|          (stanza-shift 0))
 | |
|      (make-engraver
 | |
|       (listeners
 | |
|        ((multi-measure-rest-event engraver event)
 | |
|         (set! multi-measure-rest-count (+ multi-measure-rest-count 1))
 | |
|         )
 | |
|        ((break-event engraver event)
 | |
|         (set! last-note-head #f)
 | |
|         (set! note-head-extended #f)
 | |
|         (set! last-lyric-syllable-width 0)
 | |
|         (set! lyric-width-since-last-chord 0)
 | |
|         (set! notes-on-syllable-count 0)
 | |
|         (set! last-chord-name #f)
 | |
|         (set! remaining-chord-width 0)
 | |
|         (set! last-rest #f)
 | |
|         (set! rest-count 0)
 | |
|         (set! multi-measure-rest-count 0)
 | |
|         (set! stanza-shift 0)
 | |
|         ))
 | |
|       (acknowledgers
 | |
|        ((note-head-interface this-engraver grob source-engraver)
 | |
|         (if (and (> rest-count 0) (not last-note-head))
 | |
|             (let ((rest-spacing-on-line-start 1.2))
 | |
|               (ly:grob-set-property! grob 'minimum-X-extent (cons (- rest-spacing-on-line-start) 0))
 | |
|               (set! stanza-shift rest-spacing-on-line-start)
 | |
|               ))
 | |
|         (set! notes-on-syllable-count (+ 1 notes-on-syllable-count))
 | |
|         (set! last-note-head grob)
 | |
|         (set! note-head-extended #f)
 | |
|         (set! last-rest #f)
 | |
|         (set! rest-count 0)
 | |
|         (set! multi-measure-rest-count 0)
 | |
|         )
 | |
|        ((lyric-syllable-interface this-engraver grob source-engraver)
 | |
|         (set! remaining-chord-width (max 0 (- remaining-chord-width lyric-width-since-last-chord)))
 | |
|         (set! last-lyric-syllable-width (- (cdr (ly:grob-extent grob grob X)) 0.2))
 | |
|         (set! lyric-width-since-last-chord (+ lyric-width-since-last-chord last-lyric-syllable-width))
 | |
|         (if last-note-head (set! notes-on-syllable-count 1))
 | |
|         )
 | |
|        ((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)))
 | |
|             (let ((on-a-rest (> rest-count 0)))
 | |
|               (if (not on-a-rest)
 | |
|                   (set! notes-on-syllable-count (- notes-on-syllable-count 1)))
 | |
|               (if (and last-chord-name (= multi-measure-rest-count 1) (> lyric-width-since-last-chord remaining-chord-width))
 | |
|                   (ly:grob-set-property! last-chord-name 'extra-spacing-width (cons -0.1 (+ 0.1 (- lyric-width-since-last-chord remaining-chord-width)))))
 | |
|               (if last-note-head
 | |
|                   (let* ((last-note-min-x-extent (ly:grob-property last-note-head 'minimum-X-extent))
 | |
|                          (last-note-min-x-lower (if (pair? last-note-min-x-extent) (car last-note-min-x-extent) 0))
 | |
|                          (last-note-min-x-upper (if (pair? last-note-min-x-extent) (cdr last-note-min-x-extent) 0)))
 | |
|                     (if on-a-rest
 | |
|                         (begin
 | |
|                          (if (not note-head-extended)
 | |
|                              (begin
 | |
|                               (ly:grob-set-property! last-note-head 'minimum-X-extent
 | |
|                                                      (cons last-note-min-x-lower (- last-lyric-syllable-width -2 (* 2.2 rest-count))))
 | |
|                               (set! note-head-extended #t)
 | |
|                               ))
 | |
|                          (ly:grob-set-property! last-rest 'minimum-X-extent (cons 0 2))
 | |
|                          )
 | |
|                         (if (and (> lyric-width-since-last-chord 0)
 | |
|                                  (> remaining-chord-width lyric-width-since-last-chord))
 | |
|                             (ly:grob-set-property! last-note-head 'minimum-X-extent
 | |
|                                                    (cons (- -1.2 (- remaining-chord-width lyric-width-since-last-chord)) last-note-min-x-upper))
 | |
|                             (let* ((width-per-note-head 0.5)
 | |
|                                    (note-width-since-last-chord (* width-per-note-head notes-on-syllable-count)))
 | |
|                               (if (> remaining-chord-width note-width-since-last-chord)
 | |
|                                   (ly:grob-set-property! last-note-head 'minimum-X-extent
 | |
|                                                          (cons (- note-width-since-last-chord remaining-chord-width) last-note-min-x-upper))
 | |
|                                   )
 | |
|                               )
 | |
|                             )
 | |
|                         )))
 | |
|               (set! last-chord-name grob)
 | |
|               (set! remaining-chord-width
 | |
|                     (if (and on-a-rest (equal? (ly:prob-property (ly:grob-property grob 'cause) 'duration) (ly:prob-property (ly:grob-property last-rest 'cause) 'duration)))
 | |
|                         0
 | |
|                         (cdr (ly:grob-extent grob grob X))))
 | |
|               (set! lyric-width-since-last-chord 0)
 | |
|               (set! notes-on-syllable-count (if on-a-rest 0 1))
 | |
|               ))
 | |
|         )
 | |
|        ((rest-interface this-engraver grob source-engraver)
 | |
|         (set! rest-count (+ 1 rest-count))
 | |
|         (set! last-rest grob)
 | |
|         (set! multi-measure-rest-count 0)
 | |
|         )
 | |
|        ((stanza-number-interface this-engraver grob source-engraver)
 | |
|         (ly:grob-set-property! grob 'padding (+ 1 stanza-shift)))
 | |
|        ))))
 | |
| 
 | |
| %#(ly:set-option 'debug-skylines #t)
 | |
| 
 | |
| #(define-markup-command (chordlyrics layout props lyrics) (ly:music?)
 | |
|    #:properties ((verse-chords #{#})
 | |
|                  (verse-reference-voice #{#})
 | |
|                  (verse-break-voice #{#})
 | |
|                  (verse-text-chord-distance songTextChordDistance)
 | |
|                  (transposition (cons #f #f))
 | |
|                  (verselayout generalLayout))
 | |
|   "Vers mit Akkorden"
 | |
|   (interpret-markup layout props
 | |
|     #{
 | |
|       \markup {
 | |
|         \score-equal-height-with-indents \score-lines {
 | |
|           <<
 | |
|             \new Devnull { #(music-clone verse-break-voice) }
 | |
|             \new NullVoice = "dummyvoice" { #(music-clone verse-reference-voice) }
 | |
|             \transposable #transposition #(music-clone verse-chords)
 | |
|             \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)))
 | |
|             ragged-right = ##t
 | |
|             \context {
 | |
|               \Lyrics
 | |
|               \override VerticalAxisGroup.nonstaff-relatedstaff-spacing.basic-distance = #verse-text-chord-distance
 | |
|               \override VerticalAxisGroup.nonstaff-relatedstaff-spacing.padding = #(- verse-text-chord-distance songTextChordDistance)
 | |
|               \override LyricText.parent-alignment-X = #LEFT
 | |
|               \override LyricText.self-alignment-X = #LEFT
 | |
|               \override LyricText.word-space = 0.8
 | |
|               \override LyricSpace.minimum-distance = 0.8
 | |
|               \override LyricText.stencil = #custom-lyric-text::print
 | |
|             }
 | |
|             \context {
 | |
|               \ChordNames
 | |
|               \override VerticalAxisGroup.staff-affinity = ##f
 | |
|               \override ChordName.extra-spacing-width = #'(-0.1 . 0.1)
 | |
|               \consists \Ensure_first_chord_after_line_break_printed_engraver
 | |
|             }
 | |
|             \context {
 | |
|               \Score
 | |
|               \override PaperColumn.keep-inside-line = ##f
 | |
|              % \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
 | |
|               \remove Volta_engraver
 | |
|               \remove Parenthesis_engraver
 | |
|               \remove Metronome_mark_engraver
 | |
|             }
 | |
|             \context {
 | |
|               \Staff
 | |
|               \remove Staff_symbol_engraver
 | |
|               \remove Clef_engraver
 | |
|               \remove Time_signature_engraver
 | |
|               \remove Bar_engraver
 | |
|               \remove Separating_line_group_engraver
 | |
|               \omit KeySignature
 | |
|               \omit KeyCancellation
 | |
|             }
 | |
|             \context {
 | |
|               \Voice
 | |
|               \remove Stem_engraver
 | |
|               \remove Rest_engraver
 | |
|               \remove Multi_measure_rest_engraver
 | |
|               \remove Phrasing_slur_engraver
 | |
|               \remove Slur_engraver
 | |
|               \remove Tie_engraver
 | |
|               \remove Dynamic_engraver
 | |
|               \remove Note_heads_engraver
 | |
|               \remove Script_engraver
 | |
|             }
 | |
|             \context {
 | |
|               \NullVoice
 | |
|               \consists Rest_engraver
 | |
|               \omit Rest
 | |
|               \override Rest.X-extent = #'(0 . 0)
 | |
|               \undo \omit NoteHead
 | |
|               \hide NoteHead
 | |
|               \override NoteHead.X-extent = #'(0 . 0.5)
 | |
|             }
 | |
|           }
 | |
|         }
 | |
|       }
 | |
|     #}
 | |
|   )
 | |
| )
 | |
| 
 | |
| #(define-markup-command (nochordlyrics layout props lyrics) (ly:music?)
 | |
|     "Vers ohne Akkorde"
 | |
|   (interpret-markup layout props
 | |
|     (markup
 | |
|       #:override `(verse-chords . ,#{#})
 | |
|       #:override `(verse-line-height . ,(- songTextLineHeigth 2))
 | |
|       #:chordlyrics lyrics))
 | |
| )
 |