-void
-Lyric_extender::set_textitem (Spanner*sp, Direction d, Grob*s)
-{
- sp->set_bound (d, s);
- sp->add_dependency (s);
-}
+ extract_grob_set (me, "heads", heads);
+
+ if (!heads.size ())
+ return SCM_EOL;
+
+ common = common_refpoint_of_array (heads, common, X_AXIS);
+
+ Real left_point = 0.0;
+ if (left_edge->internal_has_interface (ly_symbol2scm ("lyric-syllable-interface")))
+ left_point = left_edge->extent (common, X_AXIS)[RIGHT];
+ else if (heads.size ())
+ left_point = heads[0]->extent (common, X_AXIS)[LEFT];
+ else
+ left_point = left_edge->extent (common, X_AXIS)[RIGHT];
+
+ if (isinf (left_point))
+ return SCM_EOL;
+
+ /* It seems that short extenders are even lengthened to go past the
+ note head, but haven't found a pattern in it yet. --hwn 1/1/04 */
+ SCM minlen = me->get_property ("minimum-length");
+ Real right_point
+ = left_point + (robust_scm2double (minlen, 0));
+
+ right_point = min (right_point, me->get_system ()->get_bound (RIGHT)->relative_coordinate (common, X_AXIS));
+
+ if (heads.size ())
+ right_point = max (right_point, heads.back ()->extent (common, X_AXIS)[RIGHT]);