X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fbreak-algorithm.cc;h=923627f44c5a00384fac90adf1581aeb484611e8;hb=c27e721652915aaa668e256e3a25b7bae533802e;hp=9e242d22f0038c99fe6d51527aca58894c7bc104;hpb=fd7e615444cf58b38283a59b56d3457c07778397;p=lilypond.git diff --git a/lily/break-algorithm.cc b/lily/break-algorithm.cc index 9e242d22f0..923627f44c 100644 --- a/lily/break-algorithm.cc +++ b/lily/break-algorithm.cc @@ -3,125 +3,78 @@ source file of the GNU LilyPond music typesetter - (c) 1996, 1997--1999 Han-Wen Nienhuys + (c) 1996--2006 Han-Wen Nienhuys */ -#include "score-column.hh" #include "break-algorithm.hh" -#include "paper-def.hh" -#include "debug.hh" -#include "line-of-score.hh" +#include "paper-column.hh" +#include "output-def.hh" +#include "system.hh" #include "paper-score.hh" #include "paper-column.hh" #include "cpu-timer.hh" -#include "command-request.hh" #include "simple-spacer.hh" - - - - -Array -Break_algorithm::find_break_indices () const -{ - Link_array all (pscore_l_->col_l_arr_); - Array retval; - - for (int i=0; i < all.size (); i++) - if (all[i]->breakable_b ()) - retval.push (i); - - if (linewidth_f_ <=0) - while (retval.size () >2) - retval.del (1); - - return retval; -} - - -Link_array +vector Break_algorithm::find_breaks () const { - Link_array all (pscore_l_->col_l_arr_); - Link_array retval; + vector all = pscore_->root_system ()->columns (); + vector retval; - for (int i=0; i < all.size (); i++) - if (all[i]->breakable_b ()) - retval.push (all[i]); + for (vsize i = 0; i < all.size (); i++) + if (Item::is_breakable (all[i])) + retval.push_back (all[i]); - if (linewidth_f_ <=0) - while (retval.size () >2) - retval.del (1); return retval; } - -Simple_spacer* -Break_algorithm::generate_spacing_problem (Link_array curline, Interval line) const +Simple_spacer_wrapper * +Break_algorithm::generate_spacing_problem (vector const &curline, + Interval line) const { - Simple_spacer * sp = new Simple_spacer; - Paper_def * d = pscore_l_->paper_l_; - sp->compression_energy_factor_f_ = d->get_var ("compression_energy_factor"); - sp->default_space_f_ = d->get_var ("loose_column_distance"); + Simple_spacer_wrapper *spw = new Simple_spacer_wrapper; + Simple_spacer *sp = spw->spacer_; - sp->indent_f_ = line[LEFT]; + /* + this is hardcoded, but this shouldn't happen anyway. + used to be get_dimension (ly_symbol2scm ("loose_column_distance")); + */ + sp->default_space_ = 1.0; + sp->indent_ = line[LEFT]; /* sort out how interfacing this should work; - */ - if (line.empty_b()) - { - sp->line_len_f_ = -1; - } + */ + if (line.is_empty ()) + sp->line_len_ = -1; else - sp->line_len_f_ = line.length (); - - sp->add_columns (curline); - + sp->line_len_ = line.length (); - return sp; + spw->add_columns (curline); + return spw; } Break_algorithm::Break_algorithm () { - pscore_l_ = 0; - linewidth_f_ = 0; -} - -void -Break_algorithm::set_pscore (Paper_score*s) -{ - pscore_l_ = s; - linewidth_f_ = s->paper_l_->get_var("linewidth"); - do_set_pscore (); -} - - - -void -Break_algorithm::problem_OK () const -{ - if (pscore_l_->col_l_arr_.empty ()) - error (_("Score does not have any columns")); - OK (); + pscore_ = 0; + linewidth_ = 0; } void -Break_algorithm::OK () const +Break_algorithm::set_pscore (Paper_score *s) { + pscore_ = s; + linewidth_ = s->layout ()->get_dimension (ly_symbol2scm ("line-width")); } -Array -Break_algorithm::solve () const +vector +Break_algorithm::solve () { - Array h= do_solve (); - + vector h; return h; } -void -Break_algorithm::do_set_pscore () +Break_algorithm::~Break_algorithm () { - }