<?xml version="1.0"?>
<!DOCTYPE MODE SYSTEM "xmode.dtd">
<MODE>
<PROPS>
<PROPERTY NAME="indentOpenBrackets" VALUE="{" />
<PROPERTY NAME="indentCloseBrackets" VALUE="}" />
<PROPERTY NAME="lineUpClosingBracket" VALUE="true" />
<PROPERTY NAME="indentPrevLine"
VALUE="\s*(((if|while)\s*\(|else\s*(\{|$)|else\s+if\s*\(|case\s+.+:|default:)[^;]*|for\s*\(.*)" />
<!-- set this to 'true' if you want to use GNU coding style -->
<PROPERTY NAME="doubleBracketIndent" VALUE="false" />
<PROPERTY NAME="commentStart" VALUE="/*" />
<PROPERTY NAME="commentEnd" VALUE="*/" />
<PROPERTY NAME="lineComment" VALUE="//" />
<PROPERTY NAME="noTabs" VALUE="true" />
<PROPERTY NAME="tabSize" VALUE="2" />
<PROPERTY NAME="indentSize" VALUE="2" />
<PROPERTY NAME="wordBreakChars" VALUE=",+-=<>/?^&*" />
</PROPS>
<RULES ESCAPE="\" 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]))">
<MARK_FOLLOWING TYPE="LABEL">@</MARK_FOLLOWING>
<IMPORT DELEGATE="PRIMARY"/>
</RULES>
<RULES SET="PRIMARY">
<!-- Silly comment -->
<SEQ TYPE="COMMENT1">/**/</SEQ>
<EOL_SPAN TYPE="COMMENT2">//</EOL_SPAN>
<!-- Scaladoc comment -->
<SPAN TYPE="COMMENT3" DELEGATE="SCALADOC">
<BEGIN>/**</BEGIN>
<END>*/</END>
</SPAN>
<!-- Scala comment (Java style) -->
<SPAN TYPE="COMMENT1">
<BEGIN>/*</BEGIN>
<END>*/</END>
</SPAN>
<!-- start of XML comment (griba2010@ya.com) -->
<SEQ_REGEXP HASH_CHAR="<" AT_WHITESPACE_END="TRUE" TYPE="COMMENT2"
DELEGATE="XML_COMMENT"><!--</SEQ_REGEXP>
<!-- start of xml tag (griba2010@ya.com) -->
<SEQ_REGEXP HASH_CHAR="<" AT_WHITESPACE_END="TRUE" TYPE="LITERAL3"
DELEGATE="XML_TAG"><\/?\w*</SEQ_REGEXP>
<!-- string and character literals -->
<SPAN TYPE="LITERAL1" NO_LINE_BREAK="FALSE" ESCAPE="FALSE">
<BEGIN>"""</BEGIN>
<END>"""</END>
</SPAN>
<SPAN TYPE="LITERAL1" NO_LINE_BREAK="TRUE">
<BEGIN>"</BEGIN>
<END>"</END>
</SPAN>
<SEQ_REGEXP HASH_CHAR="'" TYPE="LITERAL1">'([^']|\\.)'</SEQ_REGEXP>
<!-- symbol literals -->
<SEQ_REGEXP HASH_CHAR="'" TYPE="LABEL">'[0-9a-zA-Z><=+]([0-9a-zA-Z><=+]|_[0-9a-zA-Z><=+])*</SEQ_REGEXP>
<!-- type params between bracket pairs with -->
<!-- nested ones within (griba2010@ya.com) -->
<SEQ_REGEXP HASH_CHAR="[" TYPE="LITERAL3"
>\[[^\[\]]*(\[[^\[\]]*(\[[^\[\]]*\][^\[\]]*)*\][^\[\]]*)*\]</SEQ_REGEXP>
<!-- type constraints (griba2010@ya.com) -->
<SEQ_REGEXP HASH_CHAR="<" TYPE="LITERAL2"
><:\s*\w+(\.\w+)*(#\w+)?</SEQ_REGEXP>
<SEQ_REGEXP HASH_CHAR=">" TYPE="LITERAL2"
>>:\s*\w+(\.\w+)*(#\w+)?</SEQ_REGEXP>
<SEQ TYPE="OPERATOR">)</SEQ>
<SEQ TYPE="OPERATOR">=</SEQ>
<SEQ TYPE="OPERATOR">!</SEQ>
<SEQ TYPE="OPERATOR">>=</SEQ>
<SEQ TYPE="OPERATOR">>:</SEQ>
<SEQ TYPE="OPERATOR"><=</SEQ>
<SEQ TYPE="OPERATOR"><:</SEQ>
<SEQ TYPE="OPERATOR">+</SEQ>
<SEQ TYPE="OPERATOR">-</SEQ>
<SEQ TYPE="OPERATOR">/</SEQ>
<SEQ TYPE="OPERATOR">*</SEQ>
<SEQ TYPE="OPERATOR">></SEQ>
<SEQ TYPE="OPERATOR"><</SEQ>
<SEQ TYPE="OPERATOR">%</SEQ>
<SEQ TYPE="OPERATOR">&</SEQ>
<SEQ TYPE="OPERATOR">|</SEQ>
<SEQ TYPE="OPERATOR">^</SEQ>
<SEQ TYPE="OPERATOR">`</SEQ>
<SEQ TYPE="OPERATOR">~</SEQ>
<SEQ TYPE="OPERATOR">}</SEQ>
<SEQ TYPE="OPERATOR">{</SEQ>
<SEQ TYPE="NULL">.</SEQ>
<SEQ TYPE="NULL">,</SEQ>
<SEQ TYPE="NULL">;</SEQ>
<SEQ TYPE="NULL">]</SEQ>
<SEQ TYPE="NULL">[</SEQ>
<SEQ TYPE="NULL">?</SEQ>
<SEQ TYPE="NULL">:</SEQ>
<!-- after colon type descriptions (griba2010@ya.com) -->
<SEQ_REGEXP HASH_CHAR=":" TYPE="LITERAL2"
>:\s*\w+(\.\w+)*(#\w+)?</SEQ_REGEXP>
<!-- Function calls -->
<MARK_PREVIOUS TYPE="FUNCTION" MATCH_TYPE="OPERATOR">(</MARK_PREVIOUS>
<SPAN DELEGATE="PATTERN" MATCH_TYPE="KEYWORD1" AT_WORD_START="TRUE" NO_LINE_BREAK="TRUE">
<BEGIN>case </BEGIN>
<END>=></END>
</SPAN>
<KEYWORDS>
<KEYWORD1>abstract</KEYWORD1>
<KEYWORD1>case</KEYWORD1>
<KEYWORD1>catch</KEYWORD1>
<KEYWORD1>class</KEYWORD1>
<KEYWORD1>def</KEYWORD1>
<KEYWORD1>do</KEYWORD1>
<KEYWORD1>else</KEYWORD1>
<KEYWORD1>extends</KEYWORD1>
<KEYWORD1>final</KEYWORD1>
<KEYWORD1>finally</KEYWORD1>
<KEYWORD1>for</KEYWORD1>
<KEYWORD1>forSome</KEYWORD1>
<KEYWORD1>if</KEYWORD1>
<KEYWORD1>implicit</KEYWORD1>
<KEYWORD1>import</KEYWORD1>
<KEYWORD1>lazy</KEYWORD1>
<KEYWORD1>match</KEYWORD1>
<KEYWORD1>new</KEYWORD1>
<KEYWORD1>object</KEYWORD1>
<KEYWORD1>override</KEYWORD1>
<KEYWORD1>package</KEYWORD1>
<KEYWORD1>private</KEYWORD1>
<KEYWORD1>protected</KEYWORD1>
<KEYWORD1>requires</KEYWORD1>
<KEYWORD1>return</KEYWORD1>
<KEYWORD1>sealed</KEYWORD1>
<KEYWORD1>throw</KEYWORD1>
<KEYWORD1>trait</KEYWORD1>
<KEYWORD1>try</KEYWORD1>
<KEYWORD1>type</KEYWORD1>
<KEYWORD1>val</KEYWORD1>
<KEYWORD1>var</KEYWORD1>
<KEYWORD1>with</KEYWORD1>
<KEYWORD1>while</KEYWORD1>
<KEYWORD1>yield</KEYWORD1>
<KEYWORD1>=></KEYWORD1>
<!-- java.lang.* wrapper types -->
<KEYWORD2>Character</KEYWORD2>
<KEYWORD2>Integer</KEYWORD2>
<!-- scala.* primitive types -->
<KEYWORD2>Boolean</KEYWORD2>
<KEYWORD2>boolean</KEYWORD2>
<KEYWORD2>Byte</KEYWORD2>
<KEYWORD2>byte</KEYWORD2>
<KEYWORD2>Char</KEYWORD2>
<KEYWORD2>char</KEYWORD2>
<KEYWORD2>Double</KEYWORD2>
<KEYWORD2>double</KEYWORD2>
<KEYWORD2>Float</KEYWORD2>
<KEYWORD2>float</KEYWORD2>
<KEYWORD2>Int</KEYWORD2>
<KEYWORD2>int</KEYWORD2>
<KEYWORD2>Long</KEYWORD2>
<KEYWORD2>long</KEYWORD2>
<KEYWORD2>Short</KEYWORD2>
<KEYWORD2>short</KEYWORD2>
<KEYWORD2>Unit</KEYWORD2>
<KEYWORD2>unit</KEYWORD2>
<!-- scala.* predefined types -->
<KEYWORD3>Actor</KEYWORD3>
<KEYWORD3>ActorProxy</KEYWORD3>
<KEYWORD3>ActorTask</KEYWORD3>
<KEYWORD3>ActorThread</KEYWORD3>
<KEYWORD3>AllRef</KEYWORD3>
<KEYWORD3>Any</KEYWORD3>
<KEYWORD3>AnyRef</KEYWORD3>
<KEYWORD3>Application</KEYWORD3>
<KEYWORD3>AppliedType</KEYWORD3>
<KEYWORD3>Array</KEYWORD3>>
<KEYWORD3>ArrayBuffer</KEYWORD3>
<KEYWORD3>Attribute</KEYWORD3>
<KEYWORD3>BoxedArray</KEYWORD3>
<KEYWORD3>BoxedBooleanArray</KEYWORD3>
<KEYWORD3>BoxedByteArray</KEYWORD3>
<KEYWORD3>BoxedCharArray</KEYWORD3>
<KEYWORD3>Buffer</KEYWORD3>
<KEYWORD3>BufferedIterator</KEYWORD3>
<KEYWORD3>Enumeration</KEYWORD3>
<KEYWORD3>Fluid</KEYWORD3>
<KEYWORD3>Function</KEYWORD3>
<KEYWORD3>IScheduler</KEYWORD3>
<KEYWORD3>ImmutableMapAdaptor</KEYWORD3>
<KEYWORD3>ImmutableSetAdaptor</KEYWORD3>
<KEYWORD3>Iterable</KEYWORD3>
<KEYWORD3>List</KEYWORD3>
<KEYWORD3>Option</KEYWORD3>
<KEYWORD3>Pair</KEYWORD3>
<KEYWORD3>PartialFunction</KEYWORD3>
<KEYWORD3>Pid</KEYWORD3>
<KEYWORD3>PriorityQueue</KEYWORD3>
<KEYWORD3>PriorityQueueProxy</KEYWORD3>
<KEYWORD3>Reaction</KEYWORD3>
<KEYWORD3>Ref</KEYWORD3>
<KEYWORD3>Responder</KEYWORD3>
<KEYWORD3>RichInt</KEYWORD3>
<KEYWORD3>RichString</KEYWORD3>
<KEYWORD3>Rule</KEYWORD3>
<KEYWORD3>RuleTransformer</KEYWORD3>
<KEYWORD3>Script</KEYWORD3>
<KEYWORD3>Some</KEYWORD3>
<KEYWORD3>Stream</KEYWORD3>
<KEYWORD3>String</KEYWORD3>
<KEYWORD3>Symbol</KEYWORD3>
<KEYWORD3>TcpService</KEYWORD3>
<KEYWORD3>TcpServiceWorker</KEYWORD3>
<KEYWORD3>WorkerThread</KEYWORD3>
<!-- scala.* predefined objects -->
<KEYWORD4>Console</KEYWORD4>
<KEYWORD4>Nil</KEYWORD4>
<KEYWORD4>None</KEYWORD4>
<KEYWORD4>Predef</KEYWORD4>
<KEYWORD4>RemoteActor</KEYWORD4>
<KEYWORD4>SUnit</KEYWORD4>
<KEYWORD4>ScalaRunTime</KEYWORD4>
<KEYWORD4>Scheduler</KEYWORD4>
<KEYWORD4>TIMEOUT</KEYWORD4>
<KEYWORD4>TimerThread</KEYWORD4>
<LITERAL2>false</LITERAL2>
<LITERAL2>null</LITERAL2>
<LITERAL2>super</LITERAL2>
<LITERAL2>this</LITERAL2>
<LITERAL2>true</LITERAL2>
</KEYWORDS>
</RULES>
<RULES SET="PATTERN" DEFAULT="NULL" IGNORE_CASE="FALSE">
<IMPORT DELEGATE="PRIMARY"/>
<SEQ TYPE="OPERATOR">@</SEQ>
</RULES>
<RULES SET="SCALADOC" DEFAULT="COMMENT3" IGNORE_CASE="TRUE">
<!-- so that @link{...} is highlighted -->
<SEQ TYPE="COMMENT3">{</SEQ>
<!-- so that *@param is highlighted -->
<SEQ TYPE="COMMENT3">*</SEQ>
<!-- Javadoc ignores tags inside <pre> -->
<SPAN TYPE="MARKUP" DELEGATE="SCALADOC_PRE">
<BEGIN><pre></BEGIN>
<END></pre></END>
</SPAN>
<!-- HTML comments -->
<SPAN TYPE="COMMENT1">
<BEGIN><!--</BEGIN>
<END>--></END>
</SPAN>
<!-- Javadoc allows this -->
<SEQ TYPE="COMMENT3"><<</SEQ>
<SEQ TYPE="COMMENT3"><=</SEQ>
<SEQ TYPE="COMMENT3">< </SEQ>
<!-- HTML tags -->
<SPAN TYPE="MARKUP" DELEGATE="xml::TAGS">
<BEGIN><</BEGIN>
<END>></END>
</SPAN>
<KEYWORDS>
<LABEL>@author</LABEL>
<LABEL>@beaninfo</LABEL>
<LABEL>@history</LABEL>
<LABEL>@bug</LABEL>
<LABEL>@review</LABEL>
<LABEL>@todo</LABEL>
<LABEL>@idea</LABEL>
<LABEL>@pre</LABEL>
<LABEL>@requires</LABEL>
<LABEL>@post</LABEL>
<LABEL>@ensures</LABEL>
<LABEL>@generates</LABEL>
<LABEL>@modifies</LABEL>
<LABEL>@invariant</LABEL>
<LABEL>@exception</LABEL>
<LABEL>@hides</LABEL>
<LABEL>@overrides</LABEL>
<LABEL>@equivalent</LABEL>
<LABEL>@bon</LABEL>
<LABEL>@access</LABEL>
<LABEL>@example</LABEL>
<LABEL>@design</LABEL>
<LABEL>@serial</LABEL>
<LABEL>@references</LABEL>
<LABEL>@uses</LABEL>
<LABEL>@guard</LABEL>
<LABEL>@values</LABEL>
<LABEL>@complexity</LABEL>
<LABEL>@deprecated</LABEL>
<LABEL>@docRoot</LABEL>
<LABEL>@exception</LABEL>
<LABEL>@link</LABEL>
<LABEL>@param</LABEL>
<LABEL>@return</LABEL>
<LABEL>@see</LABEL>
<LABEL>@serialData</LABEL>
<LABEL>@serialField</LABEL>
<LABEL>@since</LABEL>
<LABEL>@throws</LABEL>
<LABEL>@version</LABEL>
<LABEL>@spec</LABEL>
</KEYWORDS>
</RULES>
<RULES SET="SCALADOC_PRE" DEFAULT="COMMENT3" />
<!-- inside xml tag default type label -->
<!-- for attribute names (griba2010@ya.com) -->
<RULES SET="XML_TAG" DEFAULT="LABEL" IGNORE_CASE="TRUE">
<!-- string and character literals -->
<SPAN TYPE="LITERAL1" NO_LINE_BREAK="TRUE">
<BEGIN>"</BEGIN>
<END>"</END>
</SPAN>
<SPAN TYPE="LITERAL1" NO_LINE_BREAK="TRUE">
<BEGIN>'</BEGIN>
<END>'</END>
</SPAN>
<!-- scala attribute value -->
<SPAN DELEGATE="MAIN">
<BEGIN>{</BEGIN>
<END>}</END>
</SPAN>
<!-- if ">\n" goto main rule set -->
<SEQ_REGEXP HASH_CHAR=">" DELEGATE="MAIN" TYPE="LITERAL3"
>>$</SEQ_REGEXP>
<!-- if ">;" goto main rule set -->
<SEQ_REGEXP HASH_CHAR=">" DELEGATE="MAIN" TYPE="LITERAL3"
>>\s*;</SEQ_REGEXP>
<!-- if ">)" goto main rule set -->
<SEQ_REGEXP HASH_CHAR=">" DELEGATE="MAIN" TYPE="LITERAL3"
>>\s*\)</SEQ_REGEXP>
<!-- if ">" goto xml_text rule set -->
<SEQ DELEGATE="XML_TEXT" TYPE="LITERAL3">></SEQ>
</RULES>
<RULES SET="XML_TEXT" DEFAULT="COMMENT4">
<!-- scala expression -->
<SPAN DELEGATE="MAIN">
<BEGIN>{</BEGIN>
<END>}</END>
</SPAN>
<SEQ_REGEXP HASH_CHAR="<" DELEGATE="XML_COMMENT" TYPE="COMMENT2"
><!--</SEQ_REGEXP>
<!-- if "<" goto xml_tag rule set -->
<SEQ_REGEXP HASH_CHAR="<" DELEGATE="XML_TAG" TYPE="LITERAL3"
><\/?\w*</SEQ_REGEXP>
</RULES>
<RULES SET="XML_COMMENT" DEFAULT="COMMENT2">
<!-- if end_of_comment with "\n" goto main rule set -->
<SEQ_REGEXP HASH_CHAR="-" DELEGATE="MAIN" TYPE="COMMENT2"
>-->$</SEQ_REGEXP>
<!-- if end_of_comment with ";" goto main rule set -->
<SEQ_REGEXP HASH_CHAR="-" DELEGATE="MAIN" TYPE="COMMENT2"
>-->\s*;</SEQ_REGEXP>
<!-- if end_of_comment goto xml_text rule set -->
<SEQ DELEGATE="XML_TEXT" TYPE="COMMENT2">--></SEQ>
</RULES>
</MODE>