1 // the breaking problem for a score.
11 /// all stuff which goes onto paper
13 Paperdef *paper_; // indirection.
15 /// the columns, ordered left to right
16 IPointerList<PCol *> cols;
18 /// the idealspacings, no particular order
19 IPointerList<Idealspacing*> suz;
21 /// the staffs ordered top to bottom
22 IPointerList<PStaff*> staffs;
24 /// all symbols in score. No particular order.
25 IPointerList<Item*> its;
27 /// if broken, the different lines
28 IPointerList<Line_of_score*> lines;
30 /// crescs etc; no particular order
31 IPointerList<Spanner *> spanners;
34 IPointerList<Spanner*> broken_spans;
38 void add_broken(Spanner*);
40 svec<Item*> select_items(PStaff*, PCol*);
42 /// before calc_breaking
47 calculate where the lines are to be broken.
51 lines contain the broken lines.
54 /// after calc_breaking
57 /// search all pcols which are breakable.
58 svec< PCol *> find_breaks() const;
60 /// add a line to the broken stuff. Positions given in #config#
61 void add_line(svec< PCol *> curline, svec<Real> config);
63 /// helper: solve for the columns in #curline#.
64 svec<Real> solve_line(svec<PCol *> curline) const;
68 void typeset_item(Item *, PCol *,PStaff*,int=1);
71 void typeset_spanner(Spanner*, PStaff*);
73 /// add to bottom of pcols
78 void output(Tex_stream &ts);
80 Idealspacing* get_spacing(PCol *, PCol *);
82 get the spacing between c1 and c2, create one if necessary.
85 /// return argument as a cursor.
86 PCursor<PCol *> find_col(PCol *)const;
88 /// delete unused columns
92 /// check if the spacing/breaking problem is well-stated
93 void problem_OK() const;
100 /// does curline fit on the paper?
101 bool feasible(svec<PCol *> curline) const;
103 /// which is first (left, higher)
104 int compare_pcols( PCol*, PCol*)const;
106 /** notes, signs, symbols in a score can be grouped in two ways:
107 horizontally (staffwise), and vertically (columns). #PScore#
108 contains the items, the columns and the staffs.