- Score_elem_info info = announce_info_arr_[j];
-
- if (!info.req_l_)
- info.req_l_ = &dummy_req;
- for (int i=0; i < nongroups.size(); i++)
- { // Is this good enough?
- Engraver * eng = nongroups[i]->engraver_l ();
- if (eng && eng!= info.origin_grav_l_arr_[0])
- eng->acknowledge_element (info);
- }
+ Grob_info info = announce_infos_[j];
+
+ SCM meta = info.grob ()->get_property ("meta");
+ SCM nm = scm_assoc (name_sym, meta);
+ if (scm_is_pair (nm))
+ nm = scm_cdr (nm);
+ else
+ continue;
+
+ SCM acklist = scm_hashq_ref (acknowledge_hash_table_drul_[info.start_end ()],
+ nm, SCM_BOOL_F);
+
+ Engraver_dispatch_list *dispatch
+ = Engraver_dispatch_list::unsmob (acklist);
+
+ if (acklist == SCM_BOOL_F)
+ {
+ SCM ifaces
+ = scm_cdr (scm_assoc (ly_symbol2scm ("interfaces"), meta));
+ acklist = Engraver_dispatch_list::create (get_simple_trans_list (),
+ ifaces, info.start_end ());
+
+ dispatch
+ = Engraver_dispatch_list::unsmob (acklist);
+
+ scm_hashq_set_x (acknowledge_hash_table_drul_[info.start_end ()], nm, acklist);
+ }
+
+ if (dispatch)
+ dispatch->apply (info);