]> gitweb.factorcode.org Git - factor.git/blob - basis/xmode/modes/java.xml
xmode.modes: update
[factor.git] / basis / xmode / modes / java.xml
1 <?xml version="1.0"?>
2 <!-- 
3  * :tabSize=8:indentSize=8:noTabs=false:
4  * :folding=explicit:collapseFolds=1:
5 -->
6 <!DOCTYPE MODE SYSTEM "xmode.dtd">
7
8 <MODE>
9         <PROPS>
10                 <PROPERTY NAME="commentStart" VALUE="/*" />
11                 <PROPERTY NAME="commentEnd" VALUE="*/" />
12                 <PROPERTY NAME="lineComment" VALUE="//" />
13                 <PROPERTY NAME="wordBreakChars" VALUE=",+-=&lt;&gt;/?^&amp;*" />
14
15                 <!-- Auto indent -->
16                 <PROPERTY NAME="indentOpenBrackets" VALUE="{" />
17                 <PROPERTY NAME="indentCloseBrackets" VALUE="}" />
18                 <PROPERTY NAME="unalignedOpenBrackets" VALUE="(" />
19                 <PROPERTY NAME="unalignedCloseBrackets" VALUE=")" />
20                 <PROPERTY NAME="indentNextLine"
21                         VALUE="\s*(((if|while)\s*\(|else\s*|else\s+if\s*\(|for\s*\(.*\))[^{;]*)" />
22                 <PROPERTY NAME="unindentThisLine"
23                         VALUE="^.*(default:\s*|case.*:.*)$" />
24                 <PROPERTY NAME="electricKeys" VALUE=":" />
25                 <PROPERTY NAME="doubleBracketIndent" VALUE="true" />
26         </PROPS>
27         <RULES IGNORE_CASE="FALSE"
28                 HIGHLIGHT_DIGITS="TRUE"
29                 DIGIT_RE="(0[lL]?|[1-9]\d{0,9}(\d{0,9}[lL])?|0[xX]\p{XDigit}{1,8}(\p{XDigit}{0,8}[lL])?|0[0-7]{1,11}([0-7]{0,11}[lL])?|([0-9]+\.[0-9]*|\.[0-9]+)([eE][+-]?[0-9]+)?[fFdD]?|[0-9]+([eE][+-]?[0-9]+[fFdD]?|([eE][+-]?[0-9]+)?[fFdD]))">
30
31                 <!-- Silly comment -->
32                 <SEQ TYPE="COMMENT1">/**/</SEQ>
33
34                 <!-- Javadoc comment -->
35                 <SPAN TYPE="COMMENT3" DELEGATE="JAVADOC">
36                         <BEGIN>/**</BEGIN>
37                         <END>*/</END>
38                 </SPAN>
39
40                 <!-- Java comment (C style) -->
41                 <SPAN TYPE="COMMENT1">
42                         <BEGIN>/*</BEGIN>
43                         <END>*/</END>
44                 </SPAN>
45
46                 <SPAN TYPE="LITERAL1" DELEGATE="DOUBLEQUOTE_LITERAL" NO_LINE_BREAK="TRUE">
47                         <BEGIN>"</BEGIN>
48                         <END>"</END>
49                 </SPAN>
50                 <SPAN TYPE="LITERAL3" DELEGATE="SIMPLEQUOTE_LITERAL" NO_LINE_BREAK="TRUE">
51                         <BEGIN>'</BEGIN>
52                         <END>'</END>
53                 </SPAN>
54
55                 <!-- end of line comment is defined this way rather than using an
56                 EOL_SPAN because using an EOL_SPAN causes such comments in jsp
57                 files to highlight incorrectly -->
58                 <SEQ_REGEXP TYPE="COMMENT2">[/][/](.*?)$</SEQ_REGEXP>
59
60                 <SEQ TYPE="OPERATOR">=</SEQ>
61                 <SEQ TYPE="OPERATOR">!</SEQ>
62                 <SEQ TYPE="OPERATOR">&gt;=</SEQ>
63                 <SEQ TYPE="OPERATOR">&lt;=</SEQ>
64                 <SEQ TYPE="OPERATOR">+</SEQ>
65                 <SEQ TYPE="OPERATOR">-</SEQ>
66                 
67                 <!-- division operator is defined this way so that the '//' at the
68                 start of single line comments within java scriptlets in jsp files 
69                 are not parsed as operators. -->
70                 <SEQ_REGEXP TYPE="OPERATOR">/(?![/])</SEQ_REGEXP>
71
72                 <!-- workaround to stop "*" from being colorized
73                      in import statements. -->
74                 <SEQ TYPE="NULL">.*</SEQ>
75
76                 <SEQ TYPE="OPERATOR">*</SEQ>
77                 <SEQ TYPE="OPERATOR">&gt;</SEQ>
78                 <SEQ TYPE="OPERATOR">&lt;</SEQ>
79                 <SEQ TYPE="OPERATOR">%</SEQ>
80                 <SEQ TYPE="OPERATOR">&amp;</SEQ>
81                 <SEQ TYPE="OPERATOR">|</SEQ>
82                 <SEQ TYPE="OPERATOR">^</SEQ>
83                 <SEQ TYPE="OPERATOR">~</SEQ>
84                 <SEQ TYPE="OPERATOR">}</SEQ>
85                 <SEQ TYPE="OPERATOR">{</SEQ>
86                 <MARK_PREVIOUS TYPE="LABEL" MATCH_TYPE="OPERATOR"
87                         AT_WHITESPACE_END="TRUE">:</MARK_PREVIOUS>
88
89                 <!-- Function calls -->
90                 <MARK_PREVIOUS TYPE="FUNCTION" MATCH_TYPE="OPERATOR">(</MARK_PREVIOUS>
91                 <SEQ TYPE="OPERATOR">)</SEQ>
92
93                 <!-- Annotation types -->
94                 <MARK_FOLLOWING TYPE="KEYWORD4">@</MARK_FOLLOWING>
95
96                 <KEYWORDS>
97                         <!--{{{ modifiers -->
98                         <KEYWORD1>assert</KEYWORD1>
99                         <KEYWORD1>break</KEYWORD1>
100                         <KEYWORD1>case</KEYWORD1>
101                         <KEYWORD1>catch</KEYWORD1>
102                         <KEYWORD1>continue</KEYWORD1>
103                         <KEYWORD1>default</KEYWORD1>
104                         <KEYWORD1>do</KEYWORD1>
105                         <KEYWORD1>else</KEYWORD1>
106                         <KEYWORD1>finally</KEYWORD1>
107                         <KEYWORD1>for</KEYWORD1>
108                         <KEYWORD1>if</KEYWORD1>
109                         <KEYWORD1>instanceof</KEYWORD1>
110                         <KEYWORD1>new</KEYWORD1>
111                         <KEYWORD1>record</KEYWORD1>
112                         <KEYWORD1>return</KEYWORD1>
113                         <KEYWORD1>strictfp</KEYWORD1>
114                         <KEYWORD1>switch</KEYWORD1>
115                         <KEYWORD1>throw</KEYWORD1>
116                         <KEYWORD1>try</KEYWORD1>
117                         <KEYWORD1>while</KEYWORD1>
118                         <KEYWORD1>yield</KEYWORD1>
119                         <!--}}}-->
120
121                         <!--{{{ structure keywords -->
122                         <KEYWORD2>abstract</KEYWORD2>
123                         <KEYWORD2>enum</KEYWORD2>
124                         <KEYWORD2>extends</KEYWORD2>
125                         <KEYWORD2>final</KEYWORD2>
126                         <KEYWORD2>implements</KEYWORD2>
127                         <KEYWORD2>import</KEYWORD2> 
128                         <KEYWORD2>native</KEYWORD2>
129                         <KEYWORD2>package</KEYWORD2>
130                         <KEYWORD2>private</KEYWORD2>
131                         <KEYWORD2>protected</KEYWORD2>
132                         <KEYWORD2>public</KEYWORD2>
133                         <KEYWORD2>static</KEYWORD2>
134                         <KEYWORD2>synchronized</KEYWORD2>
135                         <KEYWORD2>throws</KEYWORD2>
136                         <KEYWORD2>transient</KEYWORD2>
137                         <KEYWORD2>volatile</KEYWORD2>
138                         <KEYWORD3>void</KEYWORD3>
139                         <!--}}}-->
140
141                         <!--{{{ Module related keywords -->
142                         <KEYWORD2>module</KEYWORD2>
143                         <KEYWORD2>open</KEYWORD2>
144                         <KEYWORD2>requires</KEYWORD2>
145                         <KEYWORD2>exports</KEYWORD2>
146                         <KEYWORD2>opens</KEYWORD2>
147                         <KEYWORD2>to</KEYWORD2>
148                         <KEYWORD2>uses</KEYWORD2>
149                         <KEYWORD2>provides</KEYWORD2>
150                         <KEYWORD2>with</KEYWORD2>
151                         <KEYWORD2>transitive</KEYWORD2>
152                         <!--}}}-->
153                         
154                         <!--{{{ sealed class keywords -->
155                         <KEYWORD2>sealed</KEYWORD2>
156                         <KEYWORD2>permits</KEYWORD2>
157                         <KEYWORD2>non-sealed</KEYWORD2>
158                         <!--}}}-->
159                         
160                         <!--{{{ types -->
161                         <KEYWORD3>boolean</KEYWORD3>
162                         <KEYWORD3>byte</KEYWORD3>
163                         <KEYWORD3>char</KEYWORD3>
164                         <KEYWORD3>class</KEYWORD3>
165                         <KEYWORD3>double</KEYWORD3>
166                         <KEYWORD3>float</KEYWORD3>
167                         <KEYWORD3>int</KEYWORD3>
168                         <KEYWORD3>interface</KEYWORD3>
169                         <KEYWORD3>long</KEYWORD3>
170                         <KEYWORD3>short</KEYWORD3>
171                         <!-- added for Java 10. While 'var' is not technically a keyword, it is a type. -->
172                         <KEYWORD3>var</KEYWORD3>
173                         <!--}}}-->
174
175                         <!--{{{ literals -->
176                         <LITERAL2>false</LITERAL2>
177                         <LITERAL2>null</LITERAL2>
178                         <LITERAL2>super</LITERAL2>
179                         <LITERAL2>this</LITERAL2>
180                         <LITERAL2>true</LITERAL2>
181                         <!--}}}-->
182
183                         <INVALID>goto</INVALID>
184                         <INVALID>const</INVALID>
185                 </KEYWORDS>
186         </RULES>
187
188         <!--{{{ DOUBLEQUOTE_LITERAL rule -->
189         <RULES SET="DOUBLEQUOTE_LITERAL" DEFAULT="LITERAL1" IGNORE_CASE="TRUE">
190                 <SEQ TYPE="LITERAL4">\\</SEQ>
191                 <SEQ TYPE="LITERAL4">\"</SEQ>
192                 <SEQ TYPE="LITERAL4">\n</SEQ>
193                 <SEQ TYPE="LITERAL4">\r</SEQ>
194                 <SEQ TYPE="LITERAL4">\t</SEQ>
195                 <SEQ_REGEXP HASH_CHAR="\u" TYPE="LITERAL4">\\u[a-f\d]{4}</SEQ_REGEXP>
196         </RULES> <!--}}}-->
197         
198         <!--{{{ SIMPLEUOTE_LITERAL rule -->
199         <RULES SET="SIMPLEQUOTE_LITERAL" DEFAULT="LITERAL3" IGNORE_CASE="TRUE">
200                 <SEQ TYPE="LITERAL4">\\</SEQ>
201                 <SEQ TYPE="LITERAL4">\'</SEQ>
202                 <SEQ TYPE="LITERAL4">\n</SEQ>
203                 <SEQ TYPE="LITERAL4">\r</SEQ>
204                 <SEQ TYPE="LITERAL4">\t</SEQ>
205                 <SEQ_REGEXP HASH_CHAR="\u" TYPE="LITERAL4">\\u[a-f\d]{4}</SEQ_REGEXP>
206         </RULES> <!--}}}-->
207
208         <!--{{{ JAVADOC rules -->
209         <RULES SET="JAVADOC" DEFAULT="COMMENT3" IGNORE_CASE="TRUE">
210
211                 <!-- so that *@param is highlighted -->
212                 <SEQ TYPE="COMMENT3">*</SEQ>
213
214                 <!-- Javadoc ignores tags inside <pre> -->
215                 <!-- XXX no it doesn't -->
216                 <!-- SPAN TYPE="MARKUP" DELEGATE="JAVADOC_PRE">
217                         <BEGIN>&lt;pre&gt;</BEGIN>
218                         <END>&lt;/pre&gt;</END>
219                 </SPAN -->
220
221                 <!-- HTML comments -->
222                 <SPAN TYPE="COMMENT1">
223                         <BEGIN>&lt;!--</BEGIN>
224                         <END>--&gt;</END>
225                 </SPAN>
226
227                 <!-- Javadoc allows this -->
228                 <SEQ TYPE="COMMENT3">&lt;&lt;</SEQ>
229                 <SEQ TYPE="COMMENT3">&lt;=</SEQ>
230                 <SEQ TYPE="COMMENT3">&lt; </SEQ>
231
232                 <!-- strings in quotes -->
233                 <SPAN TYPE="LITERAL1" ESCAPE="\" NO_LINE_BREAK="TRUE">
234                 <BEGIN>&quot;</BEGIN>
235                 <END>&quot;</END>
236                 </SPAN>
237
238                 <!-- HTML tags -->
239                 <SPAN TYPE="MARKUP" DELEGATE="xml::TAGS"
240                         NO_LINE_BREAK="TRUE">
241                         <BEGIN>&lt;</BEGIN>
242                         <END>&gt;</END>
243                 </SPAN>
244
245                 <!-- so that @link{...} is highlighted -->
246                 <!-- XXX: this is wrong, {@link ..} is correct, see below -->
247                 <!--<SEQ TYPE="COMMENT3">{</SEQ>-->
248
249                 <SPAN_REGEXP TYPE="LABEL" HASH_CHAR="{@" NO_WORD_BREAK="FALSE" DELEGATE="JAVADOC_PARAM">
250                         <BEGIN>\{@(link|linkplain|docRoot|code|literal)\s</BEGIN>
251                         <END>}</END>
252                 </SPAN_REGEXP>
253
254                 <!-- for the common usage of the cvs keyword $Id: java.xml 25558 2022-06-02 20:36:50Z daleanson $ -->
255                 <SPAN_REGEXP TYPE="LABEL" HASH_CHAR="@version" NO_WORD_BREAK="FALSE" DELEGATE="JAVADOC_PARAM">
256                         <BEGIN>@version\s+\$</BEGIN>
257                         <END>$</END>
258                 </SPAN_REGEXP>
259
260                 <!-- This works only when you use the same whitespace before and after the param's name,
261                          eg. a tab before and after, but mixing space and tab won't work.
262                          The reason is that you can't enter a regexp in END, except for the backreference operator $n -->
263                 <SPAN_REGEXP TYPE="LABEL" HASH_CHAR="@" NO_WORD_BREAK="FALSE" DELEGATE="JAVADOC_PARAM">
264                         <BEGIN>@(?:param|throws|exception|serialField)(\s)</BEGIN>
265                         <END>$1</END>
266                 </SPAN_REGEXP>
267
268                 <KEYWORDS>
269                 <!-- Note: the labels in comments are handled by SPANs above -->
270
271                 <!-- Official javadoc tags:
272                          http://download.oracle.com/javase/6/docs/technotes/tools/windows/javadoc.html#javadoctags -->
273                         <LABEL>@author</LABEL>
274                         <LABEL>@deprecated</LABEL>
275                 <!--<LABEL>@docRoot</LABEL>-->
276                 <!--<LABEL>@exception</LABEL>-->
277                         <LABEL>{@inheritDoc}</LABEL>
278                 <!--<LABEL>@link</LABEL>-->
279                 <!--<LABEL>@linkplain</LABEL>-->
280                 <!--<LABEL>@param</LABEL>-->
281                         <LABEL>@return</LABEL>
282                         <LABEL>@see</LABEL>
283                         <LABEL>@serial</LABEL>
284                         <LABEL>@serialData</LABEL>
285                 <!--<LABEL>@serialField</LABEL>-->
286                         <LABEL>@since</LABEL>
287                         <LABEL>@throws</LABEL>
288                         <LABEL>{@value}</LABEL>
289                         <LABEL>@version</LABEL>
290
291                 <!-- new in 1.5 -->
292                 <!--<LABEL>@code</LABEL>-->
293                 <!--<LABEL>@literal</LABEL>-->
294
295                 <!-- SUNs proposed tags:
296                          http://java.sun.com/j2se/javadoc/proposed-tags.html -->
297                         <KEYWORD2>@category</KEYWORD2>
298                         <KEYWORD2>@example</KEYWORD2>
299                         <KEYWORD2>@exclude</KEYWORD2>
300                         <KEYWORD2>@index</KEYWORD2>
301                         <KEYWORD2>@internal</KEYWORD2>
302                         <KEYWORD2>@obsolete</KEYWORD2>
303                         <KEYWORD2>@threadsafety</KEYWORD2>
304                         <KEYWORD2>@tutorial</KEYWORD2>
305                         <KEYWORD2>@todo</KEYWORD2>
306
307                 <!-- Custom tags -->
308                         <KEYWORD4>@access</KEYWORD4>
309                         <KEYWORD4>@beaninfo</KEYWORD4>
310                         <KEYWORD4>@bon</KEYWORD4>
311                         <KEYWORD4>@bug</KEYWORD4>
312                         <KEYWORD4>@complexity</KEYWORD4>
313                         <KEYWORD4>@design</KEYWORD4>
314                         <KEYWORD4>@ensures</KEYWORD4>
315                         <KEYWORD4>@equivalent</KEYWORD4>
316                         <KEYWORD4>@generates</KEYWORD4>
317                         <KEYWORD4>@guard</KEYWORD4>
318                         <KEYWORD4>@hides</KEYWORD4>
319                         <KEYWORD4>@history</KEYWORD4>
320                         <KEYWORD4>@idea</KEYWORD4>
321                         <KEYWORD4>@invariant</KEYWORD4>
322                         <KEYWORD4>@modifies</KEYWORD4>
323                         <KEYWORD4>@overrides</KEYWORD4>
324                         <KEYWORD4>@post</KEYWORD4>
325                         <KEYWORD4>@pre</KEYWORD4>
326                         <KEYWORD4>@references</KEYWORD4>
327                         <KEYWORD4>@requires</KEYWORD4>
328                         <KEYWORD4>@review</KEYWORD4>
329                         <KEYWORD4>@spec</KEYWORD4>
330                         <KEYWORD4>@uses</KEYWORD4>
331                         <KEYWORD4>@values</KEYWORD4>
332                 </KEYWORDS>
333         </RULES> <!--}}}-->
334
335
336         <!-- just a dummy which makes use of the default token type COMMENT4 for highlighting the word after @param in javadoc -->
337         <RULES SET="JAVADOC_PARAM" DEFAULT="COMMENT4" IGNORE_CASE="TRUE" />
338 </MODE>