--- /dev/null
+/*
+ line-spacer.hh -- declare Line_spacer
+
+ source file of the GNU LilyPond music typesetter
+
+ (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
+*/
+
+
+#ifndef LINE_SPACER_HH
+#define LINE_SPACER_HH
+#include "lily-proto.hh"
+#include "varray.hh"
+#include "vector.hh"
+#include "interval.hh"
+
+/**
+ abstract interface to Line spacing.
+
+ TODO
+ add estimate of "force" or energy.
+ */
+
+class Line_spacer
+{
+
+public:
+ Paper_def * paper_l_;
+ Paper_def *paper_l()const;
+ Line_spacer();
+
+ virtual Array<PCol*> error_pcol_l_arr() const=0;
+
+ /** solve the spacing problem
+
+ @return the column positions, and the energy (last element)
+
+ */
+ virtual Array<Real> solve() const=0;
+
+ /** add a col to the problem. columns have to be added left to
+ right. The column contains info on it's minimum width. */
+ virtual void add_column(PCol *, bool fixed=false, Real fixpos=0.0)=0;
+
+ /**
+ can the posed problem be solved?
+
+ @pre
+
+ prepare() was called
+
+ */
+ virtual bool check_constraints(Vector v) const=0;
+
+ /**
+ generate a solution which can't fail
+ */
+ virtual Vector default_solution() const=0;
+
+ virtual void OK() const{}
+ virtual void print() const{}
+
+ /**
+ Call after construction before solving
+ */
+ virtual void prepare(){}
+};
+
+#endif
--- /dev/null
+/*
+ line-spacer.cc -- implement
+
+ source file of the GNU LilyPond music typesetter
+
+ (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
+*/
+
+
+#include "line-spacer.hh"
+
+Line_spacer::Line_spacer()
+{
+ paper_l_ =0;
+}
+Paper_def*
+Line_spacer::paper_l()const
+{
+
+
+ return paper_l_ ;
+}
(c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
*/
-#include "break.hh"
+#include "word-wrap.hh"
#include "p-score.hh"
#include "debug.hh"
#include "p-col.hh"
+#include "spring-spacer.hh"
+
+
/** el stupido. This should be done more accurately:
It would be nice to have a Dynamic Programming type of algorithm
similar to TeX's
- */
+ */
Array<Col_hpositions>
Word_wrap::do_solve()const
{
problem_OK();
- iter_top(pscore_.cols,curcol);
+ iter_top(pscore_l_->col_p_list_,curcol);
Array<Col_hpositions> breaking;
Line_of_cols breakpoints(find_breaks());
assert(breakpoints.size()>=2);
Word_wrap::Word_wrap(PScore&ps)
: Break_algorithm(ps)
{
+ get_line_spacer = Spring_spacer::constructor;
}