]> gitweb.factorcode.org Git - factor.git/blob - basis/xmode/modes/java-module-info.xml
xmode.modes: updating with recent xmode files
[factor.git] / basis / xmode / modes / java-module-info.xml
1 <?xml version="1.0"?>
2 <!-- 
3  * :tabSize=8:indentSize=8:noTabs=false:
4  * :folding=explicit:collapseFolds=1:
5  *
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.
9  *
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
17 -->
18 <!DOCTYPE MODE SYSTEM "xmode.dtd">
19
20 <MODE>
21         <PROPS>
22                 <PROPERTY NAME="commentStart" VALUE="/*" />
23                 <PROPERTY NAME="commentEnd" VALUE="*/" />
24                 <PROPERTY NAME="lineComment" VALUE="//" />
25                 <PROPERTY NAME="wordBreakChars" VALUE=",+-=&lt;&gt;/?^&amp;*" />
26
27                 <!-- Auto indent -->
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=":" />
37         </PROPS>
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]))">
41
42                 <!-- Silly comment -->
43                 <SEQ TYPE="COMMENT1">/**/</SEQ>
44
45                 <!-- Javadoc comment -->
46                 <SPAN TYPE="COMMENT3" DELEGATE="JAVADOC">
47                         <BEGIN>/**</BEGIN>
48                         <END>*/</END>
49                 </SPAN>
50
51                 <!-- Java comment (C style) -->
52                 <SPAN TYPE="COMMENT1">
53                         <BEGIN>/*</BEGIN>
54                         <END>*/</END>
55                 </SPAN>
56
57                 <SPAN TYPE="LITERAL1" DELEGATE="DOUBLEQUOTE_LITERAL" NO_LINE_BREAK="TRUE">
58                         <BEGIN>"</BEGIN>
59                         <END>"</END>
60                 </SPAN>
61                 <SPAN TYPE="LITERAL3" DELEGATE="SIMPLEQUOTE_LITERAL" NO_LINE_BREAK="TRUE">
62                         <BEGIN>'</BEGIN>
63                         <END>'</END>
64                 </SPAN>
65
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>
70
71                 <SEQ TYPE="OPERATOR">=</SEQ>
72                 <SEQ TYPE="OPERATOR">!</SEQ>
73                 <SEQ TYPE="OPERATOR">&gt;=</SEQ>
74                 <SEQ TYPE="OPERATOR">&lt;=</SEQ>
75                 <SEQ TYPE="OPERATOR">+</SEQ>
76                 <SEQ TYPE="OPERATOR">-</SEQ>
77                 
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>
82
83                 <!-- workaround to stop "*" from being colorized
84                      in import statements. -->
85                 <SEQ TYPE="NULL">.*</SEQ>
86
87                 <SEQ TYPE="OPERATOR">*</SEQ>
88                 <SEQ TYPE="OPERATOR">&gt;</SEQ>
89                 <SEQ TYPE="OPERATOR">&lt;</SEQ>
90                 <SEQ TYPE="OPERATOR">%</SEQ>
91                 <SEQ TYPE="OPERATOR">&amp;</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>
99
100                 <!-- Function calls -->
101                 <MARK_PREVIOUS TYPE="FUNCTION" MATCH_TYPE="OPERATOR">(</MARK_PREVIOUS>
102                 <SEQ TYPE="OPERATOR">)</SEQ>
103
104                 <!-- Annotation types -->
105                 <MARK_FOLLOWING TYPE="KEYWORD4">@</MARK_FOLLOWING>
106
107                 <KEYWORDS>
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>
128                         <!--}}}-->
129
130                         <!-- modules -->
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>
141
142
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>
161                         <!--}}}-->
162
163                         <!--{{{ types -->
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>
174                         <!--}}}-->
175
176                         <!--{{{ literals -->
177                         <LITERAL2>false</LITERAL2>
178                         <LITERAL2>null</LITERAL2>
179                         <LITERAL2>super</LITERAL2>
180                         <LITERAL2>this</LITERAL2>
181                         <LITERAL2>true</LITERAL2>
182                         <!--}}}-->
183
184                         <INVALID>goto</INVALID>
185                         <INVALID>const</INVALID>
186                 </KEYWORDS>
187         </RULES>
188
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>
197         </RULES> <!--}}}-->
198         
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>
207         </RULES> <!--}}}-->
208
209         <!--{{{ JAVADOC rules -->
210         <RULES SET="JAVADOC" DEFAULT="COMMENT3" IGNORE_CASE="TRUE">
211
212                 <!-- so that *@param is highlighted -->
213                 <SEQ TYPE="COMMENT3">*</SEQ>
214
215                 <!-- Javadoc ignores tags inside <pre> -->
216                 <!-- XXX no it doesn't -->
217                 <!-- SPAN TYPE="MARKUP" DELEGATE="JAVADOC_PRE">
218                         <BEGIN>&lt;pre&gt;</BEGIN>
219                         <END>&lt;/pre&gt;</END>
220                 </SPAN -->
221
222                 <!-- HTML comments -->
223                 <SPAN TYPE="COMMENT1">
224                         <BEGIN>&lt;!--</BEGIN>
225                         <END>--&gt;</END>
226                 </SPAN>
227
228                 <!-- Javadoc allows this -->
229                 <SEQ TYPE="COMMENT3">&lt;&lt;</SEQ>
230                 <SEQ TYPE="COMMENT3">&lt;=</SEQ>
231                 <SEQ TYPE="COMMENT3">&lt; </SEQ>
232
233                 <!-- strings in quotes -->
234                 <SPAN TYPE="LITERAL1" ESCAPE="\" NO_LINE_BREAK="TRUE">
235                 <BEGIN>&quot;</BEGIN>
236                 <END>&quot;</END>
237                 </SPAN>
238
239                 <!-- HTML tags -->
240                 <SPAN TYPE="MARKUP" DELEGATE="xml::TAGS"
241                         NO_LINE_BREAK="TRUE">
242                         <BEGIN>&lt;</BEGIN>
243                         <END>&gt;</END>
244                 </SPAN>
245
246                 <!-- so that @link{...} is highlighted -->
247                 <!-- XXX: this is wrong, {@link ..} is correct, see below -->
248                 <!--<SEQ TYPE="COMMENT3">{</SEQ>-->
249
250                 <SPAN_REGEXP TYPE="LABEL" HASH_CHAR="{@" NO_WORD_BREAK="FALSE" DELEGATE="JAVADOC_PARAM">
251                         <BEGIN>\{@(link|linkplain|docRoot|code|literal)\s</BEGIN>
252                         <END>}</END>
253                 </SPAN_REGEXP>
254
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>
258                         <END>$</END>
259                 </SPAN_REGEXP>
260
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>
266                         <END>$1</END>
267                 </SPAN_REGEXP>
268
269                 <KEYWORDS>
270                 <!-- Note: the labels in comments are handled by SPANs above -->
271
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>
283                         <LABEL>@see</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>
291
292                 <!-- new in 1.5 -->
293                 <!--<LABEL>@code</LABEL>-->
294                 <!--<LABEL>@literal</LABEL>-->
295
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>
307
308                 <!-- Custom tags -->
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>
333                 </KEYWORDS>
334         </RULES> <!--}}}-->
335
336
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" />
339 </MODE>