X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;ds=sidebyside;f=lily%2Fscore-engraver.cc;h=27c7d520384cb956de17b6c92eb4ff8fa382af00;hb=14ca3493aab1a1f4f837f1b483ad9ea1d1e444ad;hp=52e0e07842fc17e6648313c865954b076f96afec;hpb=28976d28a04cfb9abe97af7214d7dce11f732604;p=lilypond.git diff --git a/lily/score-engraver.cc b/lily/score-engraver.cc index 52e0e07842..27c7d52038 100644 --- a/lily/score-engraver.cc +++ b/lily/score-engraver.cc @@ -47,9 +47,9 @@ Score_engraver::make_columns () if (!command_column_) { SCM nmp - = updated_grob_properties (daddy_context_, + = updated_grob_properties (context (), ly_symbol2scm ("NonMusicalPaperColumn")); - SCM pc = updated_grob_properties (daddy_context_, + SCM pc = updated_grob_properties (context (), ly_symbol2scm ("PaperColumn")); set_columns (new Paper_column (nmp), new Paper_column (pc)); @@ -80,7 +80,7 @@ Score_engraver::prepare (Moment m) command_column_->set_property ("when", w); musical_column_->set_property ("when", w); - recurse_over_translators (daddy_context_, &Translator::start_translation_timestep, DOWN); + recurse_over_translators (context (), &Translator::start_translation_timestep, DOWN); } void @@ -89,7 +89,7 @@ Score_engraver::finish () if ((breaks_%8)) progress_indication ("[" + to_string (breaks_) + "]"); - recurse_over_translators (daddy_context_, &Translator::finalize, UP); + recurse_over_translators (context (), &Translator::finalize, UP); } /* @@ -107,7 +107,7 @@ Score_engraver::initialize () pscore_ = new Paper_score; pscore_->paper_ = dynamic_cast (get_output_def ()); - SCM props = updated_grob_properties (daddy_context_, ly_symbol2scm ("System")); + SCM props = updated_grob_properties (context (), ly_symbol2scm ("System")); pscore_->typeset_line (new System (props)); @@ -139,11 +139,11 @@ Score_engraver::one_time_step () { if (!to_boolean (get_property ("skipTypesetting"))) { - recurse_over_translators (daddy_context_, &Engraver::process_music, UP); - recurse_over_translators (daddy_context_, &Engraver::do_announces, UP); + recurse_over_translators (context (), &Engraver::process_music, UP); + recurse_over_translators (context (), &Engraver::do_announces, UP); } - recurse_over_translators (daddy_context_, &Translator::stop_translation_timestep, UP); + recurse_over_translators (context (), &Translator::stop_translation_timestep, UP); } void @@ -151,16 +151,9 @@ Score_engraver::announce_grob (Grob_info info) { announce_infos_.push (info); pscore_->system_->typeset_grob (info.grob_); + elems_.push (info.grob_); } -void -Score_engraver::typeset_grob (Grob *elem) -{ - if (!elem) - programming_error ("Score_engraver: empty elt\n"); - else - elems_.push (elem); -} void Score_engraver::typeset_all () @@ -168,35 +161,14 @@ Score_engraver::typeset_all () for (int i =0; i < elems_.size (); i++) { Grob * elem = elems_[i]; + - if (Spanner *s = dynamic_cast (elem)) - { - /* - do something sensible if spanner not - spanned on 2 items. - */ - Direction d = LEFT; - do { - if (!s->get_bound (d)) - { - Grob * cc - = unsmob_grob (get_property ("currentCommandColumn")); - s->set_bound (d, cc); - /* don't warn for empty/suicided spanners, - it makes real warningsinvisible. - maybe should be junked earlier? */ - if (elem->live ()) - elem->warning (_f ("unbound spanner `%s'", s->name ().to_str0 ())); - } - } - while (flip (&d) != LEFT); - - if (dynamic_cast (s->get_parent (Y_AXIS))) - programming_error ("Spanner Y-parent is an item."); - } - else + if (dynamic_cast (elem)) { - if (!elem->get_parent (X_AXIS)) + if (!elem->get_parent (X_AXIS) + && elem != command_column_ + && elem != musical_column_ + ) { bool br = to_boolean (elem->get_property ("breakable")); Axis_group_interface::add_element (br ? command_column_ : musical_column_, elem); @@ -241,12 +213,12 @@ Score_engraver::set_columns (Paper_column *new_command, musical_column_ = new_musical; if (new_command) { - daddy_context_->set_property ("currentCommandColumn", new_command->self_scm ()); + context ()->set_property ("currentCommandColumn", new_command->self_scm ()); } if (new_musical) { - daddy_context_->set_property ("currentMusicalColumn", new_musical->self_scm ()); + context ()->set_property ("currentMusicalColumn", new_musical->self_scm ()); } } @@ -259,30 +231,36 @@ Score_engraver::get_output () } bool -Score_engraver::try_music (Music*r) +Score_engraver::try_music (Music *m) { - bool gotcha = Engraver_group_engraver::try_music (r); + if (Engraver_group_engraver::try_music (m)) + return true; - if (!gotcha && r->is_mus_type ("break-event")) + if (m->is_mus_type ("break-event")) { - gotcha = true; - SCM pen = command_column_->get_property ("penalty"); - Real total_penalty = is_number (pen) - ? ly_scm2double (pen) - : 0.0; - - SCM rpen = r->get_property ("penalty"); - if (is_number (rpen)) - total_penalty += ly_scm2double (rpen); - - if (total_penalty > 10000.0) // ugh. arbitrary. + Real total_penalty = ly_c_number_p (pen) ? ly_scm2double (pen) : 0.0; + + SCM mpen = m->get_property ("penalty"); + if (ly_c_number_p (mpen)) + total_penalty += ly_scm2double (mpen); + + command_column_->set_property ("penalty", scm_make_real (total_penalty)); + + /* ugh. arbitrary, hardcoded */ + if (total_penalty > 10000.0) forbid_breaks (); - command_column_->set_property ("penalty", - scm_make_real (total_penalty)); + SCM page_pen = command_column_->get_property ("page-penalty"); + Real total_pp = ly_c_number_p (page_pen) ? ly_scm2double (page_pen) : 0.0; + SCM mpage_pen = m->get_property ("page-penalty"); + if (ly_c_number_p (mpage_pen)) + total_pp += ly_scm2double (mpage_pen); + + command_column_->set_property ("page-penalty", scm_make_real (total_pp)); + return true; } - return gotcha; + return false; } void