<?xml version="1.0" encoding="UTF-8"?>
< !DOCTYPE language SYSTEM "language.dtd"
[
<!ENTITY label "[^\s]+">
<!ENTITY eos "(?=($|\s))"> <!-- eol or space following -->
<!ENTITY noword "(?![\w$+-])"> <!-- no word, $, + or - following -->
<!ENTITY varname "[A-Za-z_][A-Za-z0-9_]*"> <!-- valid character in a variable name -->
<!ENTITY eop "(?=([\s\\;"%]|$))"> <!-- end of path -->
<!ENTITY pathpart "[^\s\\%;/:\*\?"><\|]"> <!-- valid character in a file name -->
]>
<language name= "MS-DOS Batch" version= "0.30" kateversion= "2.4" section= "Scripts" extensions= "*.bat" mimetype= "application/x-dos" casesensitive= "0" author= "Matthew Woehlke (mw_triad@users.sourceforge.net)" license= "LGPL" >
<!-- (c) 2006, 2009, 2010 Matthew Woehlke (mw_triad@users.sourceforge.net)
Released under the LGPL -->
<highlighting >
<list name= "builtins" >
<item > assoc </item>
<item > break </item>
<item > call </item>
<item > cd </item>
<item > chdir </item>
<item > cls </item>
<item > color </item>
<item > copy </item>
<item > date </item>
<item > del </item>
<item > dir </item>
<item > endlocal </item>
<item > erase </item>
<item > exit </item>
<item > ftype </item>
<item > md </item>
<item > mkdir </item>
<item > move </item>
<item > path </item>
<item > pause </item>
<item > popd </item>
<item > prompt </item>
<item > pushd </item>
<item > rd </item>
<item > ren </item>
<item > rename </item>
<item > rmdir </item>
<item > setlocal </item>
<item > shift </item>
<item > start </item>
<item > time </item>
<item > title </item>
<item > type </item>
<item > ver </item>
<item > verify </item>
<item > vol </item>
</list>
<!-- these need special handling -->
<list name= "echo" > <item > echo </item> </list>
<list name= "else" > <item > else </item> </list>
<list name= "for" > <item > for </item> </list>
<list name= "in" > <item > in </item> </list>
<list name= "do" > <item > do </item> </list>
<list name= "goto" > <item > goto </item> </list>
<list name= "if" > <item > if </item> </list>
<list name= "not" > <item > not </item> </list>
<list name= "set" > <item > set </item> </list>
<list name= "commands" >
<!-- the basics -->
<item > at </item>
<item > attrib </item>
<item > break </item>
<item > cacls </item>
<item > chcp </item>
<item > chkdsk </item>
<item > chkntfs </item>
<item > cmd </item>
<item > comp </item>
<item > compact </item>
<item > convert </item>
<item > diskcomp </item>
<item > diskcopy </item>
<item > doskey </item>
<item > fc </item>
<item > find </item>
<item > findstr </item>
<item > format </item>
<item > graftabl </item>
<item > help </item>
<item > label </item>
<item > mode </item>
<item > more </item>
<item > print </item>
<item > recover </item>
<item > replace </item>
<item > sort </item>
<item > subst </item>
<item > tree </item>
<item > xcopy </item>
</list>
<contexts >
<context attribute= "Normal Text" lineEndContext= "#stay" name= "Start" >
<!-- general syntactical stuff -->
<RegExpr attribute= "Comment" context= "Comment" String= "^\s*[Rr][Ee][Mm](\s|$)" />
<keyword attribute= "Builtin" context= "Command" String= "builtins" />
<keyword attribute= "Command" context= "Command" String= "commands" />
<DetectChar attribute= "Label" context= "Label" char= ":" firstNonSpace= "true" />
<!-- special built - ins -->
<RegExpr attribute= "Builtin" context= "#stay" String= "\b[Ee][Cc][Hh][Oo]\s+[Oo]([Ff][Ff]|[Nn])\s*$" />
<keyword attribute= "Builtin" context= "CmdEcho" String= "echo" />
<keyword attribute= "Keyword" context= "#stay" String= "if" />
<keyword attribute= "Keyword" context= "CmdFor" String= "for" />
<keyword attribute= "Keyword" context= "Label" String= "goto" />
<keyword attribute= "Builtin" context= "CmdSet" String= "set" />
<DetectChar attribute= "Keyword" context= "#stay" char= "@" />
<!-- other syntaxes -->
<IncludeRules context= "FindMost" />
</context>
<!-- the following contexts are meant to be included -->
<context attribute= "Normal Text" lineEndContext= "#pop" name= "FindMost" >
<IncludeRules context= "FindStrings" />
<IncludeRules context= "FindSubstitutions" />
<!-- handle command line options -->
<RegExpr attribute= "Option" context= "#stay" String= "[/-][A-Za-z0-9][A-Za-z0-9_]*:?" />
<!-- handle redirection -->
<RegExpr attribute= "Redirection" context= "#stay" String= "[0-9]*(>>?|<)(&[0-9]+)" />
<RegExpr attribute= "Redirection" context= "Path" String= "[0-9]*(>>?|<)\s*" />
<DetectChar attribute= "Redirection" context= "Start" char= "|" />
<!-- handle paths -->
<RegExpr attribute= "Path" context= "#stay" String= "[.]+&eop;" />
<RegExpr attribute= "Path" context= "#stay" String= "[A-Za-z][A-Za-z.]*:" />
<RegExpr attribute= "Path" context= "#stay" String= "&pathpart;+(?=\\)" />
<RegExpr attribute= "Path" context= "#stay" String= "[.]*\\+&pathpart;*&eop;" />
</context>
<context attribute= "Normal Text" lineEndContext= "#stay" name= "FindStrings" >
<DetectChar attribute= "String" context= "String" char= """ />
</context>
<context attribute= "Normal Text" lineEndContext= "#stay" name= "FindSubstitutions" >
<Detect2Chars attribute= "Escape" context= "#stay" char= "%" char1= "%" />
<RegExpr attribute= "Variable" context= "#stay" String= "([%!])[^%\s!]+\1" />
<RegExpr attribute= "Variable" context= "#stay" String= "[%!][a-z0-9]" insensitive= "true" />
</context>
<!-- basic sub - contexts -->
<context attribute= "Comment" lineEndContext= "#pop" name= "Comment" >
<IncludeRules context= "##Alerts" />
</context>
<context attribute= "String" lineEndContext= "#pop" name= "String" >
<Detect2Chars attribute= "Escape" context= "#stay" char= "\" char1= """ />
<DetectChar attribute= "String" context= "#pop" char= """ />
<IncludeRules context= "FindSubstitutions" />
</context>
<context attribute= "Normal Text" lineEndContext= "#pop" name= "Command" >
<IncludeRules context= "FindMost" />
</context>
<context attribute= "Error" lineEndContext= "#pop" name= "Label" >
<DetectSpaces attribute= "Normal Text" context= "#stay" />
<RegExpr attribute= "Label" context= "Comment" String= "&label;&eos;" />
</context>
<context attribute= "Path" lineEndContext= "#pop" name= "Path" >
<IncludeRules context= "FindStrings" />
<IncludeRules context= "FindSubstitutions" />
<AnyChar attribute= "Normal Text" context= "#pop" String= " 	\%/:*?"><|" lookAhead= "true" />
</context>
<!-- special sub - contexts -->
<context attribute= "Normal Text" lineEndContext= "#pop" name= "Assign" >
<IncludeRules context= "FindMost" />
</context>
<context attribute= "Error" lineEndContext= "#pop" name= "CmdSet" >
<DetectSpaces attribute= "Normal Text" context= "#stay" />
<RegExpr attribute= "Variable" context= "#pop" String= "&varname;=" />
</context>
<context attribute= "Echoed Text" lineEndContext= "#pop" name= "CmdEcho" >
<IncludeRules context= "FindSubstitutions" />
<RegExpr attribute= "Escape" context= "#stay" String= "\^." />
<RegExpr attribute= "Redirection" context= "#stay" String= "[0-9]*(>>?|<)(&[0-9]+)" />
<RegExpr attribute= "Redirection" context= "Path" String= "[0-9]*(>>?|<)\s*" />
<DetectChar attribute= "Redirection" context= "Start" char= "|" />
</context>
<!-- 'for' sub - contexts -->
<context attribute= "Error" lineEndContext= "#pop" name= "CmdFor" >
<DetectSpaces attribute= "Normal Text" context= "#stay" />
<RegExpr attribute= "Variable" context= "CmdForIn" String= "%%[a-z]" insensitive= "true" />
<Detect2Chars attribute= "Option" context= "#stay" char= "/" char1= "D" />
<Detect2Chars attribute= "Option" context= "CmdForR" char= "/" char1= "R" />
<Detect2Chars attribute= "Option" context= "CmdForL" char= "/" char1= "L" />
</context>
<context attribute= "Error" lineEndContext= "#pop" name= "CmdForIn" >
<DetectSpaces attribute= "Normal Text" context= "#stay" />
<keyword attribute= "Keyword" context= "CmdForList" String= "in" />
</context>
<context attribute= "Error" lineEndContext= "#pop" name= "CmdForList" >
<DetectSpaces attribute= "Normal Text" context= "#stay" />
<DetectChar attribute= "Keyword" context= "CmdForListBody" char= "(" />
</context>
<context attribute= "Normal Text" lineEndContext= "#pop" name= "CmdForListBody" >
<IncludeRules context= "FindStrings" />
<IncludeRules context= "FindSubstitutions" />
<DetectChar attribute= "Keyword" context= "CmdForDo" char= ")" />
</context>
<context attribute= "Error" lineEndContext= "#pop" name= "CmdForDo" >
<DetectSpaces attribute= "Normal Text" context= "#stay" />
<keyword attribute= "Keyword" context= "CmdForCommands" String= "do" />
</context>
<context attribute= "Normal Text" lineEndContext= "#pop" name= "CmdForCommands" >
<RegExpr attribute= "Variable" context= "#stay" String= "%%(~([fdpnxsatz]|\$&varname;:)*)?[a-z]" insensitive= "true" />
<IncludeRules context= "Start" />
<DetectChar attribute= "Keyword" context= "CmdForNestedCommands" char= "(" />
</context>
<context attribute= "Normal Text" lineEndContext= "#stay" name= "CmdForNestedCommands" >
<DetectChar attribute= "Keyword" context= "#pop" char= ")" />
<IncludeRules context= "CmdForCommands" />
</context>
<context attribute= "Error" lineEndContext= "#pop" name= "CmdForR" >
<DetectSpaces attribute= "Normal Text" context= "#stay" />
<RegExpr attribute= "Path" context= "#stay" String= "([a-z][a-z.]*:)?[.]*\\*&pathpart;*&eop;" insensitive= "true" />
<RegExpr attribute= "Variable" context= "CmdForIn" String= "%%[a-z]" insensitive= "true" />
</context>
<!-- 'for /L' sub - contexts -->
<context attribute= "Error" lineEndContext= "#pop" name= "CmdForL" >
<DetectSpaces attribute= "Normal Text" context= "#stay" />
<RegExpr attribute= "Variable" context= "CmdForLIn" String= "%%[a-z]" insensitive= "true" />
</context>
<context attribute= "Error" lineEndContext= "#pop" name= "CmdForLIn" >
<DetectSpaces attribute= "Normal Text" context= "#stay" />
<keyword attribute= "Keyword" context= "CmdForLRange" String= "in" />
</context>
<context attribute= "Error" lineEndContext= "#pop" name= "CmdForLRange" >
<DetectSpaces attribute= "Normal Text" context= "#stay" />
<DetectChar attribute= "Keyword" context= "CmdForLStart" char= "(" />
</context>
<context attribute= "Error" lineEndContext= "#pop" name= "CmdForLStart" >
<DetectSpaces attribute= "Normal Text" context= "#stay" />
<RegExpr attribute= "Number" context= "CmdForLStartComma" String= "-?[0-9]+" />
</context>
<context attribute= "Error" lineEndContext= "#pop" name= "CmdForLStartComma" >
<DetectSpaces attribute= "Normal Text" context= "#stay" />
<DetectChar attribute= "Keyword" context= "CmdForLStep" char= "," />
</context>
<context attribute= "Error" lineEndContext= "#pop" name= "CmdForLStep" >
<DetectSpaces attribute= "Normal Text" context= "#stay" />
<RegExpr attribute= "Number" context= "CmdForLStepComma" String= "-?[0-9]+" />
</context>
<context attribute= "Error" lineEndContext= "#pop" name= "CmdForLStepComma" >
<DetectSpaces attribute= "Normal Text" context= "#stay" />
<DetectChar attribute= "Keyword" context= "CmdForLEnd" char= "," />
</context>
<context attribute= "Error" lineEndContext= "#pop" name= "CmdForLEnd" >
<DetectSpaces attribute= "Normal Text" context= "#stay" />
<RegExpr attribute= "Number" context= "CmdForLEndParen" String= "-?[0-9]+" />
</context>
<context attribute= "Error" lineEndContext= "#pop" name= "CmdForLEndParen" >
<DetectSpaces attribute= "Normal Text" context= "#stay" />
<DetectChar attribute= "Keyword" context= "CmdForDo" char= ")" />
</context>
</contexts>
<itemDatas >
<itemData name= "Normal Text" defStyleNum= "dsNormal" />
<itemData name= "Comment" defStyleNum= "dsComment" />
<itemData name= "Keyword" defStyleNum= "dsKeyword" />
<itemData name= "Number" defStyleNum= "dsDecVal" />
<itemData name= "Label" defStyleNum= "dsOthers" />
<itemData name= "Builtin" defStyleNum= "dsKeyword" />
<itemData name= "Command" defStyleNum= "dsKeyword" />
<itemData name= "Redirection" defStyleNum= "dsKeyword" />
<itemData name= "String" defStyleNum= "dsString" />
<itemData name= "Escape" defStyleNum= "dsChar" />
<itemData name= "Echoed Text" defStyleNum= "dsNormal" />
<itemData name= "Variable" defStyleNum= "dsOthers" />
<itemData name= "Path" defStyleNum= "dsNormal" />
<itemData name= "Option" defStyleNum= "dsNormal" />
<itemData name= "Error" defStyleNum= "dsError" />
</itemDatas>
</highlighting>
<general >
<comments >
<comment name= "singleLine" start= "rem " />
</comments>
<keywords casesensitive= "0" weakDeliminator= "@" additionalDeliminator= "@" />
</general>
</language>