]> git.donarmstrong.com Git - lilypond.git/commitdiff
Yoshinobu Ishizaki's multiple header definition patch. Thanks!
authorGraham Percival <graham@percival-music.ca>
Tue, 2 Aug 2005 07:46:58 +0000 (07:46 +0000)
committerGraham Percival <graham@percival-music.ca>
Tue, 2 Aug 2005 07:46:58 +0000 (07:46 +0000)
ChangeLog
Documentation/user/global.itely
lily/include/lily-parser.hh
lily/lily-parser.cc
lily/parser.yy
ly/init.ly
scm/lily-library.scm

index 52cd078d3fba4b9f9feceff99ccba5b2b5d0e569..3749220e1a11799e19433c923bc82bb05bc9324f 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,18 @@
+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. 
index 89adefbef3b4717f7fd2490f6e6503bfc0645511..f76191eaddc239217637a36d33c5c678805b5e60 100644 (file)
@@ -943,6 +943,25 @@ may use any @ref{Text markup} commands in the header.
 }
 @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.
index 9a2fd02f6386e88261ba858e412db7c379e6533b..c971d94c327fab80ac2555bf1cbedbd4e8b636d2 100644 (file)
@@ -72,5 +72,6 @@ SCM ly_parser_scorify (SCM, SCM);
 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 */
index 08fae1ad648bc4d5b40eb202df828dc19cb39a00..0119f99398029bcbc45b858bb6ed650b2fe86f8b 100644 (file)
@@ -215,3 +215,12 @@ get_paper (Lily_parser *parser)
   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;
+}
index 511351e137a1647eaea91f8b04cf2a4ed1b866f0..eb0dc92973cdfca60a387539bfdca3a196a8010c 100644 (file)
@@ -568,7 +568,7 @@ object_id_setting:
 
 toplevel_expression:
        lilypond_header {
-               THIS->lexer_->set_identifier (ly_symbol2scm ("$globalheader"), $1);
+               THIS->lexer_->set_identifier (ly_symbol2scm ("$defaultheader"), $1);
        }
        | add_quote {
        
@@ -625,7 +625,7 @@ embedded_scm:
 
 lilypond_header_body:
        {
-               $$ = ly_make_anonymous_module (be_safe_global);
+               $$ = get_header(THIS);
                THIS->lexer_->add_scope ($$);
        }
        | lilypond_header_body assignment  {
@@ -754,7 +754,7 @@ book_body:
                $$->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;
index c17531f6b6d51ec32c668b6a89d0ba728a845c4e..e9b5a76398c98ec12093f587b0396d5d4f99e84b 100644 (file)
@@ -15,7 +15,7 @@
 #(ly:set-option 'old-relative #f)
 #(define toplevel-scores '())
 #(define output-count 0) 
-#(define $globalheader #f)
+#(define $defaultheader #f)
 #(define version-seen? #f)
 
 \maininput
@@ -37,4 +37,4 @@
 #(if (pair? toplevel-scores)
   (toplevel-book-handler
    parser
-   (apply ly:make-book $defaultpaper $globalheader toplevel-scores)))
+   (apply ly:make-book $defaultpaper $defaultheader toplevel-scores)))
index fefab95947c158002034413db6770dfd0e1cf7a0..ceb2e7d69a42729e8d2e3e2d7c2982e0a4b33a69 100644 (file)
 
 ;; 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)))