+
+
+/*****************/
+
+
+bool engraver_valid (Translator*tr, SCM ifaces)
+{
+ SCM ack_ifs = scm_assoc (ly_symbol2scm ("interfaces-acked"), 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_acknowledge_engravers (SCM gravlist, SCM meta_alist)
+{
+ SCM ifaces = gh_cdr (scm_assoc (ly_symbol2scm ("interfaces"), meta_alist));
+
+ SCM l = SCM_EOL;
+ for (SCM s = gravlist; ly_pair_p (s); s = ly_cdr (s))
+ {
+ Translator* tr = unsmob_translator (ly_car (s));
+ if (engraver_valid (tr, ifaces))
+ l = scm_cons (tr->self_scm (), l);
+ }
+ l = scm_reverse_x (l, SCM_EOL);
+
+ return l;
+}