X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fscore-engraver.cc;h=0b28780dcc6287c00fafc54fb2d56534c5f38009;hb=4f5b668a1d61ca95adb60d56f1c771748b5a6446;hp=14f7f45b65421dbcddb227299bc4dcf71c7d4668;hpb=94a1966c72301b8bd1d8bb3b8628c3f089d007cf;p=lilypond.git diff --git a/lily/score-engraver.cc b/lily/score-engraver.cc index 14f7f45b65..0b28780dcc 100644 --- a/lily/score-engraver.cc +++ b/lily/score-engraver.cc @@ -15,7 +15,7 @@ #include "score-engraver.hh" #include "paper-score.hh" #include "paper-column.hh" -#include "paper-def.hh" +#include "output-def.hh" #include "axis-group-interface.hh" #include "context-def.hh" #include "staff-spacing.hh" @@ -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)); @@ -79,8 +79,8 @@ Score_engraver::prepare (Moment m) SCM w = m.smobbed_copy (); 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); } /* @@ -101,13 +101,19 @@ Score_engraver::initialize () Font_metric *fm = all_fonts_global->find_afm ("feta20"); if (!fm) error (_f ("can't find `%s'", "feta20.afm") - + "\n" +_ ("Fonts have not been installed properly. Aborting")); + + "\n" +_ ("Music font has not been installed properly. Aborting")); + + SCM pfa_path = ly_kpathsea_expand_path (scm_makfrom0str ("ecrm10.pfa")); + if (!scm_is_string (pfa_path)) + error (_f ("can't find `%s'", "ecrm10.pfa") + + "\n" +_f ("Install the ec-mftraced package from %s. Aborting", + "http://lilypond.org/download/fonts/")); pscore_ = new Paper_score; - pscore_->paper_ = dynamic_cast (get_output_def ()); + pscore_->layout_ = 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 +145,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); + Engraver_group_engraver::do_announces(); } - recurse_over_translators (daddy_context_, &Translator::stop_translation_timestep, UP); + recurse_over_translators (context (), &Translator::stop_translation_timestep, UP); } void @@ -151,16 +157,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 +167,14 @@ Score_engraver::typeset_all () for (int i =0; i < elems_.size (); i++) { Grob * elem = elems_[i]; + - if (Spanner *s = dynamic_cast (elem)) + if (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 (!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 +219,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 +237,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 = ly_number_p (pen) - ? ly_scm2double (pen) - : 0.0; - - SCM rpen = r->get_property ("penalty"); - if (ly_number_p (rpen)) - total_penalty += ly_scm2double (rpen); - - if (total_penalty > 10000.0) // ugh. arbitrary. + Real total_penalty = scm_is_number (pen) ? scm_to_double (pen) : 0.0; + + SCM mpen = m->get_property ("penalty"); + if (scm_is_number (mpen)) + total_penalty += scm_to_double (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 = scm_is_number (page_pen) ? scm_to_double (page_pen) : 0.0; + SCM mpage_pen = m->get_property ("page-penalty"); + if (scm_is_number (mpage_pen)) + total_pp += scm_to_double (mpage_pen); + + command_column_->set_property ("page-penalty", scm_make_real (total_pp)); + return true; } - return gotcha; + return false; } void