3 * :tabSize=8:indentSize=8:noTabs=false:
4 * :folding=explicit:collapseFolds=1:
6 * Mode for Java 9 module-info.java files. Java 9 defines a few keywords that
7 * are only keywords in files named module-info.java, otherwise, these keywords
8 * are considered identifiers.
10 * This mode file is the same as the java.xml mode file with the addition of the
11 * new keywords that are specific to modules, so this is way overkill for just a
12 * module-info.java file. From the spec:
13 * "open, module, requires, transitive, exports, opens, to, uses, provides, and
14 * with are restricted keywords (i.e. they are keywords solely where they appear
15 * as terminals in ModuleDeclaration, and are identifiers everywhere else)."
16 * Reference: http://download.oracle.com/otndocs/jcp/java_platform_module_system-0_1-edr-spec/index.html
18 <!DOCTYPE MODE SYSTEM "xmode.dtd">
22 <PROPERTY NAME="commentStart" VALUE="/*" />
23 <PROPERTY NAME="commentEnd" VALUE="*/" />
24 <PROPERTY NAME="lineComment" VALUE="//" />
25 <PROPERTY NAME="wordBreakChars" VALUE=",+-=<>/?^&*" />
28 <PROPERTY NAME="indentOpenBrackets" VALUE="{" />
29 <PROPERTY NAME="indentCloseBrackets" VALUE="}" />
30 <PROPERTY NAME="unalignedOpenBrackets" VALUE="(" />
31 <PROPERTY NAME="unalignedCloseBrackets" VALUE=")" />
32 <PROPERTY NAME="indentNextLine"
33 VALUE="\s*(((if|while)\s*\(|else\s*|else\s+if\s*\(|for\s*\(.*\))[^{;]*)" />
34 <PROPERTY NAME="unindentThisLine"
35 VALUE="^.*(default:\s*|case.*:.*)$" />
36 <PROPERTY NAME="electricKeys" VALUE=":" />
38 <RULES IGNORE_CASE="FALSE"
39 HIGHLIGHT_DIGITS="TRUE"
40 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]))">
42 <!-- Silly comment -->
43 <SEQ TYPE="COMMENT1">/**/</SEQ>
45 <!-- Javadoc comment -->
46 <SPAN TYPE="COMMENT3" DELEGATE="JAVADOC">
51 <!-- Java comment (C style) -->
52 <SPAN TYPE="COMMENT1">
57 <SPAN TYPE="LITERAL1" DELEGATE="DOUBLEQUOTE_LITERAL" NO_LINE_BREAK="TRUE">
61 <SPAN TYPE="LITERAL3" DELEGATE="SIMPLEQUOTE_LITERAL" NO_LINE_BREAK="TRUE">
66 <!-- end of line comment is defined this way rather than using an
67 EOL_SPAN because using an EOL_SPAN causes such comments in jsp
68 files to highlight incorrectly -->
69 <SEQ_REGEXP TYPE="COMMENT2">[/][/](.*?)$</SEQ_REGEXP>
71 <SEQ TYPE="OPERATOR">=</SEQ>
72 <SEQ TYPE="OPERATOR">!</SEQ>
73 <SEQ TYPE="OPERATOR">>=</SEQ>
74 <SEQ TYPE="OPERATOR"><=</SEQ>
75 <SEQ TYPE="OPERATOR">+</SEQ>
76 <SEQ TYPE="OPERATOR">-</SEQ>
78 <!-- division operator is defined this way so that the '//' at the
79 start of single line comments within java scriptlets in jsp files
80 are not parsed as operators. -->
81 <SEQ_REGEXP TYPE="OPERATOR">/(?![/])</SEQ_REGEXP>
83 <!-- workaround to stop "*" from being colorized
84 in import statements. -->
85 <SEQ TYPE="NULL">.*</SEQ>
87 <SEQ TYPE="OPERATOR">*</SEQ>
88 <SEQ TYPE="OPERATOR">></SEQ>
89 <SEQ TYPE="OPERATOR"><</SEQ>
90 <SEQ TYPE="OPERATOR">%</SEQ>
91 <SEQ TYPE="OPERATOR">&</SEQ>
92 <SEQ TYPE="OPERATOR">|</SEQ>
93 <SEQ TYPE="OPERATOR">^</SEQ>
94 <SEQ TYPE="OPERATOR">~</SEQ>
95 <SEQ TYPE="OPERATOR">}</SEQ>
96 <SEQ TYPE="OPERATOR">{</SEQ>
97 <MARK_PREVIOUS TYPE="LABEL" MATCH_TYPE="OPERATOR"
98 AT_WHITESPACE_END="TRUE">:</MARK_PREVIOUS>
100 <!-- Function calls -->
101 <MARK_PREVIOUS TYPE="FUNCTION" MATCH_TYPE="OPERATOR">(</MARK_PREVIOUS>
102 <SEQ TYPE="OPERATOR">)</SEQ>
104 <!-- Annotation types -->
105 <MARK_FOLLOWING TYPE="KEYWORD4">@</MARK_FOLLOWING>
108 <!--{{{ modifiers -->
109 <KEYWORD1>assert</KEYWORD1>
110 <KEYWORD1>break</KEYWORD1>
111 <KEYWORD1>case</KEYWORD1>
112 <KEYWORD1>catch</KEYWORD1>
113 <KEYWORD1>continue</KEYWORD1>
114 <KEYWORD1>default</KEYWORD1>
115 <KEYWORD1>do</KEYWORD1>
116 <KEYWORD1>else</KEYWORD1>
117 <KEYWORD1>finally</KEYWORD1>
118 <KEYWORD1>for</KEYWORD1>
119 <KEYWORD1>if</KEYWORD1>
120 <KEYWORD1>instanceof</KEYWORD1>
121 <KEYWORD1>new</KEYWORD1>
122 <KEYWORD1>return</KEYWORD1>
123 <KEYWORD1>strictfp</KEYWORD1>
124 <KEYWORD1>switch</KEYWORD1>
125 <KEYWORD1>throw</KEYWORD1>
126 <KEYWORD1>try</KEYWORD1>
127 <KEYWORD1>while</KEYWORD1>
131 <KEYWORD2>open</KEYWORD2>
132 <KEYWORD3>module</KEYWORD3>
133 <KEYWORD2>requires</KEYWORD2>
134 <KEYWORD2>transitive</KEYWORD2>
135 <KEYWORD2>exports</KEYWORD2>
136 <KEYWORD2>opens</KEYWORD2>
137 <KEYWORD2>to</KEYWORD2>
138 <KEYWORD2>uses</KEYWORD2>
139 <KEYWORD2>provides</KEYWORD2>
140 <KEYWORD2>with</KEYWORD2>
143 <!--{{{ structure keywords -->
144 <KEYWORD2>final</KEYWORD2>
145 <KEYWORD2>implements</KEYWORD2>
146 <KEYWORD2>native</KEYWORD2>
147 <KEYWORD2>private</KEYWORD2>
148 <KEYWORD2>protected</KEYWORD2>
149 <KEYWORD2>public</KEYWORD2>
150 <KEYWORD2>static</KEYWORD2>
151 <KEYWORD2>synchronized</KEYWORD2>
152 <KEYWORD2>throws</KEYWORD2>
153 <KEYWORD2>transient</KEYWORD2>
154 <KEYWORD2>volatile</KEYWORD2>
155 <KEYWORD2>abstract</KEYWORD2>
156 <KEYWORD2>extends</KEYWORD2>
157 <KEYWORD2>import</KEYWORD2>
158 <KEYWORD2>package</KEYWORD2>
159 <KEYWORD2>enum</KEYWORD2>
160 <KEYWORD3>void</KEYWORD3>
164 <KEYWORD3>boolean</KEYWORD3>
165 <KEYWORD3>byte</KEYWORD3>
166 <KEYWORD3>char</KEYWORD3>
167 <KEYWORD3>class</KEYWORD3>
168 <KEYWORD3>double</KEYWORD3>
169 <KEYWORD3>float</KEYWORD3>
170 <KEYWORD3>int</KEYWORD3>
171 <KEYWORD3>interface</KEYWORD3>
172 <KEYWORD3>long</KEYWORD3>
173 <KEYWORD3>short</KEYWORD3>
177 <LITERAL2>false</LITERAL2>
178 <LITERAL2>null</LITERAL2>
179 <LITERAL2>super</LITERAL2>
180 <LITERAL2>this</LITERAL2>
181 <LITERAL2>true</LITERAL2>
184 <INVALID>goto</INVALID>
185 <INVALID>const</INVALID>
189 <!--{{{ DOUBLEQUOTE_LITERAL rule -->
190 <RULES SET="DOUBLEQUOTE_LITERAL" DEFAULT="LITERAL1" IGNORE_CASE="TRUE">
191 <SEQ TYPE="LITERAL4">\\</SEQ>
192 <SEQ TYPE="LITERAL4">\"</SEQ>
193 <SEQ TYPE="LITERAL4">\n</SEQ>
194 <SEQ TYPE="LITERAL4">\r</SEQ>
195 <SEQ TYPE="LITERAL4">\t</SEQ>
196 <SEQ_REGEXP HASH_CHAR="\u" TYPE="LITERAL4">\\u[a-f\d]{4}</SEQ_REGEXP>
199 <!--{{{ SIMPLEUOTE_LITERAL rule -->
200 <RULES SET="SIMPLEQUOTE_LITERAL" DEFAULT="LITERAL3" IGNORE_CASE="TRUE">
201 <SEQ TYPE="LITERAL4">\\</SEQ>
202 <SEQ TYPE="LITERAL4">\'</SEQ>
203 <SEQ TYPE="LITERAL4">\n</SEQ>
204 <SEQ TYPE="LITERAL4">\r</SEQ>
205 <SEQ TYPE="LITERAL4">\t</SEQ>
206 <SEQ_REGEXP HASH_CHAR="\u" TYPE="LITERAL4">\\u[a-f\d]{4}</SEQ_REGEXP>
209 <!--{{{ JAVADOC rules -->
210 <RULES SET="JAVADOC" DEFAULT="COMMENT3" IGNORE_CASE="TRUE">
212 <!-- so that *@param is highlighted -->
213 <SEQ TYPE="COMMENT3">*</SEQ>
215 <!-- Javadoc ignores tags inside <pre> -->
216 <!-- XXX no it doesn't -->
217 <!-- SPAN TYPE="MARKUP" DELEGATE="JAVADOC_PRE">
218 <BEGIN><pre></BEGIN>
219 <END></pre></END>
222 <!-- HTML comments -->
223 <SPAN TYPE="COMMENT1">
224 <BEGIN><!--</BEGIN>
228 <!-- Javadoc allows this -->
229 <SEQ TYPE="COMMENT3"><<</SEQ>
230 <SEQ TYPE="COMMENT3"><=</SEQ>
231 <SEQ TYPE="COMMENT3">< </SEQ>
233 <!-- strings in quotes -->
234 <SPAN TYPE="LITERAL1" ESCAPE="\" NO_LINE_BREAK="TRUE">
235 <BEGIN>"</BEGIN>
240 <SPAN TYPE="MARKUP" DELEGATE="xml::TAGS"
241 NO_LINE_BREAK="TRUE">
246 <!-- so that @link{...} is highlighted -->
247 <!-- XXX: this is wrong, {@link ..} is correct, see below -->
248 <!--<SEQ TYPE="COMMENT3">{</SEQ>-->
250 <SPAN_REGEXP TYPE="LABEL" HASH_CHAR="{@" NO_WORD_BREAK="FALSE" DELEGATE="JAVADOC_PARAM">
251 <BEGIN>\{@(link|linkplain|docRoot|code|literal)\s</BEGIN>
255 <!-- for the common usage of the cvs keyword $Id: java.xml 20772 2012-01-13 18:54:27Z kog13 $ -->
256 <SPAN_REGEXP TYPE="LABEL" HASH_CHAR="@version" NO_WORD_BREAK="FALSE" DELEGATE="JAVADOC_PARAM">
257 <BEGIN>@version\s+\$</BEGIN>
261 <!-- This works only when you use the same whitespace before and after the param's name,
262 eg. a tab before and after, but mixing space and tab won't work.
263 The reason is that you can't enter a regexp in END, except for the backreference operator $n -->
264 <SPAN_REGEXP TYPE="LABEL" HASH_CHAR="@" NO_WORD_BREAK="FALSE" DELEGATE="JAVADOC_PARAM">
265 <BEGIN>@(?:param|throws|exception|serialField)(\s)</BEGIN>
270 <!-- Note: the labels in comments are handled by SPANs above -->
272 <!-- Official javadoc tags:
273 http://download.oracle.com/javase/6/docs/technotes/tools/windows/javadoc.html#javadoctags -->
274 <LABEL>@author</LABEL>
275 <LABEL>@deprecated</LABEL>
276 <!--<LABEL>@docRoot</LABEL>-->
277 <!--<LABEL>@exception</LABEL>-->
278 <LABEL>{@inheritDoc}</LABEL>
279 <!--<LABEL>@link</LABEL>-->
280 <!--<LABEL>@linkplain</LABEL>-->
281 <!--<LABEL>@param</LABEL>-->
282 <LABEL>@return</LABEL>
284 <LABEL>@serial</LABEL>
285 <LABEL>@serialData</LABEL>
286 <!--<LABEL>@serialField</LABEL>-->
287 <LABEL>@since</LABEL>
288 <!--<LABEL>@throws</LABEL>-->
289 <LABEL>{@value}</LABEL>
290 <LABEL>@version</LABEL>
293 <!--<LABEL>@code</LABEL>-->
294 <!--<LABEL>@literal</LABEL>-->
296 <!-- SUNs proposed tags:
297 http://java.sun.com/j2se/javadoc/proposed-tags.html -->
298 <KEYWORD2>@category</KEYWORD2>
299 <KEYWORD2>@example</KEYWORD2>
300 <KEYWORD2>@exclude</KEYWORD2>
301 <KEYWORD2>@index</KEYWORD2>
302 <KEYWORD2>@internal</KEYWORD2>
303 <KEYWORD2>@obsolete</KEYWORD2>
304 <KEYWORD2>@threadsafety</KEYWORD2>
305 <KEYWORD2>@tutorial</KEYWORD2>
306 <KEYWORD2>@todo</KEYWORD2>
309 <KEYWORD4>@access</KEYWORD4>
310 <KEYWORD4>@beaninfo</KEYWORD4>
311 <KEYWORD4>@bon</KEYWORD4>
312 <KEYWORD4>@bug</KEYWORD4>
313 <KEYWORD4>@complexity</KEYWORD4>
314 <KEYWORD4>@design</KEYWORD4>
315 <KEYWORD4>@ensures</KEYWORD4>
316 <KEYWORD4>@equivalent</KEYWORD4>
317 <KEYWORD4>@generates</KEYWORD4>
318 <KEYWORD4>@guard</KEYWORD4>
319 <KEYWORD4>@hides</KEYWORD4>
320 <KEYWORD4>@history</KEYWORD4>
321 <KEYWORD4>@idea</KEYWORD4>
322 <KEYWORD4>@invariant</KEYWORD4>
323 <KEYWORD4>@modifies</KEYWORD4>
324 <KEYWORD4>@overrides</KEYWORD4>
325 <KEYWORD4>@post</KEYWORD4>
326 <KEYWORD4>@pre</KEYWORD4>
327 <KEYWORD4>@references</KEYWORD4>
328 <KEYWORD4>@requires</KEYWORD4>
329 <KEYWORD4>@review</KEYWORD4>
330 <KEYWORD4>@spec</KEYWORD4>
331 <KEYWORD4>@uses</KEYWORD4>
332 <KEYWORD4>@values</KEYWORD4>
337 <!-- just a dummy which makes use of the default token type COMMENT4 for highlighting the word after @param in javadoc -->
338 <RULES SET="JAVADOC_PARAM" DEFAULT="COMMENT4" IGNORE_CASE="TRUE" />