+ Spanner *sys_span = Spanner::unsmob (smob);
+ System *sys = dynamic_cast<System *> (sys_span);
+ Interval_t<int> sri = sys->spanned_rank_interval ();
+ vector<Grob *> footnote_grobs = sys->get_footnote_grobs_in_range (sri[LEFT], sri[RIGHT]);
+ vector_sort (footnote_grobs, grob_2D_less);
+
+ SCM grobs_scm = Grob_array::make_array ();
+ Grob_array::unsmob (grobs_scm)->set_array (footnote_grobs);
+ return grobs_scm;
+}
+
+MAKE_SCHEME_CALLBACK (System, vertical_skyline_elements, 1);
+SCM
+System::vertical_skyline_elements (SCM smob)
+{
+ Grob *me_grob = Grob::unsmob (smob);
+ vector<Grob *> vertical_skyline_grobs;
+ extract_grob_set (me_grob, "elements", my_elts);
+ for (vsize i = 0; i < my_elts.size (); i++)
+ if (System_start_delimiter::has_interface (my_elts[i]))
+ vertical_skyline_grobs.push_back (my_elts[i]);
+
+ System *me = dynamic_cast<System *> (me_grob);
+ Grob *align = Grob::unsmob (me->get_object ("vertical-alignment"));
+ if (!align)
+ {
+ SCM grobs_scm = Grob_array::make_array ();
+ Grob_array::unsmob (grobs_scm)->set_array (vertical_skyline_grobs);
+ return grobs_scm;
+ }
+
+ extract_grob_set (align, "elements", elts);
+
+ for (vsize i = 0; i < elts.size (); i++)
+ if (Hara_kiri_group_spanner::has_interface (elts[i]))
+ vertical_skyline_grobs.push_back (elts[i]);
+
+ SCM grobs_scm = Grob_array::make_array ();
+ Grob_array::unsmob (grobs_scm)->set_array (vertical_skyline_grobs);
+ return grobs_scm;