void add_brackets ();
void create_grobs ();
- void center_continuations (Link_array<Spanner> const &consecutive_lines);
+ void center_continuations (vector<Spanner*> const &consecutive_lines);
void center_repeated_continuations ();
protected:
- Array<Figure_group> groups_;
+ vector<Figure_group> groups_;
Spanner *alignment_;
- Link_array<Music> new_musics_;
+ vector<Music*> new_musics_;
bool continuation_;
bool new_music_found_;
void
Figured_bass_engraver::derived_mark () const
{
- for (int i = 0; i < groups_.size (); i++)
+ for (vsize i = 0; i < groups_.size (); i++)
{
scm_gc_mark (groups_[i].number_);
scm_gc_mark (groups_[i].alteration_);
void
Figured_bass_engraver::stop_translation_timestep ()
{
- if (groups_.is_empty ()
+ if (groups_.empty ()
|| now_mom ().main_part_ < stop_moment_.main_part_
|| now_mom ().grace_part_ < Rational (0))
return ;
bool found = false;
- for (int i = 0; !found && i < groups_.size (); i++)
+ for (vsize i = 0; !found && i < groups_.size (); i++)
found = found || groups_[i].current_music_;
if (!found)
rest_event_ = 0;
new_musics_.clear ();
- for (int i = 0; i < groups_.size (); i++)
- {
- groups_[i].current_music_ = 0;
- }
+ for (vsize i = 0; i < groups_.size (); i++)
+ groups_[i].current_music_ = 0;
continuation_ = false;
}
stop_moment_ = now_mom () + m->get_length ();
SCM fig = m->get_property ("figure");
- for (int i = 0; i < groups_.size (); i++)
+ for (vsize i = 0; i < groups_.size (); i++)
{
if (!groups_[i].current_music_
&& ly_is_equal (groups_[i].number_, fig))
}
}
- new_musics_.push (m);
+ new_musics_.push_back (m);
return true;
}
}
void
-Figured_bass_engraver::center_continuations (Link_array<Spanner> const &consecutive_lines)
+Figured_bass_engraver::center_continuations (vector<Spanner*> const &consecutive_lines)
{
if (consecutive_lines.size () == 2)
{
- Link_array<Grob> left_figs;
- for (int j = consecutive_lines.size(); j--;)
- left_figs.push (consecutive_lines[j]->get_bound (LEFT));
+ vector<Grob*> left_figs;
+ for (vsize j = consecutive_lines.size(); j--;)
+ left_figs.push_back (consecutive_lines[j]->get_bound (LEFT));
SCM ga = Grob_array::make_array ();
unsmob_grob_array (ga)->set_array (left_figs);
- for (int j = consecutive_lines.size(); j--;)
+ for (vsize j = consecutive_lines.size(); j--;)
consecutive_lines[j]->set_object ("figures",
unsmob_grob_array (ga)->smobbed_copy ());
}
void
Figured_bass_engraver::center_repeated_continuations ()
{
- Link_array<Spanner> consecutive_lines;
- for (int i = 0; i <= groups_.size(); i++)
+ vector<Spanner*> consecutive_lines;
+ for (vsize i = 0; i <= groups_.size(); i++)
{
if (i < groups_.size ()
&& groups_[i].continuation_line_
- && (consecutive_lines.is_empty ()
+ && (consecutive_lines.empty ()
|| (consecutive_lines[0]->get_bound(LEFT)->get_column ()
== groups_[i].continuation_line_->get_bound (LEFT)->get_column ()
&& consecutive_lines[0]->get_bound(RIGHT)->get_column ()
== groups_[i].continuation_line_->get_bound (RIGHT)->get_column ())))
- {
- consecutive_lines.push (groups_[i].continuation_line_);
- }
+ consecutive_lines.push_back (groups_[i].continuation_line_);
else
{
center_continuations (consecutive_lines);
{
if (!alignment_)
return;
-
- alignment_ = 0;
+
+ if (alignment_)
+ {
+ announce_end_grob (alignment_, SCM_EOL);
+ alignment_ = 0;
+ }
+
if (to_boolean (get_property ("figuredBassCenterContinuations")))
center_repeated_continuations();
- groups_.clear ();
+ for (vsize i = 0; i < groups_.size (); i++)
+ {
+ if (groups_[i].group_)
+ {
+ announce_end_grob (groups_[i].group_ , SCM_EOL);
+ groups_[i].group_ = 0;
+ }
+
+ if (groups_[i].continuation_line_)
+ {
+ announce_end_grob (groups_[i].continuation_line_ , SCM_EOL);
+ groups_[i].continuation_line_ = 0;
+ }
+ }
+
+ /* Check me, groups_.clear () ? */
}
void
Figured_bass_engraver::add_brackets ()
{
- Link_array<Grob> encompass;
+ vector<Grob*> encompass;
bool inside = false;
- for (int i = 0; i < groups_.size (); i ++)
+ for (vsize i = 0; i < groups_.size (); i ++)
{
if (!groups_[i].current_music_)
continue;
if (to_boolean (groups_[i].current_music_->get_property ("bracket-start")))
- {
- inside = true;
- }
+ inside = true;
if (inside && groups_[i].figure_item_)
- encompass.push (groups_[i].figure_item_);
+ encompass.push_back (groups_[i].figure_item_);
if (to_boolean (groups_[i].current_music_->get_property ("bracket-stop")))
{
inside = false;
Item * brack = make_item ("BassFigureBracket", groups_[i].current_music_->self_scm ());
- for (int j = 0; j < encompass.size (); j++)
+ for (vsize j = 0; j < encompass.size (); j++)
{
Pointer_group_interface::add_grob (brack,
ly_symbol2scm ("elements"),
if (rest_event_)
{
clear_spanners ();
+ groups_.clear ();
return;
}
if (!continuation_
- && new_musics_.is_empty ())
+ && new_musics_.empty ())
{
clear_spanners ();
+ groups_.clear ();
return;
}
if (!new_music_found_)
- return ;
+ return;
new_music_found_ = false;
bool use_extenders = to_boolean (get_property ("useBassFigureExtenders"));
if (!use_extenders)
{
- if (to_boolean (get_property ("figuredBassCenterContinuations")))
- center_repeated_continuations ();
- alignment_ = 0;
- for (int i = 0; i < groups_.size (); i++)
- {
- groups_[i].group_ = 0;
- groups_[i].continuation_line_ = 0;
- }
+ clear_spanners ();
}
if (!continuation_)
{
clear_spanners ();
+ groups_.clear ();
}
-
- int k = 0;
- for (int i = 0; i < new_musics_.size (); i++)
+
+ vsize k = 0;
+ for (vsize i = 0; i < new_musics_.size (); i++)
{
- while (k < groups_.size() &&
- groups_[k].current_music_)
+ while (k < groups_.size ()
+ && groups_[k].current_music_)
k++;
if (k >= groups_.size ())
{
Figure_group group;
- groups_.push (group);
+ groups_.push_back (group);
}
groups_[k].current_music_ = new_musics_[i];
k++;
}
- for (int i = 0; i < groups_.size (); i++)
+ for (vsize i = 0; i < groups_.size (); i++)
{
if (!groups_[i].is_continuation ())
{
if (use_extenders)
{
- Array<int> junk_continuations;
- for (int i = 0; i < groups_.size(); i++)
+ vector<int> junk_continuations;
+ for (vsize i = 0; i < groups_.size(); i++)
{
Figure_group &group = groups_[i];
}
}
else if (group.continuation_line_)
- junk_continuations.push (i);
+ junk_continuations.push_back (i);
}
/*
Ugh, repeated code.
*/
- Link_array<Spanner> consecutive;
+ vector<Spanner*> consecutive;
if (to_boolean (get_property ("figuredBassCenterContinuations")))
{
- for (int i = 0; i <= junk_continuations.size (); i++)
+ for (vsize i = 0; i <= junk_continuations.size (); i++)
{
if (i < junk_continuations.size()
&& (i == 0 || junk_continuations[i-1] == junk_continuations[i] - 1))
- consecutive.push (groups_[junk_continuations[i]].continuation_line_);
+ consecutive.push_back (groups_[junk_continuations[i]].continuation_line_);
else
{
center_continuations (consecutive);
consecutive.clear ();
if (i < junk_continuations.size ())
- consecutive.push (groups_[junk_continuations[i]].continuation_line_);
+ consecutive.push_back (groups_[junk_continuations[i]].continuation_line_);
}
}
}
- for (int i = 0; i < junk_continuations.size (); i++)
+ for (vsize i = 0; i < junk_continuations.size (); i++)
groups_[junk_continuations[i]].continuation_line_ = 0;
}
alignment_->set_bound (RIGHT, muscol);
SCM proc = get_property ("figuredBassFormatter");
- for (int i = 0; i < groups_.size(); i++)
+ for (vsize i = 0; i < groups_.size(); i++)
{
Figure_group &group = groups_[i];
group.figure_item_->set_property ("transparent", SCM_BOOL_T);
group.continuation_line_->set_bound (RIGHT, group.figure_item_);
}
-
if (groups_[i].group_)
groups_[i].group_->set_bound (RIGHT, muscol);
+
}
}
/* create */
"BassFigure "
"BassFigureAlignment "
- "BassFigureBracket",
+ "BassFigureBracket "
"BassFigureContinuation "
"BassFigureLine "
-
+ ,
/* accept */
"bass-figure-event rest-event",
/* read */
+ "figuredBassAlterationDirection "
"figuredBassCenterContinuations "
- "implicitBassFigures "
"figuredBassFormatter "
- "figuredBassAlterationDirection "
- "useBassFigureExtenders",
+ "implicitBassFigures "
+ "useBassFigureExtenders "
+ ,
/* write */
"");