public int viewToModel(float fx,float fy,Shape a,Position.Bias[] bias){
  bias[0]=Position.Bias.Forward;
  Rectangle alloc=(Rectangle)a;
  RSyntaxDocument doc=(RSyntaxDocument)getDocument();
  int x=(int)fx;
  int y=(int)fy;
  if (y < alloc.y) {
    return getStartOffset();
  }
 else   if (y > alloc.y + alloc.height) {
    return getEndOffset() - 1;
  }
 else {
    RSyntaxTextArea textArea=(RSyntaxTextArea)getContainer();
    alloc.height=textArea.getLineHeight();
    int p1=getEndOffset();
    Element map=doc.getDefaultRootElement();
    int p0=getStartOffset();
    int line=map.getElementIndex(p0);
    Token tlist=doc.getTokenListForLine(line);
    while (p0 < p1) {
      RSyntaxUtilities.makeTokenListStartAt(tlist,p0,WrappedSyntaxView.this,textArea,alloc.x);
      int p=calculateBreakPosition(p0,tlist,alloc.x);
      if ((y >= alloc.y) && (y < (alloc.y + alloc.height))) {
        if (x < alloc.x) {
          return p0;
        }
 else         if (x > alloc.x + alloc.width) {
          return p - 1;
        }
 else {
          int n=tlist.getListOffset(textArea,WrappedSyntaxView.this,alloc.x,x);
          return Math.max(Math.min(n,p1 - 1),p0);
        }
      }
      p0=(p == p0) ? p1 : p;
      alloc.y+=alloc.height;
    }
    return getEndOffset() - 1;
  }
}

public int viewToModel ( float fx , float fy , Shape a , Position . Bias [ ] bias ) { bias [ 0 ] = Position . Bias . Forward ; Rectangle alloc = ( Rectangle ) a ; RSyntaxDocument doc = ( RSyntaxDocument ) getDocument ( ) ; int x = ( int ) fx ; int y = ( int ) fy ; if ( y < alloc . y ) { return getStartOffset ( ) ; } else if ( y > alloc . y + alloc . height ) { return getEndOffset ( ) - 1 ; } else { RSyntaxTextArea textArea = ( RSyntaxTextArea ) getContainer ( ) ; alloc . height = textArea . getLineHeight ( ) ; int p1 = getEndOffset ( ) ; Element map = doc . getDefaultRootElement ( ) ; int p0 = getStartOffset ( ) ; int line = map . getElementIndex ( p0 ) ; Token tlist = doc . getTokenListForLine ( line ) ; while ( p0 < p1 ) { RSyntaxUtilities . makeTokenListStartAt ( tlist , p0 , WrappedSyntaxView . this , textArea , alloc . x ) ; int p = calculateBreakPosition ( p0 , tlist , alloc . x ) ; if ( ( y >= alloc . y ) && ( y < ( alloc . y + alloc . height ) ) ) { if ( x < alloc . x ) { return p0 ; } else if ( x > alloc . x + alloc . width ) { return p - 1 ; } else { int n = tlist . getListOffset ( textArea , WrappedSyntaxView . this , alloc . x , x ) ; return Math . max ( Math . min ( n , p1 - 1 ) , p0 ) ; } } p0 = ( p == p0 ) ? p1 : p ; alloc . y += alloc . height ; } return getEndOffset ( ) - 1 ; } }
provides a mapping from the view coordinate space to the logical coordinate space of the model .
