\paper { poetPrefix = "Worte:" composerPrefix = "Weise:" compositionPrefix = "Satz:" adaptionTextPrefix = "Bearbeitung:" adaptionMusicPrefix = "Bearbeitung:" poetAndComposerEqualPrefix = "Worte und Weise:" voicePrefix = "Stimme:" versePrefix = "Strophe:" translationAuthorPrefix = "Übersetzung:" translationPrefix = "Übersetzung:" pronunciationPrefix = "Aussprache:" interludePrefix = "Zwischenspiel:" bridgePrefix = "Bridge:" author-joiner = #(lambda (author-list) (string-join author-list ", ")) authorFormat = #(lambda (noDetails name trail_name birth_year death_year organization) (let ((string-present (lambda (str) (and str (not (and (string? str) (string-null? str)))))) (render_informations (lambda (infolist) (string-append (car infolist) (if (or noDetails (null? (cdr infolist))) "" (string-append " (" (string-join (cdr infolist) ", ") ")")))))) (if (or (string-present trail_name) (string-present name)) (render_informations (filter string-present (list trail_name name (if (and (string-present birth_year) (string-present death_year)) (ly:format "~a‒~a" birth_year death_year) (if (string-present birth_year) (ly:format "*~a" birth_year) (if (string-present death_year) (ly:format "†~a" death_year) ""))) organization ))) "" ))) authorContributionFormat = #(lambda* (render-contribution-group render-partial-contribution-group #:key (poetIds '()) (translatorIds '()) (versePoetData '()) (composerIds '()) (verseComposerData '()) (voiceComposerData '()) (compositionIds '()) (adaptionTextIds '()) (adaptionMusicIds '()) (bridgeIds '()) (interludeIds '()) (year_text #f) (year_translation #f) (year_melody #f) (year_composition #f) (year_adaption_text #f) (year_adaption_music #f) (poetAndComposerEqualPrefix "") (poetPrefix "") (composerPrefix "") (translationPrefix "") (pronunciationPrefix "") (compositionPrefix "") (adaptionTextPrefix "") (adaptionMusicPrefix "") (bridgePrefix "") (interludePrefix "")) (if (and (equal? poetIds composerIds) (null? translatorIds) (null? versePoetData) (null? verseComposerData) (null? voiceComposerData) (null? compositionIds) (null? adaptionTextIds) (null? adaptionMusicIds) (null? bridgeIds) (null? interludeIds)) (list (join-present (list (render-contribution-group poetAndComposerEqualPrefix poetIds) (if (equal? year_text year_melody) year_text (join-present (list year_text year_melody) "/")) ) ", ") #f) (list (if (and (null? poetIds) (null? versePoetData) (null? translatorIds)) #f (string-append poetPrefix " " (join-present (list (join-present (list (render-contribution-group "" poetIds) year_text ) ", ") (render-partial-contribution-group 'versePrefix versePoetData) (join-present (list (render-contribution-group adaptionTextPrefix adaptionTextIds) year_adaption_text ) ", ") (join-present (list (render-contribution-group translationAuthorPrefix translatorIds) year_translation ) ", ") ) "; ") )) (if (and (null? composerIds) (null? compositionIds) (null? adaptionMusicIds) (null? verseComposerData) (null? voiceComposerData) (null? bridgeIds) (null? interludeIds)) #f (string-append composerPrefix " " (join-present (list (join-present (list (render-contribution-group "" composerIds) year_melody ) ", ") (render-partial-contribution-group 'versePrefix verseComposerData) (render-partial-contribution-group 'voicePrefix voiceComposerData) (join-present (list (render-contribution-group compositionPrefix compositionIds) year_composition ) ", ") (join-present (list (render-contribution-group adaptionMusicPrefix adaptionMusicIds) year_adaption_music ) ", ") (render-contribution-group bridgePrefix bridgeIds) (render-contribution-group interludePrefix interludeIds) ) "; ") ))))) songinfoMarkup = #(make-on-the-fly-markup (lambda (layout props m) (let* ((between-poet-and-composer-markup (chain-assoc-get 'header:between-poet-and-composer-markup props (make-hspace-markup 3))) (poet-maybe-with-composer (chain-assoc-get 'songinfo:poet-maybe-with-composer props #f)) (composer (chain-assoc-get 'songinfo:composer props #f)) (copyright (chain-assoc-get 'songinfo:copyright props #f)) (infotext (chain-assoc-get 'songinfo:infotext props #f)) (translation (chain-assoc-get 'songinfo:translation props #f)) (pronunciation (chain-assoc-get 'songinfo:pronunciation props #f)) (year_text (chain-assoc-get 'songinfo:year_text props #f)) (year_melody (chain-assoc-get 'songinfo:year_melody props #f)) (poet-with-year (if (and poet-maybe-with-composer year_text) (string-append poet-maybe-with-composer ", " year_text) poet-maybe-with-composer)) (composer-with-year (if (and composer year_melody) (string-append composer ", " year_melody) composer)) (concat-markupped-strings (lambda (text) (ly:regex-replace (ly:make-regex "(\\S+)(\\\\\\w+(?:\\s+\\[^\\{\\s]*|\\s*\\{[^\\}]*\\}))(\\S*)") text "\\concat {" 1 "\\line {" 2 "}" 3 "}"))) (string-with-paragraphs->markuplist (lambda (prefix text) (if text (apply append (map (lambda (paragraph) (make-wordwrap-internal-markup-list #t #{ \markuplist { $(ly:parser-include-string (concat-markupped-strings paragraph)) } #})) (ly:regex-split (ly:make-regex "\r?\n[ \t\r\n]*\n[ \t\r\n]*") (string-append prefix text)))) '()))) (poet-and-composer-markup-list (string-with-paragraphs->markuplist "" (string-append (if poet-with-year (string-append "\n\n" poet-with-year) "") (if composer-with-year (string-append "\n\n" composer-with-year) "") ))) (poet-and-composer-oneliner (if (and poet-with-year composer-with-year) (make-line-markup (cons (cadr poet-and-composer-markup-list) (cons between-poet-and-composer-markup (cddr poet-and-composer-markup-list)))) #f)) (current-line-width (chain-assoc-get 'line-width props (ly:output-def-lookup layout 'line-width)))) (stack-lines DOWN 0.0 (chain-assoc-get 'baseline-skip props) (interpret-markup-list layout props (append (if (and poet-and-composer-oneliner (< (interval-length (ly:stencil-extent (interpret-markup layout props poet-and-composer-oneliner) X)) current-line-width)) (list poet-and-composer-oneliner) poet-and-composer-markup-list) (string-with-paragraphs->markuplist "" (string-append (if copyright (string-append "\n\n© " copyright) ""))) (string-with-paragraphs->markuplist "" infotext) (string-with-paragraphs->markuplist (string-append (ly:output-def-lookup layout 'translationPrefix) " ") translation) (string-with-paragraphs->markuplist (string-append (ly:output-def-lookup layout 'pronunciationPrefix) " ") pronunciation) ))))) (make-null-markup) ) }