X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fgrace-engraver.cc;h=ee9eaf9bf4532b57f8d5f4c12e7cb184c800a656;hb=459d4d5eaa90373349eb0461af7b6e3cdfd56981;hp=aae7f76bd56bbd64a00f523c5bd0e3ae191bab7c;hpb=57be7394ffa2e7d7ba6d60548dba563f3409d472;p=lilypond.git diff --git a/lily/grace-engraver.cc b/lily/grace-engraver.cc index aae7f76bd5..ee9eaf9bf4 100644 --- a/lily/grace-engraver.cc +++ b/lily/grace-engraver.cc @@ -3,7 +3,7 @@ source file of the GNU LilyPond music typesetter - (c) 2004--2005 Han-Wen Nienhuys + (c) 2004--2006 Han-Wen Nienhuys */ #include "engraver.hh" @@ -12,9 +12,11 @@ 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_; @@ -25,17 +27,17 @@ public: 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_) @@ -67,11 +69,8 @@ Grace_engraver::start_translation_timestep () 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) { @@ -88,13 +87,27 @@ Grace_engraver::start_translation_timestep () } } - 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", + /* doc */ "Set font size and other properties for grace notes.", + /* create */ "", + /* accept */ "", + /* read */ "graceSettings", /* write */ "");