X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fbook.cc;h=f4dd09362c37e7a2bcdbcce84897817d39fd926e;hb=929f9e4f8cc4e789ff301a49acb444abaaee015d;hp=3a84865462e4795f618fa995a477dca33d92e558;hpb=0387f04497978e37b335a8b99eec905499d6ad0f;p=lilypond.git diff --git a/lily/book.cc b/lily/book.cc index 3a84865462..f4dd09362c 100644 --- a/lily/book.cc +++ b/lily/book.cc @@ -1,9 +1,20 @@ /* - book.cc -- implement Book + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1997--2010 Han-Wen Nienhuys - (c) 1997--2008 Han-Wen Nienhuys + LilyPond is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + LilyPond is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with LilyPond. If not, see . */ #include "book.hh" @@ -127,8 +138,8 @@ Book::set_parent (Book *parent) paper_->unprotect (); } paper_->parent_ = parent->paper_; - /* If this part is the first child of parent, copy its header */ - if (ly_is_module (parent->header_) && (scm_is_null (parent->bookparts_))) + /* Copy the header block of the parent */ + if (ly_is_module (parent->header_)) { SCM tmp_header = ly_make_anonymous_module (false); ly_module_copy (tmp_header, parent->header_); @@ -200,9 +211,14 @@ Book::process_bookparts (Paper_book *output_paper_book, Output_def *paper, Outpu { Paper_book *paper_book_part = book->process (paper, layout, output_paper_book); if (paper_book_part) - output_paper_book->add_bookpart (paper_book_part->self_scm ()); + { + output_paper_book->add_bookpart (paper_book_part->self_scm ()); + paper_book_part->unprotect (); + } } } + /* In a Paper_book, bookparts are stored in straight order */ + output_paper_book->bookparts_ = scm_reverse_x (output_paper_book->bookparts_, SCM_EOL); } void @@ -263,6 +279,7 @@ Book::process (Output_def *default_paper, paper_book->paper_->parent_ = parent_part->paper_; } paper_book->header_ = header_; + scaled_bookdef->unprotect (); if (scm_is_pair (bookparts_)) { @@ -271,8 +288,9 @@ Book::process (Output_def *default_paper, } else { + 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);