<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE language>
<!-- Michael Bueker's XML-file for Python syntax highlighting was used as a starting point for this file -->
<language name="zimpl" version="0.9" kateversion="2.4" section="Sources" extensions="*.zpl;" mimetype="" casesensitive="1" author="Thomas Sejr Jensen" license="">
	<highlighting>
		<list name="defs">
			<item> set </item>
			<item> param </item>
			<item> var </item>
			<item> integer </item>
			<item> real </item>
			<item> binary </item>
			<item> implicit </item>
			<item> default </item>
			<item> priority </item>
			<item> sos </item>
		</list>
		<list name="commands">
			<item> do </item>
			<item> print </item>
			<item> check </item>
			<item> read </item>
			<item> forall </item>
			<item> minimize </item>
			<item> maximize </item>
			<item> subto </item>
			<item> defnumb </item>
			<item> defstrg </item>
			<item> defbool </item>
			<item> defset </item>
		</list>
		<list name="flow">
			<item> if </item>
			<item> vif </item>
			<item> then </item>
			<item> else </item>
			<item> end </item>
		</list>
		<list name="builtinfuncs">
			<item> mod </item>
			<item> abs </item>
			<item> sgn </item>
			<item> floor </item>
			<item> ceil </item>
			<item> min </item>
			<item> with </item>
			<item> max </item>
			<item> sum </item>
			<item> prod </item>
			<item> card </item>
			<item> mod </item>
			<item> random </item>
			<item> ord </item>
			<item> length </item>
			<item> argmin </item>
			<item> argmax </item>
			<item> powerset </item>
			<item> subsets </item>
			<item> indexset </item>
			<item> cross </item>
			<item> union </item>
			<item> inter </item>
			<item> in </item>
			<item> cross </item>
			<item> without </item>
			<item> cross </item>
			<item> symdiff </item>
			<item> as </item>
			<item> by </item>
			<item> to </item>
			<item> cross </item>
			<item> and </item>
			<item> or </item>
			<item> sqrt </item>
			<item> log </item>
			<item> in </item>
			<item> exp </item>
			<item> substr </item>
			<item> ord </item>
			<item> proj </item>
			<item> infinity </item>
			<item> startval </item>
			<item> type1 </item>
			<item> type2 </item>
			<item> skip </item>
			<item> use </item>
			<item> fs </item>
			<item> match </item>
			<item> comment </item>
			<item> vabs </item>
			<item> match </item>
		</list>
		<contexts>
			<context name="Normal" attribute="Normal Text" lineEndContext="#stay">
				<keyword attribute="Definition Keyword" String="defs" context="#stay"/>
				<keyword attribute="Command Keyword" String="commands" context="#stay"/>
				<keyword attribute="Flow Control Keyword" String="flow" context="#stay"/>
				<keyword attribute="Builtin Function" String="builtinfuncs" context="#stay"/>
				<RegExpr attribute="Normal" String="[a-zA-Z_][a-zA-Z_0-9]+" context="#stay"/>
				<RegExpr attribute="Float" String="([0-9]+\.[0-9]*|\.[0-9]+)([eE][0-9]+)?" context="#stay"/>
				<RegExpr attribute="Int" String="([1-9][0-9]*([eE][0-9]+)?|0)" context="#stay"/>
  
				<RegExpr attribute="Raw String" String="[rR]'''" context="Raw Tripple A-string"/>
				<RegExpr attribute="Raw String" String="[rR]&quot;&quot;&quot;" context="Raw Tripple Q-string"/>

				<RegExpr attribute="Raw String" String="[rR]'" context="Raw A-string"/>
				<RegExpr attribute="Raw String" String="[rR]&quot;" context="Raw Q-string"/>

				<RegExpr attribute="Comment" String="#.*$" context="#stay"/>
				<RegExpr attribute="Comment" String="^\s*'''" context="Tripple A-comment" beginRegion="Tripple A-region"/>
				<RegExpr attribute="Comment" String="^\s*&quot;&quot;&quot;" context="Tripple Q-comment" beginRegion="Tripple Q-region"/>

				<StringDetect attribute="String" String="'''" context="Tripple A-string" beginRegion="Tripple A-region"/>
				<StringDetect attribute="String" String="&quot;&quot;&quot;" context="Tripple Q-string" beginRegion="Tripple Q-region"/>
				<DetectChar attribute="String" char="'" context="Single A-string"/>
				<DetectChar attribute="String" char="&quot;" context="Single Q-string"/>
				
				<RegExpr attribute="String Substitution" String="%[a-zA-Z]" context="#stay"/>
			</context>
			
			<context name="parenthesised" attribute="Normal Text" lineEndContext="#stay" noIndentationBasedFolding="true">
				<IncludeRules context="Normal" />
			</context>
			
			<context name="Tripple A-comment" attribute="Comment" lineEndContext="#stay" noIndentationBasedFolding="true">
				<StringDetect attribute="Comment" String="'''" context="#pop" endRegion="Tripple A-region"/>
			</context>

			<context name="Tripple Q-comment" attribute="Comment" lineEndContext="#stay" noIndentationBasedFolding="true">
				<HlCChar attribute="Comment" context="#stay"/>
				<RegExpr attribute="Comment" String="&quot;&quot;&quot;" context="#pop" endRegion="Tripple Q-region"/>
			</context>

			<context name="Tripple A-string" attribute="String" lineEndContext="#stay" noIndentationBasedFolding="true">
				<HlCStringChar attribute="String Char" context="#stay"/>
				<RegExpr attribute="String Substitution" String="%\([a-zA-Z0-9_]+\)[a-zA-Z]" context="#stay"/> 
				<RegExpr attribute="String Substitution" String="%[a-zA-Z]" context="#stay"/>
				<RegExpr attribute="String" String="'''" context="#pop" endRegion="Tripple A-region"/>
			</context>

			<context name="Raw Tripple A-string" attribute="Raw String" lineEndContext="#stay" noIndentationBasedFolding="true">
				<HlCStringChar attribute="Raw String" context="#stay"/>
				<RegExpr attribute="String Substitution" String="%\([a-zA-Z0-9_]+\)[a-zA-Z]" context="#stay"/> 
				<RegExpr attribute="String Substitution" String="%[a-zA-Z]" context="#stay"/>
				<RegExpr attribute="String" String="'''" context="#pop" endRegion="Tripple A-region"/>
			</context>

			<context name="Tripple Q-string" attribute="String" lineEndContext="#stay" noIndentationBasedFolding="true">
				<HlCStringChar attribute="String Char" context="#stay"/>
				<RegExpr attribute="String Substitution" String="%\([a-zA-Z0-9_]+\)[a-zA-Z]" context="#stay"/>
				<RegExpr attribute="String Substitution" String="%[a-zA-Z]" context="#stay"/>
				<RegExpr attribute="String" String="&quot;&quot;&quot;" context="#pop" endRegion="Tripple Q-region"/>
			</context>

			<context name="Raw Tripple Q-string" attribute="Raw String" lineEndContext="#stay" noIndentationBasedFolding="true">
				<HlCStringChar attribute="Raw String" context="#stay"/>
				<RegExpr attribute="String Substitution" String="%\([a-zA-Z0-9_]+\)[a-zA-Z]" context="#stay"/>
				<RegExpr attribute="String Substitution" String="%[a-zA-Z]" context="#stay"/>
				<RegExpr attribute="String" String="&quot;&quot;&quot;" context="#pop" endRegion="Tripple Q-region"/>
			</context>

			<context name="Single A-comment" attribute="Comment" lineEndContext="#stay">
				<HlCStringChar attribute="Comment" context="#stay"/>
				<DetectChar attribute="Comment" char="'" context="#pop"/>
			</context>

			<context name="Single Q-comment" attribute="Comment" lineEndContext="#stay">
				<HlCStringChar attribute="Comment" context="#stay"/>
				<DetectChar attribute="Comment" char="&quot;" context="#pop"/>
			</context>

			<context name="Single A-string" attribute="String" lineEndContext="#stay">
				<HlCStringChar attribute="String Char" context="#stay"/>
				<RegExpr attribute="String Substitution" String="%\([a-zA-Z0-9_]+\)[a-zA-Z]" context="#stay"/>
				<RegExpr attribute="String Substitution" String="%[a-zA-Z]" context="#stay"/>
				<DetectChar attribute="String" char="'" context="#pop"/>
			</context>

			<context name="Single Q-string" attribute="String" lineEndContext="#stay">
				<HlCStringChar attribute="String Char" context="#stay"/>
				<RegExpr attribute="String Substitution" String="%\([a-zA-Z0-9_]+\)[a-zA-Z]" context="#stay"/>
				<RegExpr attribute="String Substitution" String="%[a-zA-Z]" context="#stay"/>
				<DetectChar attribute="String" char="&quot;" context="#pop"/>
			</context>

			<context name="Raw A-string" attribute="Raw String" lineEndContext="#stay">
				<HlCStringChar attribute="Raw String" context="#stay"/>
				<RegExpr attribute="String Substitution" String="%\([a-zA-Z0-9_]+\)[a-zA-Z]" context="#stay"/>
				<RegExpr attribute="String Substitution" String="%[a-zA-Z]" context="#stay"/>
				<DetectChar attribute="Raw String" char="'" context="#pop"/>
			</context>

			<context name="Raw Q-string" attribute="Raw String" lineEndContext="#stay">
				<HlCStringChar attribute="Raw String" context="#stay"/>
				<RegExpr attribute="String Substitution" String="%\([a-zA-Z0-9_]+\)[a-zA-Z]" context="#stay"/>
				<RegExpr attribute="String Substitution" String="%[a-zA-Z]" context="#stay"/>
				<DetectChar attribute="Raw String" char="&quot;" context="#pop"/>
			</context>

		</contexts>
		<itemDatas>
			<itemData name="Normal Text" defStyleNum="dsNormal"/>
			<itemData name="Definition Keyword" defStyleNum="dsKeyword"/>
			<itemData name="String Substitution" defStyleNum="dsNormal"/>
			<itemData name="Command Keyword" defStyleNum="dsKeyword"/>
			<itemData name="Flow Control Keyword" defStyleNum="dsKeyword"/>
			<itemData name="Builtin Function" defStyleNum="dsDataType"/>
			<itemData name="String Char" defStyleNum="dsChar"/>
			<itemData name="Float" defStyleNum="dsFloat"/>
			<itemData name="Int" defStyleNum="dsDecVal"/>
			<itemData name="Comment" defStyleNum="dsComment"/>
			<itemData name="String" defStyleNum="dsString"/>
			<itemData name="Raw String" defStyleNum="dsString"/>
		</itemDatas>
	</highlighting>
   <general>
     <folding indentationsensitive="1" />
     <emptyLines>
       <emptyLine regexpr="\s+" casesensitive="false"/>
       <emptyLine regexpr="\s*#.*$" casesensitive="false"/>
     </emptyLines>
     <comments>
        <comment name="singleLine" start="#" position="afterwhitespace"/>
     </comments>
     <keywords casesensitive="1" />
   </general>
</language>
