2 page-breaking.hh -- declare a superclass and utility
3 functions for several different page-breaking algorithms
5 source file of the GNU LilyPond music typesetter
7 (c) 2006 Joe Neeman <joeneeman@gmail.com>
10 #ifndef PAGE_BREAKING_HH
11 #define PAGE_BREAKING_HH
13 #include "constrained-breaking.hh"
14 #include "lily-guile.hh"
16 /* Either a paper-score, markup or header.
20 System_spec (Paper_score*, int);
27 vsize score_break_count_; /* for scores, this is the number of start-points our line-
33 vsize sys_; /* the index in our all_ list */
34 vsize score_break_; /* if sys_ is a score, then we start at the score_brk_'th
35 possible page-break in the score */
37 Break_position (vsize s=VPOS, vsize brk=VPOS)
47 virtual SCM solve () = 0;
49 Page_breaking (Paper_book *pb, bool allow_intra_score_breaks);
50 virtual ~Page_breaking ();
53 std::vector<Break_position> breaks_;
54 std::vector<System_spec> all_;
55 std::vector<Constrained_breaking> line_breaking_;
59 Real page_height (int page_number, bool last);
60 vsize next_system (vsize starting_break_index) const;
62 void create_system_list (bool allow_intra_score_breaks);
63 std::vector<vsize> find_page_break_indices (Paper_score *pscore);
65 SCM make_pages (vector<vsize> lines_per_page, SCM lines);
67 void calc_system_count_bounds (vsize start, vsize end,
71 void divide_systems (vsize system_count, vector<vsize> const &min,
72 vector<vsize> const &max,
73 vector<vector<vsize> > *result,
76 void line_breaker_args (vsize i, vsize *break_st, vsize *break_end);
77 vsize get_min_systems (vsize sys, vsize break_start, vsize break_end);
78 vsize get_max_systems (vsize sys, vsize break_start, vsize break_end);
79 vector<Column_x_positions> get_line_breaks (vsize sys, vsize sys_count, vsize st, vsize end);
80 vector<Line_details> get_line_details (vsize start_break, vsize end_break, vector<vsize> const &div);
82 #endif /* PAGE_BREAKING_HH */