-#if 0
- fprintf (stderr, "book_height: %f\n", book_height);
- fprintf (stderr, "vsize: %f\n", page->vsize_);
- fprintf (stderr, "pages: %d\n", page_count);
-#endif
+ Link_array<Page>* pages = 0;
+ if ((page_count > 1 && (r / (page_count - 1)) < MAX_CRAMP))
+ {
+ /* Just a little more space (<MAX_CRAMP) per page is needed,
+ cramp onto one page less. */
+ pages = fill_pages (page, page_count - 1, cramp_fudge);
+ if (pages->size () != page_count - 1)
+ {
+ /* Cramping failed. */
+ page = pages->get (0);
+ delete pages;
+ pages = 0;
+ }
+ }
+ if (!pages && ((1 - r) / page_count) < 1 - MIN_COVERAGE)
+ {
+ /* There is space left, but not so much that paged would have too
+ little blackness (< MIN_COVERAGE), distribute evenly. */
+ pages = fill_pages (page, page_count, expand_fudge);
+ bool badly_covered = false;
+ if (pages->size () == page_count)
+ for (int i = 0; i < page_count; i++)
+ {
+ Page *p = (*pages)[i];
+ Real coverage = p ->height_ / p->text_height ();
+ if (coverage < MIN_COVERAGE)
+ {
+ badly_covered = true;
+ break;
+ }
+ }
+ if (pages->size () != page_count || badly_covered)
+ {
+ /* expanding failed. */
+ page = pages->get (0);
+ delete pages;
+ pages = 0;
+ }
+ }
+
+ if (!pages)
+ /* Fudging failed; just fill pages. */
+ pages = fill_pages (page, page_count, 0);
+ return pages;
+}