public ExtendedTextLabel createExtended(Font font,CoreMetrics lm,Decoration decorator,int start,int limit){
  if (start >= limit || start < lineStart || limit > lineLimit) {
    throw new IllegalArgumentException("bad start: " + start + " or limit: "+ limit);
  }
  int level=lineBidi == null ? 0 : lineBidi.getLevelAt(start - lineStart);
  int linedir=(lineBidi == null || lineBidi.baseIsLeftToRight()) ? 0 : 1;
  int layoutFlags=flags & ~0x9;
  if ((level & 0x1) != 0)   layoutFlags|=1;
  if ((linedir & 0x1) != 0)   layoutFlags|=8;
  TextSource source=new StandardTextSource(text,start,limit - start,lineStart,lineLimit - lineStart,level,layoutFlags,font,frc,lm);
  return new ExtendedTextSourceLabel(source,decorator);
}

public ExtendedTextLabel createExtended ( Font font , CoreMetrics lm , Decoration decorator , int start , int limit ) { if ( start >= limit || start < lineStart || limit > lineLimit ) { throw new IllegalArgumentException ( "bad start: " + start + " or limit: " + limit ) ; } int level = lineBidi == null ? 0 : lineBidi . getLevelAt ( start - lineStart ) ; int linedir = ( lineBidi == null || lineBidi . baseIsLeftToRight ( ) ) ? 0 : 1 ; int layoutFlags = flags & ~ 0x9 ; if ( ( level & 0x1 ) != 0 ) layoutFlags |= 1 ; if ( ( linedir & 0x1 ) != 0 ) layoutFlags |= 8 ; TextSource source = new StandardTextSource ( text , start , limit - start , lineStart , lineLimit - lineStart , level , layoutFlags , font , frc , lm ) ; return new ExtendedTextSourceLabel ( source , decorator ) ; }
create an extended glyph array for the text between start and limit .
