- && !(best.system_count_status_ & SYSTEM_COUNT_TOO_FEW))
- break;
- }
- break_into_pieces (end-1, end, best_division);
-
- return best.systems_per_page_;
-}
-
-SCM
-Optimal_page_breaking::solve ()
-{
- vector<vsize> systems_per_page;
-
- SCM forced_page_counts = book_->paper_->c_variable ("page-count");
- if (scm_is_integer (forced_page_counts))
- forced_page_counts = scm_list_1 (forced_page_counts);
-
- bool is_forced_page_counts = false;
- if (scm_to_bool (scm_list_p (forced_page_counts)))
- {
- int len = scm_to_int (scm_length (forced_page_counts));
- if (len != (int)last_break_position ())
- {
- warning (_f ("page-count has length %d, but it should have length %d "
- "(one more than the number of forced page breaks)",
- len, (int)last_break_position ()));
- }
- else
- is_forced_page_counts = true;
- }
-
-
- message (_f ("Solving %d page-breaking chunks...", last_break_position ()));
- for (vsize end = 1; end <= last_break_position (); ++end)
- {
- SCM page_count = SCM_EOL;
- if (is_forced_page_counts)
- {
- page_count = scm_car (forced_page_counts);
- forced_page_counts = scm_cdr (forced_page_counts);
- }
-
- vector<vsize> chunk_systems = solve_chunk (end, page_count);
- systems_per_page.insert (systems_per_page.end (), chunk_systems.begin (), chunk_systems.end ());