X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fsimultaneous-music-iterator.cc;h=1faaa67c13663a43eb60d64de06c0c13c034d44a;hb=875cf3061b68867a109cdaf52c93be868a3e01be;hp=b83e5eaee85f38ecf78ef96af66a279baeeb732a;hpb=74e65211d6cda3818a6d4891f1f1c31f457e94cd;p=lilypond.git diff --git a/lily/simultaneous-music-iterator.cc b/lily/simultaneous-music-iterator.cc index b83e5eaee8..1faaa67c13 100644 --- a/lily/simultaneous-music-iterator.cc +++ b/lily/simultaneous-music-iterator.cc @@ -14,6 +14,7 @@ Simultaneous_music_iterator::Simultaneous_music_iterator () { + separate_contexts_b_ = false; } Simultaneous_music_iterator::~Simultaneous_music_iterator () @@ -25,15 +26,29 @@ void Simultaneous_music_iterator::construct_children() { int j = 0; - Simultaneous_music const *sim = dynamic_cast (music_l_); + Music_sequence const *sim = dynamic_cast (music_l_); - for (Cons *i = sim->music_p_list_p_->head_; i; i = i->next_, j++) + Cons *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 (mi,0)); } else @@ -41,7 +56,6 @@ Simultaneous_music_iterator::construct_children() } } - void Simultaneous_music_iterator::do_print() const { @@ -91,3 +105,11 @@ Simultaneous_music_iterator::ok() 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 *p = children_p_list_.head_; !b && p; p = p->next_) + b =p->car_->try_music (m); + return b; +}