TokenMarker tokenMarker = getTokenMarker();   FontMetrics fm = painter.getFontMetrics();  getLineText(line,lineSegment);  int segmentOffset = lineSegment.offset; int x = horizontalOffset;   if(tokenMarker == null) { lineSegment.count = offset; return x + Utilities.getTabbedTextWidth(lineSegment, fm,x,painter,0); }  else { Token tokens; if(painter.currentLineIndex == line && painter.currentLineTokens != null) tokens = painter.currentLineTokens; else { painter.currentLineIndex = line; tokens = painter.currentLineTokens = tokenMarker.markTokens(lineSegment,line); }  Toolkit toolkit = painter.getToolkit(); Font defaultFont = painter.getFont(); SyntaxStyle[] styles = painter.getStyles();  for(;;) { byte id = tokens.id; if(id == Token.END) { return x; }  if(id == Token.NULL) fm = painter.getFontMetrics(); else fm = styles[id].getFontMetrics(defaultFont);  int length = tokens.length;  if(offset + segmentOffset < lineSegment.offset + length) { lineSegment.count = offset - (lineSegment.offset - segmentOffset); return x + Utilities.getTabbedTextWidth( lineSegment,fm,x,painter,0); } else { lineSegment.count = length; x += Utilities.getTabbedTextWidth( lineSegment,fm,x,painter,0); lineSegment.offset += length; } tokens = tokens.next; } }
painter.currentLineTokens = null; return _offsetToX(line,offset);
	public int offsetToX(int line, int offset)	{		TokenMarker tokenMarker = getTokenMarker();		/* Use painter's cached info for speed */		FontMetrics fm = painter.getFontMetrics();		getLineText(line,lineSegment);		int segmentOffset = lineSegment.offset;		int x = horizontalOffset;		/* If syntax coloring is disabled, do simple translation */		if(tokenMarker == null)		{			lineSegment.count = offset;			return x + Utilities.getTabbedTextWidth(lineSegment,				fm,x,painter,0);		}		/* If syntax coloring is enabled, we have to do this because		 * tokens can vary in width */		else		{			Token tokens;			if(painter.currentLineIndex == line				&& painter.currentLineTokens != null)				tokens = painter.currentLineTokens;			else			{				painter.currentLineIndex = line;				tokens = painter.currentLineTokens					= tokenMarker.markTokens(lineSegment,line);			}			Toolkit toolkit = painter.getToolkit();			Font defaultFont = painter.getFont();			SyntaxStyle[] styles = painter.getStyles();			for(;;)			{				byte id = tokens.id;				if(id == Token.END)				{					return x;				}				if(id == Token.NULL)					fm = painter.getFontMetrics();				else					fm = styles[id].getFontMetrics(defaultFont);				int length = tokens.length;				if(offset + segmentOffset < lineSegment.offset + length)				{					lineSegment.count = offset - (lineSegment.offset - segmentOffset);					return x + Utilities.getTabbedTextWidth(						lineSegment,fm,x,painter,0);				}				else				{					lineSegment.count = length;					x += Utilities.getTabbedTextWidth(						lineSegment,fm,x,painter,0);					lineSegment.offset += length;				}				tokens = tokens.next;			}		}	}