-IMPLEMENT_IS_TYPE_B1(Vertical_align_engraver, Engraver);
-ADD_THIS_TRANSLATOR(Vertical_align_engraver);
+ SCM before = scm_hash_ref (id_to_group_hashtab_, before_id, SCM_BOOL_F);
+ SCM after = scm_hash_ref (id_to_group_hashtab_, after_id, SCM_BOOL_F);
+
+ Grob *before_grob = unsmob_grob (before);
+ Grob *after_grob = unsmob_grob (after);
+
+ Align_interface::add_element (valign_, i.grob (),
+ get_property ("verticalAlignmentChildCallback"));
+
+ if (before_grob || after_grob)
+ {
+ Grob_array *ga = unsmob_grob_array (valign_->get_object ("elements"));
+ Link_array<Grob> &arr = ga->array_reference ();
+
+ Grob *added = arr.pop ();
+ for (int i = 0; i < arr.size (); i++)
+ {
+ if (arr[i] == before_grob)
+ {
+ arr.insert (added, i);
+ break;
+ }
+ else if (arr[i] == after_grob)
+ {
+ arr.insert (added, i + 1);
+ break;
+ }
+ }
+ }
+ }
+}