2004-03-10 Jan Nieuwenhuizen <janneke@gnu.org>
+ * scm/page-layout.scm: New file.
+
* scripts/lilypond-book.py (do_file): Bugfix: texinfo paper
settings.
(Lilypond_snippet.is_outdated): Also check for PNG file.
%{
\markup in titles is WIP.
- only available when compiled with PAGE_LAYOUT is #define'd
- see include/paper-book.hh
+ only available in direct PostScript output:
+
+ export GS_LIB=$(pwd)/mf/out:/usr/share/texmf/fonts/type1/bluesky/cm
+ lilypond-bin -fps input/title/title-markup.ly
%}
instrument = "Instrument"
piece = "piece"
-%{
- makeConditionalTitle = \markup {
- \column <
- #(if (defined? 'title)
- (markup* #:fill-line (#:huge #:bigger #:bigger #:bold title))
- (markup* ""))
- #(if (defined? 'subtitle)
- (markup* #:fill-line ( #:large #:bold subtitle))
- (markup* ""))
- #(if (defined? 'subsubtitle)
- (markup* #:fill-line (subsubtitle))
- (markup* ""))
- >
- }
-%}
- bookTitle = \markup {
+ %% this overrides automatic book title
+ xxbookTitle = \markup {
\column <
%\fill-line #linewidth < \huge \bigger \bold \title >
\override #'(baseline-skip . 4) \column <
}
\header {
- scoreTitle = \markup { "Tweetje" }
+ %% override automatic score title
+ xxscoreTitle = \markup { "Tweetje" }
+ opus = "opus 1"
+ piece = "Second"
}
\score {
/****************************************************************/
-
-Paper_book *paper_book; // huh? global var? --hwn
+/* Current global paper book. Gives default_rendering access from
+ input-file-results. */
+Paper_book *paper_book;
Paper_book::Paper_book ()
{
smobify_self ();
}
+Paper_book::~Paper_book ()
+{
+}
+
void
Paper_book::output (String outname)
{
Stencil*
Paper_book::get_title (int i)
{
- SCM make_title = scm_primitive_eval (ly_symbol2scm ("make-title"));
+ SCM user_title = scm_primitive_eval (ly_symbol2scm ("user-title"));
+ SCM book_title = scm_primitive_eval (ly_symbol2scm ("book-title"));
+ SCM score_title = scm_primitive_eval (ly_symbol2scm ("score-title"));
SCM field = (i == 0 ? ly_symbol2scm ("bookTitle")
: ly_symbol2scm ("scoreTitle"));
- SCM s = ly_modules_lookup (get_scopes (i), field);
+ Stencil *title = 0;
+ SCM scopes = get_scopes (i);
+ SCM s = ly_modules_lookup (scopes, field);
if (s != SCM_UNDEFINED && scm_variable_bound_p (s) == SCM_BOOL_T)
- {
- Stencil *title = unsmob_stencil (gh_call2 (make_title,
- papers_[0]->self_scm (),
- scm_variable_ref (s)));
-
- title->align_to (Y_AXIS, UP);
- return title;
- }
+ title = unsmob_stencil (scm_call_2 (user_title,
+ papers_[0]->self_scm (),
+ scm_variable_ref (s)));
+ else
+ title = unsmob_stencil (scm_call_2 (i == 0 ? book_title : score_title,
+ papers_[0]->self_scm (),
+ scopes));
+ if (title)
+ title->align_to (Y_AXIS, UP);
- return 0;
+ return title;
}
-/*
- WIP
-
- FIXME: titling is broken.
-
- TODO:
- * ->SCM?
- * decent page breaking algorithm
- * header / footer (generate per Page, with page#)
- * override: # pages, or pageBreakLines= #'(3 3 4), ?
- * what about between-system-breaking, can we junk that?
-
-*/
+/* TODO:
+ - decent page breaking algorithm; fill-up page
+ - header / footer (generate per Page, with page#, tagline/copyright)
+ - override: # pages, or pageBreakLines= #'(3 3 4), ? */
Link_array<Page>*
Paper_book::get_pages ()
{
return 1;
}
-Paper_book::~Paper_book ()
-{
-}
-
;;;;
;;;; source file of the GNU LilyPond music typesetter
;;;;
-;;;; (c) 2003 Jan Nieuwenhuizen <janneke@gnu.org>
+;;;; (c) 2003-2004 Jan Nieuwenhuizen <janneke@gnu.org>
;;;; NOTE: this is experimental code
(caddr d)
(scm-error "Could not find dumper for format ~s" format))))
-
-(define-public (make-title paper markup)
- (if (markup? markup)
- (let ((BASELINE-SKIP 2)
- (props (list (append `((linewidth . ,(ly:paper-get-number
- paper 'linewidth))
- (font-family . roman))
- (ly:paper-lookup paper 'font-defaults)))))
- (stack-lines DOWN 0 BASELINE-SKIP
- (list (interpret-markup paper props markup))))))
-
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; other files.
(map ly:load
- ; load-from-path
+ ;; load-from-path
'("define-music-types.scm"
"output-lib.scm"
"c++.scm"
"define-grobs.scm"
"define-grob-interfaces.scm"
+ "page-layout.scm"
"paper.scm"
))
;;;; source file of the GNU LilyPond music typesetter
;;;;
;;;; (c) 1998--2004 Jan Nieuwenhuizen <janneke@gnu.org>
-;;;; Han-Wen Nienhuys <hanwen@cs.uu.nl>
+;;;; Han-Wen Nienhuys <hanwen@cs.uu.nl>
;;;; Note: currently misused as testbed for titles with markup, see
;;;; input/test/title-markup.ly
;;;;
;;;; TODO:
-;;;; * move makeTitle (input/test/title-markup.ly) out of user space, but
-;;;; * allow customisation of makeTitle markup.
-;;;; * makePieceTitle markup
-;;;; * page layout?
;;;; * special characters, encoding.
;;;; + implement encoding switch (switches? input/output??),
;;;; + move encoding definitions to ENCODING.ps files, or
;; FIXME: duplicates output-paper's scope-entry->string, mostly
(define (scope-entry->string key var)
- (let ((val (variable-ref var)))
- (if (memq key fields)
- (header-to-file basename key val))
- (cond
- ((string? val) (ps-string-def prefix key val))
- ((number? val) (ps-number-def prefix key val))
- (else ""))))
+ (if (variable-bound? var)
+ (let ((val (variable-ref var)))
+ (if (memq key fields)
+ (header-to-file basename key val))
+ (cond
+ ((string? val) (ps-string-def prefix key val))
+ ((number? val) (ps-number-def prefix key val))
+ (else "")))
+ ""))
(define (output-scope scope)
(apply string-append (module-map scope-entry->string scope)))
(string-append
"\n" (ly:number->string height)
" start-system\n"
- ;;(draw-line 2 0 (* OUTPUT-SCALE height) 100 0)
- (draw-line 2 0 0 50 (- 0 (* OUTPUT-SCALE height)))
+ ;; Show height of system
+ (draw-line 1 0 0 (- 0 10) (- 0 (* OUTPUT-SCALE height)))
"{\n"
"set-ps-scale-to-lily-scale\n"))
--- /dev/null
+;;;; page-layout.scm -- page layout functions
+;;;;
+;;;; source file of the GNU LilyPond music typesetter
+;;;;
+;;;; (c) 2004 Jan Nieuwenhuizen <janneke@gnu.org>
+
+
+(define (ly:modules-lookup modules sym)
+ (let ((v (module-variable (car modules) sym)))
+ (if (and v (variable-bound? v) (variable-ref v))
+ (variable-ref v)
+ (if (module? (cdr modules)) (ly:modules-lookup (cdr modules) sym)))))
+
+
+(define-public (book-title paper scopes)
+ "Generate book title from header strings."
+
+ (define (get sym)
+ (let ((x (ly:modules-lookup scopes sym)))
+ (if (and x (not (unspecified? x))) x "")))
+
+ (let ((props (list (append `((linewidth . ,(ly:paper-get-number
+ paper 'linewidth))
+ (font-family . roman))
+ (ly:paper-lookup paper 'font-defaults)))))
+ (interpret-markup
+ paper props
+ (markup
+ #:column
+ (#:override '(baseline-skip . 4)
+ #:column
+ (#:fill-line
+ (#:latin-i (get 'dedication))
+ #:fill-line
+ (#:huge #:bigger #:bigger #:bigger #:bigger #:bold (get 'title))
+ #:override '(baseline-skip . 3)
+ #:column
+ (#:fill-line
+ (#:large #:bigger #:bigger #:bold (get 'subtitle))
+ #:fill-line (#:bigger #:bigger #:bold (get 'subsubtitle)))
+ #:override '(baseline-skip . 5)
+ #:column ("")
+ #:override '(baseline-skip . 2.5)
+ #:column
+ (#:fill-line
+ (#:bigger (get 'poet) #:large #:bigger #:caps (get 'composer))
+ #:fill-line (#:bigger (get 'texttranslator) #:bigger (get 'opus))
+ #:fill-line
+ (#:bigger (get 'meter) #:bigger (get 'arranger))
+ ""
+ #:fill-line (#:large #:bigger (get 'instrument))
+ " "
+ #:fill-line (#:large #:bigger #:caps (get 'piece) ""))))))))
+
+(define-public (user-title paper markup)
+ "Generate book title from header markup."
+ (if (markup? markup)
+ (let ((BASELINE-SKIP 2)
+ (props (list (append `((linewidth . ,(ly:paper-get-number
+ paper 'linewidth))
+ (font-family . roman))
+ (ly:paper-lookup paper 'font-defaults)))))
+ (stack-lines DOWN 0 BASELINE-SKIP
+ (list (interpret-markup paper props markup))))))
+
+(define-public (score-title paper scopes)
+ "Generate score title from header strings."
+
+ (define (get sym)
+ (let ((x (ly:modules-lookup scopes sym)))
+ (if (and x (not (unspecified? x))) x "")))
+
+ (let ((props (list (append `((linewidth . ,(ly:paper-get-number
+ paper 'linewidth))
+ (font-family . roman))
+ (ly:paper-lookup paper 'font-defaults)))))
+
+ (interpret-markup
+ paper props
+ (markup
+ #:column
+ (#:override '(baseline-skip . 4)
+ #:column
+ (#:fill-line
+ ("" (get 'opus))
+ #:fill-line (#:large #:bigger #:caps (get 'piece) "")))))))
(module-define! (current-module) '$defaultpaper new-paper)
)
(ly:warning (string-append "Unknown papersize: " name))
- )))
\ No newline at end of file
+ )))