]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/optimal-page-breaking.cc
Imported Upstream version 2.18.0
[lilypond.git] / lily / optimal-page-breaking.cc
index 2b0910f8873600feebf136424c8ffa823d0f93d6..3ff29d01bd0d67d2bf8a644483dbbda3ef5d262a 100644 (file)
@@ -64,12 +64,21 @@ Optimal_page_breaking::solve ()
       best = space_systems_on_best_pages (0, first_page_num);
 
       page_count = best.systems_per_page_.size ();
-      min_sys_count = ideal_sys_count - best.systems_per_page_.back ();
+      if (page_count == 0)
+        {
+          min_sys_count = 0;
+        }
+      else
+        {
+          min_sys_count = ideal_sys_count - best.systems_per_page_.back ();
 
-      if (page_count > 1 && best.systems_per_page_[page_count - 2] > 1)
-        min_sys_count -= best.systems_per_page_[page_count - 2];
+          if (page_count > 1 && best.systems_per_page_[page_count - 2] > 1)
+            min_sys_count -= best.systems_per_page_[page_count - 2];
 
-      min_sys_count = max (min_sys_count, (vsize)1);
+          if (min_sys_count > ideal_sys_count  // subtraction wrapped around
+              || min_sys_count <= 0)
+            min_sys_count = 1;
+        }
     }
   else
     {
@@ -103,7 +112,7 @@ Optimal_page_breaking::solve ()
 
   if (page_count == 1)
     message (_ ("Fitting music on 1 page..."));
-  else if (scm_is_integer (forced_page_count))
+  else if (scm_is_integer (forced_page_count) || page_count == 0)
     message (_f ("Fitting music on %d pages...", (int)page_count));
   else
     message (_f ("Fitting music on %d or %d pages...", (int)page_count - 1, (int)page_count));