class Grace_engraver : public Engraver
{
+ void consider_change_grace_settings ();
protected:
virtual void start_translation_timestep ();
- virtual void derived_mark ();
+ virtual void derived_mark () const;
+ virtual void initialize ();
TRANSLATOR_DECLARATIONS (Grace_engraver);
Moment last_moment_;
Grace_engraver::Grace_engraver ()
{
grace_settings_ = SCM_EOL;
+ last_moment_ = Moment (Rational (-1,1));
}
void
-Grace_engraver::derived_mark ()
+Grace_engraver::initialize ()
{
- scm_gc_mark (grace_settings_);
+ consider_change_grace_settings ();
}
void
-Grace_engraver::start_translation_timestep ()
+Grace_engraver::consider_change_grace_settings ()
{
Moment now = now_mom ();
if (last_moment_.grace_part_ && !now.grace_part_)
SCM val = scm_cadr (scm_cddr (entry));
Context *c = context ();
- while (c
- && c->context_name_symbol () != context_name)
+ while (c && !c->is_alias (context_name))
{
c = c->get_parent_context ();
}
}
else
{
- programming_error ("Cannot find context");
+ programming_error ("can't find context");
scm_display (context_name, scm_current_error_port ());
}
}
}
- last_moment_ = now;
+ last_moment_ = now_mom();
+}
+
+void
+Grace_engraver::derived_mark () const
+{
+ scm_gc_mark (grace_settings_);
+ Engraver::derived_mark ();
+}
+
+void
+Grace_engraver::start_translation_timestep ()
+{
+ consider_change_grace_settings ();
}
ADD_TRANSLATOR (Grace_engraver,