+ SCM ack_ifs = scm_assoc (ly_symbol2scm ("events-accepted"),
+ tr->translator_description());
+ ack_ifs = gh_cdr (ack_ifs);
+ for (SCM s = ifaces; ly_pair_p (s); s = ly_cdr (s))
+ if (scm_memq (ly_car (s), ack_ifs) != SCM_BOOL_F)
+ return true;
+ return false;
+}
+
+SCM
+find_accept_translators (SCM gravlist, SCM ifaces)
+{
+ SCM l = SCM_EOL;
+ for (SCM s = gravlist; ly_pair_p (s); s = ly_cdr (s))
+ {
+ Translator* tr = unsmob_translator (ly_car (s));
+ if (translator_accepts_any_of (tr, ifaces))
+ l = scm_cons (tr->self_scm (), l);
+ }
+ l = scm_reverse_x (l, SCM_EOL);
+
+ return l;
+}
+
+bool
+Translator_group::try_music_on_nongroup_children (Music *m )
+{
+ SCM tab = get_property ("acceptHashTable");
+ SCM name = scm_sloppy_assq (ly_symbol2scm ("name"),
+ m->get_property_alist (false));
+
+ if (!gh_pair_p (name))
+ return false;
+
+ name = gh_cdr (name);
+ SCM accept_list = scm_hashq_ref (tab, name, SCM_UNDEFINED);
+ if (accept_list == SCM_BOOL_F)
+ {
+ accept_list = find_accept_translators (simple_trans_list_,
+ m->get_mus_property ("types"));
+ scm_hashq_set_x (tab, name, accept_list);
+ }
+
+ for (SCM p = accept_list; gh_pair_p (p); p = ly_cdr (p))
+ {
+ Translator * t = unsmob_translator (ly_car (p));
+ if (t && t->try_music (m))
+ return true;
+ }
+ return false;
+}
+
+SCM
+Translator_group::properties_as_alist () const
+{
+ return properties_dict()->to_alist();
+}
+
+String
+Translator_group::context_name () const
+{
+ Translator_def * td = unsmob_translator_def (definition_ );
+ return ly_symbol2string (td->type_name_);