lineSegment.offset = segmentOffset; lineSegment.count = segmentCount;  return returnValue;
	public int offsetToX(int line, int offset)	{		TokenMarker tokenMarker = getTokenMarker();		int returnValue;		/* Use painter's cached info for speed */		FontMetrics fm = painter.getFontMetrics();		Segment lineSegment = painter.currentLine;		if(painter.currentLineIndex != line)			getLineText(line,lineSegment);		/* Because this is called in the middle of paintLine(),		 * we need to save the segment's state.		 */		int segmentOffset = lineSegment.offset;		int segmentCount = lineSegment.count;		int x = horizontalOffset;		/* If syntax coloring is disabled, do simple translation */		if(tokenMarker == null)		{			lineSegment.count = offset;			returnValue = 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)				tokens = painter.currentLineTokens;			else				tokens = 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)				{					returnValue = x;					break;				}				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);					returnValue = x + Utilities.getTabbedTextWidth(						lineSegment,fm,x,painter,0);					break;				}				else				{					lineSegment.count = length;					x += Utilities.getTabbedTextWidth(						lineSegment,fm,x,painter,0);					lineSegment.offset += length;				}				tokens = tokens.next;			}		}		lineSegment.offset = segmentOffset;		lineSegment.count = segmentCount;		return returnValue;	}