]> gitweb.factorcode.org Git - factor.git/blob - basis/xmode/modes/scala.xml
xmode.modes: updating with recent xmode files
[factor.git] / basis / xmode / modes / scala.xml
1 <?xml version="1.0"?>
2 <!-- Scala mode by Daniel Spiewak downloaded on 2015-05-17 from https://github.com/djspiewak/jedit-modes/blob/master/scala.xml -->
3
4 <!DOCTYPE MODE SYSTEM "xmode.dtd">
5
6 <MODE>
7   <PROPS>
8     <PROPERTY NAME="indentOpenBrackets" VALUE="{" />
9     <PROPERTY NAME="indentCloseBrackets" VALUE="}" />
10     <PROPERTY NAME="lineUpClosingBracket" VALUE="true" />
11   <PROPERTY NAME="indentNextLine"
12     VALUE="(.*((if|while|else\s+if|for)\s*\().*\)|\s*else|\s*case.*=>|.*(def|val|var|type).*=)\s*$"/>
13     <!-- set this to 'true' if you want to use GNU coding style -->
14     <PROPERTY NAME="doubleBracketIndent" VALUE="false" />
15     <PROPERTY NAME="commentStart" VALUE="/*" />
16     <PROPERTY NAME="commentEnd" VALUE="*/" />
17     <PROPERTY NAME="lineComment" VALUE="//" />
18     <PROPERTY NAME="noTabs" VALUE="true" />
19     <PROPERTY NAME="tabSize" VALUE="2" />
20     <PROPERTY NAME="indentSize" VALUE="2" />
21     <PROPERTY NAME="wordBreakChars" VALUE=",+-=&lt;&gt;/?^&amp;*" />
22   </PROPS>
23
24   <RULES IGNORE_CASE="FALSE" HIGHLIGHT_DIGITS="TRUE"
25       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]))">
26
27   <MARK_FOLLOWING TYPE="LABEL">@</MARK_FOLLOWING>
28
29   <IMPORT DELEGATE="PRIMARY"/>
30   </RULES>
31
32   <RULES SET="PRIMARY">
33     <!-- Silly comment -->
34     <SEQ TYPE="COMMENT1">/**/</SEQ>
35
36     <EOL_SPAN TYPE="COMMENT2">//</EOL_SPAN>
37
38     <!-- Scaladoc comment -->
39     <SPAN TYPE="COMMENT3" DELEGATE="SCALADOC">
40       <BEGIN>/**</BEGIN>
41       <END>*/</END>
42     </SPAN>
43
44     <!-- Scala comment (Java style) -->
45     <SPAN TYPE="COMMENT1" DELEGATE="COMMENT_BLOCK">
46       <BEGIN>/*</BEGIN>
47       <END>*/</END>
48     </SPAN>
49
50     <SPAN MATCH_TYPE="NULL" DELEGATE="MAIN">
51       <BEGIN>{</BEGIN>
52       <END>}</END>
53     </SPAN>
54
55     <!-- XML literals; keep this in sync with the XML_LITERAL rule set! -->
56     <IMPORT DELEGATE="XML_SHARED"/>
57
58     <!-- interpolated stuff -->
59     <SPAN_REGEXP DELEGATE="STRING" MATCH_TYPE="LITERAL1" NO_LINE_BREAK="FALSE" ESCAPE="">
60       <BEGIN>[0-9a-zA-Z&gt;&lt;=+]([0-9a-zA-Z&gt;&lt;=+]|_[0-9a-zA-Z&gt;&lt;=+])*"""</BEGIN>
61       <END>"""</END>
62     </SPAN_REGEXP>
63     <SPAN_REGEXP DELEGATE="STRING" MATCH_TYPE="LITERAL1" NO_LINE_BREAK="FALSE" ESCAPE="\">
64       <BEGIN>[0-9a-zA-Z&gt;&lt;=+]([0-9a-zA-Z&gt;&lt;=+]|_[0-9a-zA-Z&gt;&lt;=+])*"</BEGIN>
65       <END>"</END>
66     </SPAN_REGEXP>
67
68     <!-- string and character literals -->
69     <SPAN TYPE="LITERAL1" NO_LINE_BREAK="FALSE" ESCAPE="">
70       <BEGIN>"""</BEGIN>
71       <END>"""</END>
72     </SPAN>
73     <SPAN TYPE="LITERAL1" NO_LINE_BREAK="TRUE" ESCAPE="\">
74       <BEGIN>"</BEGIN>
75       <END>"</END>
76     </SPAN>
77   <SEQ_REGEXP HASH_CHAR="'" TYPE="LITERAL1">'([^'\\]|\\.)'</SEQ_REGEXP>
78
79     <!-- symbol literals -->
80     <SEQ_REGEXP HASH_CHAR="'" TYPE="LABEL">'[0-9a-zA-Z&gt;&lt;=+]([0-9a-zA-Z&gt;&lt;=+]|_[0-9a-zA-Z&gt;&lt;=+])*</SEQ_REGEXP>
81
82     <SPAN MATCH_TYPE="LITERAL3" DELEGATE="TYPE_PARAMS">
83     <BEGIN>[</BEGIN>
84     <END>]</END>
85   </SPAN>
86
87   <SPAN MATCH_TYPE="NULL">
88     <BEGIN>`</BEGIN>
89     <END>`</END>
90   </SPAN>
91
92     <SEQ TYPE="OPERATOR">(</SEQ>
93     <SEQ TYPE="OPERATOR">)</SEQ>
94     <SEQ TYPE="OPERATOR">}</SEQ>
95     <SEQ TYPE="OPERATOR">{</SEQ>
96     <SEQ TYPE="NULL">.</SEQ>
97     <SEQ TYPE="NULL">,</SEQ>
98     <SEQ TYPE="NULL">;</SEQ>
99     <SEQ TYPE="NULL">:</SEQ>
100
101     <!-- Function calls -->
102     <!-- <MARK_PREVIOUS TYPE="FUNCTION" MATCH_TYPE="OPERATOR">(</MARK_PREVIOUS> -->
103
104     <EOL_SPAN MATCH_TYPE="KEYWORD1" DELEGATE="TYPE">import </EOL_SPAN>
105
106   <!-- Function declarations (overloaded for different spacing styles)-->
107   <MARK_FOLLOWING TYPE="FUNCTION" MATCH_TYPE="KEYWORD1" AT_WORD_START="TRUE">def       </MARK_FOLLOWING>
108   <MARK_FOLLOWING TYPE="FUNCTION" MATCH_TYPE="KEYWORD1" AT_WORD_START="TRUE">def      </MARK_FOLLOWING>
109   <MARK_FOLLOWING TYPE="FUNCTION" MATCH_TYPE="KEYWORD1" AT_WORD_START="TRUE">def     </MARK_FOLLOWING>
110   <MARK_FOLLOWING TYPE="FUNCTION" MATCH_TYPE="KEYWORD1" AT_WORD_START="TRUE">def    </MARK_FOLLOWING>
111   <MARK_FOLLOWING TYPE="FUNCTION" MATCH_TYPE="KEYWORD1" AT_WORD_START="TRUE">def   </MARK_FOLLOWING>
112   <MARK_FOLLOWING TYPE="FUNCTION" MATCH_TYPE="KEYWORD1" AT_WORD_START="TRUE">def  </MARK_FOLLOWING>
113   <MARK_FOLLOWING TYPE="FUNCTION" MATCH_TYPE="KEYWORD1" AT_WORD_START="TRUE">def </MARK_FOLLOWING>
114
115   <!-- class declarations (overloaded for different spacing styles)-->
116   <MARK_FOLLOWING TYPE="KEYWORD3" MATCH_TYPE="KEYWORD1" AT_WORD_START="TRUE">class       </MARK_FOLLOWING>
117   <MARK_FOLLOWING TYPE="KEYWORD3" MATCH_TYPE="KEYWORD1" AT_WORD_START="TRUE">class      </MARK_FOLLOWING>
118   <MARK_FOLLOWING TYPE="KEYWORD3" MATCH_TYPE="KEYWORD1" AT_WORD_START="TRUE">class     </MARK_FOLLOWING>
119   <MARK_FOLLOWING TYPE="KEYWORD3" MATCH_TYPE="KEYWORD1" AT_WORD_START="TRUE">class    </MARK_FOLLOWING>
120   <MARK_FOLLOWING TYPE="KEYWORD3" MATCH_TYPE="KEYWORD1" AT_WORD_START="TRUE">class   </MARK_FOLLOWING>
121   <MARK_FOLLOWING TYPE="KEYWORD3" MATCH_TYPE="KEYWORD1" AT_WORD_START="TRUE">class  </MARK_FOLLOWING>
122   <MARK_FOLLOWING TYPE="KEYWORD3" MATCH_TYPE="KEYWORD1" AT_WORD_START="TRUE">class </MARK_FOLLOWING>
123
124   <MARK_FOLLOWING TYPE="KEYWORD3" MATCH_TYPE="KEYWORD1" AT_WORD_START="TRUE">case class       </MARK_FOLLOWING>
125   <MARK_FOLLOWING TYPE="KEYWORD3" MATCH_TYPE="KEYWORD1" AT_WORD_START="TRUE">case class      </MARK_FOLLOWING>
126   <MARK_FOLLOWING TYPE="KEYWORD3" MATCH_TYPE="KEYWORD1" AT_WORD_START="TRUE">case class     </MARK_FOLLOWING>
127   <MARK_FOLLOWING TYPE="KEYWORD3" MATCH_TYPE="KEYWORD1" AT_WORD_START="TRUE">case class    </MARK_FOLLOWING>
128   <MARK_FOLLOWING TYPE="KEYWORD3" MATCH_TYPE="KEYWORD1" AT_WORD_START="TRUE">case class   </MARK_FOLLOWING>
129   <MARK_FOLLOWING TYPE="KEYWORD3" MATCH_TYPE="KEYWORD1" AT_WORD_START="TRUE">case class  </MARK_FOLLOWING>
130   <MARK_FOLLOWING TYPE="KEYWORD3" MATCH_TYPE="KEYWORD1" AT_WORD_START="TRUE">case class </MARK_FOLLOWING>
131
132   <!-- instantiations (overloaded for different spacing styles)-->
133   <MARK_FOLLOWING TYPE="KEYWORD3" MATCH_TYPE="KEYWORD1" AT_WORD_START="TRUE">new       </MARK_FOLLOWING>
134   <MARK_FOLLOWING TYPE="KEYWORD3" MATCH_TYPE="KEYWORD1" AT_WORD_START="TRUE">new      </MARK_FOLLOWING>
135   <MARK_FOLLOWING TYPE="KEYWORD3" MATCH_TYPE="KEYWORD1" AT_WORD_START="TRUE">new     </MARK_FOLLOWING>
136   <MARK_FOLLOWING TYPE="KEYWORD3" MATCH_TYPE="KEYWORD1" AT_WORD_START="TRUE">new    </MARK_FOLLOWING>
137   <MARK_FOLLOWING TYPE="KEYWORD3" MATCH_TYPE="KEYWORD1" AT_WORD_START="TRUE">new   </MARK_FOLLOWING>
138   <MARK_FOLLOWING TYPE="KEYWORD3" MATCH_TYPE="KEYWORD1" AT_WORD_START="TRUE">new  </MARK_FOLLOWING>
139   <MARK_FOLLOWING TYPE="KEYWORD3" MATCH_TYPE="KEYWORD1" AT_WORD_START="TRUE">new </MARK_FOLLOWING>
140
141   <!-- object declarations (overloaded for different spacing styles)-->
142   <MARK_FOLLOWING TYPE="KEYWORD3" MATCH_TYPE="KEYWORD1" AT_WORD_START="TRUE">object       </MARK_FOLLOWING>
143   <MARK_FOLLOWING TYPE="KEYWORD3" MATCH_TYPE="KEYWORD1" AT_WORD_START="TRUE">object      </MARK_FOLLOWING>
144   <MARK_FOLLOWING TYPE="KEYWORD3" MATCH_TYPE="KEYWORD1" AT_WORD_START="TRUE">object     </MARK_FOLLOWING>
145   <MARK_FOLLOWING TYPE="KEYWORD3" MATCH_TYPE="KEYWORD1" AT_WORD_START="TRUE">object    </MARK_FOLLOWING>
146   <MARK_FOLLOWING TYPE="KEYWORD3" MATCH_TYPE="KEYWORD1" AT_WORD_START="TRUE">object   </MARK_FOLLOWING>
147   <MARK_FOLLOWING TYPE="KEYWORD3" MATCH_TYPE="KEYWORD1" AT_WORD_START="TRUE">object  </MARK_FOLLOWING>
148   <MARK_FOLLOWING TYPE="KEYWORD3" MATCH_TYPE="KEYWORD1" AT_WORD_START="TRUE">object </MARK_FOLLOWING>
149
150   <MARK_FOLLOWING TYPE="KEYWORD3" MATCH_TYPE="KEYWORD1" AT_WORD_START="TRUE">case object       </MARK_FOLLOWING>
151   <MARK_FOLLOWING TYPE="KEYWORD3" MATCH_TYPE="KEYWORD1" AT_WORD_START="TRUE">case object      </MARK_FOLLOWING>
152   <MARK_FOLLOWING TYPE="KEYWORD3" MATCH_TYPE="KEYWORD1" AT_WORD_START="TRUE">case object     </MARK_FOLLOWING>
153   <MARK_FOLLOWING TYPE="KEYWORD3" MATCH_TYPE="KEYWORD1" AT_WORD_START="TRUE">case object    </MARK_FOLLOWING>
154   <MARK_FOLLOWING TYPE="KEYWORD3" MATCH_TYPE="KEYWORD1" AT_WORD_START="TRUE">case object   </MARK_FOLLOWING>
155   <MARK_FOLLOWING TYPE="KEYWORD3" MATCH_TYPE="KEYWORD1" AT_WORD_START="TRUE">case object  </MARK_FOLLOWING>
156   <MARK_FOLLOWING TYPE="KEYWORD3" MATCH_TYPE="KEYWORD1" AT_WORD_START="TRUE">case object </MARK_FOLLOWING>
157
158   <!-- trait declarations (overloaded for different spacing styles)-->
159   <MARK_FOLLOWING TYPE="KEYWORD3" MATCH_TYPE="KEYWORD1" AT_WORD_START="TRUE">trait       </MARK_FOLLOWING>
160   <MARK_FOLLOWING TYPE="KEYWORD3" MATCH_TYPE="KEYWORD1" AT_WORD_START="TRUE">trait      </MARK_FOLLOWING>
161   <MARK_FOLLOWING TYPE="KEYWORD3" MATCH_TYPE="KEYWORD1" AT_WORD_START="TRUE">trait     </MARK_FOLLOWING>
162   <MARK_FOLLOWING TYPE="KEYWORD3" MATCH_TYPE="KEYWORD1" AT_WORD_START="TRUE">trait    </MARK_FOLLOWING>
163   <MARK_FOLLOWING TYPE="KEYWORD3" MATCH_TYPE="KEYWORD1" AT_WORD_START="TRUE">trait   </MARK_FOLLOWING>
164   <MARK_FOLLOWING TYPE="KEYWORD3" MATCH_TYPE="KEYWORD1" AT_WORD_START="TRUE">trait  </MARK_FOLLOWING>
165   <MARK_FOLLOWING TYPE="KEYWORD3" MATCH_TYPE="KEYWORD1" AT_WORD_START="TRUE">trait </MARK_FOLLOWING>
166
167   <!-- extends (overloaded for different spacing styles)-->
168   <MARK_FOLLOWING TYPE="KEYWORD4" MATCH_TYPE="KEYWORD1" AT_WORD_START="TRUE">extends       </MARK_FOLLOWING>
169   <MARK_FOLLOWING TYPE="KEYWORD4" MATCH_TYPE="KEYWORD1" AT_WORD_START="TRUE">extends      </MARK_FOLLOWING>
170   <MARK_FOLLOWING TYPE="KEYWORD4" MATCH_TYPE="KEYWORD1" AT_WORD_START="TRUE">extends     </MARK_FOLLOWING>
171   <MARK_FOLLOWING TYPE="KEYWORD4" MATCH_TYPE="KEYWORD1" AT_WORD_START="TRUE">extends    </MARK_FOLLOWING>
172   <MARK_FOLLOWING TYPE="KEYWORD4" MATCH_TYPE="KEYWORD1" AT_WORD_START="TRUE">extends   </MARK_FOLLOWING>
173   <MARK_FOLLOWING TYPE="KEYWORD4" MATCH_TYPE="KEYWORD1" AT_WORD_START="TRUE">extends  </MARK_FOLLOWING>
174   <MARK_FOLLOWING TYPE="KEYWORD4" MATCH_TYPE="KEYWORD1" AT_WORD_START="TRUE">extends </MARK_FOLLOWING>
175
176   <!-- with (overloaded for different spacing styles)-->
177   <MARK_FOLLOWING TYPE="KEYWORD4" MATCH_TYPE="KEYWORD1" AT_WORD_START="TRUE">with       </MARK_FOLLOWING>
178   <MARK_FOLLOWING TYPE="KEYWORD4" MATCH_TYPE="KEYWORD1" AT_WORD_START="TRUE">with      </MARK_FOLLOWING>
179   <MARK_FOLLOWING TYPE="KEYWORD4" MATCH_TYPE="KEYWORD1" AT_WORD_START="TRUE">with     </MARK_FOLLOWING>
180   <MARK_FOLLOWING TYPE="KEYWORD4" MATCH_TYPE="KEYWORD1" AT_WORD_START="TRUE">with    </MARK_FOLLOWING>
181   <MARK_FOLLOWING TYPE="KEYWORD4" MATCH_TYPE="KEYWORD1" AT_WORD_START="TRUE">with   </MARK_FOLLOWING>
182   <MARK_FOLLOWING TYPE="KEYWORD4" MATCH_TYPE="KEYWORD1" AT_WORD_START="TRUE">with  </MARK_FOLLOWING>
183   <MARK_FOLLOWING TYPE="KEYWORD4" MATCH_TYPE="KEYWORD1" AT_WORD_START="TRUE">with </MARK_FOLLOWING>
184
185   <SPAN DELEGATE="PATTERN" MATCH_TYPE="KEYWORD1" AT_WORD_START="TRUE" NO_LINE_BREAK="FALSE">
186     <BEGIN>case </BEGIN>
187     <END>=&gt;</END>
188   </SPAN>
189
190   <SPAN DELEGATE="PATTERN" MATCH_TYPE="KEYWORD1" AT_WORD_START="TRUE" NO_LINE_BREAK="TRUE">
191     <BEGIN>val </BEGIN>
192     <END>=</END>
193   </SPAN>
194
195     <KEYWORDS>
196       <KEYWORD1>abstract</KEYWORD1>
197       <KEYWORD1>case</KEYWORD1>
198       <KEYWORD1>catch</KEYWORD1>
199       <KEYWORD1>class</KEYWORD1>
200       <KEYWORD1>def</KEYWORD1>
201       <KEYWORD1>do</KEYWORD1>
202       <KEYWORD1>else</KEYWORD1>
203       <KEYWORD1>extends</KEYWORD1>
204       <KEYWORD1>final</KEYWORD1>
205       <KEYWORD1>finally</KEYWORD1>
206       <KEYWORD1>for</KEYWORD1>
207       <KEYWORD1>forSome</KEYWORD1>
208       <KEYWORD1>if</KEYWORD1>
209       <KEYWORD1>implicit</KEYWORD1>
210       <KEYWORD1>import</KEYWORD1>
211       <KEYWORD1>lazy</KEYWORD1>
212       <KEYWORD1>macro</KEYWORD1>
213       <KEYWORD1>match</KEYWORD1>
214       <KEYWORD1>new</KEYWORD1>
215       <KEYWORD1>object</KEYWORD1>
216       <KEYWORD1>override</KEYWORD1>
217       <KEYWORD1>package</KEYWORD1>
218       <KEYWORD1>private</KEYWORD1>
219       <KEYWORD1>protected</KEYWORD1>
220       <KEYWORD1>requires</KEYWORD1>
221       <KEYWORD1>return</KEYWORD1>
222       <KEYWORD1>sealed</KEYWORD1>
223       <KEYWORD1>throw</KEYWORD1>
224       <KEYWORD1>trait</KEYWORD1>
225       <KEYWORD1>try</KEYWORD1>
226       <KEYWORD1>type</KEYWORD1>
227       <KEYWORD1>val</KEYWORD1>
228       <KEYWORD1>var</KEYWORD1>
229       <KEYWORD1>with</KEYWORD1>
230       <KEYWORD1>while</KEYWORD1>
231       <KEYWORD1>yield</KEYWORD1>
232       <KEYWORD1>=&gt;</KEYWORD1>
233
234       <!-- java.lang.* wrapper types -->
235       <KEYWORD2>Character</KEYWORD2>
236       <KEYWORD2>Integer</KEYWORD2>
237
238       <!-- scala.* primitive types -->
239       <KEYWORD2>Boolean</KEYWORD2>
240       <KEYWORD2>Byte</KEYWORD2>
241       <KEYWORD2>Char</KEYWORD2>
242       <KEYWORD2>Double</KEYWORD2>
243       <KEYWORD2>Float</KEYWORD2>
244       <KEYWORD2>Int</KEYWORD2>
245       <KEYWORD2>Long</KEYWORD2>
246       <KEYWORD2>Short</KEYWORD2>
247       <KEYWORD2>Unit</KEYWORD2>
248
249       <!-- scala.* predefined types -->
250       <KEYWORD3>Any</KEYWORD3>
251       <KEYWORD3>AnyRef</KEYWORD3>
252       <KEYWORD3>Nothing</KEYWORD3>
253
254     <LITERAL2>false</LITERAL2>
255     <LITERAL2>null</LITERAL2>
256     <LITERAL2>super</LITERAL2>
257     <LITERAL2>this</LITERAL2>
258     <LITERAL2>true</LITERAL2>
259
260     <INVALID>???</INVALID>
261
262     <!-- reserved -->
263     <INVALID>then</INVALID>
264     </KEYWORDS>
265   </RULES>
266
267   <RULES SET="TYPE_PARAMS" DEFAULT="LITERAL3">
268     <SPAN MATCH_TYPE="LITERAL3" DELEGATE="TYPE_PARAMS">
269     <BEGIN>[</BEGIN>
270     <END>]</END>
271   </SPAN>
272   </RULES>
273
274   <RULES SET="PATTERN" DEFAULT="NULL" IGNORE_CASE="FALSE"
275     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]))">
276
277     <IMPORT DELEGATE="PRIMARY"/>
278
279   <SEQ TYPE="OPERATOR">@</SEQ>
280
281   <SEQ_REGEXP AT_WORD_START="TRUE" TYPE="KEYWORD4">[A-Z][^(\s:@)\[\]]*</SEQ_REGEXP>
282   </RULES>
283
284   <RULES SET="COMMENT_BLOCK" DEFAULT="COMMENT1">
285     <SPAN TYPE="COMMENT1" DELEGATE="COMMENT_BLOCK">
286       <BEGIN>/*</BEGIN>
287       <END>*/</END>
288     </SPAN>
289   </RULES>
290
291   <RULES SET="SCALADOC" DEFAULT="COMMENT3" IGNORE_CASE="TRUE">
292     <!-- so that @link{...} is highlighted -->
293     <SEQ TYPE="COMMENT3">{</SEQ>
294
295     <!-- so that *@param is highlighted -->
296     <SEQ TYPE="COMMENT3">*</SEQ>
297
298     <!-- Javadoc ignores tags inside <pre> -->
299     <SPAN TYPE="MARKUP" DELEGATE="SCALADOC_PRE">
300       <BEGIN>&lt;pre&gt;</BEGIN>
301       <END>&lt;/pre&gt;</END>
302     </SPAN>
303
304     <!-- HTML comments -->
305     <SPAN TYPE="COMMENT1">
306       <BEGIN>&lt;!--</BEGIN>
307       <END>--&gt;</END>
308     </SPAN>
309
310     <!-- HTML tags -->
311     <SPAN_REGEXP HASH_CHAR="&lt;" TYPE="MARKUP" DELEGATE="xml::TAGS" NO_LINE_BREAK="TRUE">
312       <BEGIN>&lt;/?[\da-zA-Z\-]+</BEGIN>
313       <END>&gt;</END>
314     </SPAN_REGEXP>
315
316     <!-- Javadoc allows this -->
317     <SEQ TYPE="COMMENT3">&lt;</SEQ>
318
319     <KEYWORDS>
320       <LABEL>@author</LABEL>
321       <LABEL>@beaninfo</LABEL>
322       <LABEL>@history</LABEL>
323       <LABEL>@bug</LABEL>
324       <LABEL>@review</LABEL>
325       <LABEL>@todo</LABEL>
326       <LABEL>@idea</LABEL>
327       <LABEL>@pre</LABEL>
328       <LABEL>@requires</LABEL>
329       <LABEL>@post</LABEL>
330       <LABEL>@ensures</LABEL>
331       <LABEL>@generates</LABEL>
332       <LABEL>@modifies</LABEL>
333       <LABEL>@invariant</LABEL>
334       <LABEL>@exception</LABEL>
335       <LABEL>@hides</LABEL>
336       <LABEL>@overrides</LABEL>
337       <LABEL>@equivalent</LABEL>
338       <LABEL>@bon</LABEL>
339       <LABEL>@access</LABEL>
340       <LABEL>@example</LABEL>
341       <LABEL>@design</LABEL>
342       <LABEL>@serial</LABEL>
343       <LABEL>@references</LABEL>
344       <LABEL>@uses</LABEL>
345       <LABEL>@guard</LABEL>
346       <LABEL>@values</LABEL>
347       <LABEL>@complexity</LABEL>
348       <LABEL>@deprecated</LABEL>
349       <LABEL>@docRoot</LABEL>
350       <LABEL>@exception</LABEL>
351       <LABEL>@link</LABEL>
352       <LABEL>@param</LABEL>
353       <LABEL>@return</LABEL>
354       <LABEL>@see</LABEL>
355       <LABEL>@serialData</LABEL>
356       <LABEL>@serialField</LABEL>
357       <LABEL>@since</LABEL>
358       <LABEL>@throws</LABEL>
359       <LABEL>@version</LABEL>
360       <LABEL>@spec</LABEL>
361     </KEYWORDS>
362   </RULES>
363
364   <RULES SET="SCALADOC_PRE" DEFAULT="COMMENT3" />
365
366   <RULES SET="XML_SHARED">
367     <SPAN TYPE="COMMENT2">
368       <BEGIN>&lt;!--</BEGIN>
369       <END>--&gt;</END>
370     </SPAN>
371
372     <SPAN_REGEXP TYPE="LITERAL3" HASH_CHARS="&lt;">
373       <BEGIN>&lt;\?[^\s]</BEGIN>
374       <END>?&gt;</END>
375     </SPAN_REGEXP>
376
377     <SPAN MATCH_TYPE="LITERAL3" TYPE="COMMENT4">
378       <BEGIN>&lt;![CDATA[</BEGIN>
379       <END>]]&gt;</END>
380     </SPAN>
381
382     <SEQ_REGEXP HASH_CHAR="&lt;" TYPE="LITERAL3">&lt;([\d\w_\-:.]+)(\s+[\d\w_\-:.]+=('[^']*'|"[^"]*"))*\s*/\s*&gt;</SEQ_REGEXP>
383
384     <SPAN_REGEXP DELEGATE="XML_LITERAL" HASH_CHAR="&lt;" MATCH_TYPE="LITERAL3" TYPE="NULL">
385       <BEGIN>&lt;([\d\w_\-:.]+)(\s+[\d\w_\-:.]+=('[^']*'|"[^"]*"))*\s*&gt;</BEGIN>
386       <END>&lt;/$1&gt;</END>
387     </SPAN_REGEXP>
388   </RULES>
389
390   <!-- TODO find a way to highlight attribute names as LABEL, attribute values as LITERAL1 -->
391   <RULES SET="XML_LITERAL" DEFAULT="COMMENT4">
392     <PROPS>
393     <PROPERTY NAME="commentStart" VALUE="&lt;!--" />
394     <PROPERTY NAME="commentEnd" VALUE="--&gt;" />
395     <PROPERTY NAME="lineComment" VALUE="" />
396     </PROPS>
397
398     <IMPORT DELEGATE="XML_SHARED"/>
399
400     <SPAN DELEGATE="MAIN">
401       <BEGIN>{</BEGIN>
402       <END>}</END>
403     </SPAN>
404
405     <SPAN TYPE="LABEL" NO_WORD_BREAK="TRUE">
406       <BEGIN>&amp;</BEGIN>
407       <END>;</END>
408     </SPAN>
409
410     <SEQ_REGEXP HASH_CHAR="&lt;" TYPE="INVALID">&lt;/[\d\w_\-:.]+&gt;</SEQ_REGEXP>              <!-- unmatched closing tags -->
411   </RULES>
412
413   <RULES SET="STRING" DEFAULT="LITERAL1">
414     <SEQ TYPE="LITERAL1">$$</SEQ>
415
416     <SPAN DELEGATE="MAIN">
417       <BEGIN>${</BEGIN>
418       <END>}</END>
419     </SPAN>
420
421     <MARK_FOLLOWING TYPE="NULL" MATCH_TYPE="NULL">$</MARK_FOLLOWING>
422   </RULES>
423
424   <RULES SET="TYPE" DEFAULT="KEYWORD4">
425     <IMPORT DELEGATE="MAIN"/>
426   </RULES>
427 </MODE>
428