* write that as yaml file next to the other outputs * extract lyrics * makes chordpro export work in songbooks * more metadata for chordpro export
154 lines
5.1 KiB
LilyPond
154 lines
5.1 KiB
LilyPond
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
|
|
;; (<ly:parser-output-name>.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"
|
|
}
|
|
}
|
|
}#})
|
|
))
|