/*
- grace-engraver.cc -- implement Grace_engraver
+ This file is part of LilyPond, the GNU music typesetter.
- source file of the GNU LilyPond music typesetter
+ Copyright (C) 2004--2011 Han-Wen Nienhuys <hanwen@xs4all.nl>
- (c) 2004--2005 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"
class Grace_engraver : public Engraver
{
+ void consider_change_grace_settings ();
protected:
- virtual void start_translation_timestep ();
+ void start_translation_timestep ();
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 () const
+Grace_engraver::initialize ()
{
- scm_gc_mark (grace_settings_);
- Engraver::derived_mark ();
+ 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)
- {
- c = c->get_parent_context ();
- }
+ while (c && !c->is_alias (context_name))
+ c = c->get_parent_context ();
if (c)
{
= scm_cons (scm_cons (c->self_scm (), entry), grace_settings_);
}
else
- {
- programming_error ("can't find context");
- scm_display (context_name, scm_current_error_port ());
- }
+ programming_error ("cannot find context from graceSettings: "
+ + ly_symbol2string (context_name));
}
}
- 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 ();
}
+#include "translator.icc"
+
ADD_TRANSLATOR (Grace_engraver,
- /* descr */ "Set font size and other properties for grace notes.",
- /* creats*/ "",
- /* accepts */ "",
- /* acks */ "",
- /* reads */ "graceSettings",
- /* write */ "");
+ /* doc */
+ "Set font size and other properties for grace notes.",
+
+ /* create */
+ "",
+
+ /* read */
+ "graceSettings ",
+
+ /* write */
+ ""
+ );