->get_broken_system_grobs ();
ret = scm_cons (lines, ret);
}
- else
+ else if (Prob *pb = system_specs_[sys].prob_)
{
- Prob *pb = system_specs_[sys].prob_;
ret = scm_cons (scm_list_1 (pb->self_scm ()), ret);
pb->unprotect ();
}
SCM
Page_breaking::make_pages (vector<vsize> lines_per_page, SCM systems)
{
+ if (scm_is_null (systems))
+ return SCM_EOL;
+
int first_page_number
= robust_scm2int (book_->paper_->c_variable ("first-page-number"), 1);
SCM ret = SCM_EOL;
system_specs_.push_back (System_spec (pb));
}
}
+ if (!system_specs_.size ())
+ system_specs_.push_back (System_spec ());
}
void
}
line_breaking_.push_back (Constrained_breaking (system_specs_[i].pscore_, line_breaker_columns));
}
- else
+ else if (system_specs_[i].prob_)
{
bool break_point = prob_is_break && prob_is_break (system_specs_[i].prob_);
if (break_point || i == system_specs_.size () - 1)
else
{
assert (div[i] == 1);
- uncompressed_line_details_.push_back (Line_details (system_specs_[sys].prob_, book_->paper_));
+ uncompressed_line_details_.push_back (system_specs_[sys].prob_
+ ? Line_details (system_specs_[sys].prob_, book_->paper_)
+ : Line_details ());
}
}
cached_line_details_ = compress_lines (uncompressed_line_details_);
Page_spacing_result
Page_breaking::space_systems_on_best_pages (vsize configuration, vsize first_page_num)
{
+ if (systems_per_page_ > 0)
+ return space_systems_with_fixed_number_per_page (configuration, first_page_num);
+
cache_line_details (configuration);
Page_spacer ps (cached_line_details_, first_page_num, this);