+ Grob_info info = announce_infos_[j];
+
+ SCM meta = info.grob ()->internal_get_property (meta_sym);
+ SCM nm = scm_assoc (name_sym, meta);
+ if (scm_is_pair (nm))
+ nm = scm_cdr (nm);
+ else
+ {
+ /*
+ it's tempting to put an assert for
+ immutable_property_alist_ == '(), but in fact, some
+ engravers (clef-engraver) add some more information to the
+ immutable_property_alist_ (after it has been '()-ed).
+
+ We ignore the grob anyway. He who has no name, shall not
+ be helped. */
+
+ continue;
+ }
+
+ SCM acklist = scm_hashq_ref (tab, nm, SCM_UNDEFINED);
+ if (acklist == SCM_BOOL_F)
+ {
+ acklist = find_acknowledge_engravers (scm_cons (self_scm (), get_simple_trans_list ()), meta);
+ scm_hashq_set_x (tab, nm, acklist);
+ }
+
+ for (SCM p = acklist; scm_is_pair (p); p = scm_cdr (p))
+ {
+ Translator *t = unsmob_translator (scm_car (p));
+ Engraver *eng = dynamic_cast<Engraver *> (t);
+ if (eng && eng != info.origin_translator ())
+ eng->acknowledge_grob (info);
+ }
+ }
+}
+
+/*
+ Ugh. This is slightly expensive. We could/should cache the value of
+ the group count?
+*/
+int
+Engraver_group_engraver::pending_grob_count () const
+{
+ int count = announce_infos_.size ();
+ for (SCM s = context ()->children_contexts ();
+ scm_is_pair (s); s = scm_cdr (s))
+ {
+ Context *c = unsmob_context (scm_car (s));
+ Engraver_group_engraver *group
+ = dynamic_cast<Engraver_group_engraver *> (c->implementation ());
+
+ if (group)
+ count += group->pending_grob_count ();