Files
VisualSapfor/src/Common_old/UI/Themes/ProvidedTokenMaker.java

46 lines
2.3 KiB
Java
Raw Normal View History

package Common_old.UI.Themes;
2023-09-17 22:13:42 +03:00
import org.fife.ui.rsyntaxtextarea.AbstractTokenMaker;
import org.fife.ui.rsyntaxtextarea.Token;
import org.fife.ui.rsyntaxtextarea.TokenMap;
import javax.swing.text.Segment;
//объект создается 1 раз, при установке стиля редактора.
//НИ В КОЕМ СЛУЧАЕ НЕЛЬЗЯ ПЕРЕДАВАТЬ ПО ССЫЛКЕ методам ради рефакторинга
//все переменные должны быть сугубо локальными
//иначе возможны непредсказуемые последствия.
//Метод вызывается асинхронно, причем несколькими событиями)
public abstract class ProvidedTokenMaker extends AbstractTokenMaker {
public static void fillTokenMap(TokenMap map, int type, String... words) {
for (String word : words)
map.put(word, type);
}
//сохранить не забирая текущий символ.
public void SaveCurrent(TokenProvider provider) {
addToken(provider.text, provider.currentTokenStart,
provider.i - 1, provider.currentTokenType,
provider.newStartOffset + provider.currentTokenStart);
}
//сохранить забирая текущий символ
public void SaveCurrent_(TokenProvider provider) {
addToken(provider.text, provider.currentTokenStart,
provider.i, provider.currentTokenType,
provider.newStartOffset + provider.currentTokenStart);
}
public abstract void Body(TokenProvider provider);
public abstract void performFinish(TokenProvider provider);
public Token getTokenList(Segment text, int startTokenType, int startOffset) {
resetTokenList();
//структура для хранения индексов смещений, текущего состояния и т д.
TokenProvider provider = new TokenProvider(text, startTokenType, startOffset);
// provider.checkFortranWrap();
while (provider.canRead()) {
provider.readNext();
Body(provider);
provider.gotoNext();
}
performFinish(provider);
// Return the first token in our linked list.
return firstToken;
}
}