Copyright update
[opera_libre.git] / master / titling.ly
blobbca6f42fcc8fa6e013b9ccb7ba5393f2d6c74e11
1 %------------------------------------------------------------------%
2 % Opéra Libre -- titling.ly %
3 % %
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 %%%%%%%%%%%%%%%%%%%%%%%%%%
13 \paper {
14 scoreTitleMarkup = \markup {
15 \column {
16 \on-the-fly #print-all-headers { \bookTitleMarkup \hspace #1 }
17 \fill-line {
18 \center-column {
19 \fontsize #10 \fromproperty #'header:acte
20 \vspace #1
21 \fontsize #6 \fromproperty #'header:piece
22 \vspace #1
23 \fromproperty #'header:dessin
28 % TODO headers and footers
32 %%%%%%%%%%%%%%%%%%%%%%%%%%%%% Preamble %%%%%%%%%%%%%%%%%%%%%%%%%%%%%
34 %% Special block --------------------------------------------------%
36 \bookpart {
38 %% Internal \paper definitions ------------------------------------%
40 \paper {
41 indent = #0
42 left-margin = #15 % ???
43 right-margin = #16
44 line-width = #(- paper-width (+ left-margin right-margin))
45 bookTitleMarkup = \markup {
46 \vspace #20
47 \override #'(baseline-skip . 5)
48 \column {
49 \combine
50 \column {
51 \fill-line {
52 \fontsize #5 \sans \fromproperty #'header:libretto
53 \null
55 \vspace #4
56 \line { \fontsize #15 \transparent "A" }
57 \vspace #4
58 \fill-line {
59 \null
60 \fontsize #5 \sans \fromproperty #'header:composer
63 \column {
64 \line { \fontsize #5 " " }
65 \vspace #4
66 \fill-line {
67 \fontsize #15 \sans \fromproperty #'header:title
69 \fill-line {
70 \fontsize #2 \sans \fromproperty #'header:subtitle
73 \vspace #4
74 \fill-line {
75 \fromproperty #'header:illustration
80 tocTitleMarkup = \markup \column {
81 \fill-line {
82 \fontsize #2 \underline \smallCaps \TableTitre
84 \vspace #2
87 tocActMarkup = \markup \large \column {
88 \hspace #1
89 \fill-line { \null \bold \fromproperty #'toc:text \null }
90 \hspace #1
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 {
100 \column {
101 \fill-line {
102 %% Copyright header field only on first page.
103 \on-the-fly #first-page
104 \fontsize #2 \sans \rounded-box\fromproperty #'header:scoretype
106 \vspace #1
107 \fill-line {
108 \on-the-fly #first-page
109 \fontsize #1 \sans \fromproperty #'header:copyright
112 \fill-line {
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 -----------------------------------------------%
122 \pageBreak
123 \markup {
124 \override #'(box-padding . 1.0)
125 \translate #'(0 . -190)
126 \fill-line {
127 \box \BigNotice
130 \pageBreak
131 \markup {
132 \vspace #5
133 \override #'(baseline-skip . 5)
134 \fill-line {
135 \center-column {
136 \fill-line {
137 \fontsize #3 \OperaLivret
138 \fontsize #3 \OperaPartition
140 \fontsize #10 \bold \OperaTitre
141 \fontsize #2 \OperaSousTitre
142 \vspace #10
143 \fill-line { \line {\hspace #2 \Skyline }}
144 \vspace #10
145 \CharacterList
149 \pageBreak
150 \markup \vspace #5
151 \markuplines \table-of-contents
152 \markup \fill-line { \Bilboquet }
153 \pageBreak
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))
168 \paper {
169 evenHeaderMarkup = \markup \even-header
170 oddHeaderMarkup = \markup \odd-header
174 %%% Toplevel markups
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)
191 (minor-number 0))
192 (set! increase-rehearsal-major-number
193 (lambda ()
194 (set! major-number (1+ major-number))
195 (set! minor-number 0)))
196 (set! rehearsal-number
197 (lambda ()
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)
205 (symbol? markup?)
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)
211 \paper {
213 line-width = #(- paper-width (* 40 mm))
214 %horizontal-shift = 5
215 bottom-margin = #20
216 ragged-bottom = ##t
217 ragged-last-bottom = ##t
218 left-margin = #20
219 between-system-space = 1\cm
220 between-system-padding = #5
223 oddFooterMarkup = \markup \column {
224 \fill-line {
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)
230 empty-stencil))
231 \fromproperty #'header:longcopyright
233 \fill-line {
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)
238 empty-stencil))
239 \fill-line { \fromproperty #'header:tagline }
242 evenFooterMarkup = \markup \column {
243 \fill-line {
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)
248 empty-stencil))
249 \fill-line { \fromproperty #'header:notes }
251 \fill-line {
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)
256 empty-stencil))
257 \fill-line { \fromproperty #'header:tagline }
263 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
264 %%% Table of contents
266 #(define-markup-command (paper-prop layout props name default)
267 (symbol? markup?)
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)
272 default))))
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)
288 (if (null? table)
290 (let* ((elment (car table))
291 (p (car elment))
292 (text (cadr elment))
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)))))))
297 (ly:make-stencil
298 `(delay-stencil-evaluation
299 ,(delay (ly:stencil-expr
300 (begin
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))))
311 (if (not prev-value)
312 (set! page-header-table (cons (cons page-number text-disp)
313 page-header-table))
314 (set! page-header-table
315 (assoc-set! page-header-table
316 page-number
317 (list (car text-disp) (caddr prev-value)))))))
318 (reverse (if odd odd-label-header-table even-label-header-table)))
319 (if odd
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))))))))))
330 (cons 0 0)
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
339 (make-music 'Music
340 'page-marker #t
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
349 (make-music 'Music
350 'page-marker #t
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))
359 \paper {
360 evenHeaderMarkup = \markup \even-header
361 oddHeaderMarkup = \markup \odd-header