1 ;;;; page-layout.scm -- page layout functions
3 ;;;; source file of the GNU LilyPond music typesetter
5 ;;;; (c) 2004 Jan Nieuwenhuizen <janneke@gnu.org>
8 (define (ly:modules-lookup modules sym)
9 (let ((v (module-variable (car modules) sym)))
10 (if (and v (variable-bound? v) (variable-ref v))
12 (if (module? (cdr modules)) (ly:modules-lookup (cdr modules) sym)))))
14 (define (page-properties paper)
15 (list (append `((linewidth . ,(ly:paper-get-number
17 (ly:paper-lookup paper 'text-font-defaults))))
19 (define-public (book-title paper scopes)
20 "Generate book title from header strings."
23 (let ((x (ly:modules-lookup scopes sym)))
24 (if (and x (not (unspecified? x))) x "")))
26 (let ((props (page-properties paper)))
32 (#:override '(baseline-skip . 4)
35 (#:normalsize (get 'dedication))
37 (#:huge #:bigger #:bigger #:bigger #:bigger #:bold (get 'title))
38 #:override '(baseline-skip . 3)
41 (#:large #:bigger #:bigger #:bold (get 'subtitle))
42 #:fill-line (#:bigger #:bigger #:bold (get 'subsubtitle)))
43 #:override '(baseline-skip . 5)
45 #:override '(baseline-skip . 2.5)
48 (#:bigger (get 'poet) #:large #:bigger #:caps (get 'composer))
49 #:fill-line (#:bigger (get 'texttranslator) #:bigger (get 'opus))
51 (#:bigger (get 'meter) #:bigger (get 'arranger))
53 #:fill-line (#:large #:bigger (get 'instrument))
55 #:fill-line (#:large #:bigger #:caps (get 'piece) ""))))))))
57 (define-public (user-title paper markup)
58 "Generate book title from header markup."
60 (let ((props (page-properties paper))
61 (baseline-skip (chain-assoc-get 'baseline-skip props 2)) )
62 (stack-lines DOWN 0 BASELINE-SKIP
63 (list (interpret-markup paper props markup))))))
65 (define-public (score-title paper scopes)
66 "Generate score title from header strings."
69 (let ((x (ly:modules-lookup scopes sym)))
70 (if (and x (not (unspecified? x))) x "")))
72 (let ((props (page-properties paper)))
78 (#:override '(baseline-skip . 4)
82 #:fill-line (#:large #:bigger #:caps (get 'piece) "")))))))
84 (define-public (make-header paper page-number)
85 (let ((props (page-properties paper) ))
86 (interpret-markup paper props
88 ;; FIXME: font not found
89 ;; ("" #:bold (number->string page-number))))))
90 ("" (number->string page-number))))))
92 (define-public (make-footer paper page-number)
93 (let ((props (page-properties paper)))
95 (interpret-markup paper props
96 (markup #:fill-line ("" (number->string page-number))))))
100 (string-append "Engraved by LilyPond (version " (lilypond-version) ")"))
102 (define-public (make-tagline paper scopes)
103 (let* ((props (page-properties paper))
104 (tagline-var (ly:modules-lookup scopes 'tagline))
105 (tagline (if (markup? tagline-var) tagline-var TAGLINE)))
107 (cond ((string? tagline)
108 (if (not (equal? tagline ""))
109 (interpret-markup paper props
110 (markup #:fill-line (tagline "")))))
111 ((markup? tagline) (interpret-markup paper props tagline)))))
113 (define-public (make-copyright paper scopes)
114 (let ((props (page-properties paper))
115 (copyright (ly:modules-lookup scopes 'copyright)))
117 (cond ((string? copyright)
118 (if (not (equal? copyright ""))
119 (interpret-markup paper props
120 (markup #:fill-line (copyright "")))))
121 ((markup? copyright) (interpret-markup paper props copyright)))))