/*
- figured-bass-engraver.cc -- implement Figured_bass_engraver
+ This file is part of LilyPond, the GNU music typesetter.
- source file of the GNU LilyPond music typesetter
+ Copyright (C) 2005--2010 Han-Wen Nienhuys <hanwen@xs4all.nl>
- (c) 2005--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ LilyPond is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ LilyPond is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with LilyPond. If not, see <http://www.gnu.org/licenses/>.
*/
#include "engraver.hh"
SCM number_;
SCM alteration_;
+ SCM augmented_;
+ SCM diminished_;
+ SCM augmented_slash_;
+ SCM text_;
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;
+ text_ = SCM_EOL;
group_ = 0;
current_event_ = 0;
}
+ /* Mark the members of the struct as used for the GUILE Garbage Collection */
+ void gc_mark () const
+ {
+ scm_gc_mark (number_);
+ scm_gc_mark (alteration_);
+ scm_gc_mark (augmented_);
+ scm_gc_mark (diminished_);
+ scm_gc_mark (augmented_slash_);
+ scm_gc_mark (text_);
+ }
+ bool group_is_equal_to (Stream_event *evt) const
+ {
+ return
+ ly_is_equal (number_, evt->get_property ("figure"))
+ && ly_is_equal (alteration_, evt->get_property ("alteration"))
+ && ly_is_equal (augmented_, evt->get_property ("augmented"))
+ && ly_is_equal (diminished_, evt->get_property ("diminished"))
+ && ly_is_equal (augmented_slash_, evt->get_property ("augmented-slash"))
+ && ly_is_equal (text_, evt->get_property ("text"));
+ }
bool is_continuation () const
{
return
current_event_
&& !force_no_continuation_
- && ly_is_equal (number_,
- current_event_->get_property ("figure"))
- && ly_is_equal (alteration_,
- current_event_->get_property ("alteration"));
+ && group_is_equal_to (current_event_);
}
};
{
for (vsize i = 0; i < groups_.size (); i++)
{
- scm_gc_mark (groups_[i].number_);
- scm_gc_mark (groups_[i].alteration_);
+ groups_[i].gc_mark ();
}
}
if (to_boolean (get_property ("useBassFigureExtenders")))
{
- SCM fig = ev->get_property ("figure");
for (vsize i = 0; i < groups_.size (); i++)
{
if (!groups_[i].current_event_
- && ly_is_equal (groups_[i].number_, fig))
+ && groups_[i].group_is_equal_to (ev))
{
groups_[i].current_event_ = ev;
groups_[i].force_no_continuation_
void
Figured_bass_engraver::process_music ()
{
- if (alignment_ && !to_boolean (get_property ("useBassFigureExtenders")))
+ bool use_extenders = to_boolean (get_property ("useBassFigureExtenders"));
+ if (alignment_ && !use_extenders)
clear_spanners ();
if (rest_event_)
/*
Don't need to sync alignments, if we're not using extenders.
*/
- bool use_extenders = to_boolean (get_property ("useBassFigureExtenders"));
if (!use_extenders)
{
clear_spanners ();
{
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;
+ groups_[i].text_ = SCM_BOOL_F;
}
}
{
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);
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);
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.current_event_->get_property ("text");
+ SCM text = group.text_;
if (!Text_interface::is_markup (text)
&& ly_is_procedure (proc))
{