2024-10-08 23:57:57 +03:00
|
|
|
|
package _VisualDVM.Visual.Syntax;
|
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;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|