@@ -36,7 +36,21 @@ public class JavaKeywordsAsync extends Application {
36
36
"transient" , "try" , "void" , "volatile" , "while"
37
37
};
38
38
39
- private static final Pattern KEYWORD_PATTERN = Pattern .compile ("\\ b(" + String .join ("|" , KEYWORDS ) + ")\\ b" );
39
+ private static final String KEYWORD_PATTERN = "\\ b(" + String .join ("|" , KEYWORDS ) + ")\\ b" ;
40
+ private static final String PAREN_PATTERN = "\\ (|\\ )" ;
41
+ private static final String BRACE_PATTERN = "\\ {|\\ }" ;
42
+ private static final String BRACKET_PATTERN = "\\ [|\\ ]" ;
43
+ private static final String SEMICOLON_PATTERN = "\\ ;" ;
44
+ private static final String STRING_PATTERN = "\" ([^\" ]|\\ \" )*\" " ;
45
+
46
+ private static final Pattern PATTERN = Pattern .compile (
47
+ "(?<KEYWORD>" + KEYWORD_PATTERN + ")"
48
+ + "|(?<PAREN>" + PAREN_PATTERN + ")"
49
+ + "|(?<BRACE>" + BRACE_PATTERN + ")"
50
+ + "|(?<BRACKET>" + BRACKET_PATTERN + ")"
51
+ + "|(?<SEMICOLON>" + SEMICOLON_PATTERN + ")"
52
+ + "|(?<STRING>" + STRING_PATTERN + ")"
53
+ );
40
54
41
55
private static final String sampleCode = String .join ("\n " , new String [] {
42
56
"package com.example;" ,
@@ -107,13 +121,21 @@ private void applyHighlighting(StyleSpans<Collection<String>> highlighting) {
107
121
}
108
122
109
123
private static StyleSpans <Collection <String >> computeHighlighting (String text ) {
110
- Matcher matcher = KEYWORD_PATTERN .matcher (text );
124
+ Matcher matcher = PATTERN .matcher (text );
111
125
int lastKwEnd = 0 ;
112
126
StyleSpansBuilder <Collection <String >> spansBuilder
113
127
= new StyleSpansBuilder <>();
114
128
while (matcher .find ()) {
129
+ String styleClass =
130
+ matcher .group ("KEYWORD" ) != null ? "keyword" :
131
+ matcher .group ("PAREN" ) != null ? "paren" :
132
+ matcher .group ("BRACE" ) != null ? "brace" :
133
+ matcher .group ("BRACKET" ) != null ? "bracket" :
134
+ matcher .group ("SEMICOLON" ) != null ? "semicolon" :
135
+ matcher .group ("STRING" ) != null ? "string" :
136
+ null ; /* never happens */ assert styleClass != null ;
115
137
spansBuilder .add (Collections .emptyList (), matcher .start () - lastKwEnd );
116
- spansBuilder .add (Collections .singleton ("keyword" ), matcher .end () - matcher .start ());
138
+ spansBuilder .add (Collections .singleton (styleClass ), matcher .end () - matcher .start ());
117
139
lastKwEnd = matcher .end ();
118
140
}
119
141
spansBuilder .add (Collections .emptyList (), text .length () - lastKwEnd );
0 commit comments