]> gitweb.factorcode.org Git - factor.git/blobdiff - basis/xmode/modes/java.xml
xmode.modes: updating with recent xmode files
[factor.git] / basis / xmode / modes / java.xml
index d350cdc2d15974e47b9c8d766b2719636d6bd481..08e9d7f9c738da915a1c50b73baf39bbecf17e83 100644 (file)
-<?xml version="1.0"?>\r
-\r
-<!DOCTYPE MODE SYSTEM "xmode.dtd">\r
-\r
-<MODE>\r
-       <PROPS>\r
-               <PROPERTY NAME="commentStart" VALUE="/*" />\r
-               <PROPERTY NAME="commentEnd" VALUE="*/" />\r
-               <PROPERTY NAME="lineComment" VALUE="//" />\r
-               <PROPERTY NAME="wordBreakChars" VALUE=",+-=&lt;&gt;/?^&amp;*" />\r
-\r
-               <!-- Auto indent -->\r
-               <PROPERTY NAME="indentOpenBrackets" VALUE="{" />\r
-               <PROPERTY NAME="indentCloseBrackets" VALUE="}" />\r
-               <PROPERTY NAME="unalignedOpenBrackets" VALUE="(" />\r
-               <PROPERTY NAME="unalignedCloseBrackets" VALUE=")" />\r
-               <PROPERTY NAME="indentNextLine"\r
-                       VALUE="\s*(((if|while)\s*\(|else\s*|else\s+if\s*\(|for\s*\(.*\))[^{;]*)" />\r
-               <PROPERTY NAME="unindentThisLine"\r
-                       VALUE="^.*(default:\s*|case.*:.*)$" />\r
-               <PROPERTY NAME="electricKeys" VALUE=":" />\r
-       </PROPS>\r
-       <RULES ESCAPE="\"\r
-               IGNORE_CASE="FALSE"\r
-               HIGHLIGHT_DIGITS="TRUE"\r
-               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]))">\r
-\r
-               <!-- Silly comment -->\r
-               <SEQ TYPE="COMMENT1">/**/</SEQ>\r
-\r
-               <!-- Javadoc comment -->\r
-               <SPAN TYPE="COMMENT3" DELEGATE="JAVADOC">\r
-                       <BEGIN>/**</BEGIN>\r
-                       <END>*/</END>\r
-               </SPAN>\r
-\r
-               <!-- Java comment (C style) -->\r
-               <SPAN TYPE="COMMENT1">\r
-                       <BEGIN>/*</BEGIN>\r
-                       <END>*/</END>\r
-               </SPAN>\r
-\r
-               <SPAN TYPE="LITERAL1" NO_LINE_BREAK="TRUE">\r
-                       <BEGIN>"</BEGIN>\r
-                       <END>"</END>\r
-               </SPAN>\r
-               <SPAN TYPE="LITERAL1" NO_LINE_BREAK="TRUE">\r
-                       <BEGIN>'</BEGIN>\r
-                       <END>'</END>\r
-               </SPAN>\r
-\r
-               <EOL_SPAN TYPE="COMMENT2">//</EOL_SPAN>\r
-\r
-               <SEQ TYPE="OPERATOR">=</SEQ>\r
-               <SEQ TYPE="OPERATOR">!</SEQ>\r
-               <SEQ TYPE="OPERATOR">&gt;=</SEQ>\r
-               <SEQ TYPE="OPERATOR">&lt;=</SEQ>\r
-               <SEQ TYPE="OPERATOR">+</SEQ>\r
-               <SEQ TYPE="OPERATOR">-</SEQ>\r
-               <SEQ TYPE="OPERATOR">/</SEQ>\r
-\r
-               <!-- workaround to stop "*" from being colorized\r
-                    in import statements. -->\r
-               <SEQ TYPE="NULL">.*</SEQ>\r
-\r
-               <SEQ TYPE="OPERATOR">*</SEQ>\r
-               <SEQ TYPE="OPERATOR">&gt;</SEQ>\r
-               <SEQ TYPE="OPERATOR">&lt;</SEQ>\r
-               <SEQ TYPE="OPERATOR">%</SEQ>\r
-               <SEQ TYPE="OPERATOR">&amp;</SEQ>\r
-               <SEQ TYPE="OPERATOR">|</SEQ>\r
-               <SEQ TYPE="OPERATOR">^</SEQ>\r
-               <SEQ TYPE="OPERATOR">~</SEQ>\r
-               <SEQ TYPE="OPERATOR">}</SEQ>\r
-               <SEQ TYPE="OPERATOR">{</SEQ>\r
-               <MARK_PREVIOUS TYPE="LABEL" MATCH_TYPE="OPERATOR"\r
-                       AT_WHITESPACE_END="TRUE">:</MARK_PREVIOUS>\r
-\r
-               <!-- Function calls -->\r
-               <MARK_PREVIOUS TYPE="FUNCTION" MATCH_TYPE="OPERATOR">(</MARK_PREVIOUS>\r
-               <SEQ TYPE="OPERATOR">)</SEQ>\r
-\r
-               <!-- Annotation types -->\r
-               <MARK_FOLLOWING TYPE="KEYWORD4">@</MARK_FOLLOWING>\r
-\r
-               <KEYWORDS>\r
-                       <KEYWORD1>abstract</KEYWORD1>\r
-                       <KEYWORD1>break</KEYWORD1>\r
-                       <KEYWORD1>case</KEYWORD1>\r
-                       <KEYWORD1>catch</KEYWORD1>\r
-                       <KEYWORD1>continue</KEYWORD1>\r
-                       <KEYWORD1>default</KEYWORD1>\r
-                       <KEYWORD1>do</KEYWORD1>\r
-                       <KEYWORD1>else</KEYWORD1>\r
-                       <KEYWORD1>extends</KEYWORD1>\r
-                       <KEYWORD1>final</KEYWORD1>\r
-                       <KEYWORD1>finally</KEYWORD1>\r
-                       <KEYWORD1>for</KEYWORD1>\r
-                       <KEYWORD1>if</KEYWORD1>\r
-                       <KEYWORD1>implements</KEYWORD1>\r
-                       <KEYWORD1>instanceof</KEYWORD1>\r
-                       <KEYWORD1>native</KEYWORD1>\r
-                       <KEYWORD1>new</KEYWORD1>\r
-                       <KEYWORD1>private</KEYWORD1>\r
-                       <KEYWORD1>protected</KEYWORD1>\r
-                       <KEYWORD1>public</KEYWORD1>\r
-                       <KEYWORD1>return</KEYWORD1>\r
-                       <KEYWORD1>static</KEYWORD1>\r
-                       <KEYWORD1>switch</KEYWORD1>\r
-                       <KEYWORD1>synchronized</KEYWORD1>\r
-                       <KEYWORD1>throw</KEYWORD1>\r
-                       <KEYWORD1>throws</KEYWORD1>\r
-                       <KEYWORD1>transient</KEYWORD1>\r
-                       <KEYWORD1>try</KEYWORD1>\r
-                       <KEYWORD1>volatile</KEYWORD1>\r
-                       <KEYWORD1>while</KEYWORD1>\r
-\r
-                       <KEYWORD2>package</KEYWORD2>\r
-                       <KEYWORD2>import</KEYWORD2>\r
-\r
-                       <KEYWORD3>boolean</KEYWORD3>\r
-                       <KEYWORD3>byte</KEYWORD3>\r
-                       <KEYWORD3>char</KEYWORD3>\r
-                       <KEYWORD3>class</KEYWORD3>\r
-                       <KEYWORD3>double</KEYWORD3>\r
-                       <KEYWORD3>float</KEYWORD3>\r
-                       <KEYWORD3>int</KEYWORD3>\r
-                       <KEYWORD3>interface</KEYWORD3>\r
-                       <KEYWORD3>long</KEYWORD3>\r
-                       <KEYWORD3>short</KEYWORD3>\r
-                       <KEYWORD3>void</KEYWORD3>\r
-\r
-                       <FUNCTION>assert</FUNCTION>\r
-                       <KEYWORD1>strictfp</KEYWORD1>\r
-\r
-\r
-                       <LITERAL2>false</LITERAL2>\r
-                       <LITERAL2>null</LITERAL2>\r
-                       <LITERAL2>super</LITERAL2>\r
-                       <LITERAL2>this</LITERAL2>\r
-                       <LITERAL2>true</LITERAL2>\r
-\r
-                       <INVALID>goto</INVALID>\r
-                       <INVALID>const</INVALID>\r
-\r
-                       <!-- Java 1.5 -->\r
-                       <KEYWORD3>enum</KEYWORD3>\r
-               </KEYWORDS>\r
-       </RULES>\r
-\r
-       <RULES SET="JAVADOC" DEFAULT="COMMENT3" IGNORE_CASE="TRUE">\r
-\r
-               <!-- so that *@param is highlighted -->\r
-               <SEQ TYPE="COMMENT3">*</SEQ>\r
-\r
-               <!-- Javadoc ignores tags inside <pre> -->\r
-               <!-- XXX no it doesn't -->\r
-               <!-- SPAN TYPE="MARKUP" DELEGATE="JAVADOC_PRE">\r
-                       <BEGIN>&lt;pre&gt;</BEGIN>\r
-                       <END>&lt;/pre&gt;</END>\r
-               </SPAN -->\r
-\r
-               <!-- HTML comments -->\r
-               <SPAN TYPE="COMMENT1">\r
-                       <BEGIN>&lt;!--</BEGIN>\r
-                       <END>--&gt;</END>\r
-               </SPAN>\r
-\r
-               <!-- Javadoc allows this -->\r
-               <SEQ TYPE="COMMENT3">&lt;&lt;</SEQ>\r
-               <SEQ TYPE="COMMENT3">&lt;=</SEQ>\r
-               <SEQ TYPE="COMMENT3">&lt; </SEQ>\r
-\r
-               <!-- HTML tags -->\r
-               <SPAN TYPE="MARKUP" DELEGATE="xml::TAGS"\r
-                       NO_LINE_BREAK="TRUE">\r
-                       <BEGIN>&lt;</BEGIN>\r
-                       <END>&gt;</END>\r
-               </SPAN>\r
-\r
-               <!-- so that @link{...} is highlighted -->\r
-               <!-- XXX: this is wrong, {@link ..} is correct, see below -->\r
-               <!--<SEQ TYPE="COMMENT3">{</SEQ>-->\r
-\r
-               <SPAN_REGEXP TYPE="LABEL" HASH_CHAR="{@" NO_WORD_BREAK="FALSE" DELEGATE="JAVADOC_PARAM">\r
-                       <BEGIN>\{@(link|linkplain|docRoot|code|literal)\s</BEGIN>\r
-                       <END>}</END>\r
-               </SPAN_REGEXP>\r
-\r
-               <!-- for the common usage of the cvs keyword $Id: java.xml 9228 2007-03-27 22:01:25Z ezust $ -->\r
-               <SPAN_REGEXP TYPE="LABEL" HASH_CHAR="@version" NO_WORD_BREAK="FALSE" DELEGATE="JAVADOC_PARAM">\r
-                       <BEGIN>@version\s+\$</BEGIN>\r
-                       <END>$</END>\r
-               </SPAN_REGEXP>\r
-\r
-               <!-- This works only when you use the same whitespace before and after the param's name,\r
-                        eg. a tab before and after, but mixing space and tab won't work.\r
-                        The reason is that you can't enter a regexp in END, except for the backreference operator $n -->\r
-               <SPAN_REGEXP TYPE="LABEL" HASH_CHAR="@" NO_WORD_BREAK="FALSE" DELEGATE="JAVADOC_PARAM">\r
-                       <BEGIN>@(?:param|throws|exception|serialField)(\s)</BEGIN>\r
-                       <END>$1</END>\r
-               </SPAN_REGEXP>\r
-\r
-               <KEYWORDS>\r
-               <!-- Note: the labels in comments are handled by SPANs above -->\r
-\r
-               <!-- Official javadoc tags:\r
-                        http://java.sun.com/j2se/1.5/docs/tooldocs/windows/javadoc.html#javadoctags -->\r
-                       <LABEL>@author</LABEL>\r
-                       <LABEL>@deprecated</LABEL>\r
-               <!--<LABEL>@docRoot</LABEL>-->\r
-               <!--<LABEL>@exception</LABEL>-->\r
-                       <LABEL>{@inheritDoc}</LABEL>\r
-               <!--<LABEL>@link</LABEL>-->\r
-               <!--<LABEL>@linkplain</LABEL>-->\r
-               <!--<LABEL>@param</LABEL>-->\r
-                       <LABEL>@return</LABEL>\r
-                       <LABEL>@see</LABEL>\r
-                       <LABEL>@serial</LABEL>\r
-                       <LABEL>@serialData</LABEL>\r
-               <!--<LABEL>@serialField</LABEL>-->\r
-                       <LABEL>@since</LABEL>\r
-               <!--<LABEL>@throws</LABEL>-->\r
-                       <LABEL>{@value}</LABEL>\r
-                       <LABEL>@version</LABEL>\r
-\r
-               <!-- new in 1.5 -->\r
-               <!--<LABEL>@code</LABEL>-->\r
-               <!--<LABEL>@literal</LABEL>-->\r
-\r
-               <!-- SUNs proposed tags:\r
-                        http://java.sun.com/j2se/javadoc/proposed-tags.html -->\r
-                       <KEYWORD2>@category</KEYWORD2>\r
-                       <KEYWORD2>@example</KEYWORD2>\r
-                       <KEYWORD2>@exclude</KEYWORD2>\r
-                       <KEYWORD2>@index</KEYWORD2>\r
-                       <KEYWORD2>@internal</KEYWORD2>\r
-                       <KEYWORD2>@obsolete</KEYWORD2>\r
-                       <KEYWORD2>@threadsafety</KEYWORD2>\r
-                       <KEYWORD2>@tutorial</KEYWORD2>\r
-                       <KEYWORD2>@todo</KEYWORD2>\r
-\r
-               <!-- Custom tags -->\r
-                       <KEYWORD4>@access</KEYWORD4>\r
-                       <KEYWORD4>@beaninfo</KEYWORD4>\r
-                       <KEYWORD4>@bon</KEYWORD4>\r
-                       <KEYWORD4>@bug</KEYWORD4>\r
-                       <KEYWORD4>@complexity</KEYWORD4>\r
-                       <KEYWORD4>@design</KEYWORD4>\r
-                       <KEYWORD4>@ensures</KEYWORD4>\r
-                       <KEYWORD4>@equivalent</KEYWORD4>\r
-                       <KEYWORD4>@generates</KEYWORD4>\r
-                       <KEYWORD4>@guard</KEYWORD4>\r
-                       <KEYWORD4>@hides</KEYWORD4>\r
-                       <KEYWORD4>@history</KEYWORD4>\r
-                       <KEYWORD4>@idea</KEYWORD4>\r
-                       <KEYWORD4>@invariant</KEYWORD4>\r
-                       <KEYWORD4>@modifies</KEYWORD4>\r
-                       <KEYWORD4>@overrides</KEYWORD4>\r
-                       <KEYWORD4>@post</KEYWORD4>\r
-                       <KEYWORD4>@pre</KEYWORD4>\r
-                       <KEYWORD4>@references</KEYWORD4>\r
-                       <KEYWORD4>@requires</KEYWORD4>\r
-                       <KEYWORD4>@review</KEYWORD4>\r
-                       <KEYWORD4>@spec</KEYWORD4>\r
-                       <KEYWORD4>@uses</KEYWORD4>\r
-                       <KEYWORD4>@values</KEYWORD4>\r
-               </KEYWORDS>\r
-       </RULES>\r
-\r
-       <!-- just a dummy which makes use of the default token type COMMENT4 for highlighting the word after @param in javadoc -->\r
-       <RULES SET="JAVADOC_PARAM" DEFAULT="COMMENT4" IGNORE_CASE="TRUE" />\r
-</MODE>\r
+<?xml version="1.0"?>
+<!-- 
+ * :tabSize=8:indentSize=8:noTabs=false:
+ * :folding=explicit:collapseFolds=1:
+-->
+<!DOCTYPE MODE SYSTEM "xmode.dtd">
+
+<MODE>
+       <PROPS>
+               <PROPERTY NAME="commentStart" VALUE="/*" />
+               <PROPERTY NAME="commentEnd" VALUE="*/" />
+               <PROPERTY NAME="lineComment" VALUE="//" />
+               <PROPERTY NAME="wordBreakChars" VALUE=",+-=&lt;&gt;/?^&amp;*" />
+
+               <!-- Auto indent -->
+               <PROPERTY NAME="indentOpenBrackets" VALUE="{" />
+               <PROPERTY NAME="indentCloseBrackets" VALUE="}" />
+               <PROPERTY NAME="unalignedOpenBrackets" VALUE="(" />
+               <PROPERTY NAME="unalignedCloseBrackets" VALUE=")" />
+               <PROPERTY NAME="indentNextLine"
+                       VALUE="\s*(((if|while)\s*\(|else\s*|else\s+if\s*\(|for\s*\(.*\))[^{;]*)" />
+               <PROPERTY NAME="unindentThisLine"
+                       VALUE="^.*(default:\s*|case.*:.*)$" />
+               <PROPERTY NAME="electricKeys" VALUE=":" />
+       </PROPS>
+       <RULES IGNORE_CASE="FALSE"
+               HIGHLIGHT_DIGITS="TRUE"
+               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]))">
+
+               <!-- Silly comment -->
+               <SEQ TYPE="COMMENT1">/**/</SEQ>
+
+               <!-- Javadoc comment -->
+               <SPAN TYPE="COMMENT3" DELEGATE="JAVADOC">
+                       <BEGIN>/**</BEGIN>
+                       <END>*/</END>
+               </SPAN>
+
+               <!-- Java comment (C style) -->
+               <SPAN TYPE="COMMENT1">
+                       <BEGIN>/*</BEGIN>
+                       <END>*/</END>
+               </SPAN>
+
+               <SPAN TYPE="LITERAL1" DELEGATE="DOUBLEQUOTE_LITERAL" NO_LINE_BREAK="TRUE">
+                       <BEGIN>"</BEGIN>
+                       <END>"</END>
+               </SPAN>
+               <SPAN TYPE="LITERAL3" DELEGATE="SIMPLEQUOTE_LITERAL" NO_LINE_BREAK="TRUE">
+                       <BEGIN>'</BEGIN>
+                       <END>'</END>
+               </SPAN>
+
+               <!-- end of line comment is defined this way rather than using an
+               EOL_SPAN because using an EOL_SPAN causes such comments in jsp
+               files to highlight incorrectly -->
+               <SEQ_REGEXP TYPE="COMMENT2">[/][/](.*?)$</SEQ_REGEXP>
+
+               <SEQ TYPE="OPERATOR">=</SEQ>
+               <SEQ TYPE="OPERATOR">!</SEQ>
+               <SEQ TYPE="OPERATOR">&gt;=</SEQ>
+               <SEQ TYPE="OPERATOR">&lt;=</SEQ>
+               <SEQ TYPE="OPERATOR">+</SEQ>
+               <SEQ TYPE="OPERATOR">-</SEQ>
+               
+               <!-- division operator is defined this way so that the '//' at the
+               start of single line comments within java scriptlets in jsp files 
+               are not parsed as operators. -->
+               <SEQ_REGEXP TYPE="OPERATOR">/(?![/])</SEQ_REGEXP>
+
+               <!-- workaround to stop "*" from being colorized
+                    in import statements. -->
+               <SEQ TYPE="NULL">.*</SEQ>
+
+               <SEQ TYPE="OPERATOR">*</SEQ>
+               <SEQ TYPE="OPERATOR">&gt;</SEQ>
+               <SEQ TYPE="OPERATOR">&lt;</SEQ>
+               <SEQ TYPE="OPERATOR">%</SEQ>
+               <SEQ TYPE="OPERATOR">&amp;</SEQ>
+               <SEQ TYPE="OPERATOR">|</SEQ>
+               <SEQ TYPE="OPERATOR">^</SEQ>
+               <SEQ TYPE="OPERATOR">~</SEQ>
+               <SEQ TYPE="OPERATOR">}</SEQ>
+               <SEQ TYPE="OPERATOR">{</SEQ>
+               <MARK_PREVIOUS TYPE="LABEL" MATCH_TYPE="OPERATOR"
+                       AT_WHITESPACE_END="TRUE">:</MARK_PREVIOUS>
+
+               <!-- Function calls -->
+               <MARK_PREVIOUS TYPE="FUNCTION" MATCH_TYPE="OPERATOR">(</MARK_PREVIOUS>
+               <SEQ TYPE="OPERATOR">)</SEQ>
+
+               <!-- Annotation types -->
+               <MARK_FOLLOWING TYPE="KEYWORD4">@</MARK_FOLLOWING>
+
+               <KEYWORDS>
+                       <!--{{{ modifiers -->
+                       <KEYWORD1>assert</KEYWORD1>
+                       <KEYWORD1>break</KEYWORD1>
+                       <KEYWORD1>case</KEYWORD1>
+                       <KEYWORD1>catch</KEYWORD1>
+                       <KEYWORD1>continue</KEYWORD1>
+                       <KEYWORD1>default</KEYWORD1>
+                       <KEYWORD1>do</KEYWORD1>
+                       <KEYWORD1>else</KEYWORD1>
+                       <KEYWORD1>finally</KEYWORD1>
+                       <KEYWORD1>for</KEYWORD1>
+                       <KEYWORD1>if</KEYWORD1>
+                       <KEYWORD1>instanceof</KEYWORD1>
+                       <KEYWORD1>new</KEYWORD1>
+                       <KEYWORD1>return</KEYWORD1>
+                       <KEYWORD1>strictfp</KEYWORD1>
+                       <KEYWORD1>switch</KEYWORD1>
+                       <KEYWORD1>throw</KEYWORD1>
+                       <KEYWORD1>try</KEYWORD1>
+                       <KEYWORD1>while</KEYWORD1>
+                       <!--}}}-->
+
+                       <!--{{{ structure keywords -->
+                       <KEYWORD2>final</KEYWORD2>
+                       <KEYWORD2>implements</KEYWORD2>
+                       <KEYWORD2>native</KEYWORD2>
+                       <KEYWORD2>private</KEYWORD2>
+                       <KEYWORD2>protected</KEYWORD2>
+                       <KEYWORD2>public</KEYWORD2>
+                       <KEYWORD2>static</KEYWORD2>
+                       <KEYWORD2>synchronized</KEYWORD2>
+                       <KEYWORD2>throws</KEYWORD2>
+                       <KEYWORD2>transient</KEYWORD2>
+                       <KEYWORD2>volatile</KEYWORD2>
+                       <KEYWORD2>abstract</KEYWORD2>
+                       <KEYWORD2>extends</KEYWORD2>
+                       <KEYWORD2>import</KEYWORD2> 
+                       <KEYWORD2>package</KEYWORD2>
+                       <KEYWORD2>enum</KEYWORD2>
+                       <KEYWORD3>void</KEYWORD3>
+                       <!--}}}-->
+
+                       <!--{{{ types -->
+                       <KEYWORD3>boolean</KEYWORD3>
+                       <KEYWORD3>byte</KEYWORD3>
+                       <KEYWORD3>char</KEYWORD3>
+                       <KEYWORD3>class</KEYWORD3>
+                       <KEYWORD3>double</KEYWORD3>
+                       <KEYWORD3>float</KEYWORD3>
+                       <KEYWORD3>int</KEYWORD3>
+                       <KEYWORD3>interface</KEYWORD3>
+                       <KEYWORD3>long</KEYWORD3>
+                       <KEYWORD3>short</KEYWORD3>
+                       <!-- added for Java 10. While 'var' is not technically a keyword, it is a type. -->
+                       <KEYWORD3>var</KEYWORD3>
+                       <!--}}}-->
+
+                       <!--{{{ literals -->
+                       <LITERAL2>false</LITERAL2>
+                       <LITERAL2>null</LITERAL2>
+                       <LITERAL2>super</LITERAL2>
+                       <LITERAL2>this</LITERAL2>
+                       <LITERAL2>true</LITERAL2>
+                       <!--}}}-->
+
+                       <INVALID>goto</INVALID>
+                       <INVALID>const</INVALID>
+               </KEYWORDS>
+       </RULES>
+
+       <!--{{{ DOUBLEQUOTE_LITERAL rule -->
+       <RULES SET="DOUBLEQUOTE_LITERAL" DEFAULT="LITERAL1" IGNORE_CASE="TRUE">
+               <SEQ TYPE="LITERAL4">\\</SEQ>
+               <SEQ TYPE="LITERAL4">\"</SEQ>
+               <SEQ TYPE="LITERAL4">\n</SEQ>
+               <SEQ TYPE="LITERAL4">\r</SEQ>
+               <SEQ TYPE="LITERAL4">\t</SEQ>
+               <SEQ_REGEXP HASH_CHAR="\u" TYPE="LITERAL4">\\u[a-f\d]{4}</SEQ_REGEXP>
+       </RULES> <!--}}}-->
+       
+       <!--{{{ SIMPLEUOTE_LITERAL rule -->
+       <RULES SET="SIMPLEQUOTE_LITERAL" DEFAULT="LITERAL3" IGNORE_CASE="TRUE">
+               <SEQ TYPE="LITERAL4">\\</SEQ>
+               <SEQ TYPE="LITERAL4">\'</SEQ>
+               <SEQ TYPE="LITERAL4">\n</SEQ>
+               <SEQ TYPE="LITERAL4">\r</SEQ>
+               <SEQ TYPE="LITERAL4">\t</SEQ>
+               <SEQ_REGEXP HASH_CHAR="\u" TYPE="LITERAL4">\\u[a-f\d]{4}</SEQ_REGEXP>
+       </RULES> <!--}}}-->
+
+       <!--{{{ JAVADOC rules -->
+       <RULES SET="JAVADOC" DEFAULT="COMMENT3" IGNORE_CASE="TRUE">
+
+               <!-- so that *@param is highlighted -->
+               <SEQ TYPE="COMMENT3">*</SEQ>
+
+               <!-- Javadoc ignores tags inside <pre> -->
+               <!-- XXX no it doesn't -->
+               <!-- SPAN TYPE="MARKUP" DELEGATE="JAVADOC_PRE">
+                       <BEGIN>&lt;pre&gt;</BEGIN>
+                       <END>&lt;/pre&gt;</END>
+               </SPAN -->
+
+               <!-- HTML comments -->
+               <SPAN TYPE="COMMENT1">
+                       <BEGIN>&lt;!--</BEGIN>
+                       <END>--&gt;</END>
+               </SPAN>
+
+               <!-- Javadoc allows this -->
+               <SEQ TYPE="COMMENT3">&lt;&lt;</SEQ>
+               <SEQ TYPE="COMMENT3">&lt;=</SEQ>
+               <SEQ TYPE="COMMENT3">&lt; </SEQ>
+
+               <!-- strings in quotes -->
+               <SPAN TYPE="LITERAL1" ESCAPE="\" NO_LINE_BREAK="TRUE">
+               <BEGIN>&quot;</BEGIN>
+               <END>&quot;</END>
+               </SPAN>
+
+               <!-- HTML tags -->
+               <SPAN TYPE="MARKUP" DELEGATE="xml::TAGS"
+                       NO_LINE_BREAK="TRUE">
+                       <BEGIN>&lt;</BEGIN>
+                       <END>&gt;</END>
+               </SPAN>
+
+               <!-- so that @link{...} is highlighted -->
+               <!-- XXX: this is wrong, {@link ..} is correct, see below -->
+               <!--<SEQ TYPE="COMMENT3">{</SEQ>-->
+
+               <SPAN_REGEXP TYPE="LABEL" HASH_CHAR="{@" NO_WORD_BREAK="FALSE" DELEGATE="JAVADOC_PARAM">
+                       <BEGIN>\{@(link|linkplain|docRoot|code|literal)\s</BEGIN>
+                       <END>}</END>
+               </SPAN_REGEXP>
+
+               <!-- for the common usage of the cvs keyword $Id: java.xml 24893 2019-01-17 20:10:18Z daleanson $ -->
+               <SPAN_REGEXP TYPE="LABEL" HASH_CHAR="@version" NO_WORD_BREAK="FALSE" DELEGATE="JAVADOC_PARAM">
+                       <BEGIN>@version\s+\$</BEGIN>
+                       <END>$</END>
+               </SPAN_REGEXP>
+
+               <!-- This works only when you use the same whitespace before and after the param's name,
+                        eg. a tab before and after, but mixing space and tab won't work.
+                        The reason is that you can't enter a regexp in END, except for the backreference operator $n -->
+               <SPAN_REGEXP TYPE="LABEL" HASH_CHAR="@" NO_WORD_BREAK="FALSE" DELEGATE="JAVADOC_PARAM">
+                       <BEGIN>@(?:param|throws|exception|serialField)(\s)</BEGIN>
+                       <END>$1</END>
+               </SPAN_REGEXP>
+
+               <KEYWORDS>
+               <!-- Note: the labels in comments are handled by SPANs above -->
+
+               <!-- Official javadoc tags:
+                        http://download.oracle.com/javase/6/docs/technotes/tools/windows/javadoc.html#javadoctags -->
+                       <LABEL>@author</LABEL>
+                       <LABEL>@deprecated</LABEL>
+               <!--<LABEL>@docRoot</LABEL>-->
+               <!--<LABEL>@exception</LABEL>-->
+                       <LABEL>{@inheritDoc}</LABEL>
+               <!--<LABEL>@link</LABEL>-->
+               <!--<LABEL>@linkplain</LABEL>-->
+               <!--<LABEL>@param</LABEL>-->
+                       <LABEL>@return</LABEL>
+                       <LABEL>@see</LABEL>
+                       <LABEL>@serial</LABEL>
+                       <LABEL>@serialData</LABEL>
+               <!--<LABEL>@serialField</LABEL>-->
+                       <LABEL>@since</LABEL>
+                       <LABEL>@throws</LABEL>
+                       <LABEL>{@value}</LABEL>
+                       <LABEL>@version</LABEL>
+
+               <!-- new in 1.5 -->
+               <!--<LABEL>@code</LABEL>-->
+               <!--<LABEL>@literal</LABEL>-->
+
+               <!-- SUNs proposed tags:
+                        http://java.sun.com/j2se/javadoc/proposed-tags.html -->
+                       <KEYWORD2>@category</KEYWORD2>
+                       <KEYWORD2>@example</KEYWORD2>
+                       <KEYWORD2>@exclude</KEYWORD2>
+                       <KEYWORD2>@index</KEYWORD2>
+                       <KEYWORD2>@internal</KEYWORD2>
+                       <KEYWORD2>@obsolete</KEYWORD2>
+                       <KEYWORD2>@threadsafety</KEYWORD2>
+                       <KEYWORD2>@tutorial</KEYWORD2>
+                       <KEYWORD2>@todo</KEYWORD2>
+
+               <!-- Custom tags -->
+                       <KEYWORD4>@access</KEYWORD4>
+                       <KEYWORD4>@beaninfo</KEYWORD4>
+                       <KEYWORD4>@bon</KEYWORD4>
+                       <KEYWORD4>@bug</KEYWORD4>
+                       <KEYWORD4>@complexity</KEYWORD4>
+                       <KEYWORD4>@design</KEYWORD4>
+                       <KEYWORD4>@ensures</KEYWORD4>
+                       <KEYWORD4>@equivalent</KEYWORD4>
+                       <KEYWORD4>@generates</KEYWORD4>
+                       <KEYWORD4>@guard</KEYWORD4>
+                       <KEYWORD4>@hides</KEYWORD4>
+                       <KEYWORD4>@history</KEYWORD4>
+                       <KEYWORD4>@idea</KEYWORD4>
+                       <KEYWORD4>@invariant</KEYWORD4>
+                       <KEYWORD4>@modifies</KEYWORD4>
+                       <KEYWORD4>@overrides</KEYWORD4>
+                       <KEYWORD4>@post</KEYWORD4>
+                       <KEYWORD4>@pre</KEYWORD4>
+                       <KEYWORD4>@references</KEYWORD4>
+                       <KEYWORD4>@requires</KEYWORD4>
+                       <KEYWORD4>@review</KEYWORD4>
+                       <KEYWORD4>@spec</KEYWORD4>
+                       <KEYWORD4>@uses</KEYWORD4>
+                       <KEYWORD4>@values</KEYWORD4>
+               </KEYWORDS>
+       </RULES> <!--}}}-->
+
+
+       <!-- just a dummy which makes use of the default token type COMMENT4 for highlighting the word after @param in javadoc -->
+       <RULES SET="JAVADOC_PARAM" DEFAULT="COMMENT4" IGNORE_CASE="TRUE" />
+</MODE>