+ Grob *me = unsmob_grob (grob);
+ SCM_ASSERT_TYPE (me, grob, SCM_ARG1, __FUNCTION__, "Grob");
+
+ return me->key () ? me->key ()->self_scm () : SCM_EOL;
+}
+
+LY_DEFINE (ly_grob_default_font, "ly:grob-default-font",
+ 1, 0, 0, (SCM grob),
+ "Return the default font for grob @var{gr}.")
+{
+ Grob *gr = unsmob_grob (grob);
+ SCM_ASSERT_TYPE (gr, grob, SCM_ARG1, __FUNCTION__, "grob");
+
+ return Font_interface::get_default_font (gr)->self_scm ();
+}
+
+
+/*
+ TODO: consider swapping order, so we can do
+
+ (grob-common-refpoint a b c d e)
+ */
+LY_DEFINE (ly_grob_common_refpoint, "ly:grob-common-refpoint",
+ 3, 0, 0, (SCM grob, SCM other, SCM axis),
+ "Find the common refpoint of @var{grob} and @var{other} for @var{axis}."
+ )
+{
+
+ Grob *gr = unsmob_grob (grob);
+ SCM_ASSERT_TYPE (gr, grob, SCM_ARG1, __FUNCTION__, "grob");
+
+ Grob *o = unsmob_grob (other);
+ SCM_ASSERT_TYPE (o, other, SCM_ARG2, __FUNCTION__, "grob");
+
+ SCM_ASSERT_TYPE (is_axis (axis), axis, SCM_ARG3, __FUNCTION__, "axis");
+
+ Grob *refp = gr->common_refpoint (o, Axis (scm_to_int (axis)));
+ return refp ? refp->self_scm () : SCM_BOOL_F;