Fix post_events list order for multi-measure rests.
[lilypond/mpolesky.git] / scm / titling.scm
blob02faa385df5b0b1b9b3a4d96a3a126430366f19d
1 ;;;; This file is part of LilyPond, the GNU music typesetter.
2 ;;;;
3 ;;;; Copyright (C) 2004--2010 Jan Nieuwenhuizen <janneke@gnu.org>
4 ;;;;          Han-Wen Nienhuys <hanwen@xs4all.nl>
5 ;;;;
6 ;;;; LilyPond is free software: you can redistribute it and/or modify
7 ;;;; it under the terms of the GNU General Public License as published by
8 ;;;; the Free Software Foundation, either version 3 of the License, or
9 ;;;; (at your option) any later version.
10 ;;;;
11 ;;;; LilyPond is distributed in the hope that it will be useful,
12 ;;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
13 ;;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14 ;;;; GNU General Public License for more details.
15 ;;;;
16 ;;;; You should have received a copy of the GNU General Public License
17 ;;;; along with LilyPond.  If not, see <http://www.gnu.org/licenses/>.
19 (define-public (layout-extract-page-properties layout)
20   (list (append `((line-width . ,(ly:paper-get-number
21                                  layout 'line-width)))
22                 (ly:output-def-lookup layout 'text-font-defaults))))
24 ;;;;;;;;;;;;;;;;;;
26 (define-public ((marked-up-headfoot what-odd what-even)
27                 layout scopes page-number is-last-bookpart is-bookpart-last-page)
29   "Read variables WHAT-ODD, WHAT-EVEN from LAYOUT, and interpret them
30 as markup. The PROPS argument will include variables set in SCOPES and
31 page:is-bookpart-last-page, page:is-last-bookpart, page:page-number-string
32 and page:page-number" 
34   (define (get sym)
35     (ly:output-def-lookup layout sym))
37   (define (interpret-in-page-env potential-markup)
38     (if (markup? potential-markup)
39         (let* ((alists (map ly:module->alist scopes))
40                (prefixed-alists
41                 (map (lambda (alist)
42                        (map (lambda (entry)
43                               (cons
44                                (string->symbol
45                                 (string-append
46                                  "header:"
47                                  (symbol->string (car entry))))
48                                (cdr entry)))
49                             alist))
50                      alists))
51                (pgnum-alist
52                 (list
53                  (cons 'header:tagline
54                        (ly:modules-lookup scopes 'tagline
55                                           (ly:output-def-lookup layout 'tagline)))
56                  (cons 'page:is-last-bookpart is-last-bookpart)
57                  (cons 'page:is-bookpart-last-page is-bookpart-last-page)
58                  (cons 'page:page-number-string
59                        (number->string page-number))
60                  (cons 'page:page-number page-number)))
61                (props (append
62                        (list pgnum-alist)
63                        prefixed-alists
64                        (layout-extract-page-properties layout))))
65           (interpret-markup layout props potential-markup))
67         empty-stencil))
69   (interpret-in-page-env
70    (if (and (even? page-number)
71             (markup? (get what-even)))
72        (get what-even)
73        (get what-odd))))
75 (define-public ((marked-up-title what) layout scopes)
76   "Read variables WHAT from SCOPES, and interpret it as markup. The
77 PROPS argument will include variables set in SCOPES (prefixed with
78 `header:'
80   
81   (define (get sym)
82     (let ((x (ly:modules-lookup scopes sym)))
83       (if (markup? x) x #f)))
85   (let* ((alists (map ly:module->alist scopes))
86          (prefixed-alist
87           (map (lambda (alist)
88                  (map (lambda (entry)
89                         (cons
90                          (string->symbol
91                           (string-append
92                            "header:"
93                            (symbol->string (car entry))))
94                          (cdr entry)))
95                       alist))
96                alists))
97          (props (append prefixed-alist
98                         (layout-extract-page-properties layout)))
100          (markup (ly:output-def-lookup layout what)))
102     (if (markup? markup)
103         (interpret-markup layout props markup)
104         (ly:make-stencil '() '(1 . -1) '(1 . -1)))))