Output_def *get_layout (Lily_parser *parser);
Output_def *get_midi (Lily_parser *parser);
Output_def *get_paper (Lily_parser *parser);
-void init_papers (Lily_parser *parser, Output_def *default_paper);
void stack_paper (Lily_parser *parser, Output_def *paper);
void unstack_paper (Lily_parser *parser);
void set_paper (Lily_parser *parser, Output_def *paper);
return layout;
}
-/* Return a copy of the top of $papers stack */
+/* Return a copy of the top of $papers stack, or $defaultpaper if the
+ * stack is empty */
Output_def *
get_paper (Lily_parser *parser)
{
SCM papers = parser->lexer_->lookup_identifier ("$papers");
- Output_def *layout = (papers == SCM_UNDEFINED || scm_is_null (papers)) ?
+ Output_def *layout = ((papers == SCM_UNDEFINED) || scm_is_null (papers)) ?
0 : unsmob_output_def (scm_car (papers));
+ SCM default_paper = parser->lexer_->lookup_identifier ("$defaultpaper");
+ layout = layout ? layout : unsmob_output_def (default_paper);
+
layout = layout ? dynamic_cast<Output_def *> (layout->clone ()) : new Output_def;
layout->set_variable (ly_symbol2scm ("is-paper"), SCM_BOOL_T);
return layout;
}
-/* Initialize $papers stack with the default paper */
-void
-init_papers (Lily_parser *parser, Output_def *default_paper)
-{
- parser->lexer_->set_identifier (ly_symbol2scm ("$papers"),
- scm_list_1 (default_paper->self_scm ()));
-}
-
/* Stack a paper on top of $papers */
void
stack_paper (Lily_parser *parser, Output_def *paper)
Output_def * od = $1;
if ($1->c_variable ("is-paper") == SCM_BOOL_T)
- {
id = ly_symbol2scm ("$defaultpaper");
- init_papers (PARSER, od);
- }
else if ($1->c_variable ("is-midi") == SCM_BOOL_T)
id = ly_symbol2scm ("$defaultmidi");
else if ($1->c_variable ("is-layout") == SCM_BOOL_T)