1 %------------------------------------------------------------------%
2 % Opéra Libre -- titling.ly %
4 % (c) Valentin Villenave, 2008, 2009 %
5 %------------------------------------------------------------------%
7 %%depends on: text-functions.ly, decoupage.ly, nomenclature.ly, graphics.ly
9 %%needs to be included directly at the top of the master \book block.
11 %%%%%%%%%%%%%%%%%%%%%%%%%% General titling %%%%%%%%%%%%%%%%%%%%%%%%%%
14 scoreTitleMarkup
= \markup {
16 \on-the-fly
#print-all-headers
{ \bookTitleMarkup \hspace #1 }
19 \fontsize #10 \fromproperty #'header
:acte
21 \fontsize #6 \fromproperty #'header
:piece
23 \fromproperty #'header
:dessin
28 % TODO headers and footers
32 %%%%%%%%%%%%%%%%%%%%%%%%%%%%% Preamble %%%%%%%%%%%%%%%%%%%%%%%%%%%%%
34 %% Special block --------------------------------------------------%
38 %% Internal \paper definitions ------------------------------------%
42 left-margin
= #15 % ???
44 line-width
= #(- paper-width
(+ left-margin right-margin
))
45 bookTitleMarkup
= \markup {
47 \override #'(baseline-skip
. 5)
52 \fontsize #5 \sans \fromproperty #'header
:libretto
56 \line { \fontsize #15 \transparent "A" }
60 \fontsize #5 \sans \fromproperty #'header
:composer
64 \line { \fontsize #5 " " }
67 \fontsize #15 \sans \fromproperty #'header
:title
70 \fontsize #2 \sans \fromproperty #'header
:subtitle
75 \fromproperty #'header
:illustration
80 tocTitleMarkup
= \markup \column {
82 \fontsize #2 \underline \smallCaps \TableTitre
87 tocActMarkup
= \markup \large \column {
89 \fill-line
{ \null \bold \fromproperty #'toc
:text
\null }
92 tocItemMarkup
= \markup \large \fill-line
{
93 \fromproperty #'toc
:text
\fromproperty #'toc
:page
95 tocQuoteMarkup
= \markup {
96 \hspace #4 \italic \fromproperty #'toc
:text
99 oddFooterMarkup
= \markup {
102 %% Copyright header field only on first page.
103 \on-the-fly
#first-page
104 \fontsize #2 \sans \rounded-box
\fromproperty #'header
:scoretype
108 \on-the-fly
#first-page
109 \fontsize #1 \sans \fromproperty #'header
:copyright
113 %% Tagline header field only on last page.
114 \on-the-fly
#last-page
\fromproperty #'header
:tagline
118 scoreTitleMarkup
= \markup \null
121 %% The actual pages -----------------------------------------------%
124 \override #'(box-padding
. 1.0)
125 \translate #'(0 . -
190)
133 \override #'(baseline-skip
. 5)
137 \fontsize #3 \OperaLivret
138 \fontsize #3 \OperaPartition
140 \fontsize #10 \bold \OperaTitre
141 \fontsize #2 \OperaSousTitre
143 \fill-line
{ \line {\hspace #2 \Skyline }}
151 \markuplines \table-of-contents
152 \markup \fill-line
{ \Bilboquet }
157 %% Markup commands ------------------------------------------------%
159 %%% Interpret the odd or even page headers, based on header text
160 %%% added using `add-odd-page-header-text' or `add-even-page-header-text'.
162 #(define-markup-command (odd-header layout props) ()
163 (header-markup-aux layout props #t))
165 #(define-markup-command (even-header layout props) ()
166 (header-markup-aux layout props #f))
169 evenHeaderMarkup = \markup \even-header
170 oddHeaderMarkup = \markup \odd-header
177 #(define-public (add-toplevel-markup parser text)
178 (collect-scores-for-book parser (list text)))
180 #(define-public (add-toc-item parser markup-symbol text)
181 (collect-music-for-book parser
182 (add-toc-item! markup-symbol text)))
185 %%% Rehearsal numbers
188 #(define-public rehearsal-number #f)
189 #(define-public increase-rehearsal-major-number #f)
190 #(let ((major-number 0)
192 (set! increase-rehearsal-major-number
194 (set! major-number (1+ major-number))
195 (set! minor-number 0)))
196 (set! rehearsal-number
198 (set! minor-number (1+ minor-number))
199 (format #f "~a-~a" major-number minor-number))))
202 %%% Table of contents
204 #(define-markup-command (paper-prop layout props name default)
206 "Get the value of a \\paper property, or defaults to some value"
207 (let ((val (ly:output-def-lookup layout name)))
208 (interpret-markup layout props (if (markup? val)
213 line-width = #(- paper-width (* 40 mm))
214 %horizontal-shift = 5
217 ragged-last-bottom = ##t
219 between-system-space = 1\cm
220 between-system-padding = #5
223 oddFooterMarkup = \markup \column {
225 %% put copyright only on pagenr. 1
226 \on-the-fly #(lambda (layout props arg)
227 (if (and (= 1 (chain-assoc-get 'page:page-number props -1))
228 (not (chain-assoc-get 'page:last? props #f)))
229 (interpret-markup layout props arg)
231 \fromproperty #'header:longcopyright
234 %% put tagline on last page
235 \on-the-fly #(lambda (layout props arg)
236 (if (chain-assoc-get 'page:last? props #f)
237 (interpret-markup layout props arg)
239 \fill-line { \fromproperty #'header:tagline }
242 evenFooterMarkup = \markup \column {
244 %% put notice on second page
245 \on-the-fly #(lambda (layout props arg)
246 (if (= 2 (chain-assoc-get 'page:page-number props -1))
247 (interpret-markup layout props arg)
249 \fill-line { \fromproperty #'header:notes }
252 %% put tagline on last page
253 \on-the-fly #(lambda (layout props arg)
254 (if (chain-assoc-get 'page:last? props #f)
255 (interpret-markup layout props arg)
257 \fill-line { \fromproperty #'header:tagline }
263 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
264 %%% Table of contents
266 #(define-markup-command (paper-prop layout props name default)
268 "Get the value of a \\paper property, or defaults to some value"
269 (let ((val (ly:output-def-lookup layout name)))
270 (interpret-markup layout props (if (markup? val)
275 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
276 %%% Markup commands for page headers
278 #(define-public add-odd-page-header-text #f)
279 #(define-public add-even-page-header-text #f)
280 #(define header-markup-aux #f)
281 #(let ((odd-label-header-table (list))
282 (odd-page-header-table (list))
283 (even-label-header-table (list))
284 (even-page-header-table (list)))
285 (set! header-markup-aux
286 (lambda (layout props odd)
287 (define (page-text page-number table)
290 (let* ((elment (car table))
293 (display-1st (caddr elment)))
294 (cond ((and (= page-number p) (not display-1st)) #f)
295 ((>= page-number p) text)
296 (else (page-text page-number (cdr table)))))))
298 `(delay-stencil-evaluation
299 ,(delay (ly:stencil-expr
301 (if (or (and odd (null? odd-page-header-table))
302 (and (not odd) (null? even-page-header-table)))
303 (let ((page-header-table (list)))
304 (for-each (lambda (label-header)
305 (let* ((label (car label-header))
306 (text-disp (cdr label-header))
307 (table (ly:output-def-lookup layout 'label-page-table))
308 (label-page (and (list? table) (assoc label table)))
309 (page-number (and label-page (cdr label-page)))
310 (prev-value (and page-number (assoc page-number page-header-table))))
312 (set! page-header-table (cons (cons page-number text-disp)
314 (set! page-header-table
315 (assoc-set! page-header-table
317 (list (car text-disp) (caddr prev-value)))))))
318 (reverse (if odd odd-label-header-table even-label-header-table)))
320 (set! odd-page-header-table page-header-table)
321 (set! even-page-header-table page-header-table))))
322 (interpret-markup layout props
323 (let* ((page-number (chain-assoc-get 'page:page-number props -1))
324 (text (page-text page-number (if odd odd-page-header-table even-page-header-table)))
325 (text-markup (markup #:italic (or text "")))
326 (page-number-markup (number->string page-number)))
327 (cond ((or (= 1 page-number) (not text)) (markup #:null))
328 (odd (markup #:fill-line (#:null text-markup page-number-markup)))
329 (else (markup #:fill-line (page-number-markup text-markup #:null))))))))))
331 (ly:stencil-extent (interpret-markup layout props "XXX") Y))))
332 (set! add-odd-page-header-text
333 (lambda (parser text display-1st)
334 (let ((label (gensym "header")))
335 (set! odd-label-header-table
336 (cons (list label text display-1st)
337 odd-label-header-table))
338 (collect-music-for-book parser
341 'page-label label)))))
342 (set! add-even-page-header-text
343 (lambda (parser text display-1st)
344 (let ((label (gensym "header")))
345 (set! even-label-header-table
346 (cons (list label text display-1st)
347 even-label-header-table))
348 (collect-music-for-book parser
351 'page-label label))))))
353 #(define-markup-command (odd-header layout props) ()
354 (header-markup-aux layout props #t))
356 #(define-markup-command (even-header layout props) ()
357 (header-markup-aux layout props #f))
360 evenHeaderMarkup = \markup \even-header
361 oddHeaderMarkup = \markup \odd-header