|
|
|
<?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.31" kateversion="2.5" 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>
|