/*
* Sun Public License Notice
*
* The contents of this file are subject to the Sun Public License
* Version 1.0 (the "License"). You may not use this file except in
* compliance with the License. A copy of the License is available at
* http://www.sun.com/
*
* The Original Code is NetBeans. The Initial Developer of the Original
* Code is Sun Microsystems, Inc. Portions Copyright 1997-2000 Sun
* Microsystems, Inc. All Rights Reserved.
*/
package org.netbeans.editor;
/** Process the tokens
*
* @author Miloslav Metelka
* @version 1.00
*/
public interface TokenProcessor {
/** Notify that the token was found.
* @param tokenID ID of the token found
* @param tokenContextPath Context-path in which the token that was found.
* @param tokenBufferOffset Offset of the token in the buffer. The buffer
* is provided in the <tt>nextBuffer()</tt> method.
* @param tokenLength Length of the token found
* @return true if the next token should be searched or false if the scan should
* be stopped completely.
*/
public boolean token(TokenID tokenID, TokenContextPath tokenContextPath,
int tokenBufferOffset, int tokenLength);
/** Notify that end of scanned buffer was found.
* The method decides whether to continue the scan or stop. The rest
* of characters that were not scanned, because the is not completed
* is also provided.
* @param offset offset of the rest of the characters
* @return 0 to stop token processing,
* > 0 process additional characters in the document
*/
public int eot(int offset);
/** Notify that the following buffer will be scanned. This method
* is called before the buffer is being scanned.
* @param buffer buffer that will be scanned. To get the text of the tokens
* the buffer should be stored in some instance variable.
* @param offset offset in the buffer with the first character to be scanned.
* If doesn't reflect the possible preScan. If the preScan would be non-zero
* then the first buffer offset that contains the valid data is
* <tt>offset - preScan</tt>.
* @param len count of the characters that will be scanned. It doesn't reflect
* the ppossible reScan.
* @param startPos starting position of the scanning in the document. It
* logically corresponds to the <tt>offset</tt> because of the same
* text data both in the buffer and in the document.
* It again doesn't reflect the possible preScan and the <tt>startPos - preScan</tt>
* gives the real start of the first token. If it's necessary to know
* the position of each token, it's a good idea to store the value
* <tt>startPos - offset</tt> in an instance variable that could be called
* <tt>bufferStartPos</tt>. The position of the token can be then computed
* as <tt>bufferStartPos + tokenBufferOffset</tt>.
* @param preScan preScan needed for the scanning.
* @param lastBuffer whether this is the last buffer to scan in the document
* so there are no more characters in the document after this buffer.
* @*/
public void nextBuffer(char[] buffer, int offset, int len,
int startPos, int preScan, boolean lastBuffer);
}