<?xml version="1.0"?>

<!DOCTYPE MODE SYSTEM "xmode.dtd">

<!--
<MODE NAME="mako"		FILE="mako.xml"
				FILE_NAME_GLOB="*.mako" />
-->

<MODE>
	<PROPS>
		<PROPERTY NAME="lineComment" VALUE="##" />
	</PROPS>
	<RULES>
		<!-- line continuation -->
		<SEQ TYPE="OPERATOR" AT_LINE_END="TRUE">\</SEQ>
		<!-- line comment -->
		<EOL_SPAN TYPE="COMMENT2">##</EOL_SPAN>
		<!-- <%doc>...</%doc> -->
		<SPAN TYPE="COMMENT3">
			<BEGIN>&lt;%doc&gt;</BEGIN>
			<END>&lt;/%doc&gt;</END>
		</SPAN>
		<!-- control structures -->
		<EOL_SPAN_REGEXP TYPE="KEYWORD1" DELEGATE="MAKO" HASH_CHAR="%" EXCLUDE_MATCH="FALSE">%\s*(for|if|else|elif|try|except|end|finally|while)</EOL_SPAN_REGEXP>
		<!-- expression substitution -->
		<SPAN TYPE="KEYWORD2" NO_LINE_BREAK="TRUE" DELEGATE="EXPRESSION">
			<BEGIN>${</BEGIN>
			<END>}</END>
		</SPAN>
		<!-- %def,call,text -->
		<SPAN_REGEXP HASH_CHAR="&lt;" TYPE="LITERAL4" DELEGATE="TAG">
			<BEGIN>&lt;%(def|call|text)</BEGIN>
			<END>&gt;</END>
		</SPAN_REGEXP>
		<SEQ_REGEXP HASH_CHAR="&lt;" TYPE="LITERAL4">&lt;/%(def|call|text)&gt;</SEQ_REGEXP>
		<!-- tags -->
		<SPAN_REGEXP HASH_CHAR="&lt;" TYPE="LITERAL4" DELEGATE="TAG">
			<BEGIN>&lt;%(include|page|namespace|inherit)</BEGIN>
			<END>&gt;</END>
		</SPAN_REGEXP>
		<!-- python module-level block - no access to context vars -->
		<SPAN TYPE="LITERAL4" DELEGATE="python::MAIN">
			<BEGIN>&lt;%!</BEGIN>
			<END>%&gt;</END>
		</SPAN>
		<!-- python block -->
		<SPAN TYPE="LITERAL4" DELEGATE="MAKO">
			<BEGIN>&lt;%</BEGIN>
			<END>%&gt;</END>
		</SPAN>
		<!-- keywords only for complete-word -->
		<KEYWORDS>
			<NULL>for</NULL>
			<NULL>if</NULL>
			<NULL>else</NULL>
			<NULL>elif</NULL>
			<NULL>try</NULL>
			<NULL>except</NULL>
			<NULL>end</NULL>
			<NULL>finally</NULL>
			<NULL>while</NULL>
			<NULL>endfor</NULL>
			<NULL>endif</NULL>
			<NULL>endwhile</NULL>

			<NULL>def</NULL>
			<NULL>namespace</NULL>
		</KEYWORDS>
	</RULES>

	<RULES IGNORE_CASE="FALSE" SET="MAKO">
		<IMPORT DELEGATE="python::MAIN"/>
		<KEYWORDS>
			<!-- available vars -->
			<KEYWORD4>UNDEFINED</KEYWORD4>
			<KEYWORD4>caller</KEYWORD4>
			<KEYWORD4>capture</KEYWORD4>
			<KEYWORD4>context</KEYWORD4>
			<KEYWORD4>local</KEYWORD4>
			<KEYWORD4>next</KEYWORD4>
			<KEYWORD4>pageargs</KEYWORD4>
			<KEYWORD4>parent</KEYWORD4>
			<KEYWORD4>self</KEYWORD4>
		</KEYWORDS>
	</RULES>

	<!-- expression substituation -->
	<RULES IGNORE_CASE="FALSE" SET="EXPRESSION" DEFAULT="KEYWORD2">
		<!-- filter operator -->
		<SEQ TYPE="OPERATOR">|</SEQ>
		<KEYWORDS>
			<!-- available vars -->
			<KEYWORD4>UNDEFINED</KEYWORD4>
			<KEYWORD4>caller</KEYWORD4>
			<KEYWORD4>capture</KEYWORD4>
			<KEYWORD4>context</KEYWORD4>
			<KEYWORD4>local</KEYWORD4>
			<KEYWORD4>next</KEYWORD4>
			<KEYWORD4>pageargs</KEYWORD4>
			<KEYWORD4>parent</KEYWORD4>
			<KEYWORD4>self</KEYWORD4>
			<!-- filters -->
			<LITERAL2>u</LITERAL2>
			<LITERAL2>h</LITERAL2>
			<LITERAL2>x</LITERAL2>
			<LITERAL2>trim</LITERAL2>
			<LITERAL2>entity</LITERAL2>
		</KEYWORDS>
	</RULES>

	<!-- mako tag: def, inherit, etc... -->
	<RULES IGNORE_CASE="FALSE" SET="TAG" DEFAULT="LITERAL4">
		<!-- strings -->
		<SPAN TYPE="LITERAL1">
			<BEGIN>&quot;</BEGIN>
			<END>&quot;</END>
		</SPAN>
		<SPAN TYPE="LITERAL1">
			<BEGIN>&apos;</BEGIN>
			<END>&apos;</END>
		</SPAN>
		<SEQ TYPE="OPERATOR">=</SEQ>
	</RULES>
</MODE>
