增加注释
This commit is contained in:
parent
47da48ba20
commit
430e9fb690
Binary file not shown.
|
Before Width: | Height: | Size: 114 KiB |
@ -9,7 +9,6 @@ import javafx.scene.input.KeyEvent;
|
|||||||
import org.fxmisc.richtext.CodeArea;
|
import org.fxmisc.richtext.CodeArea;
|
||||||
import org.fxmisc.richtext.GenericStyledArea;
|
import org.fxmisc.richtext.GenericStyledArea;
|
||||||
import org.fxmisc.richtext.LineNumberFactory;
|
import org.fxmisc.richtext.LineNumberFactory;
|
||||||
import org.fxmisc.richtext.StyleClassedTextArea;
|
|
||||||
import org.fxmisc.richtext.model.Paragraph;
|
import org.fxmisc.richtext.model.Paragraph;
|
||||||
import org.fxmisc.richtext.model.StyleSpans;
|
import org.fxmisc.richtext.model.StyleSpans;
|
||||||
import org.fxmisc.richtext.model.StyleSpansBuilder;
|
import org.fxmisc.richtext.model.StyleSpansBuilder;
|
||||||
@ -56,17 +55,25 @@ public class LineNumberTextArea extends CodeArea {
|
|||||||
"transient", "try", "void", "volatile", "while"
|
"transient", "try", "void", "volatile", "while"
|
||||||
};
|
};
|
||||||
|
|
||||||
// 定义用于匹配关键字、括号、分号、字符串和注释的正则表达式模式
|
/**
|
||||||
|
* 定义用于匹配关键字、括号、分号、字符串和注释的正则表达式模式
|
||||||
|
*/
|
||||||
private static final String KEYWORD_PATTERN = "\\b(" + String.join("|", KEYWORDS) + ")\\b";
|
private static final String KEYWORD_PATTERN = "\\b(" + String.join("|", KEYWORDS) + ")\\b";
|
||||||
private static final String PAREN_PATTERN = "\\(|\\)";
|
private static final String PAREN_PATTERN = "\\(|\\)";
|
||||||
private static final String BRACE_PATTERN = "\\{|\\}";
|
private static final String BRACE_PATTERN = "\\{|\\}";
|
||||||
private static final String BRACKET_PATTERN = "\\[|\\]";
|
private static final String BRACKET_PATTERN = "\\[|\\]";
|
||||||
private static final String SEMICOLON_PATTERN = "\\;";
|
private static final String SEMICOLON_PATTERN = "\\;";
|
||||||
private static final String STRING_PATTERN = "\"([^\"\\\\]|\\\\.)*\"";
|
private static final String STRING_PATTERN = "\"([^\"\\\\]|\\\\.)*\"";
|
||||||
private static final String COMMENT_PATTERN = "//[^\n]*" + "|" + "/\\*(.|\\R)*?\\*/" // 用于整体文本处理(文本块)
|
private static final String COMMENT_PATTERN =
|
||||||
+ "|" + "/\\*[^\\v]*" + "|" + "^\\h*\\*([^\\v]*|/)"; // 用于可见段落处理(逐行)
|
// 用于整体文本处理(文本块)
|
||||||
|
"//[^\n]*" + "|" + "/\\*(.|\\R)*?\\*/"
|
||||||
|
// 用于可见段落处理(逐行)
|
||||||
|
+ "|" + "/\\*[^\\v]*" + "|" + "^\\h*\\*([^\\v]*|/)";
|
||||||
|
|
||||||
// 使用正则表达式将关键字、括号、分号、字符串和注释的模式组合成一个复合模式
|
|
||||||
|
/**
|
||||||
|
* 使用正则表达式将关键字、括号、分号、字符串和注释的模式组合成一个复合模式
|
||||||
|
*/
|
||||||
private static final Pattern PATTERN = Pattern.compile(
|
private static final Pattern PATTERN = Pattern.compile(
|
||||||
"(?<KEYWORD>" + KEYWORD_PATTERN + ")"
|
"(?<KEYWORD>" + KEYWORD_PATTERN + ")"
|
||||||
+ "|(?<PAREN>" + PAREN_PATTERN + ")"
|
+ "|(?<PAREN>" + PAREN_PATTERN + ")"
|
||||||
@ -95,7 +102,9 @@ public class LineNumberTextArea extends CodeArea {
|
|||||||
this.setParagraphGraphicFactory(LineNumberFactory.get(this));
|
this.setParagraphGraphicFactory(LineNumberFactory.get(this));
|
||||||
this.setContextMenu(new DefaultContextMenu());
|
this.setContextMenu(new DefaultContextMenu());
|
||||||
|
|
||||||
// 重新计算所有文本的语法高亮,用户停止编辑区域后的500毫秒内
|
/*
|
||||||
|
重新计算所有文本的语法高亮,用户停止编辑区域后的500毫秒内
|
||||||
|
*/
|
||||||
Subscription cleanupWhenNoLongerNeedIt = this
|
Subscription cleanupWhenNoLongerNeedIt = this
|
||||||
.multiPlainChanges()
|
.multiPlainChanges()
|
||||||
.successionEnds(Duration.ofMillis(500))
|
.successionEnds(Duration.ofMillis(500))
|
||||||
@ -169,43 +178,45 @@ public class LineNumberTextArea extends CodeArea {
|
|||||||
@Override
|
@Override
|
||||||
public void accept( ListModification<? extends Paragraph<PS, SEG, S>> lm )
|
public void accept( ListModification<? extends Paragraph<PS, SEG, S>> lm )
|
||||||
{
|
{
|
||||||
if ( lm.getAddedSize() > 0 ) Platform.runLater( () ->
|
if (lm.getAddedSize() > 0) {
|
||||||
{
|
Platform.runLater(() -> {
|
||||||
int paragraph = Math.min( area.firstVisibleParToAllParIndex() + lm.getFrom(), area.getParagraphs().size()-1 );
|
int paragraph = Math.min(area.firstVisibleParToAllParIndex() + lm.getFrom(), area.getParagraphs().size() - 1);
|
||||||
String text = area.getText( paragraph, 0, paragraph, area.getParagraphLength( paragraph ) );
|
String text = area.getText(paragraph, 0, paragraph, area.getParagraphLength(paragraph));
|
||||||
|
|
||||||
if ( paragraph != prevParagraph || text.length() != prevTextLength )
|
if (paragraph != prevParagraph || text.length() != prevTextLength) {
|
||||||
{
|
if (paragraph < area.getParagraphs().size() - 1) {
|
||||||
if ( paragraph < area.getParagraphs().size()-1 )
|
int startPos = area.getAbsolutePosition(paragraph, 0);
|
||||||
{
|
area.setStyleSpans(startPos, computeStyles.apply(text));
|
||||||
int startPos = area.getAbsolutePosition( paragraph, 0 );
|
}
|
||||||
area.setStyleSpans( startPos, computeStyles.apply( text ) );
|
prevTextLength = text.length();
|
||||||
|
prevParagraph = paragraph;
|
||||||
}
|
}
|
||||||
prevTextLength = text.length();
|
});
|
||||||
prevParagraph = paragraph;
|
}
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private class DefaultContextMenu extends ContextMenu {
|
private static class DefaultContextMenu extends ContextMenu {
|
||||||
private MenuItem fold, unfold, print;
|
private final MenuItem fold;
|
||||||
|
private final MenuItem unfold;
|
||||||
|
private final MenuItem print;
|
||||||
|
|
||||||
public DefaultContextMenu() {
|
public DefaultContextMenu() {
|
||||||
fold = new MenuItem("折叠所选文本");
|
fold = new MenuItem("折叠所选文本");
|
||||||
fold.setOnAction(AE -> {
|
fold.setOnAction(aE -> {
|
||||||
hide();
|
hide();
|
||||||
fold();
|
fold();
|
||||||
});
|
});
|
||||||
|
|
||||||
unfold = new MenuItem("从光标处展开");
|
unfold = new MenuItem("从光标处展开");
|
||||||
unfold.setOnAction(AE -> {
|
unfold.setOnAction(aE -> {
|
||||||
hide();
|
hide();
|
||||||
unfold();
|
unfold();
|
||||||
});
|
});
|
||||||
|
|
||||||
print = new MenuItem("打印");
|
print = new MenuItem("打印");
|
||||||
print.setOnAction(AE -> {
|
print.setOnAction(aE -> {
|
||||||
hide();
|
hide();
|
||||||
print();
|
print();
|
||||||
});
|
});
|
||||||
|
|||||||
@ -1,27 +1,40 @@
|
|||||||
|
/* CSS样式注释 */
|
||||||
|
|
||||||
|
/* 标记关键字 */
|
||||||
.keyword {
|
.keyword {
|
||||||
-fx-fill: purple;
|
-fx-fill: purple; /* 设置文本颜色为紫色 */
|
||||||
-fx-font-weight: bold;
|
-fx-font-weight: bold; /* 设置文本加粗 */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* 标记分号 */
|
||||||
.semicolon {
|
.semicolon {
|
||||||
-fx-font-weight: bold;
|
-fx-font-weight: bold; /* 设置文本加粗 */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* 标记括号 */
|
||||||
.paren {
|
.paren {
|
||||||
-fx-fill: firebrick;
|
-fx-fill: firebrick; /* 设置文本颜色为火砖红 */
|
||||||
-fx-font-weight: bold;
|
-fx-font-weight: bold; /* 设置文本加粗 */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* 标记方括号 */
|
||||||
.bracket {
|
.bracket {
|
||||||
-fx-fill: darkgreen;
|
-fx-fill: darkgreen; /* 设置文本颜色为深绿色 */
|
||||||
-fx-font-weight: bold;
|
-fx-font-weight: bold; /* 设置文本加粗 */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* 标记大括号 */
|
||||||
.brace {
|
.brace {
|
||||||
-fx-fill: teal;
|
-fx-fill: teal; /* 设置文本颜色为青色 */
|
||||||
-fx-font-weight: bold;
|
-fx-font-weight: bold; /* 设置文本加粗 */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* 标记字符串 */
|
||||||
.string {
|
.string {
|
||||||
-fx-fill: blue;
|
-fx-fill: blue; /* 设置文本颜色为蓝色 */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* 标记注释 */
|
||||||
.comment {
|
.comment {
|
||||||
-fx-fill: cadetblue;
|
-fx-fill: cadetblue; /* 设置文本颜色为军校蓝 */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user