]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/page-breaking.cc
Release: update news.
[lilypond.git] / lily / page-breaking.cc
index 01d7469f52ed80ff45a1f9e5c102e1b262076ca3..61a4e82f91d3098baf29e77b800a622749902522 100644 (file)
@@ -1,7 +1,7 @@
 /*
   This file is part of LilyPond, the GNU music typesetter.
 
-  Copyright (C) 2006--2011 Joe Neeman <joeneeman@gmail.com>
+  Copyright (C) 2006--2012 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
@@ -601,7 +601,8 @@ Page_breaking::make_pages (vector<vsize> lines_per_page, SCM systems)
   if (label_page_table == SCM_UNDEFINED)
     label_page_table = SCM_EOL;
 
-  // Build a list of (systems . configuration) pairs. Note that we lay out
+  // Build a list of (systems configuration . footnote-count) triples.
+  // Note that we lay out
   // the staves and find the configurations before drawing anything. Some
   // grobs (like tuplet brackets) look at their neighbours while drawing
   // themselves. If this happens before the neighbouring staves have
@@ -609,6 +610,7 @@ Page_breaking::make_pages (vector<vsize> lines_per_page, SCM systems)
   // Align_interface::align_to_ideal_distances might be called).
   SCM systems_configs_fncounts = SCM_EOL;
   vsize footnote_count = 0;
+  Real last_page_force = 0;
 
   for (vsize i = 0; i < lines_per_page.size (); i++)
     {
@@ -620,7 +622,19 @@ Page_breaking::make_pages (vector<vsize> lines_per_page, SCM systems)
       int fn_lines = Page_layout_problem::get_footnote_count (lines);
       Page_layout_problem::add_footnotes_to_lines (lines, reset_footnotes_on_new_page ? 0 : footnote_count, book_);
 
-      SCM config = get_page_configuration (lines, page_num, rag, bookpart_last_page);
+      SCM config = SCM_EOL;
+      SCM dummy_page = make_page (page_num, bookpart_last_page);
+      Page_layout_problem layout (book_, dummy_page, lines);
+      if (!scm_is_pair (systems))
+        config = SCM_EOL;
+      else if (rag && !ragged ())
+        // If we're ragged-last but not ragged, make the last page
+        // have the same force as the previous page.
+        config = layout.fixed_force_solution (last_page_force);
+      else
+        config = layout.solution (rag);
+
+      last_page_force = layout.force ();
 
       systems_configs_fncounts = scm_cons (scm_cons (lines, config), systems_configs_fncounts);
       footnote_count += fn_lines;