MUSIC = { \transposable #TRANSPOSITION \MUSIC } LAYOUT = \layout { \LAYOUT #(customized-layout LAYOUT) } verselayout = \layout { \LAYOUT \context { \ChordNames \override ChordName.font-size = \songTextChordFontSize } } TEXT = \markuplist { \override #`(transposition . ,TRANSPOSITION) \override #`(verselayout . ,verselayout) \override #`(verse-chords . ,#{ \chords { \verseChords } #}) \override #`(verse-reference-voice . ,#{ \global \firstVoice #}) \handle-tag-groups \recordedTagGroups \TEXT } #(define TEXT_PAGES (map (lambda (text) #{ \markuplist { \override #`(transposition . ,TRANSPOSITION) \override #`(verselayout . ,verselayout) \override #`(verse-chords . ,#{ \chords { \verseChords } #}) \override #`(verse-reference-voice . ,#{ \global \firstVoice #}) \handle-tag-groups \recordedTagGroups #text } #}) (if (and (defined? 'TEXT_PAGES) (pair? TEXT_PAGES)) TEXT_PAGES (list TEXT)))) %% Add invisible ChordPro write trigger to last TEXT_PAGES markuplist #(when (and (defined? 'chordpro-export-enabled) chordpro-export-enabled (pair? TEXT_PAGES)) (let* ((last-index (- (length TEXT_PAGES) 1)) (last-page (list-ref TEXT_PAGES last-index)) (modified-last-page #{ \markuplist { #last-page \chordpro-delayed-write } #})) (set! TEXT_PAGES (append (list-head TEXT_PAGES last-index) (list modified-last-page))))) #(define (add-text-pages text-pages) (if (pair? text-pages) (begin (add-score (car text-pages)) (for-each (lambda (text) (add-music (pageBreak)) (add-score text)) (cdr text-pages))))) #(if (not noStandaloneOutput) (begin (let ((header (ly:book-header HEADER)) (paper (ly:book-paper HEADER))) (if header (set! $defaultheader header)) (if paper (set! $defaultpaper paper)) ) ;; Meta-Daten des Liedes als YAML neben die Ausgabedatei schreiben ;; (.yml, landet wie das PDF relativ zum ;; Arbeitsverzeichnis). Die Textseiten-Strophen kommen aus dem ;; Render-Collector (chordpro.ily), deshalb wird erst bei der Ausgabe ;; geschrieben: unsichtbarer delayed Stencil an der letzten Textseite. ;; Ohne (nicht-leere) Textseiten gibt es keine Collector-Daten und die ;; yml wird sofort geschrieben. (when (and (defined? 'yaml-export-enabled) yaml-export-enabled) ;; Collector-Daten auch ohne ChordPro-Flag unter dem Ausgabenamen sammeln (set! chordpro-default-song-key (ly:parser-output-name)) (if (any pair? TEXT_PAGES) (let* ((last-index (- (length TEXT_PAGES) 1)) (last-page (list-ref TEXT_PAGES last-index)) (trigger-stencil (yaml-delayed-song-write (ly:parser-output-name) HEADER MUSIC)) (modified-last-page #{ \markuplist { #last-page \stencil #trigger-stencil } #})) (set! TEXT_PAGES (append (list-head TEXT_PAGES last-index) (list modified-last-page)))) (scm->yml-file (string-append (ly:parser-output-name) ".yml") (extract-song-data HEADER MUSIC #f (ly:parser-output-name))))) ;; ChordPro export (Einzellied): Song-Key ist der Ausgabename (die .cho ;; landet wie das PDF relativ zum Arbeitsverzeichnis); Titel/Autoren ;; kommen aus HEADER in den per-Song-Store. (when (and (defined? 'chordpro-export-enabled) chordpro-export-enabled) (set! chordpro-default-song-key (ly:parser-output-name)) (chordpro-register-song-metadata chordpro-default-song-key HEADER)) ;; ChordPro_music_collector (Strophen unter den Noten, siehe chordpro.ily) ;; braucht den aktiven Song-Key VOR der Interpretation des Hauptscores. ;; \consists nur bei chordpro-include-music-lyrics -- sonst keine Kosten ;; (Grob-Acknowledger fuer JEDEN Akkord/jede Silbe/Strophenmarker des ;; Hauptscores) fuer Lieder/Buecher, die das Feature nicht nutzen. Bewusst ;; NICHT zusaetzlich an chordpro-export-enabled gekoppelt: die Flag ist ;; eigenstaendig gedacht (steuert nur, ob \chordpro-delayed-write bzw. ;; \write-book-chordpro am Ende tatsaechlich etwas schreiben -- ob dafuer ;; Daten gesammelt wurden, ist eine davon unabhaengige Entscheidung). (set! chordpro-active-song-key (ly:parser-output-name)) (if (and (defined? 'chordpro-include-music-lyrics) chordpro-include-music-lyrics) (add-score #{ \score { \MUSIC \layout { \LAYOUT \context { \Score \consists \ChordPro_music_collector } } }#}) (add-score #{ \score { \MUSIC \layout { \LAYOUT } }#})) (add-text-pages TEXT_PAGES) (add-score #{ \score { \unfoldRepeats { \MUSIC \INLINESCOREMUSIC } \midi { \context { \Staff \remove "Staff_performer" } \context { \Voice \consists "Staff_performer" } } }#}) ))