if(nextLineRequested && length - lineIndex > 1) { linesChanged(lineIndex + 1,length - lineIndex - 1); }
	public LineInfo markTokens(Buffer buffer, int lineIndex)	{		LineInfo info = lineInfo[lineIndex];		/* If cached tokens are valid, return 'em */		if(info.tokensValid)			return info;		/*		 * Else, go up to 100 lines back, looking for a line with		 * cached tokens. Tokenize from that line to this line.		 */		int start = Math.max(0,lineIndex - 100) - 1;		int end = Math.max(0,lineIndex - 100);		for(int i = lineIndex - 1; i > end; i--)		{			if(lineInfo[i].tokensValid)			{				start = i;				break;			}		}		//System.err.println("i=" + lineIndex + ",start=" + start);		Element map = buffer.getDefaultRootElement();		for(int i = start + 1; i <= lineIndex; i++)		{			Element lineElement = map.getElement(i);			int lineStart = lineElement.getStartOffset();			try			{				buffer.getText(lineStart,lineElement.getEndOffset()					- lineStart - 1,lineFromBuffer);			}			catch(BadLocationException e)			{				e.printStackTrace();			}			info = markTokens(lineFromBuffer,i);		}		return info;	}