}
Page_spacing_result ret;
+ ret.penalty_ = simple_state_.back ().penalty_
+ + lines_.back ().page_penalty_ + lines_.back ().turn_penalty_;
+ ret.system_count_status_ = simple_state_.back ().system_count_status_;
+
vsize system = lines_.size () - 1;
while (system != VPOS)
{
ret.force_.resize (page_count);
ret.systems_per_page_.resize (page_count);
+ ret.system_count_status_ = state_.at (system, page_count-1).system_count_status_;
ret.penalty_ = state_.at (system, page_count-1).penalty_
+ lines_.back ().page_penalty_ + lines_.back ().turn_penalty_;
// we need to look ahead a few systems in order to find the best solution. But
// we won't, because we stop once we overfill the page with the large header.
vsize page_num = page == VPOS ? 0 : page;
+ Real paper_height = breaker_->paper_height ();
Page_spacing space (breaker_->page_height (page_num + first_page_num_, last),
breaker_);
Page_spacing_node &cur = page == VPOS ? simple_state_[line] : state_.at (line, page);
space.prepend_system (lines_[page_start]);
+ bool overfull = (space.rod_height_ > paper_height
+ || (ragged
+ && (space.rod_height_ + space.spring_len_ > paper_height)));
// This 'if' statement is a little hard to parse. It won't consider this configuration
// if it is overfull unless the current configuration is the first one with this start
// point. We also make an exception (and consider this configuration) if the previous
// configuration we tried had fewer lines than min-systems-per-page.
if (!breaker_->too_few_lines (line_count)
&& page_start < line
- && (isinf (space.force_) || (space.force_ < 0 && ragged)))
+ && overfull)
break;
line_count += lines_[page_start].compressed_nontitle_lines_count_;