<?xml version="1.0"?>
<!DOCTYPE MODE SYSTEM "xmode.dtd">
<!--S7 mode V0.2 by Thorsten Willert (thorsten.willert [ at ] gmx.de)

Catalog entry:
================================================================================

<MODE NAME="S7"			FILE="S7.xml"
						FILE_NAME_GLOB="*.{S7,awl}"/>

================================================================================

-->
<MODE>
	<PROPS>
		<PROPERTY NAME="lineComment" VALUE="//" />
		<PROPERTY NAME="folding" VALUE="indent" />
		<PROPERTY NAME="wordBreakChars" VALUE=",+-=&lt;&gt;/?^&amp;*" />
		<PROPERTY NAME="noWordSep" VALUE="_" />
	</PROPS>

	<RULES IGNORE_CASE="TRUE"
	HIGHLIGHT_DIGITS="TRUE"
	DIGIT_RE="(0x\p{XDigit}+[lL]?|\d+(e\d*)?[lLdDfF]?)">

<!-- ###  Extensions  ########################################################## -->


<!-- ########################################################################### -->

		<EOL_SPAN TYPE="COMMENT1">//</EOL_SPAN>

		<!-- "Strings" -->
		<SPAN TYPE="LITERAL1" NO_LINE_BREAK="TRUE">
			<BEGIN>'</BEGIN>
			<END>'</END>
		</SPAN>
		<!-- "Symbolik" -->
		<SPAN TYPE="LITERAL2" NO_LINE_BREAK="TRUE">
			<BEGIN>"</BEGIN>
			<END>"</END>
		</SPAN>

		<MARK_PREVIOUS TYPE="LABEL" AT_WHITESPACE_END="TRUE" EXCLUDE_MATCH="TRUE">:</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>

		<!-- Data -->
		<SEQ_REGEXP TYPE="LITERAL4">2#(1|0)+</SEQ_REGEXP>
		<SEQ_REGEXP TYPE="LITERAL4">B#8#.*?\b</SEQ_REGEXP>
		<SEQ_REGEXP TYPE="LITERAL4">(B|W|DW)#16#[0-9a-fA-F]+</SEQ_REGEXP>
		<SEQ_REGEXP TYPE="LITERAL4">D#\d{4}-\d{2}-\d{2}</SEQ_REGEXP>
		<SEQ_REGEXP TYPE="LITERAL4">S5T#\w+</SEQ_REGEXP>
		<SEQ_REGEXP TYPE="LITERAL4">TOD#.*?\b</SEQ_REGEXP>
		<SEQ_REGEXP TYPE="LITERAL4">C#\d{3}</SEQ_REGEXP>
		<SEQ_REGEXP TYPE="LITERAL4">P#[a-zA-Z]+\d+\.\d+</SEQ_REGEXP>
		<SEQ_REGEXP TYPE="LITERAL4">L#\w+</SEQ_REGEXP>
		<SEQ_REGEXP TYPE="LITERAL4">\bT\s*\d+</SEQ_REGEXP>
		<SEQ_REGEXP TYPE="LITERAL4">\bC\d+</SEQ_REGEXP>

		<SEQ_REGEXP TYPE="LITERAL4">(?i)(true|false)</SEQ_REGEXP>

		<SEQ_REGEXP TYPE="INVALID">\w+#\w+</SEQ_REGEXP>

		<!-- Address -->
		<SEQ_REGEXP TYPE="LITERAL3">\b(E|A|DBX|DIX|L|M)\d+\.\d+</SEQ_REGEXP>
		<SEQ_REGEXP TYPE="LITERAL3">\b(EB|EW|ED|AB|AW|AD|DB|DBB|DBW|DBD|DI|DIB|DIW|DID|LB|LW|LD|MB|MW|MD|PAB|PAW|PAD|PEB|PEW|PED)\d+</SEQ_REGEXP>

		<!-- -->
		<SEQ_REGEXP TYPE="LITERAL3">\b(FB|FC|OB|SFC|SFB)\s*\d+</SEQ_REGEXP>

		<!-- declaration -->
		<SEQ_REGEXP TYPE="LITERAL3">\w+\s:=</SEQ_REGEXP>

		<KEYWORDS>
			<!-- Binaer -->
			<KEYWORD1>U</KEYWORD1>
			<KEYWORD1>UN</KEYWORD1>
			<KEYWORD1>O</KEYWORD1>
			<KEYWORD1>ON</KEYWORD1>
			<KEYWORD1>X</KEYWORD1>
			<KEYWORD1>XN</KEYWORD1>

			<KEYWORD1>UW</KEYWORD1>
			<KEYWORD1>OW</KEYWORD1>
			<KEYWORD1>XOW</KEYWORD1>

			<KEYWORD1>UD</KEYWORD1>
			<KEYWORD1>OD</KEYWORD1>
			<KEYWORD1>XOD</KEYWORD1>

			<KEYWORD1>EP</KEYWORD1>
			<KEYWORD1>FP</KEYWORD1>
			<KEYWORD1>S</KEYWORD1>
			<KEYWORD1>R</KEYWORD1>

			<!-- Umwandler -->
			<KEYWORD1>BTI</KEYWORD1>
			<KEYWORD1>BTD</KEYWORD1>
			<KEYWORD1>DTR</KEYWORD1>
			<KEYWORD1>ITD</KEYWORD1>
			<KEYWORD1>ITB</KEYWORD1>
			<KEYWORD1>DTB</KEYWORD1>
			<KEYWORD1>RND</KEYWORD1>
			<KEYWORD1>RND-</KEYWORD1>
			<KEYWORD1>RND+</KEYWORD1>
			<KEYWORD1>TRUNC</KEYWORD1>

			<KEYWORD1>ZV</KEYWORD1>
			<KEYWORD1>ZR</KEYWORD1>
			<KEYWORD1>FR</KEYWORD1>

			<KEYWORD1>AUF</KEYWORD1>
			<KEYWORD1>DBLG</KEYWORD1>
			<KEYWORD1>DBNO</KEYWORD1>
			<KEYWORD1>DILG</KEYWORD1>
			<KEYWORD1>DINO</KEYWORD1>
			<KEYWORD1>TDB</KEYWORD1>

			<KEYWORD1>LOOP</KEYWORD1>
			<KEYWORD1>SPA</KEYWORD1>
			<KEYWORD1>SPB</KEYWORD1>
			<KEYWORD1>SPBB</KEYWORD1>
			<KEYWORD1>SPBB</KEYWORD1>
			<KEYWORD1>SPBI</KEYWORD1>
			<KEYWORD1>SPBIN</KEYWORD1>
			<KEYWORD1>SPBN</KEYWORD1>
			<KEYWORD1>SPBNP</KEYWORD1>
			<KEYWORD1>SPL</KEYWORD1>
			<KEYWORD1>SPM</KEYWORD1>
			<KEYWORD1>SPMZ</KEYWORD1>
			<KEYWORD1>SPN</KEYWORD1>
			<KEYWORD1>SPO</KEYWORD1>
			<KEYWORD1>SPP</KEYWORD1>
			<KEYWORD1>SPPZ</KEYWORD1>
			<KEYWORD1>SPS</KEYWORD1>
			<KEYWORD1>SPU</KEYWORD1>
			<KEYWORD1>SPZ</KEYWORD1>

			<KEYWORD1>==I</KEYWORD1>
			<KEYWORD1>&lt;&gt;I</KEYWORD1>
			<KEYWORD1>&lt;I</KEYWORD1>
			<KEYWORD1>&lt;=I</KEYWORD1>
			<KEYWORD1>&gt;I</KEYWORD1>
			<KEYWORD1>&gt;=I</KEYWORD1>

			<KEYWORD1>==D</KEYWORD1>
			<KEYWORD1>&lt;&gt;D</KEYWORD1>
			<KEYWORD1>&lt;D</KEYWORD1>
			<KEYWORD1>&lt;=D</KEYWORD1>
			<KEYWORD1>&gt;D</KEYWORD1>
			<KEYWORD1>&gt;=D</KEYWORD1>

			<KEYWORD1>==R</KEYWORD1>
			<KEYWORD1>&lt;&gt;R</KEYWORD1>
			<KEYWORD1>&lt;R</KEYWORD1>
			<KEYWORD1>&lt;=R</KEYWORD1>
			<KEYWORD1>&gt;R</KEYWORD1>
			<KEYWORD1>&gt;=R</KEYWORD1>

			<KEYWORD1>+I</KEYWORD1>
			<KEYWORD1>-I</KEYWORD1>
			<KEYWORD1>*I</KEYWORD1>
			<KEYWORD1>/I</KEYWORD1>
			<KEYWORD1>+D</KEYWORD1>
			<KEYWORD1>-D</KEYWORD1>
			<KEYWORD1>*D</KEYWORD1>
			<KEYWORD1>/D</KEYWORD1>
			<KEYWORD1>+R</KEYWORD1>
			<KEYWORD1>-R</KEYWORD1>
			<KEYWORD1>*R</KEYWORD1>
			<KEYWORD1>/R</KEYWORD1>

			<KEYWORD1>ABS</KEYWORD1>
			<KEYWORD1>ACOS</KEYWORD1>
			<KEYWORD1>ASIN</KEYWORD1>
			<KEYWORD1>ATAN</KEYWORD1>
			<KEYWORD1>COS</KEYWORD1>
			<KEYWORD1>EXP</KEYWORD1>
			<KEYWORD1>LN</KEYWORD1>
			<KEYWORD1>NEGR</KEYWORD1>
			<KEYWORD1>SIN</KEYWORD1>
			<KEYWORD1>SQR</KEYWORD1>
			<KEYWORD1>SQRT</KEYWORD1>
			<KEYWORD1>TAN</KEYWORD1>

			<KEYWORD1>+AR1</KEYWORD1>
			<KEYWORD1>+AR2</KEYWORD1>

			<KEYWORD1>INVI</KEYWORD1>
			<KEYWORD1>INVD</KEYWORD1>
			<KEYWORD1>NEGI</KEYWORD1>
			<KEYWORD1>NEGD</KEYWORD1>

			<KEYWORD1>L</KEYWORD1>
			<KEYWORD1>LC</KEYWORD1>
			<KEYWORD1>T</KEYWORD1>

			<KEYWORD1>LAR1</KEYWORD1>
			<KEYWORD1>LAR2</KEYWORD1>
			<KEYWORD1>TAR</KEYWORD1>
			<KEYWORD1>TAR1</KEYWORD1>
			<KEYWORD1>TAR2</KEYWORD1>

			<KEYWORD1>STW</KEYWORD1>

			<KEYWORD1>BE</KEYWORD1>
			<KEYWORD1>BEA</KEYWORD1>
			<KEYWORD1>BEB</KEYWORD1>
			<KEYWORD1>BED</KEYWORD1>
			<KEYWORD1>CALL</KEYWORD1>
			<KEYWORD1>CC</KEYWORD1>
			<KEYWORD1>UC</KEYWORD1>

			<KEYWORD1>SLD</KEYWORD1>
			<KEYWORD1>SLW</KEYWORD1>
			<KEYWORD1>SRD</KEYWORD1>
			<KEYWORD1>SRW</KEYWORD1>
			<KEYWORD1>SSD</KEYWORD1>
			<KEYWORD1>SSI</KEYWORD1>

			<KEYWORD1>RLD</KEYWORD1>
			<KEYWORD1>RLDA</KEYWORD1>
			<KEYWORD1>RRD</KEYWORD1>
			<KEYWORD1>RRDA</KEYWORD1>

			<KEYWORD1>SA</KEYWORD1>
			<KEYWORD1>SE</KEYWORD1>
			<KEYWORD1>SI</KEYWORD1>
			<KEYWORD1>SS</KEYWORD1>
			<KEYWORD1>SV</KEYWORD1>

			<KEYWORD1>DEC</KEYWORD1>
			<KEYWORD1>INC</KEYWORD1>
			<KEYWORD1>POP</KEYWORD1>
			<KEYWORD1>PUSH</KEYWORD1>
			<KEYWORD1>TAD</KEYWORD1>
			<KEYWORD1>TAK</KEYWORD1>
			<KEYWORD1>TAW</KEYWORD1>

			<!-- Vorgaenger Datenbereich -->
			<KEYWORD4>VL</KEYWORD4>

			<KEYWORD4>AR1</KEYWORD4>
			<KEYWORD4>AR2</KEYWORD4>

			<KEYWORD4>T</KEYWORD4>
			<KEYWORD4>Z</KEYWORD4>

			<KEYWORD4>UO</KEYWORD4>
			<KEYWORD4>OS</KEYWORD4>
			<KEYWORD4>BIE</KEYWORD4>
			<KEYWORD4>OV</KEYWORD4>

			<!-- Datentypen -->
			<KEYWORD3>ARRAY</KEYWORD3>
			<KEYWORD3>BOOL</KEYWORD3>
			<KEYWORD3>BYTE</KEYWORD3>
			<KEYWORD3>CHAR</KEYWORD3>
			<KEYWORD3>DATE</KEYWORD3>
			<KEYWORD3>DATE_AND_TIME</KEYWORD3>
			<KEYWORD3>DINT</KEYWORD3>
			<KEYWORD3>DWORD</KEYWORD3>
			<KEYWORD3>INT</KEYWORD3>
			<KEYWORD3>REAL</KEYWORD3>
			<KEYWORD3>S5TIME</KEYWORD3>
			<KEYWORD3>STRING</KEYWORD3>
			<KEYWORD3>TIME</KEYWORD3>
			<KEYWORD3>TIME_OF_DAY</KEYWORD3>
			<KEYWORD3>UDT</KEYWORD3>
			<KEYWORD3>VOID</KEYWORD3>
			<KEYWORD3>WORD</KEYWORD3>

			<!-- Parametertypen -->
			<KEYWORD3>ANY</KEYWORD3>
			<KEYWORD3>BLCOK_FC</KEYWORD3>
			<KEYWORD3>BLOCK_DB</KEYWORD3>
			<KEYWORD3>BLOCK_FB</KEYWORD3>
			<KEYWORD3>BLOCK_SDB</KEYWORD3>
			<KEYWORD3>COUNTER</KEYWORD3>
			<KEYWORD3>POINTER</KEYWORD3>
			<KEYWORD3>TIMER</KEYWORD3>

			<!-- AWL-Quelle -->
				<MARKUP>ORGANIZATION_BLOCK</MARKUP>
				<MARKUP>END_ORGANIZATION_BLOCK</MARKUP>

				<MARKUP>FUNCTION_BLOCK</MARKUP>
				<MARKUP>END_FUNCTION_BLOCK</MARKUP>

				<MARKUP>FUNCTION</MARKUP>
				<MARKUP>END_FUNCTION</MARKUP>

				<MARKUP>DATA_BLOCK</MARKUP>
				<MARKUP>END_DATA_BLOCK</MARKUP>

				<!-- Deklaration -->
				<MARKUP>VAR_INPUT</MARKUP>
				<MARKUP>VAR_OUTPUT</MARKUP>
				<MARKUP>VAR_IN_OUT</MARKUP>
				<MARKUP>VAR</MARKUP>
				<MARKUP>VAR_TEMP</MARKUP>
				<MARKUP>END_VAR</MARKUP>

				<MARKUP>RET_VAL</MARKUP>

				<!-- Code -->
				<MARKUP>BEGIN</MARKUP>
				<MARKUP>NETWORK</MARKUP>

				<!-- Beschreibung -->
				<MARKUP>TITLE</MARKUP>
				<MARKUP>KNOW_HOW_PROTECTED</MARKUP>
				<MARKUP>AUTHOR</MARKUP>
				<MARKUP>FAMILY</MARKUP>
				<MARKUP>NAME</MARKUP>
				<MARKUP>VERSION</MARKUP>

				<!-- FB -->
				<MARKUP>CODE_VERSION1</MARKUP>

				<!-- DB -->
				<MARKUP>UNLINKED</MARKUP>
				<MARKUP>READ_ONLY</MARKUP>

				<!-- Struct -->
				<MARKUP>TYPE</MARKUP>
				<MARKUP>STRUCT</MARKUP>
				<MARKUP>END_STRUCT</MARKUP>
				<MARKUP>END_TYPE</MARKUP>
		</KEYWORDS>
	</RULES>

</MODE>

