X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;ds=sidebyside;f=lily%2Fbook.cc;h=d15233f70c5ac04eab8c0f1f84b90f15b1003b7c;hb=5c7d64ab0b4877bc8a659194034b7b74522f3d6c;hp=6a873251f2ba482abf914c870a150dcaa268fa5d;hpb=6d0fb552fab4025ad537c5ea8542ca2dc4141012;p=lilypond.git diff --git a/lily/book.cc b/lily/book.cc index 6a873251f2..d15233f70c 100644 --- a/lily/book.cc +++ b/lily/book.cc @@ -3,14 +3,15 @@ source file of the GNU LilyPond music typesetter - (c) 1997--2004 Han-Wen Nienhuys + (c) 1997--2005 Han-Wen Nienhuys */ -#include + +#include #include "book.hh" +#include "lilypond-key.hh" #include "global-context.hh" -#include "ly-module.hh" #include "main.hh" #include "music-iterator.hh" #include "music-output.hh" @@ -26,7 +27,7 @@ Book::Book () : Input () { - bookpaper_ = 0; + paper_ = 0; header_ = SCM_EOL; assert (!scores_.size ()); smobify_self (); @@ -47,8 +48,12 @@ Book::mark_smob (SCM s) for (int i = 0; i < score_count; i++) scm_gc_mark (book->scores_[i]->self_scm ()); - if (book->bookpaper_) - scm_gc_mark (book->bookpaper_->self_scm ()); +#if 0 + if (book->key_) + scm_gc_mark (book->key_->self_scm()); +#endif + if (book->paper_) + scm_gc_mark (book->paper_->self_scm ()); return book->header_; } @@ -70,62 +75,54 @@ Book::process (String outname, Output_def *default_def) if (error) return 0; - + Paper_book *paper_book = new Paper_book (); - Real scale = scm_to_double (bookpaper_->c_variable ("outputscale")); - - Output_def * scaled_bookdef = scale_output_def (bookpaper_, scale); + Real scale = scm_to_double (paper_->c_variable ("outputscale")); + Output_def * scaled_bookdef = scale_output_def (paper_, scale); + - paper_book->bookpaper_ = scaled_bookdef; + Object_key * key = new Lilypond_general_key (0, user_key_, 0); + SCM scm_key = key->self_scm(); + scm_gc_unprotect_object (scm_key); + + paper_book->paper_ = scaled_bookdef; scm_gc_unprotect_object (scaled_bookdef->self_scm()); paper_book->header_ = header_; - int score_count = scores_.size (); for (int i = 0; i < score_count; i++) { SCM systems = scores_[i]->book_rendering (outname, - paper_book->bookpaper_, - default_def); + paper_book->paper_, + default_def, + key + ); - /* If the score is empty, generate no output. Should we - do titling? */ + /* + If the score is empty, generate no output. Should we + do titling? + */ if (SCM_NFALSEP(scm_vector_p (systems))) { Score_systems sc; sc.systems_ = systems; sc.header_ = scores_[i]->header_; + sc.texts_ = scores_[i]->texts_; paper_book->score_systems_.push (sc); } } + + scm_remember_upto_here_1 (scm_key); return paper_book; } -LY_DEFINE(ly_make_book, "ly:make-book", - 2, 0, 1, (SCM bookpaper, SCM header, SCM scores), - "Make a \\book of @var{bookpaper} and @var{header} (which may be #f as well) " - "containing @code{\\scores}.") -{ - Output_def * odef = unsmob_output_def (bookpaper); - SCM_ASSERT_TYPE (odef, bookpaper, - SCM_ARG1, __FUNCTION__, "Output_def"); - Book *book = new Book; - book->bookpaper_ = odef; - - if (ly_c_module_p (header)) - book->header_ = header; - - for (SCM s = scores; scm_is_pair (s); s = ly_cdr (s)) - { - Score *score = unsmob_score (ly_car (s)); - if (score) - book->scores_.push (score); - } - SCM x = book->self_scm (); - scm_gc_unprotect_object (x); - return x; + +void +Book::add_score (Score *s) +{ + scores_.push (s); + scm_gc_unprotect_object (s->self_scm ()); } -