source file of the GNU LilyPond music typesetter
- (c) 2005--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ (c) 2005--2009 Han-Wen Nienhuys <hanwen@xs4all.nl>
*/
SCM number_;
SCM alteration_;
+ SCM augmented_;
+ SCM diminished_;
+ SCM augmented_slash_;
Item *figure_item_;
Stream_event *current_event_;
continuation_line_ = 0;
number_ = SCM_EOL;
alteration_ = SCM_EOL;
+ augmented_ = SCM_EOL;
+ diminished_ = SCM_EOL;
+ augmented_slash_ = SCM_EOL;
group_ = 0;
current_event_ = 0;
}
&& ly_is_equal (number_,
current_event_->get_property ("figure"))
&& ly_is_equal (alteration_,
- current_event_->get_property ("alteration"));
+ current_event_->get_property ("alteration"))
+ && ly_is_equal (augmented_,
+ current_event_->get_property ("augmented"))
+ && ly_is_equal (diminished_,
+ current_event_->get_property ("diminished"))
+ && ly_is_equal (augmented_slash_,
+ current_event_->get_property ("augmented-slash"));
}
};
struct Figured_bass_engraver : public Engraver
{
- TRANSLATOR_DECLARATIONS(Figured_bass_engraver);
- void clear_spanners();
+ TRANSLATOR_DECLARATIONS (Figured_bass_engraver);
+ void clear_spanners ();
void add_brackets ();
void create_grobs ();
{
scm_gc_mark (groups_[i].number_);
scm_gc_mark (groups_[i].alteration_);
+ scm_gc_mark (groups_[i].augmented_);
+ scm_gc_mark (groups_[i].diminished_);
+ scm_gc_mark (groups_[i].augmented_slash_);
}
}
new_event_found_ = true;
/*
- No ASSIGN_EVENT_ONCE() ; otherwise we get warnings about
+ No ASSIGN_EVENT_ONCE () ; otherwise we get warnings about
polyphonic rests.
*/
rest_event_ = ev;
Figured_bass_engraver::listen_bass_figure (Stream_event *ev)
{
new_event_found_ = true;
- Moment stop = now_mom () + get_event_length (ev);
+ Moment stop = now_mom () + get_event_length (ev, now_mom ());
stop_moment_ = max (stop_moment_, stop);
if (to_boolean (get_property ("useBassFigureExtenders")))
if (consecutive_lines.size () == 2)
{
vector<Grob*> left_figs;
- for (vsize j = consecutive_lines.size(); j--;)
+ 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 (vsize j = consecutive_lines.size(); j--;)
+ for (vsize j = consecutive_lines.size (); j--;)
consecutive_lines[j]->set_object ("figures",
unsmob_grob_array (ga)->smobbed_copy ());
}
Figured_bass_engraver::center_repeated_continuations ()
{
vector<Spanner*> consecutive_lines;
- for (vsize i = 0; i <= groups_.size(); i++)
+ for (vsize i = 0; i <= groups_.size (); i++)
{
if (i < groups_.size ()
&& groups_[i].continuation_line_
&& (consecutive_lines.empty ()
- || (consecutive_lines[0]->get_bound(LEFT)->get_column ()
+ || (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 ()
+ && consecutive_lines[0]->get_bound (RIGHT)->get_column ()
== groups_[i].continuation_line_->get_bound (RIGHT)->get_column ())))
consecutive_lines.push_back (groups_[i].continuation_line_);
else
}
if (to_boolean (get_property ("figuredBassCenterContinuations")))
- center_repeated_continuations();
+ center_repeated_continuations ();
for (vsize i = 0; i < groups_.size (); i++)
{
{
groups_[i].number_ = SCM_BOOL_F;
groups_[i].alteration_ = SCM_BOOL_F;
+ groups_[i].augmented_ = SCM_BOOL_F;
+ groups_[i].diminished_ = SCM_BOOL_F;
+ groups_[i].augmented_slash_ = SCM_BOOL_F;
}
}
if (use_extenders)
{
vector<int> junk_continuations;
- for (vsize i = 0; i < groups_.size(); i++)
+ for (vsize i = 0; i < groups_.size (); i++)
{
Figure_group &group = groups_[i];
{
if (!group.continuation_line_)
{
- Spanner * line = make_spanner ("BassFigureContinuation", SCM_EOL);
+ Spanner * line
+ = make_spanner ("BassFigureContinuation", SCM_EOL);
Item * item = group.figure_item_;
group.continuation_line_ = line;
line->set_bound (LEFT, item);
{
for (vsize i = 0; i <= junk_continuations.size (); i++)
{
- if (i < junk_continuations.size()
+ if (i < junk_continuations.size ()
&& (i == 0 || junk_continuations[i-1] == junk_continuations[i] - 1))
consecutive.push_back (groups_[junk_continuations[i]].continuation_line_);
else
void
Figured_bass_engraver::create_grobs ()
{
- Grob *muscol = dynamic_cast<Item*> (unsmob_grob (get_property ("currentMusicalColumn")));
+ Grob *muscol
+ = dynamic_cast<Item*> (unsmob_grob (get_property ("currentMusicalColumn")));
if (!alignment_)
{
alignment_ = make_spanner ("BassFigureAlignment", SCM_EOL);
alignment_->set_bound (RIGHT, muscol);
SCM proc = get_property ("figuredBassFormatter");
- for (vsize i = 0; i < groups_.size(); i++)
+ for (vsize i = 0; i < groups_.size (); i++)
{
Figure_group &group = groups_[i];
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");
SCM text = group.current_event_->get_property ("text");
if (!Text_interface::is_markup (text)
ADD_TRANSLATOR (Figured_bass_engraver,
/* doc */
-
"Make figured bass numbers.",
+
/* create */
"BassFigure "
"BassFigureAlignment "
"BassFigureBracket "
"BassFigureContinuation "
- "BassFigureLine "
- ,
+ "BassFigureLine ",
/* read */
"figuredBassAlterationDirection "
"figuredBassFormatter "
"implicitBassFigures "
"useBassFigureExtenders "
- "ignoreFiguredBassRest "
- ,
+ "ignoreFiguredBassRest ",
/* write */
- "");
+ ""
+ );