};
void
-print_break_nodes (std::vector<Break_node> const &arr)
+print_break_nodes (vector<Break_node> const &arr)
{
for (vsize i = 0; i < arr.size (); i++)
{
TODO: should rewrite. See the function in scm/page-layout.scm for
inspiration.
*/
-std::vector<Column_x_positions>
-Gourlay_breaking::do_solve () const
+vector<Column_x_positions>
+Gourlay_breaking::solve ()
{
- std::vector<Break_node> optimal_paths;
- Link_array<Grob> all
+ vector<Break_node> optimal_paths;
+ vector<Grob*> all
= pscore_->root_system ()->columns ();
- std::vector<int> breaks = find_break_indices ();
+ vector<vsize> breaks = pscore_->find_break_indices ();
Break_node first_node;
optimal_paths.push_back (first_node);
- bool ragged_right = to_boolean (pscore_->layout ()->c_variable ("raggedright"));
- bool ragged_last = to_boolean (pscore_->layout ()->c_variable ("raggedlast"));
+ bool ragged_right = to_boolean (pscore_->layout ()->c_variable ("ragged-right"));
+ bool ragged_last = to_boolean (pscore_->layout ()->c_variable ("ragged-last"));
Real worst_force = 0.0;
for (vsize break_idx = 1; break_idx < breaks.size (); break_idx++)
for (vsize start_idx = break_idx; start_idx--;)
{
- Link_array<Grob> line = all.slice (breaks[start_idx],
- breaks[break_idx] + 1);
-
- line[0] = dynamic_cast<Item *> (line[0])->find_prebroken_piece (RIGHT);
- line.back () = dynamic_cast<Item *> (line.back ())->find_prebroken_piece (LEFT);
-
- Column_x_positions cp;
- cp.cols_ = line;
+ vector<Grob*> line (all.begin () + breaks[start_idx],
+ all.begin () + breaks[break_idx] + 1);
Interval line_dims
= line_dimensions_int (pscore_->layout (), optimal_paths[start_idx].line_);
- Simple_spacer_wrapper *sp = generate_spacing_problem (line, line_dims);
bool last_line = break_idx == breaks.size () - 1;
- bool ragged = ragged_right
- || (last_line && ragged_last);
-
- sp->solve (&cp, ragged);
+ bool ragged = ragged_right || (last_line && ragged_last);
- delete sp;
+ Column_x_positions cp = get_line_configuration (line, line_dims[RIGHT] - line_dims[LEFT],
+ line_dims[LEFT], ragged);
if (ragged && last_line)
- cp.force_ = 0.0;
+ cp.force_ = min (cp.force_, 0.0);
if (fabs (cp.force_) > worst_force)
worst_force = fabs (cp.force_);
optimal_paths.push_back (bnod);
if (! (break_idx % HAPPY_DOTS))
- progress_indication (std::string ("[") + to_string (break_idx) + "]");
+ progress_indication (string ("[") + to_string (break_idx) + "]");
}
/* do the last one */
if (breaks.size () % HAPPY_DOTS)
- progress_indication (std::string ("[") + to_string (breaks.size ()) + "]");
+ progress_indication (string ("[") + to_string (breaks.size ()) + "]");
progress_indication ("\n");
- std::vector<int> final_breaks;
- std::vector<Column_x_positions> lines;
+ vector<int> final_breaks;
+ vector<Column_x_positions> lines;
/* skip 0-th element, since it is a "dummy" elt*/
for (vsize i = optimal_paths.size () - 1; i > 0;)
Grob *pc = this_one.cols_.back ();
if (pc->original ())
{
- SCM pen = pc->get_property ("penalty");
+ SCM pen = pc->get_property ("line-break-penalty");
if (scm_is_number (pen) && fabs (scm_to_double (pen)) < 10000)
break_penalties += scm_to_double (pen);
}