From 1f0cc94f3344b3962fe7a178ee0d299e24c18ef2 Mon Sep 17 00:00:00 2001 From: fred Date: Tue, 26 Mar 2002 22:46:56 +0000 Subject: [PATCH] lilypond-1.3.33 --- lily/include/atom.hh | 17 ------- lily/include/axis-align-item.hh | 6 ++- lily/include/axis-align-spanner.hh | 6 ++- lily/include/axis-group-element.hh | 4 +- lily/include/axis-group-item.hh | 4 +- lily/include/axis-group-spanner.hh | 6 ++- lily/include/line-of-score.hh | 2 +- lily/include/super-element.hh | 6 +-- lily/spanner.cc | 77 ++++++++++++++++++++---------- 9 files changed, 72 insertions(+), 56 deletions(-) diff --git a/lily/include/atom.hh b/lily/include/atom.hh index 576dc45e1a..e69de29bb2 100644 --- a/lily/include/atom.hh +++ b/lily/include/atom.hh @@ -1,17 +0,0 @@ -/* - atom.hh -- declare Atom - - source file of the GNU LilyPond music typesetter - - (c) 1997--2000 Han-Wen Nienhuys -*/ - -#ifndef ATOM_HH -#define ATOM_HH - -#include "lily-proto.hh" - -#include "lily-guile.hh" - - -#endif diff --git a/lily/include/axis-align-item.hh b/lily/include/axis-align-item.hh index b6a0ab5231..bcea4e18d9 100644 --- a/lily/include/axis-align-item.hh +++ b/lily/include/axis-align-item.hh @@ -13,8 +13,10 @@ #include "align-element.hh" #include "axis-group-item.hh" -class Axis_align_item : public virtual Align_element, - public virtual Axis_group_item +/* + UGH. FIXME: multiple inheritance. + */ +class Axis_align_item : public virtual Align_element, public virtual Axis_group_item { public: Axis_align_item (); diff --git a/lily/include/axis-align-spanner.hh b/lily/include/axis-align-spanner.hh index 9fdb72194d..0352968aee 100644 --- a/lily/include/axis-align-spanner.hh +++ b/lily/include/axis-align-spanner.hh @@ -14,8 +14,10 @@ #include "align-element.hh" #include "axis-group-spanner.hh" -class Axis_align_spanner : public virtual Align_element, - public virtual Axis_group_spanner +/* + FIXME: multiple inheritance + */ +class Axis_align_spanner : public virtual Align_element, public virtual Axis_group_spanner { public: VIRTUAL_COPY_CONS(Score_element); diff --git a/lily/include/axis-group-element.hh b/lily/include/axis-group-element.hh index 969fd7b736..83acd188b1 100644 --- a/lily/include/axis-group-element.hh +++ b/lily/include/axis-group-element.hh @@ -16,7 +16,9 @@ /** Treat a group of elements a unity in either or both axis sense . This is a wrapper around Axis_group_administration - */ + + FIXME: remove this class, and make interface of it, so we can remove multiple inheritance. +*/ class Axis_group_element : public virtual Score_element { /// modify fields of E for removal. diff --git a/lily/include/axis-group-item.hh b/lily/include/axis-group-item.hh index 06561d0301..0f88cc78bb 100644 --- a/lily/include/axis-group-item.hh +++ b/lily/include/axis-group-item.hh @@ -16,9 +16,7 @@ /** A grouping item. Its special support is in do_breakable_col_processing(). */ - -class Axis_group_item : public virtual Axis_group_element, - public virtual Item +class Axis_group_item : public virtual Axis_group_element, public virtual Item { public: VIRTUAL_COPY_CONS(Score_element); diff --git a/lily/include/axis-group-spanner.hh b/lily/include/axis-group-spanner.hh index a88d9c3dad..d421973f50 100644 --- a/lily/include/axis-group-spanner.hh +++ b/lily/include/axis-group-spanner.hh @@ -13,8 +13,10 @@ #include "spanner.hh" #include "axis-group-element.hh" -/** An element which groups a line in a certain direction. The most - useful example of this is the Vertical_group_spanner */ +/** + An element which groups a line in a certain direction. The most + useful example of this is the Vertical_group_spanner +*/ class Axis_group_spanner : public virtual Axis_group_element, public virtual Spanner diff --git a/lily/include/line-of-score.hh b/lily/include/line-of-score.hh index 1c65a78ebc..994a50b20d 100644 --- a/lily/include/line-of-score.hh +++ b/lily/include/line-of-score.hh @@ -11,7 +11,7 @@ #include "axis-group-spanner.hh" #include "super-element.hh" -/// the columns of a score that form one line. +/// the columns of a score that form one line. FIXME: multiple inheritance class Line_of_score : public Axis_group_spanner, public Super_element { public: diff --git a/lily/include/super-element.hh b/lily/include/super-element.hh index c27d1bd963..8c574bb683 100644 --- a/lily/include/super-element.hh +++ b/lily/include/super-element.hh @@ -19,14 +19,14 @@ dependency graph, and calls the appropriate Score_element::do_XXX_processing function on each Score_element it encounters. - - */ + + FIXME: remove this class, to eliminate multiple inheritance. Merge + with Line_of_score ? */ class Super_element : public virtual Score_element { public: void space_processing (); void pre_processing(); void breakable_col_processing(); - void break_processing(); void post_processing(); void output_all (); }; diff --git a/lily/spanner.cc b/lily/spanner.cc index 7d0ca15fdd..2bc8b98ab4 100644 --- a/lily/spanner.cc +++ b/lily/spanner.cc @@ -32,38 +32,58 @@ Spanner::do_break_processing() if (left == right) { warning (_ ("Left spanpoint is right spanpoint")); - return; - } - - Link_array break_points = pscore_l_->broken_col_range (left,right); - - break_points.insert (left,0); - break_points.push (right); - for (int i=1; i < break_points.size(); i++) - { - Drul_array bounds; - bounds[LEFT] = break_points[i-1]; - bounds[RIGHT] = break_points[i]; + /* + FIXME: this is broken. + */ + /* + If we have a spanner spanning one column, we must break it + anyway because it might provide a parent for another item. */ Direction d = LEFT; do { - Item *&pc_l = bounds[d] ; - if (!pc_l->line_l()) - pc_l = pc_l->find_broken_piece(- d); - - assert (pc_l); + Item* bound = left->find_broken_piece (d); + Spanner * span_p = dynamic_cast( clone ()); + span_p->set_bound (LEFT, bound); + span_p->set_bound (RIGHT, bound); + + assert (span_p->line_l ()); + pscore_l_->typeset_element (span_p); + broken_into_l_arr_.push (span_p); } while ((flip(&d))!= LEFT); + } + else + { + Link_array break_points = pscore_l_->broken_col_range (left,right); - Spanner *span_p = dynamic_cast(clone ()); - span_p->set_bounds(LEFT,bounds[LEFT]); - span_p->set_bounds(RIGHT,bounds[RIGHT]); + break_points.insert (left,0); + break_points.push (right); + + for (int i=1; i < break_points.size(); i++) + { + Drul_array bounds; + bounds[LEFT] = break_points[i-1]; + bounds[RIGHT] = break_points[i]; + Direction d = LEFT; + do + { + Item *&pc_l = bounds[d] ; + if (!pc_l->line_l()) + pc_l = pc_l->find_broken_piece(- d); + + assert (pc_l); + } + while ((flip(&d))!= LEFT); + + Spanner *span_p = dynamic_cast(clone ()); + span_p->set_bound(LEFT,bounds[LEFT]); + span_p->set_bound(RIGHT,bounds[RIGHT]); - pscore_l_->typeset_element (span_p); - broken_into_l_arr_.push (span_p); + pscore_l_->typeset_element (span_p); + broken_into_l_arr_.push (span_p); + } } - broken_into_l_arr_.sort (Spanner::compare); } @@ -74,13 +94,20 @@ Spanner::set_my_columns() do { if (!spanned_drul_[i]->line_l()) - set_bounds(i,spanned_drul_[i]->find_broken_piece((Direction) -i)); + set_bound(i,spanned_drul_[i]->find_broken_piece((Direction) -i)); } while (flip(&i) != LEFT); } + +Item* +Spanner::get_bound (Direction d) const +{ + return spanned_drul_ [d]; +} + void -Spanner::set_bounds(Direction d, Item*i) +Spanner::set_bound(Direction d, Item*i) { spanned_drul_[d] =i; if (i) -- 2.39.5