if(i + offset >= segmentCount) { new Exception().printStackTrace(); System.err.println("You've found a" + " bug. E-mail <sp@gjt.org>"); return -1; }
	public int xToOffset(int line, int x)	{		TokenMarker tokenMarker = getTokenMarker();		/* Use painter's cached info for speed */		FontMetrics fm = painter.getFontMetrics();		getLineText(line,lineSegment);		char[] segmentArray = lineSegment.array;		int segmentOffset = lineSegment.offset;		int segmentCount = lineSegment.count;		int width = horizontalOffset;		if(tokenMarker == null)		{			for(int i = 0; i < segmentCount; i++)			{				if(i + offset >= segmentCount)				{					new Exception().printStackTrace();					System.err.println("You've found a"						+ " bug. E-mail <sp@gjt.org>");					return -1;				}				char c = segmentArray[i + segmentOffset];				int charWidth;				if(c == '\t')					charWidth = (int)painter.nextTabStop(width,i)						- width;				else					charWidth = fm.charWidth(c);				if(painter.isBlockCaretEnabled())				{					if(x - charWidth <= width)						return i;				}				else				{					if(x - charWidth / 2 <= width)						return i;				}				width += charWidth;			}			return segmentCount;		}		else		{			Token tokens;			if(painter.currentLineIndex == line)				tokens = painter.currentLineTokens;			else			{				painter.currentLineIndex = line;				tokens = painter.currentLineTokens					= tokenMarker.markTokens(lineSegment,line);			}			int offset = 0;			Toolkit toolkit = painter.getToolkit();			Font defaultFont = painter.getFont();			SyntaxStyle[] styles = painter.getStyles();			for(;;)			{				byte id = tokens.id;				if(id == Token.END)					return offset;				if(id == Token.NULL)					fm = painter.getFontMetrics();				else					fm = styles[id].getFontMetrics(defaultFont);				int length = tokens.length;				for(int i = 0; i < length; i++)				{					char c = segmentArray[segmentOffset + offset + i];					int charWidth;					if(c == '\t')						charWidth = (int)painter.nextTabStop(width,offset + i)							- width;					else						charWidth = fm.charWidth(c);					if(painter.isBlockCaretEnabled())					{						if(x - charWidth <= width)							return offset + i;					}					else					{						if(x - charWidth / 2 <= width)							return offset + i;					}					width += charWidth;				}				offset += length;				tokens = tokens.next;			}		}	}