+2005-08-02 Yoshinobu Ishizaki <isizaki@mte.biglobe.ne.jp>
+
+ * lily/lily-parser.cc (get_header): new function. Enable multiple
+ \header definitions.
+
+ * lily/parser.yy (lilypond_header_body): use get_header.
+
+ * ly/init.ly:
+ * scm/lily-library.scm (print-score-with-defaults): renamed
+ $globalheader to $defaultheader
+
+ * Documentation/user/global.itely (Creating titles): added short
+ explanation that multiple headers are useable.
+
+
2005-08-01 Han-Wen Nienhuys <hanwen@xs4all.nl>
* lily/module-scheme.cc (LY_DEFINE): new file.
}
@end lilypond
+As demonstrated before, you can use multiple @code{\header} blocks.
+When same fields appear in different blocks, the latter is used.
+Here is a short example.
+
+@example
+\header @{
+ composer = "Composer"
+@}
+\header @{
+ title = "Title"
+@}
+\score @{
+ \new Staff @{ c'4 @}
+ \header @{
+ title = "New title" %overwrite previous one
+ @}
+@}
+@end example
+
A more advanced option is to change the definitions of the following
variables in the @code{\paper} block. The init file
@file{ly/titling-init.ly} lists the default layout.
Output_def *get_layout (Lily_parser *parser);
Output_def *get_midi (Lily_parser *parser);
Output_def *get_paper (Lily_parser *parser);
+SCM get_header(Lily_parser *parser);
#endif /* LILY_PARSER_HH */
return layout;
}
+SCM
+get_header(Lily_parser *parser)
+{
+ SCM id = parser->lexer_->lookup_identifier("$defaultheader");
+ if (!ly_is_module (id))
+ id = ly_make_anonymous_module (be_safe_global);
+
+ return id;
+}
toplevel_expression:
lilypond_header {
- THIS->lexer_->set_identifier (ly_symbol2scm ("$globalheader"), $1);
+ THIS->lexer_->set_identifier (ly_symbol2scm ("$defaultheader"), $1);
}
| add_quote {
lilypond_header_body:
{
- $$ = ly_make_anonymous_module (be_safe_global);
+ $$ = get_header(THIS);
THIS->lexer_->add_scope ($$);
}
| lilypond_header_body assignment {
$$->set_spot (@$);
$$->paper_ = dynamic_cast<Output_def*> (unsmob_output_def (THIS->lexer_->lookup_identifier ("$defaultpaper"))->clone ());
$$->paper_->unprotect ();
- $$->header_ = THIS->lexer_->lookup_identifier ("$globalheader");
+ $$->header_ = THIS->lexer_->lookup_identifier ("$defaultheader");
}
| book_body paper_block {
$$->paper_ = $2;
#(ly:set-option 'old-relative #f)
#(define toplevel-scores '())
#(define output-count 0)
-#(define $globalheader #f)
+#(define $defaultheader #f)
#(define version-seen? #f)
\maininput
#(if (pair? toplevel-scores)
(toplevel-book-handler
parser
- (apply ly:make-book $defaultpaper $globalheader toplevel-scores)))
+ (apply ly:make-book $defaultpaper $defaultheader toplevel-scores)))
;; parser stuff.
(define-public (print-music-as-book parser music)
- (let* ((head (ly:parser-lookup parser '$globalheader))
+ (let* ((head (ly:parser-lookup parser '$defaultheader))
(book (ly:make-book (ly:parser-lookup parser $defaultpaper)
head score)))
(ly:parser-print-book parser book)))
(define-public (print-score-as-book parser score)
- (let* ((head (ly:parser-lookup parser '$globalheader))
+ (let* ((head (ly:parser-lookup parser '$defaultheader))
(book (ly:make-book (ly:parser-lookup parser $defaultpaper)
head score)))
(ly:parser-print-book parser book)))
(define-public (print-score parser score)
- (let* ((head (ly:parser-lookup parser '$globalheader))
+ (let* ((head (ly:parser-lookup parser '$defaultheader))
(book (ly:make-book (ly:parser-lookup parser $defaultpaper)
head score)))
(ly:parser-print-score parser book)))
(let*
((paper (ly:parser-lookup parser '$defaultpaper))
(layout (ly:parser-lookup parser '$defaultlayout))
- (header (ly:parser-lookup parser '$globalheader))
+ (header (ly:parser-lookup parser '$defaultheader))
(count (ly:parser-lookup parser 'output-count))
(base (ly:parser-output-name parser)))