-/*
- grace-iterator.cc -- implement Grace_iterator
-
+/*
+ grace-music.cc -- implement Grace_music
+
source file of the GNU LilyPond music typesetter
-
- (c) 1999 Han-Wen Nienhuys <hanwen@cs.uu.nl>
-
- */
+
+ (c) 1999--2009 Han-Wen Nienhuys <hanwen@xs4all.nl>
+*/
#include "grace-iterator.hh"
-#include "global-translator.hh"
+#include "global-context.hh"
#include "warn.hh"
void
-Grace_iterator::construct_children ()
+Grace_iterator::process (Moment m)
{
- Translator_group * t = report_to_l ()->find_create_translator_l ("Grace", ""); // umgh.
+ Moment main;
+ main.main_part_ = -start_mom_.grace_part_ + m.grace_part_;
+ Music_wrapper_iterator::process (main);
- if (t)
- set_translator (t);
- Music_wrapper_iterator::construct_children ();
-}
-
-void
-Grace_iterator::do_process_and_next (Moment m)
-{
- Global_translator * t = dynamic_cast<Global_translator*>(report_to_l ());
- if (t)
- {
- t->start ();
- t->run_iterator_on_me (child_iter_p_);
- delete child_iter_p_;
- child_iter_p_ = 0;
- t->finish ();
- }
- else
- {
- warning (_("No Grace context available!"));
- }
- Music_iterator::do_process_and_next (m);
+ /* We can safely do this, since \grace should always be inside
+ sequential. */
+ descend_to_child (child_iter_->get_outlet ());
}
Moment
-Grace_iterator::next_moment () const
+Grace_iterator::pending_moment () const
{
- return 0;
+ Moment cp = Music_wrapper_iterator::pending_moment ();
+
+ Moment pending;
+ pending.grace_part_ = start_mom_.grace_part_ + cp.main_part_;
+
+ return pending;
}
+
+IMPLEMENT_CTOR_CALLBACK (Grace_iterator);