- for (SCM p = accept_list; scm_is_pair (p); p = scm_cdr (p))
- {
- Translator *t = unsmob_translator (scm_car (p));
- if (t && t->try_music (m))
- return true;
- }
-
- // We couldn't swallow the event in this context. Try parent.
- Context *p = context ()->get_parent_context ();
- // Global context's translator group is a dummy, so don't try it.
- if (p->get_parent_context())
- // ES todo: Make Translators listeners directly instead.
- return p->implementation ()->try_music (m);
- else
- // We have tried all possible contexts. Give up.
- m->origin ()->warning (_f ("junking event: `%s'", m->name ()));
- return false;
+ /* Filter unwanted translator types. Required to make
+ \with {\consists "..."} work. */
+ if (dynamic_cast<Engraver_group *> (g))
+ g->simple_trans_list_ = filter_performers (trans_list);
+ else if (dynamic_cast<Performer_group *> (g))
+ g->simple_trans_list_ = filter_engravers (trans_list);
+
+ // TODO: scrap Context::implementation
+ new_context->implementation_ = g;
+
+ g->connect_to_context (new_context);
+ g->unprotect ();
+
+ recurse_over_translators (new_context,
+ &Translator::initialize,
+ &Translator_group::initialize,
+ DOWN);