/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1997--2009 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1997--2011 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
paper_ = s.paper_->clone ();
paper_->unprotect ();
}
-
+
input_location_ = make_input (*s.origin ());
- header_ = ly_make_anonymous_module (false);
+ header_ = ly_make_module (false);
if (ly_is_module (s.header_))
ly_module_copy (header_, s.header_);
-
SCM *t = &scores_;
for (SCM p = s.scores_; scm_is_pair (p); p = scm_cdr (p))
{
- Score *newscore = unsmob_score (scm_car (p))->clone ();
+ SCM entry = scm_car (p);
- *t = scm_cons (newscore->self_scm (), SCM_EOL);
+ if (Score *newscore = unsmob_score (entry))
+ *t = scm_cons (newscore->clone ()->unprotect (), SCM_EOL);
+ else if (Page_marker *marker = unsmob_page_marker (entry))
+ *t = scm_cons (marker->clone ()->unprotect (), SCM_EOL);
+ else
+ {
+ /* This entry is a markup list */
+ *t = scm_cons (entry, SCM_EOL);
+ }
t = SCM_CDRLOC (*t);
- newscore->unprotect ();
}
t = &bookparts_;
scm_gc_mark (book->scores_);
scm_gc_mark (book->bookparts_);
scm_gc_mark (book->input_location_);
-
+
return book->header_;
}
/* Copy the header block of the parent */
if (ly_is_module (parent->header_))
{
- SCM tmp_header = ly_make_anonymous_module (false);
+ SCM tmp_header = ly_make_module (false);
ly_module_copy (tmp_header, parent->header_);
if (ly_is_module (header_))
ly_module_copy (tmp_header, header_);
{
if (scm_is_pair (scores_))
{
- /* If scores have been added to this book, add them to a child
+ /* If scores have been added to this book, add them to a child
* book part */
Book *part = new Book;
part->set_parent (this);
if (Score *score = unsmob_score (scm_car (s)))
if (score->error_found_)
return true;
-
+
for (SCM part = bookparts_; scm_is_pair (part); part = scm_cdr (part))
if (Book *bookpart = unsmob_book (scm_car (part)))
if (bookpart->error_found ())
{
SCM outputs = score
->book_rendering (output_paper_book->paper_, layout);
-
+
while (scm_is_pair (outputs))
{
Music_output *output = unsmob_music_output (scm_car (outputs));
-
+
if (Performance *perf = dynamic_cast<Performance *> (output))
output_paper_book->add_performance (perf->self_scm ());
else if (Paper_score *pscore = dynamic_cast<Paper_score *> (output))
output_paper_book->add_score (score->get_header ());
output_paper_book->add_score (pscore->self_scm ());
}
-
+
outputs = scm_cdr (outputs);
}
}
output_paper_book->add_score (scm_car (s));
else
assert (0);
-
+
}
/* Concatenate all score or book part outputs into a Paper_book
{
paper_book->paper_->normalize ();
/* Process scores */
- /* Render in order of parsing. */
+ /* Render in order of parsing. */
for (SCM s = scm_reverse (scores_); scm_is_pair (s); s = scm_cdr (s))
{
process_score (s, paper_book, default_layout);