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_B2(Line_of_score,Spanner,Vertical_align_elem);
76 Line_of_score::add(Score_elem*e)
78 if (e->is_type_b( Line_of_staff::static_name())
79 && ! Vertical_align_elem::contains_b( e) )
81 Vertical_align_elem::add(e);
88 Line_of_score::contains_b(PCol const* c)const
90 return cols.find_l((PCol*)c);
94 Line_of_score::set_breaking(Array<Col_hpositions> const &breaking)
96 for (int j=0; j < breaking.size(); j++) {
97 const Array<PCol*> &curline(breaking[j].cols);
98 const Array<PCol*> &errors(breaking[j].error_col_l_arr_);
99 const Array<Real> &config(breaking[j].config);
101 for (int i=0; i < errors.size(); i++)
102 errors[i]->error_mark_b_ = true;
104 Line_of_score *line_l=0;
105 Line_of_score *line_p =0;
107 if (breaking.size() >1) {
108 line_p = (Line_of_score*)clone()->spanner();
113 ((Array<PCol*> &)line_l->cols) = curline;
114 line_l->left_col_l_ = curline[0];
115 line_l->right_col_l_= curline.top();
118 pscore_l_->typeset_broken_spanner(line_p);
119 broken_into_l_arr_.push(line_p);
122 for (int i=0; i < curline.size(); i++){
123 curline[i]->hpos = config[i];
124 curline[i]->line_l_ = (Line_of_score*)line_l;
130 Line_of_score::break_into_pieces()
134 Link_array<Line_of_score>
135 Line_of_score::get_lines()const
137 Link_array<Line_of_score> ret;
139 if(broken_into_l_arr_.size())
140 for (int i=0; i < broken_into_l_arr_.size(); i++) {
141 ret.push((Line_of_score*)broken_into_l_arr_[i]);
144 ret.push((Line_of_score*)this); // ugh
150 Line_of_score::do_print()const
156 Line_of_score::do_width()const
158 return Spanner::do_width();
162 Line_of_score::do_substitute_dependency(Score_elem*o,Score_elem*n)
164 Spanner::do_substitute_dependency(o,n);
165 Vertical_align_elem::do_substitute_dependency(o,n);