<?xml version="1.0"?>

<!DOCTYPE MODE SYSTEM "xmode.dtd">

<!-- This is a Cobra editing mode for jEdit. It was originally based on jEdit's Python mode by
     Slava Pestov. -->

<MODE>
	<PROPS>
		<PROPERTY NAME="indentNextLines" VALUE="^\s*(and|body|branch|catch|class|def|else|ensure|expect|for|get|if|invariant|on|or|post|pro|require|set|shared|success|test|try|using|while)\b.*(#.*)?" />
		<PROPERTY NAME="unalignedOpenBrackets" VALUE="(" />
		<PROPERTY NAME="unalignedCloseBrackets" VALUE=")" />
		<PROPERTY NAME="lineComment" VALUE="#" />
		<PROPERTY NAME="ignoreWhitespace" VALUE="false" />
	</PROPS>
    
	<RULES IGNORE_CASE="FALSE" HIGHLIGHT_DIGITS="TRUE">
		<!-- Comments -->
		<EOL_SPAN TYPE="COMMENT1">#</EOL_SPAN>

		<!-- Triple quoted string literals -->
		<SPAN TYPE="LITERAL2">
			<BEGIN>"""</BEGIN>
			<END>"""</END>
		</SPAN>

		<SPAN TYPE="LITERAL2">
			<BEGIN>'''</BEGIN>
			<END>'''</END>
		</SPAN>

		<!-- Standard string literals -->
		<SPAN TYPE="LITERAL1" DELEGATE="INTERPOLATION">
			<BEGIN>"</BEGIN>
			<END>"</END>
		</SPAN>
		<SPAN TYPE="LITERAL1" DELEGATE="INTERPOLATION">
			<BEGIN>'</BEGIN>
			<END>'</END>
		</SPAN>

        <!-- This operator list is largely from Python. It should be reviewed/updated. -->
		<SEQ TYPE="OPERATOR">==</SEQ>
		<SEQ TYPE="OPERATOR">!</SEQ>
		<SEQ TYPE="OPERATOR">&gt;=</SEQ>
		<SEQ TYPE="OPERATOR">&lt;=</SEQ>
        <SEQ TYPE="OPERATOR">&lt;&gt;</SEQ>
		<SEQ TYPE="OPERATOR">+</SEQ>
		<SEQ TYPE="OPERATOR">-</SEQ>
		<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">&amp;</SEQ>
		<SEQ TYPE="OPERATOR">|</SEQ>
		<SEQ TYPE="OPERATOR">^</SEQ>
		<SEQ TYPE="OPERATOR">~</SEQ>

		<MARK_PREVIOUS TYPE="FUNCTION" MATCH_TYPE="OPERATOR">(</MARK_PREVIOUS>
		<SEQ TYPE="OPERATOR">)</SEQ>

		<KEYWORDS>
			<!--  Declarations and Modifiers  -->
            <KEYWORD1>abstract</KEYWORD1>
            <KEYWORD1>as</KEYWORD1>
            <KEYWORD1>be</KEYWORD1>
            <KEYWORD1>callable</KEYWORD1>
            <KEYWORD1>class</KEYWORD1>
            <KEYWORD1>cue</KEYWORD1>
            <KEYWORD1>def</KEYWORD1>
            <KEYWORD1>enum</KEYWORD1>
            <KEYWORD1>event</KEYWORD1>
            <KEYWORD1>extend</KEYWORD1>
            <KEYWORD1>extern</KEYWORD1>
            <KEYWORD1>fake</KEYWORD1>
            <KEYWORD1>from</KEYWORD1>
            <KEYWORD1>get</KEYWORD1>
            <KEYWORD1>has</KEYWORD1>
            <KEYWORD1>implements</KEYWORD1>
            <KEYWORD1>import</KEYWORD1>
            <KEYWORD1>inherits</KEYWORD1>
            <KEYWORD1>inlined</KEYWORD1>
            <KEYWORD1>interface</KEYWORD1>
            <KEYWORD1>internal</KEYWORD1>
            <KEYWORD1>is</KEYWORD1>
            <KEYWORD1>must</KEYWORD1>
            <KEYWORD1>namespace</KEYWORD1>
            <KEYWORD1>new</KEYWORD1>
            <KEYWORD1>nonvirtual</KEYWORD1>
            <KEYWORD1>of</KEYWORD1>
            <KEYWORD1>override</KEYWORD1>
            <KEYWORD1>partial</KEYWORD1>
            <KEYWORD1>private</KEYWORD1>
            <KEYWORD1>pro</KEYWORD1>
            <KEYWORD1>protected</KEYWORD1>
            <KEYWORD1>public</KEYWORD1>
            <KEYWORD1>set</KEYWORD1>
            <KEYWORD1>shared</KEYWORD1>
            <KEYWORD1>sig</KEYWORD1>
            <KEYWORD1>struct</KEYWORD1>
            <KEYWORD1>use</KEYWORD1>
            <KEYWORD1>var</KEYWORD1>
            <KEYWORD1>virtual</KEYWORD1>
            <KEYWORD1>where</KEYWORD1>
            
            <!-- Statements and Expressions -->
            <KEYWORD2>all</KEYWORD2>
            <KEYWORD2>and</KEYWORD2>
            <KEYWORD2>any</KEYWORD2>
            <KEYWORD2>base</KEYWORD2>
            <KEYWORD2>branch</KEYWORD2>
            <KEYWORD2>break</KEYWORD2>
            <KEYWORD2>catch</KEYWORD2>
            <KEYWORD2>continue</KEYWORD2>
            <KEYWORD2>do</KEYWORD2>
            <KEYWORD2>each</KEYWORD2>
            <KEYWORD2>else</KEYWORD2>
            <KEYWORD2>end</KEYWORD2>
            <KEYWORD2>every</KEYWORD2>
            <KEYWORD2>expect</KEYWORD2>
            <KEYWORD2>false</KEYWORD2>
            <KEYWORD2>finally</KEYWORD2>
            <KEYWORD2>for</KEYWORD2>
            <KEYWORD2>if</KEYWORD2>
            <KEYWORD2>ignore</KEYWORD2>
            <KEYWORD2>in</KEYWORD2>
            <KEYWORD2>inout</KEYWORD2>
            <KEYWORD2>listen</KEYWORD2>
            <KEYWORD2>nil</KEYWORD2>
            <KEYWORD2>not</KEYWORD2>
            <KEYWORD2>off</KEYWORD2>
            <KEYWORD2>on</KEYWORD2>
            <KEYWORD2>or</KEYWORD2>
            <KEYWORD2>out</KEYWORD2>
            <KEYWORD2>pass</KEYWORD2>
            <KEYWORD2>passthrough</KEYWORD2>
            <KEYWORD2>post</KEYWORD2>
            <KEYWORD2>print</KEYWORD2>
            <KEYWORD2>raise</KEYWORD2>
            <KEYWORD2>ref</KEYWORD2>
            <KEYWORD2>return</KEYWORD2>
            <KEYWORD2>stop</KEYWORD2>
            <KEYWORD2>success</KEYWORD2>
            <KEYWORD2>this</KEYWORD2>
            <KEYWORD2>throw</KEYWORD2>
            <KEYWORD2>to</KEYWORD2>
            <KEYWORD2>to?</KEYWORD2>
            <KEYWORD2>trace</KEYWORD2>
            <KEYWORD2>true</KEYWORD2>
            <KEYWORD2>try</KEYWORD2>
            <KEYWORD2>using</KEYWORD2>
            <KEYWORD2>vari</KEYWORD2>
            <KEYWORD2>while</KEYWORD2>
            <KEYWORD2>yield</KEYWORD2>
            
			<!-- Types -->
            <KEYWORD3>bool</KEYWORD3>
            <KEYWORD3>char</KEYWORD3>
            <KEYWORD3>decimal</KEYWORD3>
            <KEYWORD3>dynamic</KEYWORD3>
            <KEYWORD3>float</KEYWORD3>
            <KEYWORD3>int</KEYWORD3>
            <KEYWORD3>number</KEYWORD3>
            <KEYWORD3>same</KEYWORD3>
            <KEYWORD3>uint</KEYWORD3>
            
			<!-- "Code for Quality" Related -->
            <KEYWORD4>assert</KEYWORD4>
            <KEYWORD4>body</KEYWORD4>
            <KEYWORD4>ensure</KEYWORD4>
            <KEYWORD4>implies</KEYWORD4>
            <KEYWORD4>invariant</KEYWORD4>
			<KEYWORD4>require</KEYWORD4>
            <KEYWORD4>old</KEYWORD4>
            <KEYWORD4>test</KEYWORD4>

            <!-- There are also 'objc' and 'except' reserved words under "misc" -->
		</KEYWORDS>
	</RULES>
    
    <RULES SET="INTERPOLATION" DEFAULT="LITERAL1" ESCAPE="\">
        <SPAN TYPE="NULL" DELEGATE="MAIN">
            <BEGIN>[</BEGIN>
            <END>]</END>
        </SPAN>
    </RULES>
</MODE>


