From ede259e1db3d769f19abb57f89c1cd1fe25b541f Mon Sep 17 00:00:00 2001 From: Han-Wen Nienhuys Date: Wed, 15 Feb 2006 02:06:30 +0000 Subject: [PATCH] (get_system_specs): separate generation of titles and systems. --- ChangeLog | 3 ++ lily/include/paper-book.hh | 4 ++ lily/paper-book.cc | 82 ++++++++++++++++++++------------------ lily/paper-score.cc | 1 + 4 files changed, 52 insertions(+), 38 deletions(-) diff --git a/ChangeLog b/ChangeLog index f8d8788624..43a8741d1d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,8 @@ 2006-02-15 Han-Wen Nienhuys + * lily/paper-book.cc (get_system_specs): separate generation of + titles and systems. + * flower/include/std-vector.hh: don't include config.hh 2006-02-15 Jan Nieuwenhuizen diff --git a/lily/include/paper-book.hh b/lily/include/paper-book.hh index ca1de4560f..e841c15158 100644 --- a/lily/include/paper-book.hh +++ b/lily/include/paper-book.hh @@ -25,6 +25,9 @@ class Paper_book SCM performances_; void add_score_title (SCM); + SCM get_score_title (SCM); + SCM get_system_specs (); + public: SCM header_; SCM header_0_; @@ -41,6 +44,7 @@ public: SCM pages (); Stencil book_title (); Stencil score_title (SCM); + void classic_output (SCM output_channel); void output (SCM output_channel); }; diff --git a/lily/paper-book.cc b/lily/paper-book.cc index 8eca04af59..c2fcf60f30 100644 --- a/lily/paper-book.cc +++ b/lily/paper-book.cc @@ -232,8 +232,9 @@ set_system_penalty (Prob *ps, SCM header) } } -void -Paper_book::add_score_title (SCM header) + +SCM +Paper_book::get_score_title (SCM header) { Stencil title = score_title (header); if (title.is_empty ()) @@ -247,30 +248,20 @@ Paper_book::add_score_title (SCM header) SCM props = paper_->lookup_variable (ly_symbol2scm ("score-title-properties")); Prob *ps = make_paper_system (props); paper_system_set_stencil (ps, title); - - systems_ = scm_cons (ps->self_scm (), systems_); - ps->unprotect (); set_system_penalty (ps, header); + + return ps->self_scm(); } -} -#if 0 -SCM -Paper_book::system_specs () -{ - + return SCM_BOOL_F; } -#endif SCM -Paper_book::systems () +Paper_book::get_system_specs () { - if (systems_ != SCM_BOOL_F) - return systems_; - - systems_ = SCM_EOL; + SCM system_specs = SCM_EOL; + Stencil title = book_title (); - if (!title.is_empty ()) { SCM props = paper_->lookup_variable (ly_symbol2scm ("book-title-properties")); @@ -278,7 +269,7 @@ Paper_book::systems () paper_system_set_stencil (ps, title); set_system_penalty (ps, header_); - systems_ = scm_cons (ps->self_scm (), systems_); + system_specs = scm_cons (ps->self_scm (), system_specs); ps->unprotect (); } @@ -299,13 +290,15 @@ Paper_book::systems () { if (Paper_score *pscore = dynamic_cast (mop)) { - add_score_title (header); + SCM title = get_score_title (header); + if (unsmob_prob (title)) + { + system_specs = scm_cons (title, system_specs); + unsmob_prob (title)->unprotect (); + } header = SCM_EOL; - - SCM system_list = scm_vector_to_list (pscore->get_paper_systems ()); - system_list = scm_reverse (system_list); - systems_ = scm_append (scm_list_2 (system_list, systems_)); + system_specs = scm_cons (pscore->self_scm (), system_specs); } else { @@ -314,19 +307,6 @@ Paper_book::systems () */ } } - else if (scm_is_vector (scm_car (s))) - { - programming_error ("Vector case?"); - /* - UGH. code dup. - */ - add_score_title (header); - header = SCM_EOL; - - SCM system_list = scm_vector_to_list (scm_car (s)); - system_list = scm_reverse (system_list); - systems_ = scm_append (scm_list_2 (system_list, systems_)); - } else if (Text_interface::is_markup (scm_car (s))) { SCM t = Text_interface::interpret_markup (paper_->self_scm (), @@ -337,7 +317,7 @@ Paper_book::systems () Prob *ps = make_paper_system (SCM_EOL); paper_system_set_stencil (ps, *unsmob_stencil (t)); ps->set_property ("is-title", SCM_BOOL_T); - systems_ = scm_cons (ps->self_scm (), systems_); + system_specs = scm_cons (ps->self_scm (), system_specs); ps->unprotect (); // FIXME: figure out penalty. @@ -347,6 +327,32 @@ Paper_book::systems () assert (0); } + system_specs = scm_reverse_x (system_specs, SCM_EOL); + return system_specs; +} + +SCM +Paper_book::systems () +{ + if (systems_ != SCM_BOOL_F) + return systems_; + + systems_ = SCM_EOL; + SCM specs = get_system_specs (); + for (SCM s = specs; scm_is_pair (s); s = scm_cdr (s)) + { + if (Paper_score *pscore = dynamic_cast (unsmob_music_output (scm_car (s)))) + { + SCM system_list = scm_vector_to_list (pscore->get_paper_systems ()); + system_list = scm_reverse (system_list); + systems_ = scm_append (scm_list_2 (system_list, systems_)); + } + else + { + systems_ = scm_cons (scm_car (s), systems_); + } + } + systems_ = scm_reverse (systems_); int i = 0; diff --git a/lily/paper-score.cc b/lily/paper-score.cc index a2af964b4b..5f7e1540df 100644 --- a/lily/paper-score.cc +++ b/lily/paper-score.cc @@ -115,3 +115,4 @@ Paper_score::get_paper_systems () const { return paper_systems_; } + -- 2.39.5