]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/include/page-spacing.hh
Add regtest for 1141 and 1142.
[lilypond.git] / lily / include / page-spacing.hh
index c2dbc2ea6e8aa55ff614126dec327414389e7150..b670387ad691a1375c7002633d2832ace33dded2 100644 (file)
@@ -1,10 +1,20 @@
 /*
-  page-spacing.hh -- routines for spacing systems
-  vertically across pages
+  This file is part of LilyPond, the GNU music typesetter.
 
-  source file of the GNU LilyPond music typesetter
+  Copyright (C) 2006--2010 Joe Neeman <joeneeman@gmail.com>
 
-  (c) 2006--2007 Joe Neeman <joeneeman@gmail.com>
+  LilyPond is free software: you can redistribute it and/or modify
+  it under the terms of the GNU General Public License as published by
+  the Free Software Foundation, either version 3 of the License, or
+  (at your option) any later version.
+
+  LilyPond is distributed in the hope that it will be useful,
+  but WITHOUT ANY WARRANTY; without even the implied warranty of
+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+  GNU General Public License for more details.
+
+  You should have received a copy of the GNU General Public License
+  along with LilyPond.  If not, see <http://www.gnu.org/licenses/>.
 */
 
 #ifndef PAGE_SPACING_HH
    but small enough that nothing will overflow to infinity (so that we
    can still distinguish bad spacings by the number of BAD_SPACING_PENALTYs
    that they incur.
+
+   BAD_SPACING_PENALTY is for occasions where the spacing is bad.
+   TERRIBLE_SPACING_PENALTY is for when we are disregarding a user override
+   (for example, we are failing to satisfy min-systems-per-page). These user
+   overrides are more important than getting good spacing, so they get a
+   larger penalty.
 */
-const Real BAD_SPACING_PENALTY = 200000;
+const Real BAD_SPACING_PENALTY = 1e6;
+const Real TERRIBLE_SPACING_PENALTY = 1e8;
 
 
 /* for page_count > 2, we use a dynamic algorithm similar to
@@ -46,12 +63,14 @@ private:
       force_ = infinity_f;
       penalty_ = infinity_f;
       prev_ = VPOS;
+      system_count_status_ = SYSTEM_COUNT_OK;
     }
 
     Real demerits_;
     Real force_;
     Real penalty_;
     vsize prev_;
+    int system_count_status_;
   };
 
   Page_breaking const *breaker_;
@@ -74,15 +93,15 @@ struct Page_spacing
   Real rod_height_;
   Real spring_len_;
   Real inverse_spring_k_;
-  Real page_top_space_;
 
   Line_details last_line_;
   Line_details first_line_;
+  Page_breaking const *breaker_;
 
-  Page_spacing (Real page_height, Real page_top_space)
+  Page_spacing (Real page_height, Page_breaking const *breaker)
   {
     page_height_ = page_height;
-    page_top_space_ = page_top_space;
+    breaker_ = breaker;
     clear ();
   }