]> git.donarmstrong.com Git - lilypond.git/commitdiff
Issue 4908/2: Admit \header-like expressions at top levels
authorDavid Kastrup <dak@gnu.org>
Tue, 28 Jun 2016 08:19:00 +0000 (10:19 +0200)
committerDavid Kastrup <dak@gnu.org>
Thu, 7 Jul 2016 15:57:28 +0000 (17:57 +0200)
\header-like expressions are allowed at \book, \bookpart,
and top level.

lily/parser.yy

index 34d834e2b9095d4a46f0e268556b1a3c78d6fdb3..fa729ad9efeedfbd48317a69dd8530dc7c707e5b 100644 (file)
@@ -473,6 +473,12 @@ toplevel_expression:
                                id = ly_symbol2scm ("$defaultlayout");
 
                        parser->lexer_->set_identifier (id, $1);
+               } else if (ly_is_module ($1))
+               {
+                       SCM module = get_header (parser);
+                       ly_module_copy (module, $1);
+                       parser->lexer_->set_identifier
+                               (ly_symbol2scm ("$defaultheader"), module);
                } else if (!scm_is_eq ($1, SCM_UNSPECIFIED))
                        parser->parser_error (@1, _("bad expression type"));
        }
@@ -973,6 +979,9 @@ book_body:
                                id = ly_symbol2scm ("$defaultlayout");
 
                        parser->lexer_->set_identifier (id, $2);
+               } else if (ly_is_module ($2))
+               {
+                       ly_module_copy (unsmob<Book> ($1)->header_, $2);
                } else if (!scm_is_eq ($2, SCM_UNSPECIFIED))
                        parser->parser_error (@2, _("bad expression type"));
        }
@@ -1054,6 +1063,11 @@ bookpart_body:
                                id = ly_symbol2scm ("$defaultlayout");
 
                        parser->lexer_->set_identifier (id, $2);
+               } else if (ly_is_module ($2)) {
+                       Book *book = unsmob<Book> ($1);
+                       if (!ly_is_module (book->header_))
+                               book->header_ = ly_make_module (false);
+                       ly_module_copy (book->header_, $2);
                } else if (!scm_is_eq ($2, SCM_UNSPECIFIED))
                        parser->parser_error (@2, _("bad expression type"));
        }