2 scoreline.cc -- implement Line_of_score
4 source file of the GNU LilyPond music typesetter
6 (c) 1996, 1997 Han-Wen Nienhuys <hanwen@stack.nl>
9 #include "scoreline.hh"
10 #include "staffline.hh"
14 #include "paper-def.hh"
20 take out hard coded TeX stuff.
24 Line_of_score::TeX_string() const
26 String s("\\hbox{%<- line of score\n");
28 s+= "\\scorelineerrormark";
31 Real lastpos = cols[0]->hpos;
32 for (int i=0; i < cols.size(); i++){
34 // all items in the current line & staff.
36 Real delta = col_l->hpos - lastpos;
39 if (col_l->error_mark_b_) {
40 chunk_str += String("\\columnerrormark");
42 // now output the items.
43 for (iter_top(col_l->its,j); j.ok(); j++) {
44 chunk_str += j->TeX_string();
47 for (iter_top(col_l->starters,j); j.ok(); j++) {
48 if (j->name() != name())
49 chunk_str += j->TeX_string();
54 s +=String( "\\kern ") + print_dimen(delta);
56 lastpos = col_l->hpos;
64 Line_of_score::Line_of_score()
72 IMPLEMENT_STATIC_NAME(Line_of_score);
73 IMPLEMENT_IS_TYPE_B1(Line_of_score,Spanner);
76 Line_of_score::add(Score_elem*e)
82 Line_of_score::contains_b(PCol const* c)const
84 return cols.find_l((PCol*)c);
88 Line_of_score::set_breaking(Array<Col_hpositions> const &breaking)
90 for (int j=0; j < breaking.size(); j++) {
91 const Array<PCol*> &curline(breaking[j].cols);
92 const Array<PCol*> &errors(breaking[j].error_col_l_arr_);
93 const Array<Real> &config(breaking[j].config);
95 for (int i=0; i < errors.size(); i++)
96 errors[i]->error_mark_b_ = true;
98 Line_of_score *line_l=0;
99 Line_of_score *line_p =0;
101 if (breaking.size() >1) {
102 line_p = (Line_of_score*)clone()->spanner();
107 ((Array<PCol*> &)line_l->cols) = curline;
108 line_l->left_col_l_ = curline[0];
109 line_l->right_col_l_= curline.top();
112 pscore_l_->typeset_broken_spanner(line_p);
113 broken_into_l_arr_.push(line_p);
116 for (int i=0; i < curline.size(); i++){
117 curline[i]->hpos = config[i];
118 curline[i]->line_l_ = (Line_of_score*)line_l;
124 Line_of_score::break_into_pieces()
128 Link_array<Line_of_score>
129 Line_of_score::get_lines()const
131 Link_array<Line_of_score> ret;
133 if(broken_into_l_arr_.size())
134 for (int i=0; i < broken_into_l_arr_.size(); i++) {
135 ret.push((Line_of_score*)broken_into_l_arr_[i]);
138 ret.push((Line_of_score*)this); // ugh
144 Line_of_score::do_print()const
150 Line_of_score::do_width()const
152 return Spanner::do_width();