extract meta data from lilypond compilation
* write that as yaml file next to the other outputs * extract lyrics
This commit is contained in:
@@ -65,6 +65,26 @@ additionalPageNumbers =
|
||||
display-pages-list
|
||||
)
|
||||
|
||||
% Fuer Zusatzseiten: Label der ersten Seite des zusammenhaengenden
|
||||
% Zusatzseiten-Blocks, zu dem label gehoert (bestimmt den Buchstaben-Suffix a, b, ...).
|
||||
#(define (earliest-additional-label label)
|
||||
(let find-earliest-additional-label
|
||||
((rest-additional-page-switch-label-list (member (cons label #t) additional-page-switch-label-list)))
|
||||
(if (cdadr rest-additional-page-switch-label-list)
|
||||
(find-earliest-additional-label (cdr rest-additional-page-switch-label-list))
|
||||
(caar rest-additional-page-switch-label-list))))
|
||||
|
||||
% Sichtbare Seitenzahl der Seite mit diesem Label: normalerweise eine Zahl,
|
||||
% auf Zusatzseiten ein String mit Buchstaben-Suffix (z.B. "12a"); gleiche
|
||||
% Logik wie custom-page-number unten.
|
||||
#(define (visible-page-value layout label)
|
||||
(let ((display-page (assq-ref (build-display-pages-list layout) label)))
|
||||
(if (assq-ref additional-page-switch-label-list label)
|
||||
(ly:format "~a~a" display-page
|
||||
(string (integer->char (+ 97 (- (real-page-number layout label)
|
||||
(real-page-number layout (earliest-additional-label label)))))))
|
||||
display-page)))
|
||||
|
||||
% TODO:
|
||||
% Eigentlich können wir das direkt in oddFooderMarkup und evenFooterMarkup aufrufen
|
||||
% vermutlich sogar ohne den delay kram. Wir sollten außerdem einfach nur die property
|
||||
@@ -97,12 +117,7 @@ width may require additional tweaking.)"
|
||||
(if (assq-ref additional-page-switch-label-list label)
|
||||
(make-concat-markup (list (number-format number-type display-page)
|
||||
(make-char-markup (+ 97 (- real-current-page (real-page-number layout
|
||||
(let find-earliest-additional-label
|
||||
((rest-additional-page-switch-label-list (member (cons label #t) additional-page-switch-label-list)))
|
||||
(if (cdadr rest-additional-page-switch-label-list)
|
||||
(find-earliest-additional-label (cdr rest-additional-page-switch-label-list))
|
||||
(caar rest-additional-page-switch-label-list)))
|
||||
))))))
|
||||
(earliest-additional-label label)))))))
|
||||
(number-format number-type (+ display-page (- real-current-page (real-page-number layout label))))
|
||||
))
|
||||
(page-stencil (interpret-markup layout props page-markup))
|
||||
@@ -118,6 +133,31 @@ width may require additional tweaking.)"
|
||||
(make-filled-box-stencil x-ext y-ext))))
|
||||
|
||||
|
||||
%% Schreibt die Daten aller Lieder des Buchs (extract-song-data, siehe
|
||||
%% data_extractor.ily) als YAML-Datei: oberster Key contents, darunter eine
|
||||
%% Liste mit den Lied-Daten, jeweils angereichert um den Key page mit der
|
||||
%% sichtbaren Seitenzahl des Liedanfangs. Einbinden wie \write-toc-csv in
|
||||
%% einem Markup des Buchs; wie dort passiert das Schreiben ueber ein
|
||||
%% delayed stencil, weil die Label->Seiten-Tabelle erst beim Ausgeben des
|
||||
%% Buchs feststeht.
|
||||
#(define-markup-command (write-book-yaml layout props filename) (string?)
|
||||
(ly:make-stencil
|
||||
`(delay-stencil-evaluation
|
||||
,(delay
|
||||
(begin
|
||||
(scm->yml-file filename
|
||||
(list (cons 'contents
|
||||
(map (lambda (song)
|
||||
(let ((songvars (cdr song)))
|
||||
(cons (cons 'page (visible-page-value layout (assq-ref songvars 'label)))
|
||||
(extract-song-data (assq-ref songvars 'header)
|
||||
(assq-ref songvars 'music)
|
||||
(assq-ref songvars 'text-pages)))))
|
||||
(reverse (alist-delete 'markupPage
|
||||
(alist-delete 'imagePage
|
||||
(alist-delete 'emptyPage song-list))))))))
|
||||
empty-stencil)))))
|
||||
|
||||
includeSong =
|
||||
#(define-void-function (filename) (string?)
|
||||
#{
|
||||
|
||||
Reference in New Issue
Block a user