]> git.donarmstrong.com Git - lilypond.git/commitdiff
Issue 4912: Fix output definition use in \book and \bookpart
authorDavid Kastrup <dak@gnu.org>
Sat, 2 Jul 2016 08:08:42 +0000 (10:08 +0200)
committerDavid Kastrup <dak@gnu.org>
Thu, 7 Jul 2016 16:02:09 +0000 (18:02 +0200)
The only explicit output definition blocks allowed in \book and
\bookpart blocks were paper blocks.  Output definitions supplied with
Scheme expressions were erroneously interpreted like global output
definitions, accepting all output definition types and overriding the
global defaults with them.

Now the only output definitions accepted as Scheme expressions are
paper blocks.  As opposed to previously, they actually set the paper
block of the respective book or bookpart.

lily/parser.yy

index f184c5acb2685087d8add9fb12508d9c2b35b880..52fe450b7d8c3848f87796d30469ac8bcb0b51bc 100644 (file)
@@ -976,16 +976,12 @@ book_body:
                        SCM proc = parser->lexer_->lookup_identifier ("book-score-handler");
                        scm_call_2 (proc, $1, $2);
                } else if (Output_def *od = unsmob<Output_def> ($2)) {
-                       SCM id = SCM_EOL;
-
-                       if (to_boolean (od->c_variable ("is-paper")))
-                               id = ly_symbol2scm ("$defaultpaper");
-                       else if (to_boolean (od->c_variable ("is-midi")))
-                               id = ly_symbol2scm ("$defaultmidi");
-                       else if (to_boolean (od->c_variable ("is-layout")))
-                               id = ly_symbol2scm ("$defaultlayout");
-
-                       parser->lexer_->set_identifier (id, $2);
+                       if (to_boolean (od->lookup_variable (ly_symbol2scm ("is-paper")))) {
+                               unsmob<Book> ($1)->paper_ = od;
+                               set_paper (parser, od);
+                       } else {
+                               parser->parser_error (@2, _ ("need \\paper for paper block"));
+                       }
                } else if (ly_is_module ($2))
                {
                        ly_module_copy (unsmob<Book> ($1)->header_, $2);
@@ -1060,16 +1056,11 @@ bookpart_body:
                        SCM proc = parser->lexer_->lookup_identifier ("bookpart-score-handler");
                        scm_call_2 (proc, $1, $2);
                } else if (Output_def *od = unsmob<Output_def> ($2)) {
-                       SCM id = SCM_EOL;
-
-                       if (to_boolean (od->c_variable ("is-paper")))
-                               id = ly_symbol2scm ("$defaultpaper");
-                       else if (to_boolean (od->c_variable ("is-midi")))
-                               id = ly_symbol2scm ("$defaultmidi");
-                       else if (to_boolean (od->c_variable ("is-layout")))
-                               id = ly_symbol2scm ("$defaultlayout");
-
-                       parser->lexer_->set_identifier (id, $2);
+                       if (to_boolean (od->lookup_variable (ly_symbol2scm ("is-paper")))) {
+                               unsmob<Book> ($1)->paper_ = od;
+                       } else {
+                               parser->parser_error (@2, _ ("need \\paper for paper block"));
+                       }
                } else if (ly_is_module ($2)) {
                        Book *book = unsmob<Book> ($1);
                        if (!ly_is_module (book->header_))