Allows markup lines and titles to have page turns after them.
{
public:
typedef bool (*Break_predicate) (Grob *);
+ typedef bool (*Prob_break_predicate) (Prob *);
typedef vector<vsize> Line_division;
/*
*/
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;
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);
#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)
{
}
#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)
{
}
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;
}
create_system_list ();
- find_chunks_and_breaks (is_break);
+ find_chunks_and_breaks (is_break, prob_break);
}
Page_breaking::~Page_breaking ()
}
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");
}
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 (),
}
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));
#include "system.hh"
#include "warn.hh"
+template<typename T>
static bool
-is_break (Grob *g)
+is_break (T *g)
{
bool turnable = scm_is_symbol (g->get_property ("page-turn-permission"));
}
Page_turn_page_breaking::Page_turn_page_breaking (Paper_book *pb)
- : Page_breaking (pb, is_break)
+ : Page_breaking (pb, is_break<Grob>, is_break<Prob>)
{
}