source file of the GNU LilyPond music typesetter
- (c) 1997--1999 Han-Wen Nienhuys <hanwen@cs.uu.nl>
+ (c) 1997--2000 Han-Wen Nienhuys <hanwen@cs.uu.nl>
*/
#include "translator-group.hh"
Simultaneous_music_iterator::Simultaneous_music_iterator ()
{
+ separate_contexts_b_ = false;
}
Simultaneous_music_iterator::~Simultaneous_music_iterator ()
Simultaneous_music_iterator::construct_children()
{
int j = 0;
- Simultaneous_music const *sim = dynamic_cast<Simultaneous_music const*> (music_l_);
+ Music_sequence const *sim = dynamic_cast<Music_sequence const*> (music_l_);
- for (Cons<Music> *i = sim->music_p_list_p_->head_; i; i = i->next_, j++)
+ Cons<Music> *i = (sim->music_p_list_p_) ? sim->music_p_list_p_->head_ : 0;
+ for (; i; i = i->next_, j++)
{
- Music_iterator * mi = get_iterator_p (i->car_);
+ Music_iterator * mi = static_get_iterator_p (i->car_);
+
+ /* if separate_contexts_b_ is set, create a new context with the
+ number number as name */
+
+ Translator_group * t = (j && separate_contexts_b_)
+ ? report_to_l ()->find_create_translator_l (report_to_l()->type_str_,
+ to_str (j))
+ : report_to_l ();
+
+ if (!t)
+ t = report_to_l ();
+
+ mi->init_translator (i->car_, t);
+ mi->construct_children ();
+
if (mi->ok())
{
- if (sim->translator_type_str_.empty_b ())
- set_translator (mi->report_to_l()->ancestor_l (0)); // huh?
children_p_list_.append (new Killing_cons<Music_iterator> (mi,0));
}
else
}
}
-
void
Simultaneous_music_iterator::do_print() const
{
return children_p_list_.head_;
}
+Music_iterator*
+Simultaneous_music_iterator::try_music_in_children (Music const*m) const
+{
+ Music_iterator * b=0;
+ for (Cons<Music_iterator> *p = children_p_list_.head_; !b && p; p = p->next_)
+ b =p->car_->try_music (m);
+ return b;
+}