|  |  |  | @@ -66,17 +66,18 @@ | 
		
	
		
			
				|  |  |  |  | % 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 { \generalLayout } } | 
		
	
		
			
				|  |  |  |  |            \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?) | 
		
	
	
		
			
				
					
					|  |  |  | @@ -88,43 +89,60 @@ | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | #(define-markup-command (stanza-raw layout props arg) | 
		
	
		
			
				|  |  |  |  |    (markup?) | 
		
	
		
			
				|  |  |  |  |    (let ((verselayout (chain-assoc-get 'verselayout props generalLayout))) | 
		
	
		
			
				|  |  |  |  |    (interpret-markup layout props | 
		
	
		
			
				|  |  |  |  |      (if (and (string? arg) (string-null? arg)) | 
		
	
		
			
				|  |  |  |  |          " " | 
		
	
		
			
				|  |  |  |  |          #{\markup | 
		
	
		
			
				|  |  |  |  |            \score { \new Lyrics { \lyricmode { \set stanza = #arg "" } } \layout { \generalLayout } } | 
		
	
		
			
				|  |  |  |  |            \score { \new Lyrics { \lyricmode { \set stanza = #arg "" } } \layout { \verselayout } } | 
		
	
		
			
				|  |  |  |  |          #} | 
		
	
		
			
				|  |  |  |  |      ))) | 
		
	
		
			
				|  |  |  |  |      )))) | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | #(define-markup-command (stanza layout props arg) | 
		
	
		
			
				|  |  |  |  |    (markup?) | 
		
	
		
			
				|  |  |  |  |    (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 "\n") text " "))) | 
		
	
		
			
				|  |  |  |  |       (if (null? break-words) | 
		
	
		
			
				|  |  |  |  |           newtext | 
		
	
		
			
				|  |  |  |  |           (make-custom-linebreaks | 
		
	
		
			
				|  |  |  |  |             (cdr break-words) | 
		
	
		
			
				|  |  |  |  |             (ly:regex-replace | 
		
	
		
			
				|  |  |  |  |               (ly:make-regex (string-append "(" (ly:regex-replace (ly:make-regex "(.)") (car break-words) "(?:\\(?" 1 "| *,[^,)]+\\)" 1 ")") "(?: *,[^,)]+\\))?)(.*)$")) | 
		
	
		
			
				|  |  |  |  |               newtext | 
		
	
		
			
				|  |  |  |  |               1 "\n" 2)))))) | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | % Kompletten Vers mit Akkorden | 
		
	
		
			
				|  |  |  |  | #(define-markup-command (chordverse layout props stanza verse) (markup? string?) | 
		
	
		
			
				|  |  |  |  |    #:properties ((intraverse-vspace 0)) | 
		
	
		
			
				|  |  |  |  |    #:properties ((intraverse-vspace 0)(custom-verse-breaks '())) | 
		
	
		
			
				|  |  |  |  |    "Vers mit Akkorden" | 
		
	
		
			
				|  |  |  |  |    (let* ((fromto (chain-assoc-get 'transposition props #f)) | 
		
	
		
			
				|  |  |  |  |           (transp (if fromto | 
		
	
		
			
				|  |  |  |  |                     (string-append "\\transpose " (car fromto) " " (cdr fromto)) | 
		
	
		
			
				|  |  |  |  |                     ""))) | 
		
	
		
			
				|  |  |  |  |                     "")) | 
		
	
		
			
				|  |  |  |  |           (verselayout (chain-assoc-get 'verselayout props generalLayout))) | 
		
	
		
			
				|  |  |  |  |    (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(]*)+)") verse " \\concat { " 1 " } ") | 
		
	
		
			
				|  |  |  |  |                 "\\textup \\line { \"" 1 "\" " 2 " \"" 3 "\" } \\score { \\transposable " transp " \\chords { s4 " 4 " } \\layout { \\verseChordLayout } }") | 
		
	
		
			
				|  |  |  |  |                  (ly:regex-replace (ly:make-regex "(([^ \n]*\\([^()]*,[^()]+\\)[^ \n(]*)+)") (handle-custom-newlines custom-verse-breaks verse) " \\concat { " 1 " } ") | 
		
	
		
			
				|  |  |  |  |                 "\\textup \\line { \"" 1 "\" " 2 " \"" 3 "\" } \\score { \\transposable " transp " \\chords { s4 " 4 " } \\layout { \\verselayout } }") | 
		
	
		
			
				|  |  |  |  |                 ) | 
		
	
		
			
				|  |  |  |  |      )))) | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | % Kompletter Vers aus dem Akkorde entfernt werden | 
		
	
		
			
				|  |  |  |  | #(define-markup-command (nochordverse layout props stanza verse) (markup? string?) | 
		
	
		
			
				|  |  |  |  |    #:properties ((intraverse-vspace 0)) | 
		
	
		
			
				|  |  |  |  |    #: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 "\\(([^,]*),([^)]*)\\)") verse 1) | 
		
	
		
			
				|  |  |  |  |            #:wrap-newline (ly:regex-replace (ly:make-regex "\\(([^,]*),([^)]*)\\)") (handle-custom-newlines custom-verse-breaks verse) 1) | 
		
	
		
			
				|  |  |  |  |      ) | 
		
	
		
			
				|  |  |  |  |    ) | 
		
	
		
			
				|  |  |  |  | ) | 
		
	
	
		
			
				
					
					|  |  |  |   |