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"
13 #include "paper-def.hh"
20 take out hard coded TeX stuff.
23 Line_of_score::TeX_output_str () const
25 String
s ("\\hbox{%<- line of score\n");
27 s
+= "\\scorelineerrormark";
29 s
+= Score_elem::TeX_output_str();
35 Line_of_score::Line_of_score()
41 IMPLEMENT_IS_TYPE_B1(Line_of_score
,Spanner
);
44 Line_of_score::add (Score_elem
*e
)
46 // avoid excess dependencies.
47 if (!(e
->axis_group_l_a_
[0] || e
->axis_group_l_a_
[1]))
52 Line_of_score::contains_b (Paper_column
const* c
) const
54 return cols
.find_l ((Paper_column
*)c
);
58 Line_of_score::set_breaking (Array
<Col_hpositions
> const &breaking
)
60 for (int j
=0; j
< breaking
.size(); j
++)
62 const Array
<Paper_column
*> &curline (breaking
[j
].cols
);
63 const Array
<Paper_column
*> &errors (breaking
[j
].error_col_l_arr_
);
64 const Array
<Real
> &config (breaking
[j
].config
);
66 for (int i
=0; i
< errors
.size(); i
++)
67 errors
[i
]->error_mark_b_
= true;
69 Line_of_score
*line_l
=0;
70 Line_of_score
*line_p
=0;
72 if (breaking
.size() >1)
74 line_p
= (Line_of_score
*)clone()->spanner ();
80 ((Array
<Paper_column
*> &)line_l
->cols
) = curline
;
81 line_l
->set_bounds(LEFT
,curline
[0]);
83 line_l
->set_bounds(RIGHT
,curline
.top());
87 pscore_l_
->typeset_broken_spanner (line_p
);
88 broken_into_l_arr_
.push (line_p
);
91 for (int i
=0; i
< curline
.size(); i
++)
93 curline
[i
]->translate(config
[i
],X_AXIS
);
94 curline
[i
]->line_l_
= (Line_of_score
*)line_l
;
101 Line_of_score::break_into_pieces (bool)
106 Link_array
<Line_of_score
>
107 Line_of_score::get_lines() const
109 Link_array
<Line_of_score
> ret
;
111 if (broken_into_l_arr_
.size())
112 for (int i
=0; i
< broken_into_l_arr_
.size(); i
++)
114 ret
.push ((Line_of_score
*)broken_into_l_arr_
[i
]);
117 ret
.push ((Line_of_score
*)this); // ugh
123 Line_of_score::do_print() const
129 Line_of_score::do_width() const
131 return Spanner::do_width();
135 Line_of_score::do_breakable_col_processing()
137 for (int i
=0; i
< cols
.size (); i
++)
138 cols
[i
]->breakable_col_processing();
139 Spanner::do_breakable_col_processing();