+Interval
+Grob::pure_height (Grob *refp, int start, int end)
+{
+ SCM pure_height = ly_lily_module_constant ("pure-Y-extent");
+ Interval iv (0, 0);
+
+ if (ly_is_procedure (pure_height))
+ iv = ly_scm2interval (scm_apply_3 (pure_height, self_scm (),
+ scm_from_int (start), scm_from_int (end),
+ SCM_EOL));
+ Real offset = pure_relative_y_coordinate (refp, start, end);
+
+ SCM min_ext = get_property ("minimum-Y-extent");
+
+ /* we don't add minimum-Y-extent if the extent is empty. This solves
+ a problem with Hara-kiri spanners. They would request_suicide and
+ return empty extents, but we would force them here to be large. */
+ if (!iv.is_empty () && is_number_pair (min_ext))
+ iv.unite (ly_scm2interval (min_ext));
+
+ iv.translate (offset);
+ return iv;
+}
+
+Interval
+Grob::maybe_pure_extent (Grob *refp, Axis a, bool pure, int start, int end)
+{
+ if (pure && a != Y_AXIS)
+ programming_error ("tried to get pure width");
+ return (pure && a == Y_AXIS) ? pure_height (refp, start, end) : extent (refp, a);
+}
+
+Interval_t<int>
+Grob::spanned_rank_iv ()
+{
+ return Interval_t<int> (-1, 0);
+}
+