]> git.donarmstrong.com Git - lilypond.git/commitdiff
Fix 1286.
authorJoe Neeman <joeneeman@gmail.com>
Thu, 18 Aug 2011 05:56:02 +0000 (22:56 -0700)
committerJoe Neeman <joeneeman@gmail.com>
Sun, 28 Aug 2011 19:14:12 +0000 (12:14 -0700)
input/regression/page-breaking-end-of-score.ly [new file with mode: 0644]
lily/include/paper-column-engraver.hh
lily/paper-column-engraver.cc

diff --git a/input/regression/page-breaking-end-of-score.ly b/input/regression/page-breaking-end-of-score.ly
new file mode 100644 (file)
index 0000000..b949b02
--- /dev/null
@@ -0,0 +1,19 @@
+\version "2.14.1"
+
+\header {
+  texidoc = "Page breaks are allowed by default at the end of the score,
+but the user can override them.  There should be one line on the first
+page and two (colliding) lines on the second page."
+}
+
+\paper {
+  paper-height = 4\cm
+}
+
+\book {
+{ c'4 }
+
+{ c'4 } \noPageBreak
+
+{ c'4 }
+}
index edb6ad8d59bbaab5cae97000772a2b3b370b1900..7b6690db8b74a650d8978eda4514f420ca3ddb05 100644 (file)
@@ -38,6 +38,7 @@ protected:
   void stop_translation_timestep ();
   void start_translation_timestep ();
   void process_music ();
+  void handle_manual_breaks (bool);
   virtual void initialize ();
   virtual void finalize ();
 
index 31b8023bef734caac6f4c4bfb3ee8281091b922a..3d4ee9fd95c8c59ed68f9893d38b2a8214a70cae 100644 (file)
@@ -61,8 +61,18 @@ Paper_column_engraver::finalize ()
 
   if (command_column_)
     {
+      // At the end of the score, allow page breaks and turns by default, but...
+      command_column_->set_property ("page-break-permission", ly_symbol2scm ("allow"));
+      command_column_->set_property ("page-turn-permission", ly_symbol2scm ("allow"));
+
+      // ...allow the user to override them.
+      handle_manual_breaks (true);
+
+      // On the other hand, line breaks are always allowed at the end of a score,
+      // even if they try to stop us.
       if (!scm_is_symbol (command_column_->get_property ("line-break-permission")))
         command_column_->set_property ("line-break-permission", ly_symbol2scm ("allow"));
+
       system_->set_bound (RIGHT, command_column_);
     }
 }
@@ -147,7 +157,7 @@ Paper_column_engraver::listen_label (Stream_event *ev)
 }
 
 void
-Paper_column_engraver::process_music ()
+Paper_column_engraver::handle_manual_breaks (bool only_do_permissions)
 {
   for (vsize i = 0; i < break_events_.size (); i++)
     {
@@ -170,7 +180,7 @@ Paper_column_engraver::process_music ()
       SCM pen = break_events_[i]->get_property ("break-penalty");
       SCM perm = break_events_[i]->get_property ("break-permission");
 
-      if (scm_is_number (pen))
+      if (!only_do_permissions && scm_is_number (pen))
         {
           Real new_pen = robust_scm2double (cur_pen, 0.0) + scm_to_double (pen);
           command_column_->set_property (pen_str.c_str (), scm_from_double (new_pen));
@@ -179,6 +189,12 @@ Paper_column_engraver::process_music ()
       else
         command_column_->set_property (perm_str.c_str (), perm);
     }
+}
+
+void
+Paper_column_engraver::process_music ()
+{
+  handle_manual_breaks (false);
 
   for (vsize i = 0; i < label_events_.size (); i++)
     {