/* Based on WindowsBatchTokenMaker.java - Scanner for Windows batch files. This library is distributed under a modified BSD license. See the included RSyntaxTextArea.License.txt file for details. */
package com.baselet.gui.pane;
import javax.swing.text.Segment;
import org.fife.ui.rsyntaxtextarea.AbstractTokenMaker;
import org.fife.ui.rsyntaxtextarea.Token;
import org.fife.ui.rsyntaxtextarea.TokenMap;
import org.fife.ui.rsyntaxtextarea.TokenTypes;
/**
* see http://fifesoft.com/rsyntaxtextarea/doc/CustomSyntaxHighlighting.html for more infos about own syntax
*/
public class OwnTokenMaker extends AbstractTokenMaker {
private static TokenMap wordsToHighlight = new TokenMap();
public static void setMyWordsToHighlight(TokenMap myWordsToHighlight) {
OwnTokenMaker.wordsToHighlight = myWordsToHighlight;
}
public static final String ID = "OwnTokenMaker";
@Override
public TokenMap getWordsToHighlight() {
return wordsToHighlight;
}
@Override
public void addToken(Segment segment, int start, int end, int tokenType, int startOffset) {
if (tokenType == TokenTypes.IDENTIFIER) {
int value = getWordsToHighlight().get(segment, start, end);
if (value != -1) {
tokenType = value;
}
}
super.addToken(segment, start, end, tokenType, startOffset);
}
/**
* Returns a list of tokens representing the given text.
* Based on http://fifesoft.com/rsyntaxtextarea/doc/CustomSyntaxHighlighting.html but reduced to our highlighting
*
* @param text The text to break into tokens.
* @param startTokenType The token with which to start tokenizing.
* @param startOffset The offset at which the line of tokens begins.
* @return A linked list of tokens representing <code>text</code>.
*/
@Override
public Token getTokenList(Segment text, int startTokenType, int startOffset) {
resetTokenList();
int offset = text.offset;
int count = text.count;
int end = offset + count;
int newStartOffset = startOffset - offset;
int currentTokenStart = offset;
int currentTokenType = startTokenType;
for (int i = offset; i < end; i++) {
if (currentTokenType == TokenTypes.NULL) {
currentTokenType = TokenTypes.IDENTIFIER;
}
}
addToken(text, currentTokenStart, end - 1, currentTokenType, newStartOffset + currentTokenStart);
addNullToken();
return firstToken;
}
}