<?xml version = '1.0' encoding = 'UTF-8'?>
<!DOCTYPE language SYSTEM "language.dtd">
<language extensions="*.ts" mimetype="" section="Configuration" author="Thomas Hempel (thomas@work.de)" version="1.0" name="TypoScript" license="LGPL" >
	<highlighting>
		<list name="keywords">
			<item>typeNum</item>
			<item>admPanel</item>
			<item>index_enable</item>
			<item>index_externals</item>
			<item>doctype</item>
			<item>xhtml_cleaning</item>
			<item>inlineStyle2TempFile</item>
			<item>spamProtectEmailAddresses</item>
			<item>spamProtectEmailAddresses_atSubst</item>
			<item>simulateStaticDocuments</item>
			<item>simulateStaticDocuments_noTypeIfNoTitle</item>
			<item>table</item>
			<item>select</item>
			<item>pidInList</item>
			<item>uidInList</item>
			<item>userFunc</item>
			<item>value</item>
			<item>template</item>
			<item>file</item>
			<item>workOnSubpart</item>
			<item>marks</item>
			<item>subparts</item>
			<item>headerData</item>
		</list>
		<list name="TLO">
			<item>PAGE</item>
			<item>CONFIG</item>
			<item>CONSTANTS</item>
			<item>FE_DATA</item>
			<item>FE_TABLE</item>
			<item>FRAMESET</item>
			<item>FRAME</item>
			<item>META</item>
			
			<!-- content types -->
			<item>COA</item>
			<item>COA_INT</item>
			<item>COBJ_ARRAY</item>
			<item>CARRAY</item>
			<item>CONTENT</item>
			
			<!-- content objects -->
			<item>TEXT</item>
			<item>HTML</item>
			<item>FILE</item>
			<item>IMAGE</item>
			<item>IMG_RESOURCE</item>
			<item>CLEARGIF</item>
			<item>RECORDS</item>
			<item>CTABLE</item>
			<item>OTABLE</item>
			<item>COLUMNS</item>
			<item>HRULER</item>
			<item>IMGTEXT</item>
			<item>CASE</item>
			<item>LOAD_REGISTER</item>
			<item>RESTORE_REGISTER</item>
			<item>FORM</item>
			<item>SEARCHRESULT</item>
			<item>USER</item>
			<item>USER_INT</item>
			<item>PHP_SCRIPT</item>
			<item>PHP_SCRIPT_INT</item>
			<item>PHP_SCRIPT_EXT</item>
			<item>TEMPLATE</item>
			<item>MULTIMEDIA</item>
			<item>EDITPANEL</item>
			<item>GIFBUILDER</item>
				
			<!-- menus -->
			<item>HMENU</item>
			<item>GMENU</item>
			<item>GMENU_LAYERS</item>
			<item>GMENU_FOLDOUT</item>
			<item>TMENU</item>
			<item>TMENU_LAYERS</item>
			<item>IMGMENU</item>
			<item>JSMENU</item>
			
			<!-- default options -->
			<item>_LOCAL_LANG</item>
			<item>_CSS_DEFAULT_STYLE</item>
			<item>_DEFAULT_PI_VARS</item>
		</list>
		<list name="objects">
			<!-- general -->
			<item>lib</item>
			<item>config</item>
			<item>plugin</item>
			
			<!-- content -->
			<item>styles</item>
			<item>content</item>
			<item>get</item>
			<item>getLeft</item>
			<item>getRight</item>
			<item>getBorder</item>
			
			<!-- menus -->
			<item>NO</item>
			<item>RO</item>
			<item>ACT</item>
			<item>NOSUB</item>
		</list>
		<list name="stdwrap">
			<item>stdWrap</item>
			<item>allWrap</item>
			<item>wrap</item>
			<item>parseFunc</item>
			<item>tags</item>
			<item>link</item>
			<item>typolink</item>
			<item>stdheader</item>
			<item>target</item>
			<item>split</item>
			<item>typolist</item>
		</list>
		<list name="conditionkeywords">
			<item>end</item>
			<item>else</item>
			<item>global</item>
			<item>browser</item>
			<item>version</item>
			<item>system</item>
			<item>device</item>
			<item>useragent</item>
			<item>language</item>
			<item>IP</item>
			<item>hostname</item>
			<item>hour</item>
			<item>minute</item>
			<item>dayofweek</item>
			<item>dayofmonth</item>
			<item>month</item>
			<item>usergroup</item>
			<item>loginUser</item>
			<item>treeLevel</item>
			<item>PIDinRootline</item>
			<item>PIDupinRootline</item>
			<item>globalVar</item>
			<item>globalString</item>
			<item>userFunc</item>
		</list>
		<contexts>
			
			<context attribute="Normal Text" lineEndContext="#stay" name="ts" >
				<DetectChar attribute="Normal Text" context="#stay" char="{" beginRegion="Brace1" />
				<DetectChar attribute="Normal Text" context="#stay" char="}" endRegion="Brace1" />
				
				<DetectChar attribute="Condition" context="condition" char="[" beginRegion="Condition" />
				
				<!-- detect special chars (=, ., <, >) -->
				<DetectChar char="=" context="Value" attribute="Assignment" />
				<DetectChar char="." context="#pop" attribute="Assignment" />
				<DetectChar char="&gt;" context="Value" attribute="Assignment" />
				<DetectChar char="&lt;" context="Value" attribute="Assignment" />
				
				<DetectChar char="#" firstNonSpace="true" context="Comment" attribute="Comment" />
				<Detect2Chars attribute="Comment" context="Comment" char="/" char1="/" />
				<Detect2Chars attribute="Comment" context="twolinecomment" char="/" char1="&#42;" beginRegion="Comment"/>
				
				<!-- detect keywords -->
				<keyword attribute="Keyword" context="#stay" String="keywords" />
				
				<!-- detect objects -->
				<keyword attribute="Object" context="#stay" String="objects" />
				
				<!-- detect top level objects -->
				<keyword attribute="TLO" context="#stay" String="TLO" />

				<!-- detect stdWrap keywords -->
				<keyword attribute="stdWrap" context="#stay" String="stdwrap" />
				
				<!-- detect plugins (starts with tx_ or tt_ -->
				<RegExpr attribute="Plugin" context="#stay" String="(tx_|tt_)[A-Za-z0-9_]*" />
				
				<!-- detect numbers (something like tt_content.menu.20.2.1.) -->
				<Int attribute="Order" />
			</context>
			
			<context attribute="Value" lineEndContext="#pop" name="Value">
				<Int attribute="Int" />
				
				<DetectChar char="." context="Value" attribute="Assignment" />
				<DetectChar char="," context="Value" attribute="Assignment" />
				
				<keyword attribute="Keyword" String="keywords" />
				<keyword attribute="Object" String="objects" />
				<keyword attribute="TLO" String="TLO" />
				<keyword attribute="stdWrap" context="#stay" String="stdwrap" />
				
				<RegExpr attribute="Plugin" context="#stay" String="(tx_|tt_)[A-Za-z0-9_]*" />
				
				<DetectChar char="|" context="#stay" attribute="Assignment" />
			</context>
			
			<context attribute="Condition" name="condition" lineEndContext="#pop">
				<DetectChar attribute="Condition" context="#pop" char="]" endRegion="Condition" />
				
				<keyword attribute="TLO" context="#stay" String="conditionkeywords" />
				
				<RegExpr attribute="Value" context="#stay" String="[A-Za-z0-9_]*" />
				
				<DetectChar char="=" context="#stay" attribute="Assignment" />
				<DetectChar char="," context="#stay" attribute="Assignment" />
			</context>
			
			<context attribute="Comment" lineEndContext="#pop" name="Comment" >
				<DetectSpaces />
				<IncludeRules context="##Alerts" />
				<DetectIdentifier />
			</context>
			
			<context name="twolinecomment" attribute="Comment" lineEndContext="#stay">
				<Detect2Chars attribute="Comment" context="#pop" char="*" char1="/" endRegion="Comment" />
			</context>
			
		</contexts>
		<itemDatas>
			<itemData name="Normal Text" defStyleNum="dsNormal" color="#ff0000" />
			<itemData name="Comment" defStyleNum="dsComment" />
			<itemData name="Assignment" defStyleNum="dsOthers" bold="1" />
			<itemData name="Value" defStyleNum="dsString" color="#202020" />
			<itemData name="Int" defStyleNum="dsDecVal" />
			<itemData name="Keyword" defStyleNum="dsKeyword" color="#0000ff" />
			<itemData name="Object" defStyleNum="dsKeyword" color="#0066ff" />
			<itemData name="Plugin" defStyleNum="dsKeyword" color="#0066ff" bold="0" />
			<itemData name="stdWrap" defStyleNum="dsKeyword" color="#606000" bold="0" />
			<itemData name="TLO" defStyleNum="dsKeyword" color="#00f0ff" bold="1" />
			<itemData name="Order" defStyleNum="dsKeyWord" color="#ff6600" bold="1" />
			<itemData name="Condition" defStyleNum="dsNormal" color="#008000" />
		</itemDatas>
	</highlighting>
	
	<general>
		<comments>
			<comment name="singleLine" start="#" />
			<comment name="singleLine" start="//" />
			<comment name="multiLine" start="/*" end="*/" />
		</comments>	
		<keywords casesensitive="1" />
	</general>

</language>
