From: Joe Neeman Date: Mon, 9 Aug 2010 19:55:23 +0000 (-0700) Subject: Fix 1203. X-Git-Tag: release/2.13.30-1~17 X-Git-Url: https://git.donarmstrong.com/?a=commitdiff_plain;h=acb67023e9243ad899146c5ab9bb321a34edaa98;p=lilypond.git Fix 1203. Allows markup lines and titles to have page turns after them. --- diff --git a/lily/include/page-breaking.hh b/lily/include/page-breaking.hh index 3c4076c0da..58c8de0951 100644 --- a/lily/include/page-breaking.hh +++ b/lily/include/page-breaking.hh @@ -99,6 +99,7 @@ class Page_breaking { public: typedef bool (*Break_predicate) (Grob *); + typedef bool (*Prob_break_predicate) (Prob *); typedef vector Line_division; /* @@ -109,7 +110,7 @@ public: */ virtual SCM solve () = 0; - Page_breaking (Paper_book *pb, Break_predicate); + Page_breaking (Paper_book *pb, Break_predicate, Prob_break_predicate); virtual ~Page_breaking (); bool ragged () const; @@ -213,7 +214,7 @@ private: Page_spacing_result space_systems_on_2_pages (vsize configuration_index, vsize first_page_num); Page_spacing_result finalize_spacing_result (vsize configuration_index, Page_spacing_result); void create_system_list (); - void find_chunks_and_breaks (Break_predicate); + void find_chunks_and_breaks (Break_predicate, Prob_break_predicate); SCM make_page (int page_num, bool last) const; SCM get_page_configuration (SCM systems, int page_num, bool ragged, bool last); SCM draw_page (SCM systems, SCM config, int page_num, bool last); diff --git a/lily/minimal-page-breaking.cc b/lily/minimal-page-breaking.cc index 1f4cb4d686..2e612185e5 100644 --- a/lily/minimal-page-breaking.cc +++ b/lily/minimal-page-breaking.cc @@ -23,14 +23,8 @@ #include "page-spacing.hh" #include "paper-book.hh" -static bool -is_break (Grob *) -{ - return false; -} - Minimal_page_breaking::Minimal_page_breaking (Paper_book *pb) - : Page_breaking (pb, is_break) + : Page_breaking (pb, 0, 0) { } diff --git a/lily/optimal-page-breaking.cc b/lily/optimal-page-breaking.cc index 29d5ee63e9..60dddd4212 100644 --- a/lily/optimal-page-breaking.cc +++ b/lily/optimal-page-breaking.cc @@ -26,14 +26,8 @@ #include "prob.hh" #include "system.hh" -static bool -is_break (Grob *) -{ - return false; -} - Optimal_page_breaking::Optimal_page_breaking (Paper_book *pb) - : Page_breaking (pb, is_break) + : Page_breaking (pb, 0, 0) { } diff --git a/lily/page-breaking.cc b/lily/page-breaking.cc index aeeb7bb1b7..4c7c40763e 100644 --- a/lily/page-breaking.cc +++ b/lily/page-breaking.cc @@ -173,7 +173,7 @@ Page_breaking::next_system (Break_position const &break_pos) const return sys + 1; /* this page starts with a new System_spec */ } -Page_breaking::Page_breaking (Paper_book *pb, Break_predicate is_break) +Page_breaking::Page_breaking (Paper_book *pb, Break_predicate is_break, Prob_break_predicate prob_break) { book_ = pb; system_count_ = 0; @@ -196,7 +196,7 @@ Page_breaking::Page_breaking (Paper_book *pb, Break_predicate is_break) } create_system_list (); - find_chunks_and_breaks (is_break); + find_chunks_and_breaks (is_break, prob_break); } Page_breaking::~Page_breaking () @@ -523,7 +523,7 @@ Page_breaking::create_system_list () } void -Page_breaking::find_chunks_and_breaks (Break_predicate is_break) +Page_breaking::find_chunks_and_breaks (Break_predicate is_break, Prob_break_predicate prob_is_break) { SCM force_sym = ly_symbol2scm ("force"); @@ -567,7 +567,7 @@ Page_breaking::find_chunks_and_breaks (Break_predicate is_break) } bool last = (j == cols.size () - 1); - bool break_point = is_break (cols[j]); + bool break_point = is_break && is_break (cols[j]); bool chunk_end = cols[j]->get_property ("page-break-permission") == force_sym; Break_position cur_pos = Break_position (i, line_breaker_columns.size (), @@ -598,8 +598,8 @@ Page_breaking::find_chunks_and_breaks (Break_predicate is_break) } else { - /* TODO: we want some way of applying Break_p to a prob? */ - if (i == system_specs_.size () - 1) + bool break_point = prob_is_break && prob_is_break (system_specs_[i].prob_); + if (break_point || i == system_specs_.size () - 1) breaks_.push_back (Break_position (i)); chunks_.push_back (Break_position (i)); diff --git a/lily/page-turn-page-breaking.cc b/lily/page-turn-page-breaking.cc index 54b3bbc566..9338a38bfc 100644 --- a/lily/page-turn-page-breaking.cc +++ b/lily/page-turn-page-breaking.cc @@ -29,8 +29,9 @@ #include "system.hh" #include "warn.hh" +template static bool -is_break (Grob *g) +is_break (T *g) { bool turnable = scm_is_symbol (g->get_property ("page-turn-permission")); @@ -46,7 +47,7 @@ is_break (Grob *g) } Page_turn_page_breaking::Page_turn_page_breaking (Paper_book *pb) - : Page_breaking (pb, is_break) + : Page_breaking (pb, is_break, is_break) { }