From 7b9f4a6b5490fd9c1ba5439a79591c387c17b23b Mon Sep 17 00:00:00 2001 From: fred Date: Sun, 24 Mar 2002 19:56:12 +0000 Subject: [PATCH] lilypond-0.1.11 --- lily/p-score.cc | 288 ++++++++++++++++++++++-------------------------- 1 file changed, 129 insertions(+), 159 deletions(-) diff --git a/lily/p-score.cc b/lily/p-score.cc index dbf5d84525..ffa0dcfc2b 100644 --- a/lily/p-score.cc +++ b/lily/p-score.cc @@ -15,55 +15,35 @@ #include "p-score.hh" #include "tex-stream.hh" #include "p-col.hh" - +#include "header.hh" #include "word-wrap.hh" #include "gourlay-breaking.hh" -Paper_score::Paper_score (Paper_def*p) +Paper_score::Paper_score () { - paper_l_ = p; super_elem_l_ = new Super_elem; typeset_element (super_elem_l_); } -Paper_score::~Paper_score() +Paper_score::~Paper_score () { - super_elem_l_->unlink_all(); + super_elem_l_->unlink_all (); + for (PCursor i(elem_p_list_.top()); i.ok(); i++) + assert(!i->linked_b()); } void Paper_score::typeset_element (Score_elem * elem_p) { - elem_p_list_.bottom().add (elem_p); + elem_p_list_.bottom ().add (elem_p); elem_p->pscore_l_ = this; - elem_p->add_processing(); -} - -void -Paper_score::typeset_item (Item *i, PCol *c) -{ - assert (c && i); - int breakstat = i->break_status_i_; - - if (breakstat == -1) - { - c = c->prebreak_p_; - }else if (breakstat == 1) - { - c = c->postbreak_p_; - } - - c->add (i); - typeset_element (i); + elem_p->add_processing (); } void Paper_score::typeset_broken_spanner (Spanner*span_p) { - span_p->left_col_l_->starters.bottom().add (span_p); - assert (span_p->left_col_l_->line_l_ == span_p->right_col_l_->line_l_); - typeset_element (span_p); } @@ -71,111 +51,82 @@ Paper_score::typeset_broken_spanner (Spanner*span_p) void Paper_score::typeset_unbroken_spanner (Spanner*span_p) { - span_p_list_.bottom().add (span_p); + span_p_list_.bottom ().add (span_p); span_p->pscore_l_=this; - if (span_p->left_col_l_) - span_p->left_col_l_->used_b_ = true; - if ( span_p->right_col_l_) - span_p->right_col_l_->used_b_ = true; // do not init start/stop fields. These are for broken spans only. - span_p->add_processing(); + span_p->add_processing (); } void -Paper_score::clean_cols() +Paper_score::clean_cols () { int rank_i = 0; - for (iter_top (col_p_list_,c); c.ok();) - if (!c->used_b()) - { - delete c.remove_p(); - } - else - { - c->set_rank (rank_i++); - c++; - } -} - -void -Paper_score::add (PCol *p) -{ - p->pscore_l_ = this; - if (p->breakable_b()) + for (iter_top (col_p_list_,c); c.ok ();) { - p->prebreak_p_->pscore_l_ = this; - p->postbreak_p_->pscore_l_ = this; + c->set_rank (rank_i++); + c++; } - col_p_list_.bottom().add (p); } void -Paper_score::output (Tex_stream &ts) +Paper_score::add_column (Paper_column *p) { - ts << "\n "<< paper_l_->lookup_l()->texsetting << "%(Tex id)\n"; - ts<< super_elem_l_->TeX_string(); - ts << "\n\\EndLilyPondOutput"; + col_p_list_.bottom ().add (p); + typeset_element(p); } + void -Paper_score::OK()const +Paper_score::OK () const { #ifndef NDEBUG - for (iter_top (col_p_list_,cc); cc.ok(); cc++) - cc->OK(); - for (PCursor i (elem_p_list_.top()); i.ok (); i++) - i->OK(); + for (PCursor i (elem_p_list_.top ()); i.ok (); i++) + i->OK (); #endif } void -Paper_score::print() const +Paper_score::print () const { #ifndef NPRINT - if ( !check_debug) - return ; + if (!check_debug) + return ; DOUT << "Paper_score { "; - paper_l_->print(); DOUT << "\n elements: "; - for (iter_top (elem_p_list_,cc); cc.ok(); cc++) - cc->print(); + for (iter_top (elem_p_list_,cc); cc.ok (); cc++) + cc->print (); DOUT << "\n unbroken spanners: "; - for (iter (span_p_list_.top(), i); i.ok (); i++) - i->print(); - DOUT << "\ncolumns: "; - for (iter_top (col_p_list_,cc); cc.ok(); cc++) - cc->print(); + for (iter (span_p_list_.top (), i); i.ok (); i++) + i->print (); DOUT << "}\n"; #endif } void -Paper_score::preprocess() +Paper_score::preprocess () { - super_elem_l_->breakable_col_processing(); - super_elem_l_->pre_processing(); + super_elem_l_->breakable_col_processing (); + super_elem_l_->pre_processing (); } void -Paper_score::postprocess() +Paper_score::postprocess () { - super_elem_l_->post_processing(); - super_elem_l_->molecule_processing(); + super_elem_l_->post_processing (); + super_elem_l_->molecule_processing (); } -PCursor -Paper_score::find_col (PCol const *c)const +PCursor +Paper_score::find_col (Paper_column const *c) const { - PCol const *what = c; - if (what->daddy_l_) - what = what->daddy_l_; + Paper_column const *what = c; - return col_p_list_.find ((PCol*)what); + return col_p_list_.find ((Paper_column*)what); } @@ -183,139 +134,158 @@ void Paper_score::set_breaking (Array const &breaking) { super_elem_l_->line_of_score_l_->set_breaking (breaking); - super_elem_l_->break_processing(); + super_elem_l_->break_processing (); - for (iter (span_p_list_.top(),i); i.ok ();) + for (iter (span_p_list_.top (),i); i.ok ();) { - Spanner *span_p = i.remove_p(); - if (span_p->broken_b()) - { - span_p->unlink(); - delete span_p; + Spanner *span_p = i.remove_p (); + if (span_p->broken_b ()) + { + span_p->unlink (); + delete span_p; }else { typeset_broken_spanner (span_p); } } - for (iter (elem_p_list_.top(),i); i.ok () ;) + for (iter (elem_p_list_.top (),i); i.ok () ;) { - Item *i_l =i->item(); - if ( i_l && !i_l->pcol_l_->line_l_) - { - i_l->unlink(); - delete i.remove_p(); - } - else - i++; + Item *i_l =i->item (); + if (i_l && !i_l->line_l ()) + { + i_l->unlink (); + delete i.remove_p (); + } + else + i++; } - - for (iter_top (col_p_list_, i); i.ok(); i++) - i->clean_breakable_items(); } void -Paper_score::calc_breaking() +Paper_score::calc_breaking () { - Break_algorithm *algorithm_p; + Break_algorithm *algorithm_p=0; Array sol; bool try_wrap = ! paper_l_->get_var ("castingalgorithm"); if (!try_wrap) { - algorithm_p = new Gourlay_breaking ; - algorithm_p->set_pscore (this); - sol = algorithm_p->solve(); - delete algorithm_p; - if ( ! sol.size()) - { - warning ("Can not solve this casting problem exactly; revert to Word_wrap"); - try_wrap = true; - } + algorithm_p = new Gourlay_breaking ; + algorithm_p->set_pscore (this); + sol = algorithm_p->solve (); + delete algorithm_p; + if (! sol.size ()) + { + warning ("Can not solve this casting problem exactly; revert to Word_wrap"); + try_wrap = true; + } } if (try_wrap) { - algorithm_p = new Word_wrap; - algorithm_p->set_pscore (this); - sol = algorithm_p->solve(); - delete algorithm_p; + algorithm_p = new Word_wrap; + algorithm_p->set_pscore (this); + sol = algorithm_p->solve (); + delete algorithm_p; } set_breaking (sol); } void -Paper_score::process() +Paper_score::process () { - clean_cols(); - print(); + clean_cols (); + print (); *mlog << "Preprocessing elements... " <outfile_str_ ; + if (outname == "") + outname = default_out_str_+ ".tex"; -#ifndef NDEBUGA - for (PCursor i (elem_p_list_.top()); i.ok (); i++) - assert (i->status() >= 9); -#endif + *mlog << "TeX output to " << outname << " ...\n"; + + Tex_stream the_output (outname); + + the_output << "% outputting Score, defined at: " << origin_str_ << "\n"; + if (header_l_) + { + the_output << header_l_->TeX_string(); + } + + the_output << "\n "<< paper_l_->lookup_l ()->texsetting << "%(Tex id)\n"; + the_output<< super_elem_l_->TeX_output_str (); + the_output << "\n\\EndLilyPondOutput"; } /** Get all breakable columns between l and r, (not counting l and r). */ -Link_array -Paper_score::breakable_col_range (PCol*l,PCol*r)const +Link_array +Paper_score::breakable_col_range (Paper_column*l,Paper_column*r) const { - Link_array ret; + Link_array ret; - PCursor start (l ? find_col (l)+1 : col_p_list_.top()); - PCursor stop (r ? find_col (r) : col_p_list_.bottom()); + PCursor start (l ? find_col (l)+1 : col_p_list_.top ()); + PCursor stop (r ? find_col (r) : col_p_list_.bottom ()); /* ugh! windows-suck-suck-suck. - */ - while ( PCursor::compare (start,stop) < 0) + */ + while (PCursor::compare (start,stop) < 0) { - if (start->breakable_b()) - ret.push (start); - start++; + if (start->breakable_b_) + ret.push (start); + start++; } return ret; } -Link_array -Paper_score::col_range (PCol*l,PCol*r)const +Link_array +Paper_score::col_range (Paper_column*l, Paper_column*r) const { - Link_array ret; + Link_array ret; - PCursor start (l ? find_col (l)+1 : col_p_list_.top()); - PCursor stop (r ? find_col (r) : col_p_list_.bottom()); + PCursor start (l ? find_col (l)+1 : col_p_list_.top ()); + PCursor stop (r ? find_col (r) : col_p_list_.bottom ()); ret.push (l); /* ugh! windows-suck-suck-suck. - */ - while ( PCursor::compare (start,stop) < 0) - ret.push (start++); + */ + while (PCursor::compare (start,stop) < 0) + ret.push (start++); ret.push (r); return ret; } -Link_array -Paper_score::broken_col_range (PCol*l,PCol*r)const +Link_array +Paper_score::broken_col_range (Item const*l_item_l, Item const*r_item_l) const { - Link_array ret; - - PCursor start (l ? find_col (l)+1 : col_p_list_.top()); - PCursor stop (r ? find_col (r) : col_p_list_.bottom()); + Link_array ret; + Item const*l=l_item_l; + Item const*r=r_item_l; + + while (! l->is_type_b(Paper_column::static_name ())) + l = l->axis_group_l_a_[X_AXIS]->item (); + + while (! r->is_type_b(Paper_column::static_name ())) + r = r->axis_group_l_a_[X_AXIS]->item (); + + PCursor start (l ? find_col ((Paper_column*)l)+1 : col_p_list_.top ()); + PCursor stop (r ? find_col ((Paper_column*)r) : col_p_list_.bottom ()); /* ugh! windows-suck-suck-suck. */ - while ( PCursor::compare (start,stop) < 0) + while (PCursor::compare (start,stop) < 0) { - if (start->breakable_b() && !start->line_l_) - ret.push (start); - start++; + if (start->breakable_b_ && !start->line_l_) + ret.push (start); + start++; } return ret; -- 2.39.5