+Real
+Staff_symbol_referencer::internal_get_position (Grob *me, bool pure)
+{
+ Real p = 0.0;
+ Grob *st = get_staff_symbol (me);
+ Grob *c = st ? me->common_refpoint (st, Y_AXIS) : 0;
+ if (st && c)
+ {
+ Real y = (pure
+ ? me->pure_relative_y_coordinate (c, 0, INT_MAX)
+ : me->relative_coordinate (c, Y_AXIS))
+ - st->relative_coordinate (c, Y_AXIS);
+ Real space = Staff_symbol::staff_space (st);
+ p = (space == 0) ? 0 : 2.0 * y / space;
+ return p;
+ }
+ else if (!st)
+ return me->relative_coordinate (me->get_parent (Y_AXIS), Y_AXIS) * 2;
+ return robust_scm2double (me->get_property ("staff-position"), p);
+}