]> git.donarmstrong.com Git - lilypond.git/commitdiff
* lily/optimal-page-breaking.cc (try_page_spacing): don't average
authorJoe Neeman <joeneeman@gmail.com>
Wed, 1 Nov 2006 05:26:57 +0000 (05:26 +0000)
committerJoe Neeman <joeneeman@gmail.com>
Wed, 1 Nov 2006 05:26:57 +0000 (05:26 +0000)
page and line forces.

ChangeLog
lily/optimal-page-breaking.cc

index 7da215df344b04b12aff6c35ecbe479bb4bec415..a3074889e409b9ce55cb2a0ae9dd057c56a01da3 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2006-11-01  Joe Neeman  <joeneeman@gmail.com>
+
+       * lily/optimal-page-breaking.cc (try_page_spacing): don't average
+       page and line forces.
+
 2006-11-01  Han-Wen Nienhuys  <hanwen@lilypond.org>
 
        * GNUmakefile.in (SUBDIRS): remove cygwin dir too.
index 21fb841d6635b80477f8dc863ec50b24f5b70931..90bc685f06c31c2afce499ddba51d9691aaba845 100644 (file)
@@ -63,16 +63,14 @@ Optimal_page_breaking::try_page_spacing (Line_division const &line_count)
     {
       Real uniformity = fabs (ret.force_[i] - ret.force_[i-1]);
       ret.demerits_ += (ret.force_[i] * ret.force_[i]
-                      + uniformity * uniformity) * page_weighting;
+                       + uniformity * uniformity) * page_weighting;
     }
 
-  /* If ragged_last is true, the last page will have
-     zero force no matter what. In this case, we exclude it from the average or
-     we will become biased towards scores with less pages (because the force
-     of zero will affect the average more when there are fewer pages) */
-  if (!ragged_last || ret.force_.size () > 1)
-    ret.demerits_ /= ret.force_.size () - (ragged_last ? 1 : 0);
-  line_force /= lines.size ();
+  /* for a while we tried averaging page and line forces instead of summing
+     them, but it caused the following problem. If there is a single page
+     with a very bad page force (for example because of a forced page break),
+     the page breaker will put in a _lot_ of pages so that the bad force
+     becomes averaged out over many pages. */
   ret.demerits_ += line_force + line_penalty;
   return ret;
 }