]> git.donarmstrong.com Git - lilypond.git/blob - ly/titling-init.ly
Merge branch 'stable/2.16' into staging
[lilypond.git] / ly / titling-init.ly
1 \version "2.16.0"
2
3 slashSeparator = \markup {
4   \center-align
5   \vcenter \combine
6   \beam #2.0 #0.5 #0.48
7   \raise #0.7 \beam #2.0 #0.5 #0.48
8 }
9
10 tagline = \markup {
11   \with-url
12
13   #"http://lilypond.org/"
14   \line {
15
16     %% 2014 = em dash.
17
18     #(format #f "Music engraving by LilyPond ~a~awww.lilypond.org"
19        (lilypond-version)
20        (ly:wide-char->utf-8 #x2014)
21        )
22   }
23 }
24
25 #(define (print-all-headers layout props arg)
26   (if (eq? (ly:output-def-lookup layout 'print-all-headers) #t)
27    (interpret-markup layout props arg)
28    empty-stencil))
29
30 bookTitleMarkup = \markup {
31   \override #'(baseline-skip . 3.5)
32   \column {
33     \fill-line { \fromproperty #'header:dedication }
34     \override #'(baseline-skip . 3.5)
35     \column {
36       \fill-line {
37         \huge \larger \larger \bold
38         \fromproperty #'header:title
39       }
40       \fill-line {
41         \large \bold
42         \fromproperty #'header:subtitle
43       }
44       \fill-line {
45         \smaller \bold
46         \fromproperty #'header:subsubtitle
47       }
48       \fill-line {
49         \fromproperty #'header:poet
50         { \large \bold \fromproperty #'header:instrument }
51         \fromproperty #'header:composer
52       }
53       \fill-line {
54         \fromproperty #'header:meter
55         \fromproperty #'header:arranger
56       }
57     }
58   }
59 }
60
61 scoreTitleMarkup = \markup { \column {
62   \on-the-fly #print-all-headers { \bookTitleMarkup \hspace #1 }
63   \fill-line {
64     \fromproperty #'header:piece
65     \fromproperty #'header:opus
66   }
67 }
68 }
69
70 %% Book first page and last page predicates
71 #(define (book-first-page? layout props)
72    "Return #t iff the current page number, got from @code{props}, is the
73 book first one."
74    (define (ancestor layout)
75      "Return the topmost layout ancestor"
76      (let ((parent (ly:output-def-parent layout)))
77        (if (not (ly:output-def? parent))
78            layout
79            (ancestor parent))))
80    (= (chain-assoc-get 'page:page-number props -1)
81       (ly:output-def-lookup (ancestor layout) 'first-page-number)))
82
83 #(define (book-last-page? layout props)
84    "Return #t iff the current page number, got from @code{props}, is the
85 book last one."
86    (and (chain-assoc-get 'page:is-bookpart-last-page props #f)
87         (chain-assoc-get 'page:is-last-bookpart props #f)))
88
89 #(define (first-page layout props arg)
90   (if (book-first-page? layout props)
91       (interpret-markup layout props arg)
92       empty-stencil))
93
94 #(define (last-page layout props arg)
95   (if (book-last-page? layout props)
96       (interpret-markup layout props arg)
97       empty-stencil))
98
99 #(define (not-first-page layout props arg)
100   (if (not (book-first-page? layout props))
101       (interpret-markup layout props arg)
102       empty-stencil))
103
104 #(define ((on-page nmbr) layout props arg)
105  (if (= (chain-assoc-get 'page:page-number props -1) nmbr)
106    (interpret-markup layout props arg)
107    empty-stencil))
108
109 %% Bookpart first page and last page predicates
110 #(define (part-first-page? layout props)
111   (= (chain-assoc-get 'page:page-number props -1)
112      (ly:output-def-lookup layout 'first-page-number)))
113
114 #(define (part-last-page? layout props)
115   (chain-assoc-get 'page:is-bookpart-last-page props #f))
116
117 #(define (part-first-page layout props arg)
118   (if (part-first-page? layout props)
119       (interpret-markup layout props arg)
120       empty-stencil))
121
122 #(define (not-part-first-page layout props arg)
123   (if (not (part-first-page? layout props))
124       (interpret-markup layout props arg)
125       empty-stencil))
126
127 #(define (part-last-page layout props arg)
128   (if (part-last-page? layout props)
129       (interpret-markup layout props arg)
130       empty-stencil))
131
132 %% unused
133 #(define (not-single-page layout props arg)
134   (if (not (and (= (chain-assoc-get 'page:page-number props -1)
135                    (ly:output-def-lookup layout 'first-page-number))
136                (chain-assoc-get 'page:last? props -1)))
137    (interpret-markup layout props arg)
138    empty-stencil))
139
140 #(define (create-page-number-stencil layout props arg)
141   (if (eq? (ly:output-def-lookup layout 'print-page-number) #t)
142    (interpret-markup layout props arg)
143    empty-stencil))
144
145 #(define (print-page-number-check-first layout props arg)
146   (if (or (not (part-first-page? layout props))
147           (eq? (ly:output-def-lookup layout 'print-first-page-number) #t))
148    (create-page-number-stencil layout props arg)
149    empty-stencil))
150
151 oddHeaderMarkup = \markup
152 \fill-line {
153   %% force the header to take some space, otherwise the
154   %% page layout becomes a complete mess.
155   " "
156   \on-the-fly #not-part-first-page \fromproperty #'header:instrument
157   \on-the-fly #print-page-number-check-first \fromproperty #'page:page-number-string
158 }
159
160 %% evenHeaderMarkup would inherit the value of
161 %% oddHeaderMarkup if it were not defined here
162 evenHeaderMarkup = \markup
163 \fill-line {
164   \on-the-fly #print-page-number-check-first \fromproperty #'page:page-number-string
165   \on-the-fly #not-part-first-page \fromproperty #'header:instrument
166   " "
167 }
168
169 oddFooterMarkup = \markup {
170   \column {
171     \fill-line {
172       %% Copyright header field only on first page.
173       \on-the-fly #part-first-page \fromproperty #'header:copyright
174     }
175     \fill-line {
176       %% Tagline header field only on last page.
177       \on-the-fly #part-last-page \fromproperty #'header:tagline
178     }
179   }
180 }
181
182 %% As long as evenFooterMarkup is unset, it inherits the value of
183 %% oddFooterMarkup, as if this were declared here:
184 % evenFooterMarkup = \oddFooterMarkup