current_event_
&& group_is_equal_to (current_event_);
}
+ void assign_from_event (Stream_event *currevt, Item *item)
+ {
+ number_ = current_event_->get_property ("figure");
+ alteration_ = currevt->get_property ("alteration");
+ augmented_ = currevt->get_property ("augmented");
+ diminished_ = currevt->get_property ("diminished");
+ augmented_slash_ = currevt->get_property ("augmented-slash");
+ text_ = currevt->get_property ("text");
+ figure_item_ = item;
+ }
};
struct Figured_bass_engraver : public Engraver
void process_music ();
};
+Figured_bass_engraver::Figured_bass_engraver ()
+{
+ alignment_ = 0;
+ continuation_ = false;
+ have_rest_ = 0;
+ new_event_found_ = false;
+}
+
void
Figured_bass_engraver::derived_mark () const
{
}
void
-Figured_bass_engraver::stop_translation_timestep ()
+Figured_bass_engraver::start_translation_timestep ()
{
- if (groups_.empty ()
- || now_mom ().main_part_ < stop_moment_.main_part_
+ if (now_mom ().main_part_ < stop_moment_.main_part_
|| now_mom ().grace_part_ < Rational (0))
return ;
-
- bool found = false;
- for (vsize i = 0; !found && i < groups_.size (); i++)
- found = found || groups_[i].current_event_;
- if (!found)
- clear_spanners ();
-}
+ have_rest_ = 0;
+ new_events_.clear ();
+ for (vsize i = 0; i < groups_.size (); i++)
+ groups_[i].current_event_ = 0;
-Figured_bass_engraver::Figured_bass_engraver ()
-{
- alignment_ = 0;
continuation_ = false;
- have_rest_ = 0;
- new_event_found_ = false;
}
void
-Figured_bass_engraver::start_translation_timestep ()
+Figured_bass_engraver::stop_translation_timestep ()
{
- if (now_mom ().main_part_ < stop_moment_.main_part_
+ if (groups_.empty ()
+ || now_mom ().main_part_ < stop_moment_.main_part_
|| now_mom ().grace_part_ < Rational (0))
return ;
-
- have_rest_ = 0;
- new_events_.clear ();
- for (vsize i = 0; i < groups_.size (); i++)
- groups_[i].current_event_ = 0;
- continuation_ = false;
+ bool found = false;
+ for (vsize i = 0; !found && i < groups_.size (); i++)
+ found = found || groups_[i].current_event_;
-
+ if (!found)
+ clear_spanners ();
}
IMPLEMENT_TRANSLATOR_LISTENER (Figured_bass_engraver, rest);
/* Check me, groups_.clear () ? */
}
-void
-Figured_bass_engraver::add_brackets ()
-{
- vector<Grob*> encompass;
- bool inside = false;
- for (vsize i = 0; i < groups_.size (); i ++)
- {
- if (!groups_[i].current_event_)
- continue;
-
- if (to_boolean (groups_[i].current_event_->get_property ("bracket-start")))
- inside = true;
-
- if (inside && groups_[i].figure_item_)
- encompass.push_back (groups_[i].figure_item_);
-
- if (to_boolean (groups_[i].current_event_->get_property ("bracket-stop")))
- {
- inside = false;
-
- Item * brack = make_item ("BassFigureBracket", groups_[i].current_event_->self_scm ());
- for (vsize j = 0; j < encompass.size (); j++)
- {
- Pointer_group_interface::add_grob (brack,
- ly_symbol2scm ("elements"),
- encompass[j]);
- }
- encompass.clear ();
- }
- }
-}
-
void
Figured_bass_engraver::process_music ()
{
if (group.current_event_)
{
Item *item
- = make_item ("BassFigure",
- group.current_event_->self_scm ());
+ = make_item ("BassFigure", group.current_event_->self_scm ());
+ group.assign_from_event (group.current_event_, item);
-
- SCM fig = group.current_event_->get_property ("figure");
if (!group.group_)
{
group.group_ = make_spanner ("BassFigureLine", SCM_EOL);
group.group_->set_bound (LEFT, muscol);
- Align_interface::add_element (alignment_,
- group.group_);
+ Align_interface::add_element (alignment_, group.group_);
}
- if (scm_memq (fig, get_property ("implicitBassFigures")) != SCM_BOOL_F)
+ if (scm_memq (group.number_, get_property ("implicitBassFigures")) != SCM_BOOL_F)
{
item->set_property ("transparent", SCM_BOOL_T);
item->set_property ("implicit", SCM_BOOL_T);
}
-
- group.number_ = fig;
- group.alteration_ = group.current_event_->get_property ("alteration");
- group.augmented_ = group.current_event_->get_property ("augmented");
- group.diminished_ = group.current_event_->get_property ("diminished");
- group.augmented_slash_ = group.current_event_->get_property ("augmented-slash");
- group.text_ = group.current_event_->get_property ("text");
SCM text = group.text_;
if (!Text_interface::is_markup (text)
&& ly_is_procedure (proc))
{
- text = scm_call_3 (proc, fig, group.current_event_->self_scm (),
+ text = scm_call_3 (proc, group.number_, group.current_event_->self_scm (),
context ()->self_scm ());
}
item->set_property ("text", text);
Axis_group_interface::add_element (group.group_, item);
- group.figure_item_ = item;
}
if (group.continuation_line_)
}
+void
+Figured_bass_engraver::add_brackets ()
+{
+ vector<Grob*> encompass;
+ bool inside = false;
+ for (vsize i = 0; i < groups_.size (); i ++)
+ {
+ if (!groups_[i].current_event_)
+ continue;
+
+ if (to_boolean (groups_[i].current_event_->get_property ("bracket-start")))
+ inside = true;
+
+ if (inside && groups_[i].figure_item_)
+ encompass.push_back (groups_[i].figure_item_);
+
+ if (to_boolean (groups_[i].current_event_->get_property ("bracket-stop")))
+ {
+ inside = false;
+
+ Item * brack = make_item ("BassFigureBracket", groups_[i].current_event_->self_scm ());
+ for (vsize j = 0; j < encompass.size (); j++)
+ {
+ Pointer_group_interface::add_grob (brack,
+ ly_symbol2scm ("elements"),
+ encompass[j]);
+ }
+ encompass.clear ();
+ }
+ }
+}
+
ADD_TRANSLATOR (Figured_bass_engraver,
/* doc */
"Make figured bass numbers.",