<?xml version="1.0"?>

<!DOCTYPE MODE SYSTEM "xmode.dtd">

<!-- 
	This is Metatrader mql4 mode by gspe 2010

	Suggested catalog entry:
	<MODE NAME="mql4" FILE="mql4.xml" FILE_NAME_GLOB="*.{mq4,mqh}" />
-->

<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*(#|//)).*(\b(if|while|for)\s*\(.*\)|\b(else|do)\b)[^{;]*$" />
		<PROPERTY NAME="unindentThisLine"
			VALUE="^\s*((case\b.*|[\p{Alpha}_][\p{Alnum}_]*)\s*:(?!:)).*$" />
		<PROPERTY NAME="electricKeys" VALUE=":" />
	</PROPS>

	<!-- -->
	<RULES
		IGNORE_CASE="FALSE"
		HIGHLIGHT_DIGITS="TRUE" DIGIT_RE="[0-9][0-9a-zA-Z]*">
		<EOL_SPAN TYPE="KEYWORD1" AT_WHITESPACE_END="TRUE" DELEGATE="CPP">#</EOL_SPAN>
		
		<IMPORT DELEGATE="LEX"/>
		<IMPORT DELEGATE="CORE"/>
	</RULES>

    <RULES SET="LEX" IGNORE_CASE="FALSE">
		<IMPORT DELEGATE="COMMENTS" />
		<IMPORT DELEGATE="C_LEXER" />
	</RULES>

    <!-- Comments, Trigraph, Alternate-Tokens -->
    <RULES SET="C_LEXER"
        IGNORE_CASE="FALSE"
        HIGHLIGHT_DIGITS="TRUE" DIGIT_RE="[0-9][0-9a-zA-Z]*">

        <SPAN TYPE="LITERAL1" NO_LINE_BREAK="TRUE" ESCAPE="\">
            <BEGIN>"</BEGIN>
            <END>"</END>
        </SPAN>
        <SPAN TYPE="LITERAL1" NO_LINE_BREAK="TRUE" ESCAPE="\">
            <BEGIN>'</BEGIN>
            <END>'</END>
        </SPAN>

        <!-- Trigraphs -->
        <SEQ TYPE="LITERAL4">??(</SEQ>
        <SEQ TYPE="LITERAL4">??/</SEQ>
        <SEQ TYPE="LITERAL4">??)</SEQ>
        <SEQ TYPE="LITERAL4">??'</SEQ>
        <SEQ TYPE="LITERAL4">??&lt;</SEQ>
        <SEQ TYPE="LITERAL4">??!</SEQ>
        <SEQ TYPE="LITERAL4">??&gt;</SEQ>
        <SEQ TYPE="LITERAL4">??-</SEQ>
        <SEQ TYPE="LITERAL4">??=</SEQ>

        <!-- Alternate tokens -->
        <SEQ TYPE="LITERAL4">&lt;:</SEQ>
        <SEQ TYPE="LITERAL4">:&gt;</SEQ>
        <SEQ TYPE="LITERAL4">&lt;%</SEQ>
        <SEQ TYPE="LITERAL4">%&gt;</SEQ>
        <SEQ TYPE="LITERAL4">%:</SEQ>

        <!-- Function-like macro or function calls.
            This can't work after SEQ for '('. -->
        <MARK_PREVIOUS
            TYPE="FUNCTION"
            MATCH_TYPE="OPERATOR">(</MARK_PREVIOUS>

        <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">&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>
        <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>

    </RULES>

    <!-- Core language -->
    <RULES SET="CORE"
        IGNORE_CASE="FALSE"
        HIGHLIGHT_DIGITS="TRUE" DIGIT_RE="[0-9][0-9a-zA-Z]*">
        <KEYWORDS>
            <!-- Data Types -->
            <KEYWORD1>bool</KEYWORD1>
            <KEYWORD1>char</KEYWORD1>
            <KEYWORD1>color</KEYWORD1>
            <KEYWORD1>datetime</KEYWORD1>
            <KEYWORD1>double</KEYWORD1>
            <KEYWORD1>extern</KEYWORD1>
            <KEYWORD1>int</KEYWORD1>
            <KEYWORD1>string</KEYWORD1>
            <KEYWORD1>void</KEYWORD1>
            <!-- Predefined Variables -->
			<KEYWORD2>Ask</KEYWORD2>
			<KEYWORD2>Bid</KEYWORD2>
			<KEYWORD2>Bars</KEYWORD2>
			<KEYWORD2>Point</KEYWORD2>
			<KEYWORD2>Digits</KEYWORD2>
			<!-- Predefined Arrays-Timeseries -->
			<KEYWORD2>Time</KEYWORD2>
			<KEYWORD2>Open</KEYWORD2>
			<KEYWORD2>Close</KEYWORD2>
			<KEYWORD2>High</KEYWORD2>
			<KEYWORD2>Low</KEYWORD2>
			<KEYWORD2>Volume</KEYWORD2>
			<!-- Operators -->
			<KEYWORD3>break</KEYWORD3>
			<KEYWORD3>case</KEYWORD3>
			<KEYWORD3>continue</KEYWORD3>
			<KEYWORD3>default</KEYWORD3>
			<KEYWORD3>if</KEYWORD3>
			<KEYWORD3>else</KEYWORD3>
			<KEYWORD3>for</KEYWORD3>
			<KEYWORD3>switch</KEYWORD3>
			<KEYWORD3>return</KEYWORD3>
			<KEYWORD3>while</KEYWORD3>
            <!-- Standard constants -->
				<!-- Series Arrays -->
				<KEYWORD4>MODE_OPEN</KEYWORD4>
				<KEYWORD4>MODE_LOW</KEYWORD4>
				<KEYWORD4>MODE_HIGH</KEYWORD4>
				<KEYWORD4>MODE_CLOSE</KEYWORD4>
				<KEYWORD4>MODE_VOLUME</KEYWORD4>
				<KEYWORD4>MODE_TIME</KEYWORD4>
				<!-- Timeframes -->
				<KEYWORD4>PERIOD_M1</KEYWORD4>
				<KEYWORD4>PERIOD_M5</KEYWORD4>
				<KEYWORD4>PERIOD_M15</KEYWORD4>
				<KEYWORD4>PERIOD_M30</KEYWORD4>
				<KEYWORD4>PERIOD_H1</KEYWORD4>
				<KEYWORD4>PERIOD_H4</KEYWORD4>
				<KEYWORD4>PERIOD_D1</KEYWORD4>
				<KEYWORD4>PERIOD_W1</KEYWORD4>
				<KEYWORD4>PERIOD_MN1</KEYWORD4>
				<!-- Trade Operations -->
				<KEYWORD4>OP_BUY</KEYWORD4>
				<KEYWORD4>OP_SELL</KEYWORD4>
				<KEYWORD4>OP_BUYLIMIT</KEYWORD4>
				<KEYWORD4>OP_SELLLIMIT</KEYWORD4>
				<KEYWORD4>OP_BUYSTOP</KEYWORD4>
				<KEYWORD4>OP_SELLSTOP</KEYWORD4>
				<!-- Price Constants -->
				<KEYWORD4>PRICE_CLOSE</KEYWORD4>
				<KEYWORD4>PRICE_OPEN</KEYWORD4>
				<KEYWORD4>PRICE_HIGH</KEYWORD4>
				<KEYWORD4>PRICE_LOW</KEYWORD4>
				<KEYWORD4>PRICE_MEDIAN</KEYWORD4>
				<KEYWORD4>PRICE_TYPICAL</KEYWORD4>
				<KEYWORD4>PRICE_WEIGHTED</KEYWORD4>
				<!-- MarketInfo -->
				<KEYWORD4>MODE_LOW</KEYWORD4>
				<KEYWORD4>MODE_HIGH</KEYWORD4>
				<KEYWORD4>MODE_TIME</KEYWORD4>
				<KEYWORD4>MODE_BID</KEYWORD4>
				<KEYWORD4>MODE_ASK</KEYWORD4>
				<KEYWORD4>MODE_POINT</KEYWORD4>
				<KEYWORD4>MODE_DIGITS</KEYWORD4>
				<KEYWORD4>MODE_SPREAD</KEYWORD4>
				<KEYWORD4>MODE_STOPLEVEL</KEYWORD4>
				<KEYWORD4>MODE_LOTSIZE</KEYWORD4>
				<KEYWORD4>MODE_TICKVALUE</KEYWORD4>
				<KEYWORD4>MODE_TICKSIZE</KEYWORD4>
				<KEYWORD4>MODE_SWAPLONG</KEYWORD4>
				<KEYWORD4>MODE_SWAPSHORT</KEYWORD4>
				<KEYWORD4>MODE_STARTING</KEYWORD4>
				<KEYWORD4>MODE_EXPIRATION</KEYWORD4>
				<KEYWORD4>MODE_TRADEALLOWED</KEYWORD4>
				<KEYWORD4>MODE_MINLOT</KEYWORD4>
				<KEYWORD4>MODE_LOTSTEP</KEYWORD4>
				<KEYWORD4>MODE_MAXLOT</KEYWORD4>
				<KEYWORD4>MODE_SWAPTYPE</KEYWORD4>
				<KEYWORD4>MODE_PROFITCALCMODE</KEYWORD4>
				<KEYWORD4>MODE_MARGINCALCMODE</KEYWORD4>
				<KEYWORD4>MODE_MARGININIT</KEYWORD4>
				<KEYWORD4>MODE_MARGINMAINTENANCE</KEYWORD4>
				<KEYWORD4>MODE_MARGINHEDGED</KEYWORD4>
				<KEYWORD4>MODE_MARGINREQUIRED</KEYWORD4>
				<KEYWORD4>MODE_FREEZELEVEL</KEYWORD4>
				<!-- Indicator Lines Styles -->
				<KEYWORD4>DRAW_LINE</KEYWORD4>
				<KEYWORD4>DRAW_SECTION</KEYWORD4>
				<KEYWORD4>DRAW_HISTOGRAM</KEYWORD4>
				<KEYWORD4>DRAW_ARROW</KEYWORD4>
				<KEYWORD4>DRAW_ZIGZAG</KEYWORD4>
				<KEYWORD4>DRAW_NONE</KEYWORD4>
				<!-- Line Style -->
				<KEYWORD4>STYLE_SOLID</KEYWORD4>
				<KEYWORD4>STYLE_DASH</KEYWORD4>
				<KEYWORD4>STYLE_DOT</KEYWORD4>
				<KEYWORD4>STYLE_DASHDOT</KEYWORD4>
				<KEYWORD4>STYLE_DASHDOTDOT</KEYWORD4>
				<!-- Arrow Codes -->
				<KEYWORD4>SYMBOL_THUMBSUP</KEYWORD4>
				<KEYWORD4>SYMBOL_THUMBSDOWN</KEYWORD4>
				<KEYWORD4>SYMBOL_ARROWUP</KEYWORD4>
				<KEYWORD4>SYMBOL_ARROWDOWN</KEYWORD4>
				<KEYWORD4>SYMBOL_STOPSIGN</KEYWORD4>
				<KEYWORD4>SYMBOL_CHECKSIGN</KEYWORD4>
				<KEYWORD4>SYMBOL_LEFTPRICE</KEYWORD4>
				<KEYWORD4>SYMBOL_RIGHTPRICE</KEYWORD4>
				<!-- Indicator Lines -->
				<KEYWORD4>MODE_MAIN</KEYWORD4>
				<KEYWORD4>MODE_SIGNAL</KEYWORD4>
				<KEYWORD4>MODE_PLUSDI</KEYWORD4>
				<KEYWORD4>MODE_MINUSDI</KEYWORD4>
				<KEYWORD4>MODE_UPPER</KEYWORD4>
				<KEYWORD4>MODE_LOWER</KEYWORD4>
				<!-- Ichimoku Kinko Hyo -->
				<KEYWORD4>MODE_TENKANSEN</KEYWORD4>
				<KEYWORD4>MODE_KIJUNSEN</KEYWORD4>
				<KEYWORD4>MODE_SENKOUSPANA</KEYWORD4>
				<KEYWORD4>MODE_SENKOUSPANB</KEYWORD4>
				<KEYWORD4>MODE_CHINKOUSPAN</KEYWORD4>
				<!-- Moving Average Methods -->
				<KEYWORD4>MODE_SMA</KEYWORD4>
				<KEYWORD4>MODE_EMA</KEYWORD4>
				<KEYWORD4>MODE_SMMA</KEYWORD4>
				<KEYWORD4>MODE_LWMA</KEYWORD4>
				<!-- Object Types -->
				<KEYWORD4>OBJ_VLINE</KEYWORD4>
				<KEYWORD4>OBJ_HLINE</KEYWORD4>
				<KEYWORD4>OBJ_TREND</KEYWORD4>
				<KEYWORD4>OBJ_TRENDBYANGLE</KEYWORD4>
				<KEYWORD4>OBJ_REGRESSION</KEYWORD4>
				<KEYWORD4>OBJ_CHANNEL</KEYWORD4>
				<KEYWORD4>OBJ_STDDEVCHANNEL</KEYWORD4>
				<KEYWORD4>OBJ_GANNLINE</KEYWORD4>
				<KEYWORD4>OBJ_GANNFAN</KEYWORD4>
				<KEYWORD4>OBJ_GANNGRID</KEYWORD4>
				<KEYWORD4>OBJ_FIBO</KEYWORD4>
				<KEYWORD4>OBJ_FIBOTIMES</KEYWORD4>
				<KEYWORD4>OBJ_FIBOFAN</KEYWORD4>
				<KEYWORD4>OBJ_FIBOARC</KEYWORD4>
				<KEYWORD4>OBJ_EXPANSION</KEYWORD4>
				<KEYWORD4>OBJ_FIBOCHANNEL</KEYWORD4>
				<KEYWORD4>OBJ_RECTANGLE</KEYWORD4>
				<KEYWORD4>OBJ_TRIANGLE</KEYWORD4>
				<KEYWORD4>OBJ_ELLIPSE</KEYWORD4>
				<KEYWORD4>OBJ_PITCHFORK</KEYWORD4>
				<KEYWORD4>OBJ_CYCLES</KEYWORD4>
				<KEYWORD4>OBJ_TEXT</KEYWORD4>
				<KEYWORD4>OBJ_ARROW</KEYWORD4>
				<KEYWORD4>OBJ_LABEL</KEYWORD4>
				<!-- Object Parameters -->
				<KEYWORD4>OBJPROP_TIME1</KEYWORD4>
				<KEYWORD4>OBJPROP_PRICE1</KEYWORD4>
				<KEYWORD4>OBJPROP_TIME2</KEYWORD4>
				<KEYWORD4>OBJPROP_PRICE2</KEYWORD4>
				<KEYWORD4>OBJPROP_TIME3</KEYWORD4>
				<KEYWORD4>OBJPROP_PRICE3</KEYWORD4>
				<KEYWORD4>OBJPROP_COLOR</KEYWORD4>
				<KEYWORD4>OBJPROP_STYLE</KEYWORD4>
				<KEYWORD4>OBJPROP_WIDTH</KEYWORD4>
				<KEYWORD4>OBJPROP_BACK</KEYWORD4>
				<KEYWORD4>OBJPROP_RAY</KEYWORD4>
				<KEYWORD4>OBJPROP_ELLIPSE</KEYWORD4>
				<KEYWORD4>OBJPROP_SCALE</KEYWORD4>
				<KEYWORD4>OBJPROP_ANGLE</KEYWORD4>
				<KEYWORD4>OBJPROP_ARROWCODE</KEYWORD4>
				<KEYWORD4>OBJPROP_TIMEFRAMES</KEYWORD4>
				<KEYWORD4>OBJPROP_DEVIATION</KEYWORD4>
				<KEYWORD4>OBJPROP_FONTSIZE</KEYWORD4>
				<KEYWORD4>OBJPROP_CORNER</KEYWORD4>
				<KEYWORD4>OBJPROP_XDISTANCE</KEYWORD4>
				<KEYWORD4>OBJPROP_YDISTANCE</KEYWORD4>
				<KEYWORD4>OBJPROP_FIBOLEVELS</KEYWORD4>
				<KEYWORD4>OBJPROP_LEVELCOLOR</KEYWORD4>
				<KEYWORD4>OBJPROP_LEVELSTYLE</KEYWORD4>
				<KEYWORD4>OBJPROP_LEVELWIDTH</KEYWORD4>
				<KEYWORD4>OBJPROP_FIRSTLEVEL+n</KEYWORD4>
				<!-- Object Visibility -->
				<KEYWORD4>OBJ_PERIOD_M1</KEYWORD4>
				<KEYWORD4>OBJ_PERIOD_M5</KEYWORD4>
				<KEYWORD4>OBJ_PERIOD_M15</KEYWORD4>
				<KEYWORD4>OBJ_PERIOD_M30</KEYWORD4>
				<KEYWORD4>OBJ_PERIOD_H1</KEYWORD4>
				<KEYWORD4>OBJ_PERIOD_H4</KEYWORD4>
				<KEYWORD4>OBJ_PERIOD_D1</KEYWORD4>
				<KEYWORD4>OBJ_PERIOD_W1</KEYWORD4>
				<KEYWORD4>OBJ_PERIOD_MN1</KEYWORD4>
				<KEYWORD4>OBJ_ALL_PERIODS</KEYWORD4>
				<KEYWORD4>NULL</KEYWORD4>
				<KEYWORD4>EMPTY</KEYWORD4>
				<!-- Special Constants -->
				<KEYWORD4>NULL</KEYWORD4>
				<KEYWORD4>EMPTY</KEYWORD4>
				<KEYWORD4>EMPTY_VALUE</KEYWORD4>
				<KEYWORD4>CLR_NONE</KEYWORD4>
				<KEYWORD4>WHOLE_ARRAY</KEYWORD4>
			<!-- End Standard constants -->
        </KEYWORDS>
    </RULES>

	<!-- Begin gspe i leave this for now, i don't know exactely how to use it -->
		<!-- Different comment styles. -->
		<RULES SET="COMMENTS">
			<!-- Doxygen comment, Javadoc style -->
			<SEQ TYPE="COMMENT1">/**/</SEQ>
			<SPAN TYPE="COMMENT3" DELEGATE="doxygen::DOXYGEN">
				<BEGIN>/**&lt;</BEGIN>
				<END>*/</END>
			</SPAN>
			<SPAN TYPE="COMMENT3" DELEGATE="doxygen::DOXYGEN">
				<BEGIN>/**</BEGIN>
				<END>*/</END>
			</SPAN>
			<EOL_SPAN TYPE="COMMENT3" DELEGATE="doxygen::DOXYGEN">///&lt;</EOL_SPAN>
			<EOL_SPAN TYPE="COMMENT3" DELEGATE="doxygen::DOXYGEN">///</EOL_SPAN>
	
			<!-- Doxygen comment, Qt style -->
			<SPAN TYPE="COMMENT3" DELEGATE="doxygen::DOXYGEN">
				<BEGIN>/*!&lt;</BEGIN>
				<END>*/</END>
			</SPAN>
			<SPAN TYPE="COMMENT3" DELEGATE="doxygen::DOXYGEN">
				<BEGIN>/*!</BEGIN>
				<END>*/</END>
			</SPAN>
			<EOL_SPAN TYPE="COMMENT3" DELEGATE="doxygen::DOXYGEN">//!&lt;</EOL_SPAN>
			<EOL_SPAN TYPE="COMMENT3" DELEGATE="doxygen::DOXYGEN">//!</EOL_SPAN>
	
			<!-- C style comment -->
			<SPAN TYPE="COMMENT1">
				<BEGIN>/*</BEGIN>
				<END>*/</END>
			</SPAN>
			<EOL_SPAN TYPE="COMMENT1">//</EOL_SPAN>
		</RULES>
	<!-- End gspe -->

    <!-- Preprocessor specific rules -->
    <RULES SET="CPP"
        IGNORE_CASE="FALSE"
        HIGHLIGHT_DIGITS="TRUE" DIGIT_RE="[0-9][0-9a-zA-Z]*">

        <EOL_SPAN_REGEXP HASH_CHAR="property" TYPE="KEYWORD1" DELEGATE="PROPERTY">property\b</EOL_SPAN_REGEXP>
        <EOL_SPAN_REGEXP HASH_CHAR="include" TYPE="KEYWORD1" DELEGATE="INCLUDE">include\b</EOL_SPAN_REGEXP>
        <EOL_SPAN_REGEXP HASH_CHAR="define" TYPE="KEYWORD1" DELEGATE="DEFINE">define\b</EOL_SPAN_REGEXP>
    </RULES>

    <!-- After #property directive -->
    <RULES SET="PROPERTY"
        IGNORE_CASE="FALSE"
        HIGHLIGHT_DIGITS="TRUE" DIGIT_RE="[0-9][0-9a-zA-Z]*">
        
        <IMPORT DELEGATE="LEX"/>
    </RULES>
    
    <!-- After #include directive -->
    <!-- "\"s are not escaped. -->
    <RULES SET="INCLUDE"
        IGNORE_CASE="FALSE"
        HIGHLIGHT_DIGITS="TRUE" DIGIT_RE="[0-9][0-9a-zA-Z]*">
        
        <SPAN TYPE="LITERAL1" NO_LINE_BREAK="TRUE">
            <BEGIN>&lt;</BEGIN>
            <END>&gt;</END>
        </SPAN>
        <SPAN TYPE="LITERAL1" NO_LINE_BREAK="TRUE">
            <BEGIN>"</BEGIN>
            <END>"</END>
        </SPAN>
        <IMPORT DELEGATE="LEX"/>
    </RULES>

    <!-- After #define directive -->
    <RULES SET="DEFINE"
        IGNORE_CASE="FALSE"
        HIGHLIGHT_DIGITS="TRUE" DIGIT_RE="[0-9][0-9a-zA-Z]*">
        
        <IMPORT DELEGATE="LEX"/>
    </RULES>

</MODE>

