fix.
This commit is contained in:
@@ -300,8 +300,8 @@ public class Global {
|
||||
//-
|
||||
UI.CreateComponentsForm();
|
||||
AbstractTokenMakerFactory atmf = (AbstractTokenMakerFactory) TokenMakerFactory.getDefaultInstance();
|
||||
atmf.putMapping("text/FortranSPF", "Common.UI.Themes.FortranSPFTokenMaker");
|
||||
atmf.putMapping("text/FreeFortranSPF", "Common.UI.Themes.FreeFortranSPFTokenMaker");
|
||||
atmf.putMapping("text/FortranSPF", "_VisualDVM.Syntax.FortranSPFTokenMaker");
|
||||
atmf.putMapping("text/FreeFortranSPF", "_VisualDVM.Syntax.FreeFortranSPFTokenMaker");
|
||||
// FoldParserManager.get().addFoldParserMapping("text/FortranSPF", new FortranFolder()); блоки кода. todo
|
||||
//-------->>
|
||||
//-------->>
|
||||
|
||||
64
src/_VisualDVM/Syntax/DarkVisualiserTheme.java
Normal file
64
src/_VisualDVM/Syntax/DarkVisualiserTheme.java
Normal file
@@ -0,0 +1,64 @@
|
||||
package _VisualDVM.Syntax;
|
||||
import java.awt.*;
|
||||
public class DarkVisualiserTheme extends VisualiserTheme {
|
||||
@Override
|
||||
protected String getEditorThemePath() {
|
||||
return "/_VisualDVM/Syntax/dark_editor.xml";
|
||||
}
|
||||
@Override
|
||||
protected String getForegroundHex() {
|
||||
return "#e0e5eb";
|
||||
}
|
||||
@Override
|
||||
protected String getBackgroundHex() {
|
||||
return "#484a4c";
|
||||
}
|
||||
@Override
|
||||
protected String getSelectionBackgroundHex() {
|
||||
return "#20355a";
|
||||
}
|
||||
@Override
|
||||
protected String getTreeBackgroundHex() {
|
||||
return "#293134";
|
||||
}
|
||||
@Override
|
||||
protected String getBarForegroundHex() {
|
||||
return "#000000";
|
||||
}
|
||||
@Override
|
||||
protected String getBarBackgroundHex() {
|
||||
return "#484a4c";
|
||||
}
|
||||
@Override
|
||||
protected String getTableBackgroundHex() {
|
||||
return "#293134";
|
||||
}
|
||||
@Override
|
||||
protected Color getGoodFontColor() {
|
||||
return Color.decode("#24ff58");
|
||||
}
|
||||
@Override
|
||||
protected Color getReadyFontColor2() {
|
||||
return Color.decode("#FFFF00");
|
||||
}
|
||||
@Override
|
||||
protected Color getProgressFontColor() {
|
||||
return Color.orange;
|
||||
}
|
||||
@Override
|
||||
protected Color getBadFontColor() {
|
||||
return Color.decode("#8B0000");
|
||||
}
|
||||
@Override
|
||||
protected Color getFatalFontColor() {
|
||||
return Color.red;
|
||||
}
|
||||
@Override
|
||||
protected Color getUnknownFontColor() {
|
||||
return Color.decode("#c7c7c7");
|
||||
}
|
||||
@Override
|
||||
protected Color getHyperlinkFontColor() {
|
||||
return Color.decode("#00aee9");
|
||||
}
|
||||
}
|
||||
408
src/_VisualDVM/Syntax/FortranSPFTokenMaker.java
Normal file
408
src/_VisualDVM/Syntax/FortranSPFTokenMaker.java
Normal file
@@ -0,0 +1,408 @@
|
||||
package _VisualDVM.Syntax;
|
||||
import org.fife.ui.rsyntaxtextarea.RSyntaxUtilities;
|
||||
import org.fife.ui.rsyntaxtextarea.Token;
|
||||
import org.fife.ui.rsyntaxtextarea.TokenMap;
|
||||
|
||||
import javax.swing.text.Segment;
|
||||
public class FortranSPFTokenMaker extends ProvidedTokenMaker {
|
||||
@Override
|
||||
public TokenMap getWordsToHighlight() {
|
||||
TokenMap tokenMap = new TokenMap(true);
|
||||
fillTokenMap(tokenMap, Token.RESERVED_WORD,
|
||||
"FORALL", "ENDFORALL", "PUBLIC", "PRIVATE", "ADMIT", "ASSIGNMENT", "CALL", "COMMON",
|
||||
"CYCLE", "DIMENSION", "END", "ENDDO", "ENTRY", "FORMAT", "IMPLICIT", "INTENT", "MAP",
|
||||
"OPEN", "POINTER", "PROGRAM", "RECURSIVE", "STOP", "THEN", "WHILE", "ALLOCATABLE",
|
||||
"ATEND", "CASE", "COMPLEX", "DATA", "DO", "ENDFILE", "EQUIVALENCE", "FUNCTION",
|
||||
"INCLUDE", "INTERFACE", "MODULE", "OPTIONAL", "PRINT", "PURE", "READ", "RETURN",
|
||||
"STRUCTURE", "TYPE", "WRITE", "ALLOCATE", "BACKSPACE", "CHARACTER", "CONTAINS",
|
||||
"DEALLOCATE", "DOUBLE", "ENDIF", "EXIT", "GOTO", "INQUIRE", "INTRINSIC", "NAMELIST",
|
||||
"PARAMETER", "PRECISION", "REAL", "REWIND", "SUBROUTINE", "UNION", "ASSIGN", "BLOCKDATA",
|
||||
"CLOSE", "CONTINUE", "DEFAULT", "ELSE", "ELSEIF", "ENDSELECT", "EXTERNAL", "IF", "INTEGER",
|
||||
"LOGICAL", "NONE", "PAUSE", "PROCEDURE", "RECORD", "SAVE", "TARGET", "USE", "SELECT", "BLOCK", "WHERE"
|
||||
);
|
||||
fillTokenMap(tokenMap, Token.OPERATOR,
|
||||
".EQ.",
|
||||
".NE.", ".LT.", ".LE.",
|
||||
".GT.", ".GE.",
|
||||
".NOT.", ".AND.", ".EQV.", ".NEQV.",
|
||||
".OR.", ".TRUE.", ".FALSE."
|
||||
);
|
||||
return tokenMap;
|
||||
}
|
||||
@Override
|
||||
public void addToken(Segment segment, int start, int end, int tokenType, int startOffset) {
|
||||
int finalTokenType = tokenType;
|
||||
switch (tokenType) {
|
||||
case Token.COMMENT_EOL:
|
||||
if (segment.count >= 5) {
|
||||
switch (segment.subSequence(1, 5).toString().toUpperCase()) {
|
||||
case "$SPF":
|
||||
finalTokenType = Token.COMMENT_DOCUMENTATION;
|
||||
break;
|
||||
case "DVM$":
|
||||
finalTokenType = Token.COMMENT_MARKUP;
|
||||
break;
|
||||
case "$OMP":
|
||||
finalTokenType = Token.COMMENT_KEYWORD;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case Token.IDENTIFIER:
|
||||
int value = wordsToHighlight.get(segment, start, end);
|
||||
//ключевое слово
|
||||
if (value != -1) {
|
||||
finalTokenType = value;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
super.addToken(segment, start, end, finalTokenType, startOffset);
|
||||
}
|
||||
@Override
|
||||
public void Body(TokenProvider provider) {
|
||||
switch (provider.position) {
|
||||
//<editor-fold desc="Зона переноса">
|
||||
case 0:
|
||||
//тут всегда currentTokenType=NULL. переносимый известеи в startTokenType
|
||||
provider.start();
|
||||
switch (provider.c) {
|
||||
case '!':
|
||||
case '*':
|
||||
case 'C':
|
||||
case 'c':
|
||||
case 'D':
|
||||
case 'd':
|
||||
//комментарий. анализ закончен
|
||||
provider.setType(Token.COMMENT_EOL);
|
||||
provider.stop();
|
||||
break;
|
||||
case '0':
|
||||
case '1':
|
||||
case '2':
|
||||
case '3':
|
||||
case '4':
|
||||
case '5':
|
||||
case '6':
|
||||
case '7':
|
||||
case '8':
|
||||
case '9':
|
||||
//метка.
|
||||
provider.setType(Token.MARKUP_TAG_NAME);
|
||||
provider.label_flag = true;
|
||||
break;
|
||||
case ' ':
|
||||
case '\r':
|
||||
//пробелы
|
||||
provider.setType(Token.WHITESPACE);
|
||||
break;
|
||||
case '\t':
|
||||
provider.SkipWrap();
|
||||
break;
|
||||
default:
|
||||
//все остальное
|
||||
provider.setType(Token.IDENTIFIER);
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case 1:
|
||||
case 2:
|
||||
case 3:
|
||||
case 4:
|
||||
switch (provider.currentTokenType) {
|
||||
case Token.MARKUP_TAG_NAME:
|
||||
switch (provider.c) {
|
||||
case '0':
|
||||
case '1':
|
||||
case '2':
|
||||
case '3':
|
||||
case '4':
|
||||
case '5':
|
||||
case '6':
|
||||
case '7':
|
||||
case '8':
|
||||
case '9':
|
||||
case '\r':
|
||||
break;
|
||||
case '!':
|
||||
SaveCurrent(provider);
|
||||
provider.start();
|
||||
//комментарий. анализ закончен
|
||||
provider.setType(Token.COMMENT_EOL);
|
||||
provider.stop();
|
||||
break;
|
||||
case ' ':
|
||||
SaveCurrent(provider);
|
||||
provider.start();
|
||||
provider.setType(Token.WHITESPACE);
|
||||
break;
|
||||
case '\t':
|
||||
SaveCurrent(provider);
|
||||
provider.start();
|
||||
provider.SkipWrap();
|
||||
break;
|
||||
default:
|
||||
//это не метка. меняем тип.
|
||||
provider.setType(Token.IDENTIFIER);
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case Token.WHITESPACE:
|
||||
switch (provider.c) {
|
||||
case ' ':
|
||||
case '\r':
|
||||
break;
|
||||
case '\t':
|
||||
provider.SkipWrap();
|
||||
break;
|
||||
case '0':
|
||||
case '1':
|
||||
case '2':
|
||||
case '3':
|
||||
case '4':
|
||||
case '5':
|
||||
case '6':
|
||||
case '7':
|
||||
case '8':
|
||||
case '9':
|
||||
SaveCurrent(provider);
|
||||
provider.start();
|
||||
//если метка уже бывала. значит больше меток нет
|
||||
if (provider.label_flag) {
|
||||
provider.setType(Token.IDENTIFIER);
|
||||
} else {
|
||||
provider.setType(Token.MARKUP_TAG_NAME);
|
||||
provider.label_flag = true;
|
||||
}
|
||||
break;
|
||||
case '!':
|
||||
SaveCurrent(provider);
|
||||
provider.start();
|
||||
//комментарий. анализ закончен
|
||||
provider.setType(Token.COMMENT_EOL);
|
||||
provider.stop();
|
||||
break;
|
||||
default:
|
||||
SaveCurrent(provider);
|
||||
provider.start();
|
||||
provider.setType(Token.IDENTIFIER);
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case Token.IDENTIFIER:
|
||||
switch (provider.c) {
|
||||
case '!':
|
||||
SaveCurrent(provider);
|
||||
provider.start();
|
||||
//комментарий. анализ закончен
|
||||
provider.setType(Token.COMMENT_EOL);
|
||||
provider.stop();
|
||||
break;
|
||||
case '\t':
|
||||
SaveCurrent(provider);
|
||||
provider.start();
|
||||
provider.SkipWrap();
|
||||
break;
|
||||
default:
|
||||
//уже неважно что это.
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case 5:
|
||||
switch (provider.c) {
|
||||
case ' ':
|
||||
case '\r':
|
||||
case '\t':
|
||||
switch (provider.currentTokenType) {
|
||||
case Token.WHITESPACE:
|
||||
//это пробел, и нам норм.
|
||||
break;
|
||||
default:
|
||||
SaveCurrent(provider);
|
||||
provider.start();
|
||||
provider.setType(Token.WHITESPACE);
|
||||
break;
|
||||
}
|
||||
//это пробелы. переноса нет. убираем сохранение типа
|
||||
provider.startTokenType = Token.NULL;
|
||||
break;
|
||||
default:
|
||||
//это - позиция переноса. сохраняем все что было до нее.
|
||||
SaveCurrent(provider);
|
||||
provider.start();
|
||||
provider.setType(Token.OPERATOR);
|
||||
SaveCurrent_(provider); //сохраняем его как одиночный оператор.
|
||||
provider.setType(provider.startTokenType);
|
||||
//берем унаследование от предыдущей строки
|
||||
break;
|
||||
}
|
||||
break;
|
||||
//</editor-fold>
|
||||
//<editor-fold desc="Основной текст строки">
|
||||
default:
|
||||
switch (provider.currentTokenType) {
|
||||
case Token.NULL:
|
||||
provider.start();
|
||||
provider.detectType();
|
||||
break;
|
||||
case Token.WHITESPACE:
|
||||
switch (provider.c) {
|
||||
case ' ':
|
||||
case '\t':
|
||||
case '\r':
|
||||
break;
|
||||
default:
|
||||
SaveCurrent(provider);
|
||||
provider.start();
|
||||
provider.detectType();
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case Token.OPERATOR:
|
||||
provider.checkWrap();
|
||||
SaveCurrent(provider);
|
||||
provider.start();
|
||||
provider.detectType();
|
||||
break;
|
||||
case Token.LITERAL_NUMBER_DECIMAL_INT:
|
||||
provider.checkWrap();
|
||||
switch (provider.c) {
|
||||
case '0':
|
||||
case '1':
|
||||
case '2':
|
||||
case '3':
|
||||
case '4':
|
||||
case '5':
|
||||
case '6':
|
||||
case '7':
|
||||
case '8':
|
||||
case '9':
|
||||
case '\r':
|
||||
break;
|
||||
case '.':
|
||||
case 'e':
|
||||
case 'E':
|
||||
case 'd':
|
||||
case 'D':
|
||||
provider.setType(Token.LITERAL_NUMBER_FLOAT);
|
||||
break;
|
||||
default:
|
||||
SaveCurrent(provider);
|
||||
provider.start();
|
||||
provider.detectType();
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case Token.LITERAL_NUMBER_FLOAT:
|
||||
provider.checkWrap();
|
||||
switch (provider.c) {
|
||||
case '0':
|
||||
case '1':
|
||||
case '2':
|
||||
case '3':
|
||||
case '4':
|
||||
case '5':
|
||||
case '6':
|
||||
case '7':
|
||||
case '8':
|
||||
case '9':
|
||||
case '\r':
|
||||
break;
|
||||
case 'e':
|
||||
case 'E':
|
||||
case 'd':
|
||||
case 'D':
|
||||
SaveCurrent_(provider);
|
||||
provider.setType(Token.NULL);
|
||||
break;
|
||||
default:
|
||||
SaveCurrent(provider);
|
||||
provider.start();
|
||||
provider.detectType();
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case Token.RESERVED_WORD_2:
|
||||
provider.checkWrap();
|
||||
switch (provider.c) {
|
||||
case '0':
|
||||
case '1':
|
||||
case '2':
|
||||
case '3':
|
||||
case '4':
|
||||
case '5':
|
||||
case '6':
|
||||
case '7':
|
||||
case '8':
|
||||
case '9':
|
||||
//подозрения подтвердились. это дробь.
|
||||
provider.setType(Token.LITERAL_NUMBER_FLOAT);
|
||||
break;
|
||||
case '\r':
|
||||
break;
|
||||
default:
|
||||
provider.setType(Token.IDENTIFIER);
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case Token.LITERAL_CHAR:
|
||||
switch (provider.c) {
|
||||
case '\'':
|
||||
SaveCurrent_(provider);
|
||||
provider.setType(Token.NULL);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case Token.LITERAL_STRING_DOUBLE_QUOTE:
|
||||
switch (provider.c) {
|
||||
case '"':
|
||||
SaveCurrent_(provider);
|
||||
provider.setType(Token.NULL);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case Token.IDENTIFIER:
|
||||
provider.checkWrap();
|
||||
if (!
|
||||
(RSyntaxUtilities.isLetter(provider.c) ||
|
||||
RSyntaxUtilities.isDigit(provider.c) ||
|
||||
(provider.c == '_') ||
|
||||
(provider.c == '.')
|
||||
)) {
|
||||
SaveCurrent(provider);
|
||||
provider.start();
|
||||
provider.detectType();
|
||||
}
|
||||
break;
|
||||
}
|
||||
//</editor-fold>
|
||||
}
|
||||
}
|
||||
@Override
|
||||
public void performFinish(TokenProvider provider) {
|
||||
switch (provider.currentTokenType) {
|
||||
case Token.NULL:
|
||||
addNullToken();
|
||||
break;
|
||||
// case Token.IDENTIFIER:
|
||||
case Token.LITERAL_NUMBER_DECIMAL_INT:
|
||||
case Token.LITERAL_NUMBER_FLOAT:
|
||||
case Token.RESERVED_WORD_2:
|
||||
SaveCurrent(provider);
|
||||
break;
|
||||
default:
|
||||
SaveCurrent(provider);
|
||||
addNullToken();
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
297
src/_VisualDVM/Syntax/FreeFortranSPFTokenMaker.java
Normal file
297
src/_VisualDVM/Syntax/FreeFortranSPFTokenMaker.java
Normal file
@@ -0,0 +1,297 @@
|
||||
package _VisualDVM.Syntax;
|
||||
import org.fife.ui.rsyntaxtextarea.RSyntaxUtilities;
|
||||
import org.fife.ui.rsyntaxtextarea.Token;
|
||||
import org.fife.ui.rsyntaxtextarea.TokenMap;
|
||||
|
||||
import javax.swing.text.Segment;
|
||||
public class FreeFortranSPFTokenMaker extends ProvidedTokenMaker {
|
||||
@Override
|
||||
public TokenMap getWordsToHighlight() {
|
||||
TokenMap tokenMap = new TokenMap(true);
|
||||
fillTokenMap(tokenMap, Token.RESERVED_WORD,
|
||||
"FORALL", "ENDFORALL", "PUBLIC", "PRIVATE", "ADMIT", "ASSIGNMENT", "CALL", "COMMON",
|
||||
"CYCLE", "DIMENSION", "END", "ENDDO", "ENTRY", "FORMAT", "IMPLICIT", "INTENT", "MAP",
|
||||
"OPEN", "POINTER", "PROGRAM", "RECURSIVE", "STOP", "THEN", "WHILE", "ALLOCATABLE",
|
||||
"ATEND", "CASE", "COMPLEX", "DATA", "DO", "ENDFILE", "EQUIVALENCE", "FUNCTION",
|
||||
"INCLUDE", "INTERFACE", "MODULE", "OPTIONAL", "PRINT", "PURE", "READ", "RETURN",
|
||||
"STRUCTURE", "TYPE", "WRITE", "ALLOCATE", "BACKSPACE", "CHARACTER", "CONTAINS",
|
||||
"DEALLOCATE", "DOUBLE", "ENDIF", "EXIT", "GOTO", "INQUIRE", "INTRINSIC", "NAMELIST",
|
||||
"PARAMETER", "PRECISION", "REAL", "REWIND", "SUBROUTINE", "UNION", "ASSIGN", "BLOCKDATA",
|
||||
"CLOSE", "CONTINUE", "DEFAULT", "ELSE", "ELSEIF", "ENDSELECT", "EXTERNAL", "IF", "INTEGER",
|
||||
"LOGICAL", "NONE", "PAUSE", "PROCEDURE", "RECORD", "SAVE", "TARGET", "USE", "SELECT", "BLOCK", "WHERE"
|
||||
);
|
||||
fillTokenMap(tokenMap, Token.OPERATOR,
|
||||
".EQ.",
|
||||
".NE.", ".LT.", ".LE.",
|
||||
".GT.", ".GE.",
|
||||
".NOT.", ".AND.", ".EQV.", ".NEQV.",
|
||||
".OR.", ".TRUE.", ".FALSE."
|
||||
);
|
||||
return tokenMap;
|
||||
}
|
||||
@Override
|
||||
public void addToken(Segment segment, int start, int end, int tokenType, int startOffset) {
|
||||
int finalTokenType = tokenType;
|
||||
switch (tokenType) {
|
||||
case Token.COMMENT_EOL:
|
||||
if (segment.count >= 5) {
|
||||
switch (segment.subSequence(1, 5).toString().toUpperCase()) {
|
||||
case "$SPF":
|
||||
finalTokenType = Token.COMMENT_DOCUMENTATION;
|
||||
break;
|
||||
case "DVM$":
|
||||
finalTokenType = Token.COMMENT_MARKUP;
|
||||
break;
|
||||
case "$OMP":
|
||||
finalTokenType = Token.COMMENT_KEYWORD;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case Token.IDENTIFIER:
|
||||
int value = wordsToHighlight.get(segment, start, end);
|
||||
//ключевое слово
|
||||
if (value != -1) {
|
||||
finalTokenType = value;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
super.addToken(segment, start, end, finalTokenType, startOffset);
|
||||
}
|
||||
@Override
|
||||
public void Body(TokenProvider provider) {
|
||||
/*
|
||||
switch (provider.position) {
|
||||
//<editor-fold desc="Зона переноса">
|
||||
case 0:
|
||||
//тут всегда currentTokenType=NULL. переносимый известеи в startTokenType
|
||||
provider.start();
|
||||
switch (provider.c) {
|
||||
case '0':
|
||||
case '1':
|
||||
case '2':
|
||||
case '3':
|
||||
case '4':
|
||||
case '5':
|
||||
case '6':
|
||||
case '7':
|
||||
case '8':
|
||||
case '9':
|
||||
//метка. может появиться только с 0-4 позиций. остальной анализ. аналогичен обычному.
|
||||
provider.setType(Token.MARKUP_TAG_NAME);
|
||||
provider.label_flag = true;
|
||||
break;
|
||||
default:
|
||||
//все остальное
|
||||
provider.detectType();
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case 1:
|
||||
case 2:
|
||||
case 3:
|
||||
case 4:
|
||||
switch (provider.currentTokenType) {
|
||||
case Token.MARKUP_TAG_NAME:
|
||||
switch (provider.c) {
|
||||
case '0':
|
||||
case '1':
|
||||
case '2':
|
||||
case '3':
|
||||
case '4':
|
||||
case '5':
|
||||
case '6':
|
||||
case '7':
|
||||
case '8':
|
||||
case '9':
|
||||
case '\r':
|
||||
break;
|
||||
default:
|
||||
SaveCurrent(provider);
|
||||
provider.start();
|
||||
provider.detectType();
|
||||
break;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
DefaultLineParse(provider);
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case 5:
|
||||
switch (provider.c) {
|
||||
case '&':
|
||||
//это - позиция переноса. сохраняем все что было до нее.
|
||||
SaveCurrent(provider);
|
||||
provider.start();
|
||||
provider.setType(Token.OPERATOR);
|
||||
SaveCurrent_(provider); //сохраняем его как одиночный оператор.
|
||||
provider.setType(provider.startTokenType);
|
||||
//берем унаследование от предыдущей строки
|
||||
break;
|
||||
default:
|
||||
if (provider.currentTokenType==Token.MARKUP_TAG_NAME){
|
||||
//метка на этом символе уже обязана закончиться.
|
||||
SaveCurrent(provider);
|
||||
provider.start();
|
||||
provider.detectType();
|
||||
}else
|
||||
DefaultLineParse(provider);
|
||||
break;
|
||||
}
|
||||
break;
|
||||
//</editor-fold>
|
||||
//<editor-fold desc="Основной текст строки">
|
||||
default:
|
||||
DefaultLineParse(provider);
|
||||
//</editor-fold>
|
||||
}
|
||||
*/
|
||||
DefaultLineParse(provider);
|
||||
}
|
||||
public void DefaultLineParse(TokenProvider provider) {
|
||||
switch (provider.currentTokenType) {
|
||||
case Token.NULL:
|
||||
provider.start();
|
||||
provider.detectType();
|
||||
break;
|
||||
case Token.WHITESPACE:
|
||||
switch (provider.c) {
|
||||
case ' ':
|
||||
case '\t':
|
||||
case '\r':
|
||||
break;
|
||||
default:
|
||||
SaveCurrent(provider);
|
||||
provider.start();
|
||||
provider.detectType();
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case Token.OPERATOR:
|
||||
SaveCurrent(provider);
|
||||
provider.start();
|
||||
provider.detectType();
|
||||
break;
|
||||
case Token.LITERAL_NUMBER_DECIMAL_INT:
|
||||
switch (provider.c) {
|
||||
case '0':
|
||||
case '1':
|
||||
case '2':
|
||||
case '3':
|
||||
case '4':
|
||||
case '5':
|
||||
case '6':
|
||||
case '7':
|
||||
case '8':
|
||||
case '9':
|
||||
case '\r':
|
||||
break;
|
||||
case '.':
|
||||
case 'e':
|
||||
case 'E':
|
||||
case 'd':
|
||||
case 'D':
|
||||
provider.setType(Token.LITERAL_NUMBER_FLOAT);
|
||||
break;
|
||||
default:
|
||||
SaveCurrent(provider);
|
||||
provider.start();
|
||||
provider.detectType();
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case Token.LITERAL_NUMBER_FLOAT:
|
||||
switch (provider.c) {
|
||||
case '0':
|
||||
case '1':
|
||||
case '2':
|
||||
case '3':
|
||||
case '4':
|
||||
case '5':
|
||||
case '6':
|
||||
case '7':
|
||||
case '8':
|
||||
case '9':
|
||||
case '\r':
|
||||
break;
|
||||
case 'e':
|
||||
case 'E':
|
||||
case 'd':
|
||||
case 'D':
|
||||
SaveCurrent_(provider);
|
||||
provider.setType(Token.NULL);
|
||||
break;
|
||||
default:
|
||||
SaveCurrent(provider);
|
||||
provider.start();
|
||||
provider.detectType();
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case Token.RESERVED_WORD_2:
|
||||
switch (provider.c) {
|
||||
case '0':
|
||||
case '1':
|
||||
case '2':
|
||||
case '3':
|
||||
case '4':
|
||||
case '5':
|
||||
case '6':
|
||||
case '7':
|
||||
case '8':
|
||||
case '9':
|
||||
//подозрения подтвердились. это дробь.
|
||||
provider.setType(Token.LITERAL_NUMBER_FLOAT);
|
||||
break;
|
||||
case '\r':
|
||||
break;
|
||||
default:
|
||||
provider.setType(Token.IDENTIFIER);
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case Token.LITERAL_CHAR:
|
||||
switch (provider.c) {
|
||||
case '\'':
|
||||
SaveCurrent_(provider);
|
||||
provider.setType(Token.NULL);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case Token.LITERAL_STRING_DOUBLE_QUOTE:
|
||||
switch (provider.c) {
|
||||
case '"':
|
||||
SaveCurrent_(provider);
|
||||
provider.setType(Token.NULL);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case Token.IDENTIFIER:
|
||||
if (!
|
||||
(RSyntaxUtilities.isLetter(provider.c) ||
|
||||
RSyntaxUtilities.isDigit(provider.c) ||
|
||||
(provider.c == '_') ||
|
||||
(provider.c == '.')
|
||||
)) {
|
||||
SaveCurrent(provider);
|
||||
provider.start();
|
||||
provider.detectType();
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
@Override
|
||||
public void performFinish(TokenProvider provider) {
|
||||
SaveCurrent(provider);
|
||||
addNullToken();
|
||||
}
|
||||
}
|
||||
64
src/_VisualDVM/Syntax/LightVisualiserTheme.java
Normal file
64
src/_VisualDVM/Syntax/LightVisualiserTheme.java
Normal file
@@ -0,0 +1,64 @@
|
||||
package _VisualDVM.Syntax;
|
||||
import java.awt.*;
|
||||
public class LightVisualiserTheme extends VisualiserTheme {
|
||||
@Override
|
||||
protected String getEditorThemePath() {
|
||||
return "/_VisualDVM/Syntax/light_editor.xml";
|
||||
}
|
||||
@Override
|
||||
protected String getForegroundHex() {
|
||||
return "#000000";
|
||||
}
|
||||
@Override
|
||||
protected String getBackgroundHex() {
|
||||
return "#f7f7f7";
|
||||
}
|
||||
@Override
|
||||
protected String getSelectionBackgroundHex() {
|
||||
return "#dae3f1";
|
||||
}
|
||||
@Override
|
||||
protected String getTreeBackgroundHex() {
|
||||
return "#ffffff";
|
||||
}
|
||||
@Override
|
||||
protected String getBarForegroundHex() {
|
||||
return "#637780";
|
||||
}
|
||||
@Override
|
||||
protected String getBarBackgroundHex() {
|
||||
return "#ffffff";
|
||||
}
|
||||
@Override
|
||||
protected String getTableBackgroundHex() {
|
||||
return "#ffffff";
|
||||
}
|
||||
@Override
|
||||
protected Color getGoodFontColor() {
|
||||
return Color.decode("#009738");
|
||||
}
|
||||
@Override
|
||||
protected Color getReadyFontColor2() {
|
||||
return Color.decode("#FFD700");
|
||||
}
|
||||
@Override
|
||||
protected Color getProgressFontColor() {
|
||||
return Color.decode("#f39a28");
|
||||
}
|
||||
@Override
|
||||
protected Color getBadFontColor() {
|
||||
return Color.decode("#ab0000");
|
||||
}
|
||||
@Override
|
||||
protected Color getFatalFontColor() {
|
||||
return Color.decode("#FF4500");
|
||||
}
|
||||
@Override
|
||||
protected Color getUnknownFontColor() {
|
||||
return Color.GRAY;
|
||||
}
|
||||
@Override
|
||||
protected Color getHyperlinkFontColor() {
|
||||
return Color.blue;
|
||||
}
|
||||
}
|
||||
45
src/_VisualDVM/Syntax/ProvidedTokenMaker.java
Normal file
45
src/_VisualDVM/Syntax/ProvidedTokenMaker.java
Normal file
@@ -0,0 +1,45 @@
|
||||
package _VisualDVM.Syntax;
|
||||
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;
|
||||
}
|
||||
}
|
||||
8
src/_VisualDVM/Syntax/ThemeElement.java
Normal file
8
src/_VisualDVM/Syntax/ThemeElement.java
Normal file
@@ -0,0 +1,8 @@
|
||||
package _VisualDVM.Syntax;
|
||||
public interface ThemeElement {
|
||||
default void FontUp() {
|
||||
}
|
||||
default void FontDown() {
|
||||
}
|
||||
void applyTheme();
|
||||
}
|
||||
134
src/_VisualDVM/Syntax/TokenProvider.java
Normal file
134
src/_VisualDVM/Syntax/TokenProvider.java
Normal file
@@ -0,0 +1,134 @@
|
||||
package _VisualDVM.Syntax;
|
||||
import org.fife.ui.rsyntaxtextarea.Token;
|
||||
|
||||
import javax.swing.text.Segment;
|
||||
//сткуртура контейнер для всех текущих переменных.
|
||||
//для упрощения операций.
|
||||
public class TokenProvider {
|
||||
public Segment text;
|
||||
public char[] array;
|
||||
public int offset;
|
||||
public int count;
|
||||
public int end;
|
||||
// Token starting offsets are always of the form:
|
||||
// 'startOffset + (currentTokenStart-offset)', but since startOffset and
|
||||
// offset are constant, tokens' starting positions become:
|
||||
// 'newStartOffset+currentTokenStart'.
|
||||
public int newStartOffset;
|
||||
public int currentTokenStart;
|
||||
public int startTokenType; //хранить тип токена который нам передали, ради переносов
|
||||
public int currentTokenType;
|
||||
public int i;
|
||||
public int position;
|
||||
public char c;
|
||||
public boolean label_flag;
|
||||
public TokenProvider(Segment text_in, int startTokenType_in, int startOffset) {
|
||||
text = text_in;
|
||||
startTokenType = startTokenType_in; //может указывать на то, что мы продолжаем.
|
||||
array = text.array;
|
||||
offset = text.offset;
|
||||
count = text.count;
|
||||
end = offset + count;
|
||||
// Token starting offsets are always of the form:
|
||||
// 'startOffset + (currentTokenStart-offset)', but since startOffset and
|
||||
// offset are constant, tokens' starting positions become:
|
||||
// 'newStartOffset+currentTokenStart'.
|
||||
newStartOffset = startOffset - offset;
|
||||
currentTokenStart = offset;
|
||||
currentTokenType = Token.NULL; //изначально не знаем что будем обрабатывать.
|
||||
position = 0;
|
||||
i = offset;
|
||||
label_flag = false;
|
||||
}
|
||||
public void checkWrap() {
|
||||
if (startTokenType != Token.NULL) {
|
||||
start();
|
||||
startTokenType = Token.NULL;
|
||||
}
|
||||
}
|
||||
public void readNext() {
|
||||
c = array[i];
|
||||
}
|
||||
public void gotoNext() {
|
||||
++i;
|
||||
++position;
|
||||
//todo от греха от табов надо избавляться.
|
||||
// возникает расхожедние между реальным и табским смещением. отсюда галюны.
|
||||
// лучше бы их не отображать даже если они есть. но это к тексту файла. или как то узнавать их длину..
|
||||
}
|
||||
public boolean canRead() {
|
||||
return i < end;
|
||||
}
|
||||
public void setType(int currentTokenType_in) {
|
||||
currentTokenType = currentTokenType_in;
|
||||
}
|
||||
public void stop() {
|
||||
i = end - 1;
|
||||
}
|
||||
public void start() {
|
||||
currentTokenStart = i;
|
||||
}
|
||||
//в зоне основной строки
|
||||
//по текущему символу определяем тип уже начатого токена.
|
||||
public void detectType() {
|
||||
switch (c) {
|
||||
case ' ':
|
||||
case '\t':
|
||||
case '\r':
|
||||
currentTokenType = Token.WHITESPACE;
|
||||
break;
|
||||
case '+':
|
||||
case '-':
|
||||
case '*':
|
||||
case '/':
|
||||
case '=':
|
||||
case '(':
|
||||
case ')':
|
||||
case '[':
|
||||
case ']':
|
||||
case '<':
|
||||
case '>':
|
||||
case '{':
|
||||
case '}':
|
||||
case ',':
|
||||
case '&':
|
||||
currentTokenType = Token.OPERATOR;
|
||||
break;
|
||||
case '\'':
|
||||
currentTokenType = Token.LITERAL_CHAR;
|
||||
break;
|
||||
case '"':
|
||||
currentTokenType = Token.LITERAL_STRING_DOUBLE_QUOTE;
|
||||
break;
|
||||
case '0':
|
||||
case '1':
|
||||
case '2':
|
||||
case '3':
|
||||
case '4':
|
||||
case '5':
|
||||
case '6':
|
||||
case '7':
|
||||
case '8':
|
||||
case '9':
|
||||
currentTokenType = Token.LITERAL_NUMBER_DECIMAL_INT;
|
||||
break;
|
||||
case '.':
|
||||
//возможный кандидат на число с плавающей точкой.
|
||||
currentTokenType = Token.RESERVED_WORD_2;
|
||||
break;
|
||||
case '!':
|
||||
currentTokenType = Token.COMMENT_EOL;
|
||||
stop();
|
||||
break;
|
||||
default:
|
||||
currentTokenType = Token.IDENTIFIER;
|
||||
break;
|
||||
}
|
||||
}
|
||||
//досрочный выход из зоны переноса.
|
||||
public void SkipWrap() {
|
||||
startTokenType = Token.NULL; //перенос исключается.
|
||||
position += 6; //гарантированное непопадание в зону переноса при анализе.
|
||||
setType(Token.WHITESPACE); //стоит таб, значит переноса не будет. идет набор пробелов.
|
||||
}
|
||||
}
|
||||
5
src/_VisualDVM/Syntax/VisualiserColor.java
Normal file
5
src/_VisualDVM/Syntax/VisualiserColor.java
Normal file
@@ -0,0 +1,5 @@
|
||||
package _VisualDVM.Syntax;
|
||||
public enum VisualiserColor {
|
||||
ToolTip_background,
|
||||
ToolTip_foreground
|
||||
}
|
||||
21
src/_VisualDVM/Syntax/VisualiserFonts.java
Normal file
21
src/_VisualDVM/Syntax/VisualiserFonts.java
Normal file
@@ -0,0 +1,21 @@
|
||||
package _VisualDVM.Syntax;
|
||||
public enum VisualiserFonts {
|
||||
GoodState,
|
||||
ReadyState,
|
||||
BadState,
|
||||
Fatal,
|
||||
ProgressState,
|
||||
UnknownState,
|
||||
Hyperlink,
|
||||
Disabled,
|
||||
//бесцветные
|
||||
Distribution,
|
||||
//---
|
||||
TreeItalic,
|
||||
TreePlain,
|
||||
TreeBold,
|
||||
TreeBoldItalic,
|
||||
BlueState,
|
||||
NewVersion, //---
|
||||
Menu
|
||||
}
|
||||
183
src/_VisualDVM/Syntax/VisualiserTheme.java
Normal file
183
src/_VisualDVM/Syntax/VisualiserTheme.java
Normal file
@@ -0,0 +1,183 @@
|
||||
package _VisualDVM.Syntax;
|
||||
import _VisualDVM.Global;
|
||||
import org.fife.ui.rsyntaxtextarea.Theme;
|
||||
|
||||
import java.awt.*;
|
||||
import java.awt.font.TextAttribute;
|
||||
import java.util.HashMap;
|
||||
import java.util.LinkedHashMap;
|
||||
|
||||
import static java.awt.Font.MONOSPACED;
|
||||
public abstract class VisualiserTheme {
|
||||
public Color foreground;
|
||||
public Color background;
|
||||
public Color selection_background;
|
||||
public Color trees_background;
|
||||
public Color bar_foreground;
|
||||
public Color bar_background;
|
||||
public Color table_background;
|
||||
public LinkedHashMap<VisualiserFonts, Font> Fonts = new LinkedHashMap<>();
|
||||
public LinkedHashMap<VisualiserColor, Color> Colors = new LinkedHashMap<>();
|
||||
public VisualiserTheme() {
|
||||
try {
|
||||
//-----------------------------------------------
|
||||
//-----------------------------------------------
|
||||
foreground = Color.decode(getForegroundHex());
|
||||
background = Color.decode(getBackgroundHex());
|
||||
selection_background = Color.decode(getSelectionBackgroundHex());
|
||||
trees_background = Color.decode(getTreeBackgroundHex());
|
||||
bar_foreground = Color.decode(getBarForegroundHex());
|
||||
bar_background = Color.decode(getBarBackgroundHex());
|
||||
table_background = Color.decode(getTableBackgroundHex());
|
||||
//<editor-fold desc="шрифты">
|
||||
Fonts.put(VisualiserFonts.GoodState,
|
||||
new Font(
|
||||
new HashMap<TextAttribute, Object>() {
|
||||
{
|
||||
put(TextAttribute.FAMILY, "Times New Roman");
|
||||
put(TextAttribute.FOREGROUND, getGoodFontColor());
|
||||
put(TextAttribute.SIZE, 16);
|
||||
}
|
||||
}
|
||||
));
|
||||
Fonts.put(VisualiserFonts.ReadyState,
|
||||
new Font(
|
||||
new HashMap<TextAttribute, Object>() {
|
||||
{
|
||||
put(TextAttribute.FAMILY, "Times New Roman");
|
||||
put(TextAttribute.FOREGROUND, getReadyFontColor2());
|
||||
put(TextAttribute.SIZE, 16);
|
||||
}
|
||||
}
|
||||
));
|
||||
Fonts.put(VisualiserFonts.BadState,
|
||||
new Font(
|
||||
new HashMap<TextAttribute, Object>() {
|
||||
{
|
||||
put(TextAttribute.FAMILY, "Times New Roman");
|
||||
put(TextAttribute.FOREGROUND, getBadFontColor());
|
||||
put(TextAttribute.SIZE, 16);
|
||||
}
|
||||
}
|
||||
));
|
||||
Fonts.put(VisualiserFonts.BlueState,
|
||||
new Font(
|
||||
new HashMap<TextAttribute, Object>() {
|
||||
{
|
||||
put(TextAttribute.FAMILY, "Times New Roman");
|
||||
put(TextAttribute.FOREGROUND, getHyperlinkFontColor());
|
||||
put(TextAttribute.SIZE, 16);
|
||||
}
|
||||
}
|
||||
));
|
||||
Fonts.put(VisualiserFonts.Fatal,
|
||||
new Font(
|
||||
new HashMap<TextAttribute, Object>() {
|
||||
{
|
||||
put(TextAttribute.FAMILY, "Times New Roman");
|
||||
put(TextAttribute.FOREGROUND, getFatalFontColor());
|
||||
put(TextAttribute.SIZE, 16);
|
||||
}
|
||||
}
|
||||
));
|
||||
Fonts.put(VisualiserFonts.UnknownState,
|
||||
new Font(
|
||||
new HashMap<TextAttribute, Object>() {
|
||||
{
|
||||
put(TextAttribute.FAMILY, "Times New Roman");
|
||||
put(TextAttribute.FOREGROUND, getUnknownFontColor());
|
||||
put(TextAttribute.SIZE, 16);
|
||||
}
|
||||
}
|
||||
));
|
||||
Fonts.put(VisualiserFonts.Hyperlink,
|
||||
new Font(
|
||||
new HashMap<TextAttribute, Object>() {
|
||||
{
|
||||
put(TextAttribute.FAMILY, MONOSPACED);
|
||||
put(TextAttribute.FOREGROUND, getHyperlinkFontColor());
|
||||
put(TextAttribute.SIZE, 18);
|
||||
put(TextAttribute.WEIGHT, TextAttribute.WEIGHT_BOLD);
|
||||
put(TextAttribute.UNDERLINE, TextAttribute.UNDERLINE_ON);
|
||||
}
|
||||
}
|
||||
));
|
||||
Fonts.put(VisualiserFonts.ProgressState,
|
||||
new Font(
|
||||
new HashMap<TextAttribute, Object>() {
|
||||
{
|
||||
put(TextAttribute.FAMILY, "Times New Roman");
|
||||
put(TextAttribute.FOREGROUND, getProgressFontColor());
|
||||
put(TextAttribute.SIZE, 16);
|
||||
}
|
||||
}
|
||||
));
|
||||
Fonts.put(VisualiserFonts.Disabled, new Font(
|
||||
new HashMap<TextAttribute, Object>() {
|
||||
{
|
||||
put(TextAttribute.FAMILY, MONOSPACED);
|
||||
put(TextAttribute.BACKGROUND, Color.lightGray);
|
||||
put(TextAttribute.FOREGROUND, Color.lightGray);
|
||||
put(TextAttribute.SIZE, 18);
|
||||
put(TextAttribute.UNDERLINE, TextAttribute.UNDERLINE_ON);
|
||||
}
|
||||
}
|
||||
));
|
||||
Fonts.put(VisualiserFonts.Distribution,
|
||||
new Font(
|
||||
new HashMap<TextAttribute, Object>() {
|
||||
{
|
||||
put(TextAttribute.FAMILY, MONOSPACED);
|
||||
put(TextAttribute.SIZE, 16);
|
||||
}
|
||||
}
|
||||
)
|
||||
);
|
||||
Fonts.put(VisualiserFonts.TreePlain, new Font("Times New Roman", Font.PLAIN, 16));
|
||||
Fonts.put(VisualiserFonts.TreeItalic, new Font("Times New Roman", Font.ITALIC, 16));
|
||||
Fonts.put(VisualiserFonts.TreeBold, new Font("Times New Roman", Font.BOLD, 16));
|
||||
Fonts.put(VisualiserFonts.TreeBoldItalic, new Font("Times New Roman", Font.BOLD|Font.ITALIC, 16));
|
||||
Fonts.put(VisualiserFonts.Menu, new Font("Times New Roman", Font.ITALIC, 16));
|
||||
Fonts.put(VisualiserFonts.NewVersion, new Font(
|
||||
new HashMap<TextAttribute, Object>() {
|
||||
{
|
||||
put(TextAttribute.FAMILY, "Times New Roman");
|
||||
put(TextAttribute.FOREGROUND, Color.BLACK);
|
||||
put(TextAttribute.BACKGROUND, Color.YELLOW);
|
||||
put(TextAttribute.SIZE, 16);
|
||||
}
|
||||
}
|
||||
|
||||
));
|
||||
//</editor-fold>
|
||||
} catch (Exception ex) {
|
||||
Global.Log.PrintException(ex);
|
||||
}
|
||||
}
|
||||
protected abstract String getEditorThemePath();
|
||||
protected abstract String getForegroundHex();
|
||||
protected abstract String getBackgroundHex();
|
||||
protected abstract String getSelectionBackgroundHex();
|
||||
protected abstract String getTreeBackgroundHex();
|
||||
protected abstract String getBarForegroundHex();
|
||||
protected abstract String getBarBackgroundHex();
|
||||
protected abstract String getTableBackgroundHex();
|
||||
protected abstract Color getGoodFontColor();
|
||||
protected abstract Color getReadyFontColor2();
|
||||
protected abstract Color getProgressFontColor();
|
||||
protected abstract Color getBadFontColor();
|
||||
protected abstract Color getFatalFontColor();
|
||||
protected abstract Color getUnknownFontColor();
|
||||
protected abstract Color getHyperlinkFontColor(); //-
|
||||
//если использовать один и тот же объект на все едиторы пявляются странности
|
||||
//значит при применении выделяем новый экземпляр.
|
||||
public Theme getEditorTheme() {
|
||||
Theme res = null;
|
||||
try {
|
||||
res = Theme.load(getClass().getResourceAsStream(getEditorThemePath()));
|
||||
} catch (Exception ex) {
|
||||
Global.Log.PrintException(ex);
|
||||
}
|
||||
return res;
|
||||
}
|
||||
}
|
||||
5
src/_VisualDVM/Syntax/VisualiserThemeName.java
Normal file
5
src/_VisualDVM/Syntax/VisualiserThemeName.java
Normal file
@@ -0,0 +1,5 @@
|
||||
package _VisualDVM.Syntax;
|
||||
public enum VisualiserThemeName {
|
||||
Light,
|
||||
Dark
|
||||
}
|
||||
90
src/_VisualDVM/Syntax/dark_editor.xml
Normal file
90
src/_VisualDVM/Syntax/dark_editor.xml
Normal file
@@ -0,0 +1,90 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<!DOCTYPE RSyntaxTheme SYSTEM "theme.dtd">
|
||||
|
||||
<!--
|
||||
Dark theme based off of Notepad++'s Obsidian theme.
|
||||
See theme.dtd and org.fife.ui.rsyntaxtextarea.Theme for more information.
|
||||
-->
|
||||
<RSyntaxTheme version="1.0">
|
||||
|
||||
<!-- Omitting baseFont will use a system-appropriate monospaced. -->
|
||||
<baseFont family="Courier New" size="16"/>
|
||||
|
||||
<!-- General editor colors. -->
|
||||
<background color="293134"/>
|
||||
<caret color="c1cbc2"/>
|
||||
<selection useFG="false" bg="404E51" roundedEdges="false"/>
|
||||
<currentLineHighlight color="2F393C" fade="false"/>
|
||||
<marginLine fg="394448"/>
|
||||
<markAllHighlight color="6b8189"/>
|
||||
<!-- TODO: Fix me -->
|
||||
<markOccurrencesHighlight color="5b7179" border="false"/>
|
||||
<matchedBracket fg="6A8088" bg="6b8189" highlightBoth="false" animate="true"/>
|
||||
<hyperlinks fg="a082bd"/>
|
||||
<secondaryLanguages>
|
||||
<language index="1" bg="333344"/>
|
||||
<language index="2" bg="223322"/>
|
||||
<language index="3" bg="332222"/>
|
||||
</secondaryLanguages>
|
||||
|
||||
<!-- Gutter styling. -->
|
||||
<gutterBorder color="81969A"/>
|
||||
<lineNumbers fg="81969A"/>
|
||||
<foldIndicator fg="6A8088" iconBg="2f383c" iconArmedBg="3f484c"/>
|
||||
<iconRowHeader activeLineRange="3399ff"/>
|
||||
|
||||
<!-- Syntax tokens. -->
|
||||
<tokenStyles>
|
||||
<style token="IDENTIFIER" fg="e0e5eb"/>
|
||||
<style token="RESERVED_WORD" fg="66beff" bold="true"/>
|
||||
<style token="ANNOTATION" fg="E8E2B7"/>
|
||||
<!-- SPF директивы. -->
|
||||
<style token="COMMENT_DOCUMENTATION" fg="ff2c08" bold="true"/>
|
||||
<!-- DVM директивы -->
|
||||
<style token="COMMENT_MARKUP" fg="8300c2" bold="true"/>
|
||||
<!-- OMP директивы -->
|
||||
<style token="COMMENT_KEYWORD" fg="9e0900" bold="true"/>
|
||||
<!-- простые комментарии -->
|
||||
<style token="COMMENT_EOL" fg="9e9e9e"/>
|
||||
<!-- строки в двойных кавычках -->
|
||||
<style token="LITERAL_STRING_DOUBLE_QUOTE" fg="24ff4b"/>
|
||||
<!-- строки в одинарных кавычках -->
|
||||
<style token="LITERAL_CHAR" fg="EC7600"/>
|
||||
<!-- метки -->
|
||||
<style token="MARKUP_TAG_NAME" fg="ff2c08"/>
|
||||
<!-- кандидат на дробную часть(точка) -->
|
||||
<style token="RESERVED_WORD_2" fg="a9b7c6"/>
|
||||
|
||||
<style token="COMMENT_MULTILINE" fg="66747B"/>
|
||||
<style token="FUNCTION" fg="E0E2E4"/>
|
||||
<style token="DATA_TYPE" fg="678CB1" bold="true"/>
|
||||
<style token="LITERAL_BOOLEAN" fg="93C763" bold="true"/>
|
||||
<style token="LITERAL_NUMBER_DECIMAL_INT" fg="FFCD22"/>
|
||||
<style token="LITERAL_NUMBER_FLOAT" fg="FFCD22"/>
|
||||
<style token="LITERAL_NUMBER_HEXADECIMAL" fg="FFCD22"/>
|
||||
|
||||
|
||||
<style token="LITERAL_BACKQUOTE" fg="EC7600"/>
|
||||
<style token="MARKUP_TAG_DELIMITER" fg="678CB1"/>
|
||||
<style token="MARKUP_TAG_ATTRIBUTE" fg="B3B689"/>
|
||||
<style token="MARKUP_TAG_ATTRIBUTE_VALUE" fg="e1e2cf"/>
|
||||
<style token="MARKUP_COMMENT" fg="66747B"/>
|
||||
<style token="MARKUP_DTD" fg="A082BD"/>
|
||||
<style token="MARKUP_PROCESSING_INSTRUCTION" fg="A082BD"/>
|
||||
<style token="MARKUP_CDATA" fg="d5e6f0"/>
|
||||
<style token="MARKUP_CDATA_DELIMITER" fg="ae9fbf"/>
|
||||
<style token="MARKUP_ENTITY_REFERENCE" fg="678CB1"/>
|
||||
<style token="OPERATOR" fg="E8E2B7"/>
|
||||
<style token="PREPROCESSOR" fg="A082BD"/>
|
||||
<style token="REGEX" fg="d39745"/>
|
||||
<style token="SEPARATOR" fg="E8E2B7"/>
|
||||
<style token="VARIABLE" fg="ae9fbf" bold="true"/>
|
||||
<style token="WHITESPACE" fg="E0E2E4"/>
|
||||
|
||||
<style token="ERROR_IDENTIFIER" fg="E0E2E4" bg="04790e"/>
|
||||
<style token="ERROR_NUMBER_FORMAT" fg="E0E2E4" bg="04790e"/>
|
||||
<style token="ERROR_STRING_DOUBLE" fg="E0E2E4" bg="04790e"/>
|
||||
<style token="ERROR_CHAR" fg="E0E2E4" bg="04790e"/>
|
||||
</tokenStyles>
|
||||
|
||||
</RSyntaxTheme>
|
||||
88
src/_VisualDVM/Syntax/light_editor.xml
Normal file
88
src/_VisualDVM/Syntax/light_editor.xml
Normal file
@@ -0,0 +1,88 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<!DOCTYPE RSyntaxTheme SYSTEM "theme.dtd">
|
||||
|
||||
<!--
|
||||
Theme that mimics Visual Studio's defaults.
|
||||
See theme.dtd and org.fife.ui.rsyntaxtextarea.Theme for more information.
|
||||
-->
|
||||
<RSyntaxTheme version="1.0">
|
||||
|
||||
<!-- Omitting baseFont will use a system-appropriate monospaced. -->
|
||||
<baseFont family="Courier New" size="16"/>
|
||||
|
||||
<!-- General editor colors. -->
|
||||
<background color="ffffff"/>
|
||||
<caret color="000000"/>
|
||||
<selection fg="default" bg="default"/>
|
||||
<currentLineHighlight color="e8f2fe" fade="false"/>
|
||||
<marginLine fg="b0b4b9"/>
|
||||
<markAllHighlight color="6b8189"/> <!-- TODO: Fix me -->
|
||||
<markOccurrencesHighlight color="d4d4d4" border="false"/> <!-- TODO: Fix me -->
|
||||
<matchedBracket fg="DBE0CC" highlightBoth="false" animate="false"/>
|
||||
<hyperlinks fg="0000ff"/>
|
||||
<secondaryLanguages>
|
||||
<language index="1" bg="fff0cc"/>
|
||||
<language index="2" bg="dafeda"/>
|
||||
<language index="3" bg="ffe0f0"/>
|
||||
</secondaryLanguages>
|
||||
|
||||
|
||||
<!-- Gutter styling. -->
|
||||
<gutterBorder color="808080"/>
|
||||
<lineNumbers fg="2B91AF"/>
|
||||
<foldIndicator fg="808080" iconBg="ffffff"/>
|
||||
<iconRowHeader activeLineRange="3399ff"/>
|
||||
|
||||
<!-- Syntax tokens. -->
|
||||
<tokenStyles>
|
||||
<style token="IDENTIFIER" fg="000000"/>
|
||||
<style token="RESERVED_WORD" fg="0000ff" bold="true"/>
|
||||
<style token="ANNOTATION" fg="808080"/>
|
||||
<!-- SPF директивы. -->
|
||||
<style token="COMMENT_DOCUMENTATION" fg="ff2c08" bold="true"/>
|
||||
<!-- DVM директивы -->
|
||||
<style token="COMMENT_MARKUP" fg="8300c2" bold="true"/>
|
||||
<!-- OMP директивы -->
|
||||
<style token="COMMENT_KEYWORD" fg="9e0900" bold="true"/>
|
||||
<!-- простые комментарии -->
|
||||
<style token="COMMENT_EOL" fg="858585"/>
|
||||
<!-- строки в двойных кавычках -->
|
||||
<style token="LITERAL_STRING_DOUBLE_QUOTE" fg="008000"/>
|
||||
<!-- строки в одинарных кавычках -->
|
||||
<style token="LITERAL_CHAR" fg="A31515"/>
|
||||
<!-- метки -->
|
||||
<style token="MARKUP_TAG_NAME" fg="ff2c08"/>
|
||||
<!-- кандидат на дробную часть(точка) -->
|
||||
<style token="RESERVED_WORD_2" fg="000000"/>
|
||||
|
||||
<style token="COMMENT_MULTILINE" fg="008000"/>
|
||||
<style token="DATA_TYPE" fg="0000ff" bold="true"/>
|
||||
<style token="FUNCTION" fg="000000"/>
|
||||
<style token="LITERAL_BOOLEAN" fg="0000ff" bold="true"/>
|
||||
<style token="LITERAL_NUMBER_DECIMAL_INT" fg="ffa814"/>
|
||||
<style token="LITERAL_NUMBER_FLOAT" fg="ffa814"/>
|
||||
<style token="LITERAL_NUMBER_HEXADECIMAL" fg="000000"/>
|
||||
|
||||
<style token="LITERAL_BACKQUOTE" fg="A31515"/>
|
||||
<style token="MARKUP_TAG_DELIMITER" fg="0000ff"/>
|
||||
<style token="MARKUP_TAG_ATTRIBUTE" fg="ff0000"/>
|
||||
<style token="MARKUP_TAG_ATTRIBUTE_VALUE" fg="0000ff"/>
|
||||
<style token="MARKUP_COMMENT" fg="006000" italic="true"/>
|
||||
<style token="MARKUP_DTD" fg="ad8000"/>
|
||||
<style token="MARKUP_PROCESSING_INSTRUCTION" fg="808080"/>
|
||||
<style token="MARKUP_CDATA" fg="000000"/>
|
||||
<style token="MARKUP_CDATA_DELIMITER" fg="0000ff"/>
|
||||
<style token="OPERATOR" fg="804040" bold="true"/>
|
||||
<style token="PREPROCESSOR" fg="808080"/>
|
||||
<style token="REGEX" fg="000000"/>
|
||||
<style token="SEPARATOR" fg="000000"/>
|
||||
<style token="VARIABLE" fg="ff9900" bold="true"/>
|
||||
<style token="WHITESPACE" fg="000000"/>
|
||||
|
||||
<style token="ERROR_IDENTIFIER" fg="000000" bg="ffcccc"/>
|
||||
<style token="ERROR_NUMBER_FORMAT" fg="000000" bg="ffcccc"/>
|
||||
<style token="ERROR_STRING_DOUBLE" fg="000000" bg="ffcccc"/>
|
||||
<style token="ERROR_CHAR" fg="000000" bg="ffcccc"/>
|
||||
</tokenStyles>
|
||||
|
||||
</RSyntaxTheme>
|
||||
Reference in New Issue
Block a user