<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE language>
<!-- 
     Copyright (C) 2007-2008 
     Jan de Muijnck-Hughes <jfdm@st-andrews.ac.uk>
	     
	     This program is free software: you can redistribute it and/or modify
	     it under the terms of the GNU General Public License as published by
	     the Free Software Foundation, either version 3 of the License, or
	     (at your option) any later version.
	     
	     This program is distributed in the hope that it will be useful,
	     but WITHOUT ANY WARRANTY; without even the implied warranty of
	     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
	     GNU General Public License for more details.
	     
	     You should have received a copy of the GNU General Public License
	     along with this program.  If not, see <http://www.gnu.org/licenses/>.
-->
<language name="Minion" version="0.1" kateversion="2.5.9" section="Other" extensions="*.minion;*.min;*.m"  mimetype="text/minion" casesensitive="1" author="Jan 
de Muijnck-Hughes" license="GPL3">
	<!-- Specifiy items from source file that need to be highlighted-->
	<highlighting>
		<list name="structure">
			<item>MINION</item> 
			<item>VARIABLES</item>
			<item>CONSTRAINTS</item>
			<item>TUPLELIST</item>
			<item>SEARCH</item>			
			<item>EOF </item>
		</list>
		<list name="types">
			<item> BOOL </item>
			<item> BOUND </item>
			<item> DISCRETE </item>
			<item> SPARSEBOUND </item>
			<item> ALIAS </item>
		</list>
		<list name="keywords">
			<item> ALL </item>
			<item> NONE </item>
		</list>
		<list name="commands">
			<item> PRINT </item>
			<item> VARORDER </item>
			<item> VALORDER </item>
			<item> MAXIMISING </item>
			<item> MINIMISING </item>
			<item> MAX </item>
			<item> MIN </item>
		</list>
		<list name="constraints">
			<item> alldiff </item>
			<item> difference </item>
			<item> diseq </item>
			<item> div </item>
			<item> element </item>
			<item> element_one </item>
			<item> eq </item>
			<item> gacalldiff </item>
			<item> gcc </item>
			<item> hamming </item>
			<item> ineq </item>
			<item> lexleq </item>
			<item> lexless </item>
			<item> litsumgeq </item>
			<item> max </item>
			<item> min </item>
			<item> minuseq </item>
			<item> modulo </item>
			<item> occurrence </item>
			<item> occurrenceleq </item>
			<item> occurrencegeq </item>
			<item> pow </item>
			<item> product </item>
			<item>reify</item>
			<item> reifyimply </item>
			<item> sumgeq </item>
			<item> sumleq </item>
			<item> table </item>
			<item> watchelement </item>
			<item> watchelement_one </item>
			<item> watchsumgeq </item>
			<item> watchsumleq </item>
			<item> watchvecexists_and </item>
			<item> watchvecexists_less </item>
			<item> watchvecneq </item>
			<item> weightedsumgeq </item>
			<item> weightedsumleq </item>
		</list>
		<!-- Specifiy language in terms of contexts-->
		<contexts>			
			<context name="Top_Level" attribute="Normal Text" lineEndContext="#stay">
				<DetectSpaces />				
				<IncludeRules context="Strings" />
				<IncludeRules context="File Markers Char" />
				<DetectChar   context="Commentary"   char="#" />
				<keyword      context="#stay"        attribute="Constraints"	String="constraints" />
				<keyword      context="#stay"        attribute="File Markers"   String="structure" />
				<keyword      context="#stay"        attribute="Data Types"    	String="types" />
				<keyword      context="#stay"        attribute="KeyWords"    	String="keywords" />
				<keyword      context="#stay"        attribute="Commands"    	String="commands" />
				<RegExpr      context="#stay"        attribute="Number"         String="(\d+(\.\d+)?|\.\d+)([eE][+-]?\d+)?[ij]?" />
				<RegExpr      context="#stay"        attribute="Variable"       String="[a-zA-Z]\w*" />
			</context>
			<context name="Commentary" attribute="Commentary" lineEndContext="#pop"></context>	
			<context name="Strings"    attribute="Strings" lineEndContext="#stay">
				<RegExpr context="#stay" attribute="String" String="'([^'\\]|''|\\'|\\[^'])*'(?=[^']|$)" />
				<RegExpr context="#stay" attribute="Incomplete String" String="'([^']|''|\\')*" />
			</context>  			
			<context name="File Markers Char" attribute="Operator" lineEndContext="#stay">
				<StringDetect context="#stay" attribute="File Markers" String="**"/>
			</context>
		</contexts>
		<!-- Apply Style information-->
		<itemDatas>
			<itemData name="Normal Text" defStyleNum="dsNormal"/>
			<itemData name="Commentary"  defStyleNum="dsComment" color="#009900" italic="1" />
			<itemData name="File Markers" defStyleNum="dsDataType" color="#000000" italic="1" bold="1"/>
			<itemData name="Constraints" defStyleNum="dsFunction" bold="1"/>
			<itemData name="Data Types" defStyleNum="dsDataType"/>
			<itemData name="KeyWords" defStyleNum="dsKeyword"/>
			<itemData name="Commands" defStyleNum="dsKeyword" bold="1"/>
		</itemDatas>
	</highlighting>
	<!-- Specifiy Code Folding Information and comment information -->
   <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>

