Warning, /frameworks/syntax-highlighting/data/syntax/zsh.xml is written in an unsupported language. File is not indexed.
0001 <?xml version="1.0" encoding="UTF-8"?>
0002 <!DOCTYPE language
0003 [
0004 <!ENTITY tab "	">
0005 <!ENTITY funcname "[^&_fragpathseps;=]*+">
0006 <!ENTITY varname "[A-Za-z_][A-Za-z0-9_]*">
0007 <!ENTITY eos "(?=$|[ &tab;])"> <!-- eol or space following -->
0008 <!ENTITY eoexpr "(?=$|[ &tab;<>|&;)])">
0009
0010 <!ENTITY substseps "${}'"`\\">
0011 <!ENTITY symbolseps "<>|&;()">
0012 <!ENTITY wordseps " &tab;&symbolseps;">
0013 <!ENTITY wordseps_or_extglog " &tab;>|&;)`"> <!-- wordseps without < and ( -->
0014
0015 <!ENTITY bq_string "`[^`]*+`">
0016 <!ENTITY sq_string "'[^']*+'">
0017 <!ENTITY dq_string ""(?:[^"\\`]*+|&bq_string;|\\.)*+"">
0018 <!ENTITY strings "(?:&sq_string;|&dq_string;|&bq_string;)">
0019
0020 <!ENTITY simpleglob "*?#^~">
0021 <!ENTITY globrange "<[0-9]*-[0-9]*>">
0022 <!ENTITY globany "\[(?:[^&wordseps;"'`\\\[\]]+|\\.|&strings;|\[:\w+:\]|\[)*\]">
0023
0024 <!ENTITY _fragpathseps "&simpleglob;[&wordseps;&substseps;">
0025 <!ENTITY _fragpathnosep "(?:&_brace_noexpansion;)?+">
0026 <!ENTITY path "(?:[^&_fragpathseps;]*+&_fragpathnosep;)*+">
0027 <!ENTITY fragpath "(?:[^&_fragpathseps;/]*+&_fragpathnosep;)*+">
0028 <!ENTITY fragpathesc "\\.(?:[^&_fragpathseps;/]*+(?:\\.|&_brace_noexpansion;)?+)*+">
0029 <!ENTITY opt "(?:[^&_fragpathseps;=/]*+&_fragpathnosep;)*+">
0030 <!ENTITY assumepath "/&path;|(?=[&simpleglob;([]|&globrange;)">
0031 <!ENTITY pathpart "(?:~(?:/&path;|(?=[&wordseps;]|$))|&fragpath;(?:&assumepath;|(?=&fragpathesc;&assumepath;))|\.\.?(?=[&wordseps;]|$))">
0032
0033 <!-- Path only with / -->
0034 <!ENTITY path_with_sep_text "[^[&wordseps;'"`\\/]">
0035 <!ENTITY path_with_sep_text2 "[^[()<>'"`\\/]">
0036 <!ENTITY path_with_sep_expr "\\.|&strings;|&globany;|&globrange;">
0037 <!ENTITY path_with_sep_spe "(~|\.\.?)($|[/ &tab;<>|&;)])">
0038 <!ENTITY path_with_sep_sub "\((&path_with_sep_text2;++|&path_with_sep_expr;)*+(\)|(?=/))">
0039 <!ENTITY path_with_sep "/|&path_with_sep_spe;|(&path_with_sep_text;++|&path_with_sep_expr;|&path_with_sep_sub;)*+/">
0040
0041 <!ENTITY _braceexpansion_spe " &tab;<>|&;{}\\`'"$">
0042 <!ENTITY _brace_noexpansion "\{[^&_braceexpansion_spe;,]*+\}">
0043 <!ENTITY _braceexpansion_var "\$(?:\{[^\[\]&_braceexpansion_spe;]*+(?:\[[*@a-zA-Z0-9]\])\})?">
0044 <!ENTITY _braceexpansion_elems "\\.|&strings;|&_braceexpansion_var;|&_brace_noexpansion;">
0045 <!ENTITY _braceexpansion_consume "&_braceexpansion_elems;|{(?:[^&_braceexpansion_spe;,]++|&_braceexpansion_elems;)*?}|(?R)?+">
0046 <!ENTITY _braceexpansion "(?:[^&_braceexpansion_spe;,]++|&_braceexpansion_consume;)*?,(?:[^&_braceexpansion_spe;]++|&_braceexpansion_consume;)*?}">
0047 <!ENTITY braceexpansion "{&_braceexpansion;">
0048
0049 <!ENTITY _bracerangevar "\$([#+^=~]*([_a-zA-Z0-9]+|[*@#])(\[((\$[#+^=~]*)?([-+_a-zA-Z0-9]+|[*@])|$#)\])?|#|'(\\.|[^'\\])')">
0050 <!ENTITY _bracerangeoperand "-?([0-9]+|[a-zA-Z!#$%*+,-./:=?@^_~]|&_bracerangevar;|\\.|'[^'\\]'|"(\\.|[^"\\`])"|`[^`]*`)">
0051 <!ENTITY bracerangeexpansion "{(?=&_bracerangeoperand;\.\.&_bracerangeoperand;(\.\.-?([0-9]+|&_bracerangevar;))?})">
0052
0053 <!ENTITY nobraceexpansion "(?:{([^&_braceexpansion_spe;/{},]++|(?R))+?})+">
0054 <!ENTITY nogroupend "(?:}+(?:[^&_fragpathseps;]|(?=[}$'"`\\])))">
0055
0056 <!-- glob with |, ( or spaces is a pattern -->
0057 <!ENTITY _ispattern_ugN "[ug][0123456789]+">
0058 <!ENTITY _ispattern_ugeP "[ugeP](?:&_ispattern_ugeP_0;|&_ispattern_ugeP_1;|&_ispattern_ugeP_2;|&_ispattern_ugeP_3;|&_ispattern_ugeP_4;|(?=\|))">
0059 <!ENTITY _ispattern_ugeP_0 ":(?:[^:'`"\\|()]*+(?:&_ispattern_q;)?)*(?::|(?=[|()]))">
0060 <!ENTITY _ispattern_ugeP_1 "\[(?:[^]'`"\\|()]*+(?:&_ispattern_q;)?)*(?:\](?=[|()]))">
0061 <!ENTITY _ispattern_ugeP_2 "{(?:[^}'`"\\|()]*+(?:&_ispattern_q;)?)*(?:}(?=[|()]))">
0062 <!ENTITY _ispattern_ugeP_3 "<(?:[^>'`"\\|()]*+(?:&_ispattern_q;)?)*(?:>|(?=[|()]))">
0063 <!ENTITY _ispattern_ugeP_4 "([^&wordseps;{}'"`\\])(?:(?:(?!\1)[^'`"\\\1|()])*+(?:&_ispattern_q;)?)*(?:\1|(?=[|()]))">
0064 <!ENTITY _ispattern_q "\\.|&strings;">
0065 <!ENTITY _ispattern_check "(?:\)(?:[^ &tab;}<>|&;)]|&nogroupend;)|[ &tab;|(]|$)">
0066 <!ENTITY ispattern "(?:[^ &tab;\\'"|()`ugeP]*+(?:&_ispattern_ugN;|&_ispattern_ugeP;|&_ispattern_q;)?)*&_ispattern_check;">
0067
0068 <!ENTITY heredocq "(?|"([^"]+)"|'([^']+)'|\\(.[^&wordseps;&substseps;]*))">
0069
0070 <!ENTITY arithmetic_as_subshell "\(((?:[^`'"()$]++|\$\{[^`'"(){}$]+\}|\$(?=[^{`'"()])|&bq_string;|\((?1)(?:[)]|(?=['"])))++)(?:[)](?=$|[^)])|["'])">
0071
0072 <!ENTITY unary_operators "-[abcdefghknoprstuvwxzLOGNS]&eos;">
0073 <!ENTITY binary_operators "(?:-(?:e[fq]|[nolg]t|[nlg]e)|==?|!=)&eos;">
0074
0075 <!ENTITY dblbracket_close "\]\](?=($|[ &tab;;|&)]))">
0076
0077 <!ENTITY int "(?:[0-9]++[_0-9]*+)">
0078 <!ENTITY exp "(?:[eE][-+]?∫)">
0079 ]>
0080 <language name="Zsh" version="32" kateversion="5.79" section="Scripts" extensions="*.sh;*.zsh;.zshrc;.zprofile;.zlogin;.zlogout;.profile" mimetype="application/x-shellscript" casesensitive="1" author="Jonathan Poelen (jonathan.poelen@gmail.com)" license="MIT">
0081
0082 <highlighting>
0083 <list name="keywords">
0084 <item>continue</item>
0085 <item>break</item>
0086 <item>case</item>
0087 <item>do</item>
0088 <item>done</item>
0089 <item>elif</item>
0090 <item>else</item>
0091 <item>end</item>
0092 <item>esac</item>
0093 <item>fi</item>
0094 <item>for</item>
0095 <item>foreach</item>
0096 <item>function</item>
0097 <item>if</item>
0098 <item>in</item>
0099 <item>repeat</item>
0100 <item>return</item>
0101 <item>select</item>
0102 <item>then</item>
0103 <item>until</item>
0104 <item>while</item>
0105 </list>
0106
0107 <list name="builtins"><!-- see man zshbuiltins -->
0108 <item>-</item>
0109 <item>.</item>
0110 <item>:</item>
0111 <item>alias</item>
0112 <item>autoload</item>
0113 <item>bg</item>
0114 <item>bindkey</item>
0115 <item>builtin</item>
0116 <item>bye</item>
0117 <item>cap</item>
0118 <item>cd</item>
0119 <item>chdir</item>
0120 <item>clone</item>
0121 <item>command</item>
0122 <item>comparguments</item>
0123 <item>compcall</item>
0124 <item>compctl</item>
0125 <item>compdescribe</item>
0126 <item>compfiles</item>
0127 <item>compgroups</item>
0128 <item>compquote</item>
0129 <item>comptags</item>
0130 <item>comptry</item>
0131 <item>compvalues</item>
0132 <item>coproc</item>
0133 <item>dirs</item>
0134 <item>disable</item>
0135 <item>disown</item>
0136 <item>echo</item>
0137 <item>echotc</item>
0138 <item>echoti</item>
0139 <item>emulate</item>
0140 <item>enable</item>
0141 <item>eval</item>
0142 <item>exec</item>
0143 <item>exit</item>
0144 <item>false</item>
0145 <item>fc</item>
0146 <item>fg</item>
0147 <item>functions</item>
0148 <item>getcap</item>
0149 <item>hash</item>
0150 <item>history</item>
0151 <item>jobs</item>
0152 <item>kill</item>
0153 <item>limit</item>
0154 <item>log</item>
0155 <item>logout</item>
0156 <item>nocorrect</item>
0157 <item>noglob</item>
0158 <item>popd</item>
0159 <item>print</item>
0160 <item>printf</item>
0161 <item>pushd</item>
0162 <item>pushln</item>
0163 <item>pwd</item>
0164 <item>r</item>
0165 <item>rehash</item>
0166 <item>sched</item>
0167 <item>set</item>
0168 <item>setcap</item>
0169 <item>setopt</item>
0170 <item>shift</item>
0171 <item>source</item>
0172 <item>stat</item>
0173 <item>suspend</item>
0174 <item>test</item>
0175 <item>times</item>
0176 <item>trap</item>
0177 <item>true</item>
0178 <item>ttyctl</item>
0179 <item>type</item>
0180 <item>ulimit</item>
0181 <item>umask</item>
0182 <item>unalias</item>
0183 <item>unfunction</item>
0184 <item>unhash</item>
0185 <item>unlimit</item>
0186 <item>unset</item>
0187 <item>unsetopt</item>
0188 <item>vared</item>
0189 <item>wait</item>
0190 <item>whence</item>
0191 <item>where</item>
0192 <item>which</item>
0193 <item>zcompile</item>
0194 <item>zformat</item>
0195 <item>zftp</item>
0196 <item>zle</item>
0197 <item>zmodload</item>
0198 <item>zparseopts</item>
0199 <item>zprof</item>
0200 <item>zpty</item>
0201 <item>zregexparse</item>
0202 <item>zsocket</item>
0203 <item>zstyle</item>
0204 <item>ztcp</item>
0205 </list>
0206
0207 <list name="builtins_var">
0208 <item>declare</item>
0209 <item>export</item>
0210 <item>float</item>
0211 <item>getln</item>
0212 <item>getopts</item>
0213 <item>integer</item>
0214 <item>let</item>
0215 <item>local</item>
0216 <item>read</item>
0217 <item>readonly</item>
0218 <item>typeset</item>
0219 <item>unset</item>
0220 </list>
0221
0222 <list name="unixcommands">
0223 <include>unixcommands##Bash</include>
0224 </list>
0225
0226 <contexts>
0227 <context attribute="Normal Text" lineEndContext="#stay" name="Start" fallthroughContext="Command">
0228 <DetectSpaces attribute="Normal Text" context="#stay"/>
0229 <DetectChar attribute="Comment" context="Comment" char="#"/>
0230 <!-- start expression in double parentheses -->
0231 <Detect2Chars context="ExprDblParenOrSubShell" char="(" char1="(" lookAhead="1"/>
0232 <!-- start a subshell -->
0233 <DetectChar attribute="Keyword" context="SubShell" char="(" beginRegion="subshell"/>
0234 <!-- start expression in single/double brackets -->
0235 <DetectChar context="MaybeBracketExpression" char="[" lookAhead="1"/>
0236 <!-- start a group command or BraceExpansion with { -->
0237 <DetectChar attribute="Keyword" context="Group" char="{" beginRegion="group"/>
0238
0239 <!-- handle ` -->
0240 <DetectChar attribute="Backquote" context="CommandBackq" char="`"/>
0241
0242 <!-- &> redirections -->
0243 <Detect2Chars attribute="Redirection" context="Prefix&>" char="&" char1=">"/>
0244 <Detect2Chars attribute="Control" context="#stay" char="&" char1="!"/>
0245
0246 <!-- handle branche conditions -->
0247 <Detect2Chars attribute="Control" context="#stay" char="&" char1="&"/>
0248 <Detect2Chars attribute="Control" context="#stay" char="|" char1="|"/>
0249
0250 <!-- handle &, |, ; -->
0251 <AnyChar attribute="Control" context="#stay" String="&|;"/>
0252
0253 <!-- handle variable assignments -->
0254 <RegExpr attribute="Variable" context="VarAssign" String="&varname;(?=\+?=|\[(?:$|[^]]))|[0-9]+(?=\+?=)"/>
0255 <!-- handle keywords -->
0256 <keyword context="DispatchKeyword" String="keywords" lookAhead="1"/>
0257 <!-- handle commands that have variable names as argument -->
0258 <keyword attribute="Builtin" context="VarName" String="builtins_var" lookAhead="1"/>
0259 <WordDetect attribute="Builtin" context="#stay" String="noglob"/>
0260 <WordDetect attribute="Builtin" context="#stay" String="coproc"/>
0261 <!-- mark function definitions without function keyword -->
0262 <RegExpr attribute="Function" context="#stay" String="&funcname;[ &tab;]*\(\)"/>
0263 <keyword attribute="Builtin" context="CommandArgs" String="builtins"/>
0264 <keyword attribute="Command" context="CommandArgs" String="unixcommands"/>
0265
0266 <!-- handle redirection -->
0267 <AnyChar context="CommandMaybeRedirection" String="<>0123456789" lookAhead="1"/>
0268
0269 <DetectChar attribute="Error" context="#stay" char=")"/>
0270 <DetectChar context="MaybeGroupEnd" char="}" lookAhead="1"/>
0271
0272 <LineContinue attribute="Escape" context="#stay"/>
0273
0274 <Detect2Chars attribute="Expression" context="#stay" char="!" char1=" "/>
0275 </context>
0276 <context attribute="Normal Text" lineEndContext="#pop" name="MaybeGroupEnd">
0277 <RegExpr context="#pop!Command" String="&nogroupend;" lookAhead="1"/>
0278 <DetectChar attribute="Error" context="#pop" char="}"/>
0279 </context>
0280 <context attribute="Normal Text" lineEndContext="#pop" name="MaybeBracketExpression" fallthroughContext="#pop!Command">
0281 <!-- start expression in double brackets -->
0282 <RegExpr attribute="Keyword" context="#pop!ExprDblBracket" String="\[\[(?=$|[ &tab;(])" beginRegion="expression"/>
0283 <!-- start expression in single brackets -->
0284 <RegExpr attribute="Builtin" context="#pop!ExprBracket" String="\[&eos;" beginRegion="expression"/>
0285 </context>
0286 <context attribute="Normal Text" lineEndContext="#pop" name="CommandMaybeRedirection" fallthroughContext="#pop!Command">
0287 <IncludeRules context="FindRedirection"/>
0288 </context>
0289 <context attribute="Normal Text" lineEndContext="#pop" name="Return" fallthroughContext="#pop">
0290 <DetectSpaces attribute="Normal Text" context="#stay"/>
0291 <Int attribute="Number" context="#stay"/>
0292 </context>
0293 <!-- Comment consumes shell comments till EOL -->
0294 <context attribute="Comment" lineEndContext="#pop" name="Comment">
0295 <DetectSpaces attribute="Comment"/>
0296 <IncludeRules context="##Comments"/>
0297 <DetectIdentifier attribute="Comment" context="#stay"/>
0298 </context>
0299
0300 <!-- Group is called after a { is encountered -->
0301 <context attribute="Normal Text" lineEndContext="#stay" name="Group" fallthroughContext="Command">
0302 <DetectChar attribute="Keyword" context="#pop!GroupEnd" char="}" endRegion="group"/>
0303 <IncludeRules context="Start"/>
0304 </context>
0305 <context attribute="Normal Text" lineEndContext="#pop" name="GroupEnd" fallthroughContext="#pop!CommandArgs">
0306 <DetectSpaces attribute="Normal Text" context="#stay"/>
0307 <WordDetect attribute="Control Flow" context="#pop" String="always"/>
0308 </context>
0309
0310 <context attribute="OtherCommand" lineEndContext="#pop" name="Command">
0311 <DetectSpaces attribute="Normal Text" context="#pop!CommandArgs"/>
0312 <DetectIdentifier attribute="OtherCommand" context="#stay"/>
0313 <DetectChar context="CommandVariables" char="$" lookAhead="1"/>
0314 <IncludeRules context="FindStrings"/>
0315 <Detect2Chars attribute="Control" context="#pop" char="&" char1="&"/>
0316 <Detect2Chars attribute="Control" context="#pop" char="|" char1="|"/>
0317 <DetectChar attribute="Control" context="#pop" char="|"/>
0318 <AnyChar context="#pop" String=";)`" lookAhead="1"/>
0319 <AnyChar context="#pop!CommandArgs" String="&<>" lookAhead="1"/>
0320 <!-- start expression in double parentheses -->
0321 <Detect2Chars attribute="Error" context="#pop!ExprDblParen" char="(" char1="(" beginRegion="expression"/>
0322 <!-- start a subshell -->
0323 <DetectChar attribute="Error" context="#pop!SubShell" char="(" beginRegion="subshell"/>
0324 <DetectChar context="CommandAssumeEscape" char="\" lookAhead="1"/>
0325 <DetectChar context="CommandMaybeBraceExpansion" char="{" lookAhead="1"/>
0326 <DetectChar context="CommandMaybeGroupEnd" char="}" lookAhead="1"/>
0327 </context>
0328 <context attribute="Command" lineEndContext="#pop" name="CommandVariables">
0329 <IncludeRules context="DispatchVariables"/>
0330 <DetectChar attribute="OtherCommand" context="#pop" char="$"/>
0331 </context>
0332 <context attribute="OtherCommand" lineEndContext="#pop" name="CommandAssumeEscape">
0333 <LineContinue attribute="Escape" context="#pop"/>
0334 <RegExpr attribute="OtherCommand" context="#pop" String="\\."/>
0335 </context>
0336 <context attribute="OtherCommand" lineEndContext="#pop" name="CommandMaybeBraceExpansion">
0337 <IncludeRules context="DispatchBraceExpansion"/>
0338 <DetectChar attribute="OtherCommand" context="#pop" char="{"/>
0339 </context>
0340 <context attribute="Normal Text" lineEndContext="#pop" name="CommandMaybeGroupEnd">
0341 <RegExpr attribute="OtherCommand" context="#pop" String="&nogroupend;+"/>
0342 <DetectChar context="#pop#pop" char="}" lookAhead="1"/>
0343 </context>
0344
0345 <context attribute="Variable" lineEndContext="#pop" name="DispatchVariables">
0346 <IncludeRules context="DispatchSubstVariables"/>
0347 <IncludeRules context="DispatchStringVariables"/>
0348 <IncludeRules context="DispatchVarNameVariables"/>
0349 </context>
0350 <context attribute="Variable" lineEndContext="#pop" name="DispatchSubstVariables">
0351 <Detect2Chars attribute="Parameter Expansion" context="#pop!VarBraceStart" char="$" char1="{"/>
0352 <StringDetect context="#pop!ExprDblParenSubstOrSubstCommand" String="$((" lookAhead="1"/>
0353 <Detect2Chars attribute="Parameter Expansion" context="#pop!SubstCommand" char="$" char1="(" beginRegion="subshell"/>
0354 </context>
0355 <context attribute="Variable" lineEndContext="#pop" name="DispatchStringVariables">
0356 <Detect2Chars attribute="String SingleQ" context="#pop!StringEsc" char="$" char1="'"/>
0357 <Detect2Chars attribute="String Transl." context="#pop!StringDQ" char="$" char1="""/>
0358 </context>
0359 <context attribute="Variable" lineEndContext="#pop" name="DispatchVarNameVariables">
0360 <RegExpr attribute="Dollar Prefix" context="#pop!VarNamePrefixedWithDollar" String="\$(?=&varname;|[0-9]+|[-*@?$!#~=^+])"/>
0361 </context>
0362 <context attribute="Variable" lineEndContext="#pop" name="VarNamePrefixedWithDollar">
0363 <DetectIdentifier attribute="Variable" context="#pop!AfterVarName"/>
0364 <Int attribute="Variable" context="#pop!AfterVarName" additionalDeliminator="$"/>
0365 <AnyChar attribute="Variable" context="#pop!AfterVarName" String="-*@?$!"/>
0366 <DetectChar attribute="Parameter Expansion Operator" context="#pop!VarNameSubstLen" char="#"/>
0367 <DetectChar attribute="Parameter Expansion Operator" context="#pop!VarNameParam+" char="+"/>
0368 <AnyChar attribute="Parameter Expansion Operator" context="#pop!VarNameParam" String="~=^"/>
0369 </context>
0370 <context attribute="Variable" lineEndContext="#pop" name="VarNameSubstLen" fallthroughContext="#pop!AfterVarName">
0371 <DetectIdentifier attribute="Variable" context="#pop!AfterVarName"/>
0372 <AnyChar attribute="Variable" context="#pop!AfterVarName" String="-*@?$!"/>
0373 <Int attribute="Variable" context="#pop!AfterVarName" additionalDeliminator="#~=^+{}[]:-/$"/>
0374 </context>
0375 <context attribute="Variable" lineEndContext="#pop" name="VarNameParam" fallthroughContext="#pop!AfterVarName">
0376 <DetectChar attribute="Parameter Expansion Operator" context="#pop!VarNameSubstLen" char="#"/>
0377 <DetectChar attribute="Parameter Expansion Operator" context="#pop!VarNameParam+" char="+"/>
0378 <AnyChar attribute="Parameter Expansion Operator" context="#stay" String="^=~"/>
0379 <IncludeRules context="VarNameSubstLen"/>
0380 </context>
0381 <context attribute="Variable" lineEndContext="#pop" name="VarNameParam+" fallthroughContext="#pop">
0382 <IncludeRules context="VarNameSubstLen"/>
0383 </context>
0384
0385 <!-- called as soon as $xxx is encoutered -->
0386 <context attribute="Normal Text" lineEndContext="#pop" name="AfterVarName" fallthroughContext="#pop">
0387 <DetectChar context="VarNameDispatchModifiers" char=":" lookAhead="1"/>
0388 <DetectChar attribute="Parameter Expansion Operator" context="Subscript" char="["/>
0389 </context>
0390 <context attribute="Normal Text" lineEndContext="#pop#pop" name="VarNameDispatchModifiers" fallthroughContext="#pop#pop">
0391 <Detect2Chars attribute="Parameter Expansion" context="#pop" char=":" char1="a"/>
0392 <Detect2Chars attribute="Parameter Expansion" context="#pop" char=":" char1="A"/>
0393 <Detect2Chars attribute="Parameter Expansion" context="#pop" char=":" char1="c"/>
0394 <Detect2Chars attribute="Parameter Expansion" context="#pop" char=":" char1="e"/>
0395 <Detect2Chars attribute="Parameter Expansion" context="#pop!VarNameModifier_h" char=":" char1="h"/>
0396 <Detect2Chars attribute="Parameter Expansion" context="#pop" char=":" char1="l"/>
0397 <Detect2Chars attribute="Parameter Expansion" context="#pop" char=":" char1="p"/>
0398 <Detect2Chars attribute="Parameter Expansion" context="#pop" char=":" char1="P"/>
0399 <Detect2Chars attribute="Parameter Expansion" context="#pop" char=":" char1="q"/>
0400 <Detect2Chars attribute="Parameter Expansion" context="#pop" char=":" char1="Q"/>
0401 <Detect2Chars attribute="Parameter Expansion" context="#pop" char=":" char1="r"/>
0402 <Detect2Chars attribute="Parameter Expansion" context="#pop!VarNameModifier_s" char=":" char1="s"/>
0403 <Detect2Chars attribute="Parameter Expansion" context="#pop!VarNameModifier_h" char=":" char1="t"/>
0404 <Detect2Chars attribute="Parameter Expansion" context="#pop" char=":" char1="u"/>
0405 <Detect2Chars attribute="Parameter Expansion" context="#pop" char=":" char1="x"/>
0406 <Detect2Chars attribute="Parameter Expansion" context="#pop" char=":" char1="&"/>
0407 <StringDetect attribute="Parameter Expansion" context="#pop!VarNameModifier_s" String=":gs"/>
0408 </context>
0409 <context attribute="Normal Text" lineEndContext="#pop#pop" name="VarNameModifier_h" fallthroughContext="#pop">
0410 <AnyChar attribute="Number" context="#stay" String="0123456789"/>
0411 </context>
0412 <context attribute="Parameter Expansion Operator" lineEndContext="#pop#pop" name="VarNameModifier_s" fallthroughContext="#pop#pop">
0413 <DetectChar attribute="Parameter Expansion Operator" context="#pop!VarNameModifier_s_Str" char="/"/>
0414 </context>
0415 <context attribute="String SingleQ" lineEndContext="#pop#pop" name="VarNameModifier_s_Str">
0416 <DetectChar attribute="Parameter Expansion Operator" context="#pop!VarNameModifier_s_Rep" char="/"/>
0417 <DetectChar context="AssumeEscape" char="\" lookAhead="1"/>
0418 <DetectChar attribute="String DoubleQ" context="#pop" char="""/>
0419 <DetectChar attribute="String SingleQ" context="#pop" char="'"/>
0420 </context>
0421 <context attribute="String SingleQ" lineEndContext="#pop#pop" name="VarNameModifier_s_Rep">
0422 <DetectChar context="AssumeEscape" char="\" lookAhead="1"/>
0423 <IncludeRules context="FindWord"/>
0424 <DetectChar attribute="Parameter Expansion Operator" context="#pop" char="/"/>
0425 <AnyChar context="#pop#pop" String=" &tab;<>|&;()" lookAhead="1"/>
0426 <DetectIdentifier attribute="String SingleQ"/>
0427 </context>
0428
0429 <context attribute="Normal Text" lineEndContext="#stay" name="CommandBackq" fallthroughContext="Command">
0430 <DetectChar attribute="Backquote" context="#pop!CommandArgs" char="`"/>
0431 <DetectChar attribute="Comment" context="CommentBackq" char="#"/>
0432 <IncludeRules context="Start"/>
0433 </context>
0434 <!-- CommentBackq consumes shell comments till EOL or a backquote -->
0435 <context attribute="Comment" lineEndContext="#pop" name="CommentBackq">
0436 <DetectChar context="#pop" char="`" lookAhead="1"/>
0437 <IncludeRules context="Comment"/>
0438 </context>
0439
0440 <!-- CommandArgs matches the items after a command -->
0441 <context attribute="Normal Text" lineEndContext="#pop" name="CommandArgs" fallthroughContext="CommandArg">
0442 <DetectSpaces attribute="Normal Text" context="#stay"/>
0443
0444 <!-- &> redirections -->
0445 <Detect2Chars attribute="Redirection" context="Prefix&>" char="&" char1=">"/>
0446
0447 <!-- handle &, |, ;, ` -->
0448 <AnyChar context="#pop" String="&|;`" lookAhead="1"/>
0449
0450 <!-- handle process subst -->
0451 <Detect2Chars attribute="Redirection" context="ProcessSubst" char="=" char1="("/>
0452 <!-- handle redirection -->
0453 <AnyChar context="CommandArgMaybeRedirection" String="><0123456789" lookAhead="1"/>
0454
0455 <DetectChar context="#pop" char=")" lookAhead="1"/>
0456 </context>
0457 <context attribute="Normal Text" lineEndContext="#pop#pop" name="CommandArg" fallthroughContext="#pop!NormalOption">
0458 <!-- In command arguments, do not allow comments after escaped characters.
0459 This avoids highlighting comments within paths or other text. Ex: pathtext\ #no\ comment -->
0460 <DetectChar context="#pop#pop" char="#" lookAhead="1"/>
0461 <Detect2Chars attribute="Option" context="#pop!LongOption" char="-" char1="-"/>
0462 <DetectChar attribute="Option" context="#pop!ShortOption" char="-"/>
0463 <DetectChar attribute="Keyword" context="#pop!NormalOption" char="="/>
0464 </context>
0465 <context attribute="Normal Text" lineEndContext="#pop" name="CommandArgMaybeRedirection" fallthroughContext="#pop!NormalOption">
0466 <IncludeRules context="FindRedirection"/>
0467 </context>
0468
0469 <context attribute="Option" lineEndContext="#pop" name="ShortOption" fallthroughContext="#pop">
0470 <DetectChar attribute="Path" context="PathThenPop" char="/"/>
0471 <IncludeRules context="LongOption"/>
0472 </context>
0473 <context attribute="Option" lineEndContext="#pop" name="LongOption" fallthroughContext="#pop">
0474 <AnyChar context="#pop" String="&wordseps_or_extglog;" lookAhead="1"/>
0475 <DetectChar attribute="Operator" context="#pop!NormalOption" char="="/>
0476 <IncludeRules context="FindWord"/>
0477 <IncludeRules context="FindSingleGlob"/>
0478 <IncludeRules context="FindGlobAny"/>
0479 <AnyChar context="#pop!NormalOption" String="({}<" lookAhead="1"/>
0480 <RegExpr attribute="Option" context="#stay" String="&opt;"/>
0481 </context>
0482 <context attribute="Normal Text" lineEndContext="#pop" name="NormalOption" fallthroughContext="#pop">
0483 <AnyChar context="#pop" String="&wordseps_or_extglog;" lookAhead="1"/>
0484 <IncludeRules context="FindWord"/>
0485 <DetectChar attribute="Glob" context="PathThenPop" char="[" lookAhead="1"/>
0486 <DetectChar context="ExprGlobParenThenPath" char="(" lookAhead="1"/>
0487 <IncludeRules context="FindPathThenPop"/>
0488 <DetectChar context="NormalOptionMaybeBraceExpansion" char="{" lookAhead="1"/>
0489 <DetectChar context="NormalOptionMaybeGroupEnd" char="}" lookAhead="1"/>
0490 <IncludeRules context="FindNormalTextOption"/>
0491 <DetectChar context="MaybeGlobRangeOrPop" char="<" lookAhead="1"/>
0492 </context>
0493 <context attribute="Normal Text" lineEndContext="#pop#pop" name="NormalOptionRecBrace">
0494 <AnyChar context="#pop#pop" String="&wordseps_or_extglog;" lookAhead="1"/>
0495 <IncludeRules context="FindWord"/>
0496 <IncludeRules context="FindSingleGlob"/>
0497 <IncludeRules context="FindGlobAny"/>
0498 <DetectChar context="ExprGlobParen" char="(" lookAhead="1"/>
0499 <DetectChar context="NormalOptionMaybeBraceExpansion" char="{" lookAhead="1"/>
0500 <DetectChar attribute="Normal Text" context="#pop" char="}"/>
0501 <DetectChar context="MaybeGlobRangeOrPop" char="<" lookAhead="1"/>
0502 <DetectIdentifier/>
0503 </context>
0504 <context attribute="Normal Text" lineEndContext="#pop" name="NormalOptionMaybeGroupEnd">
0505 <IncludeRules context="FindNoGroupEndThenPop"/>
0506 <DetectChar context="#pop#pop#pop" char="}" lookAhead="1"/>
0507 </context>
0508 <context attribute="Normal Text" lineEndContext="#pop" name="FindNoGroupEndThenPop">
0509 <RegExpr context="#pop" String="&nogroupend;"/>
0510 </context>
0511 <context attribute="Normal Text" lineEndContext="#stay" name="FindNormalTextOption">
0512 <RegExpr attribute="Normal Text" context="#stay" String="([^[&wordseps;&substseps;]+|&nogroupend;)+"/>
0513 </context>
0514 <context attribute="Normal Text" lineEndContext="#pop" name="NormalOptionMaybeBraceExpansion">
0515 <IncludeRules context="DispatchBraceExpansion"/>
0516 <DetectChar attribute="Normal Text" context="#pop!NormalOptionRecBrace" char="{"/>
0517 </context>
0518
0519 <context attribute="Normal Text" lineEndContext="#pop" name="AssumeEscape">
0520 <LineContinue attribute="Escape" context="#pop"/>
0521 <RegExpr attribute="Escape" context="#pop" String="\\."/>
0522 </context>
0523
0524 <!-- ====== The following rulessets are meant to be included ======== -->
0525
0526 <!-- FindRedirection consumes shell redirection -->
0527 <context attribute="Normal Text" lineEndContext="#pop" name="FindRedirection">
0528 <RegExpr attribute="File Descriptor" context="#pop!AssumeRedirection" String="[0-9]++(?=[<>])"/>
0529 <IncludeRules context="AssumeRedirection"/>
0530 </context>
0531
0532 <!-- DispatchBraceExpansion consumes brace expansions -->
0533 <context attribute="Normal Text" lineEndContext="#pop" name="DispatchBraceExpansion">
0534 <RegExpr context="#pop!BraceExpansion" String="&braceexpansion;" lookAhead="1"/>
0535 <IncludeRules context="IncBraceExpansion"/>
0536 </context>
0537 <context attribute="Normal Text" lineEndContext="#pop" name="DispatchPathBraceExpansion">
0538 <RegExpr context="#pop!PathBraceExpansion" String="&braceexpansion;" lookAhead="1"/>
0539 <IncludeRules context="IncBraceExpansion"/>
0540 </context>
0541 <context attribute="Normal Text" lineEndContext="#pop" name="IncBraceExpansion">
0542 <RegExpr attribute="Escape" context="#pop!SequenceExpression" String="&bracerangeexpansion;"/>
0543 <RegExpr context="#pop" String="&nobraceexpansion;"/>
0544 </context>
0545
0546 <!-- FindPathThenPop consumes path -->
0547 <context attribute="Normal Text" lineEndContext="#pop" name="FindPathThenPop">
0548 <AnyChar attribute="Glob" context="PathThenPop" String="?*#^"/>
0549 <RegExpr attribute="Path" context="PathThenPop" String="&pathpart;"/>
0550 <DetectChar attribute="Glob" context="PathThenPop" char="~"/>
0551 </context>
0552 <context attribute="Path" lineEndContext="#pop#pop" name="IncPath">
0553 <IncludeRules context="FindWord"/>
0554 <IncludeRules context="FindSingleGlob"/>
0555 <IncludeRules context="FindGlobAny"/>
0556 <DetectChar context="ExprGlobParen" char="(" lookAhead="1"/>
0557 <RegExpr attribute="Path" context="#stay" String="&path;"/>
0558 <DetectChar context="MaybeGlobRangeOrPop" char="<" lookAhead="1"/>
0559 <DetectChar context="PathMaybeBraceExpansion" char="{" lookAhead="1"/>
0560 </context>
0561 <context attribute="Path" lineEndContext="#pop#pop" name="PathThenPop">
0562 <AnyChar context="#pop#pop" String="&wordseps_or_extglog;" lookAhead="1"/>
0563 <IncludeRules context="IncPath"/>
0564 <DetectChar context="PathMaybeGroupEnd" char="}" lookAhead="1"/>
0565 <DetectIdentifier attribute="Path"/>
0566 </context>
0567 <context attribute="Path" lineEndContext="#pop" name="PathRecBrace">
0568 <AnyChar context="#pop" String="&wordseps_or_extglog;" lookAhead="1"/>
0569 <IncludeRules context="IncPath"/>
0570 <DetectChar attribute="Path" context="#pop" char="}"/>
0571 <DetectIdentifier attribute="Path"/>
0572 </context>
0573 <context attribute="Glob" lineEndContext="#stay" name="MaybeGlobRangeOrPop" fallthroughContext="#pop#pop">
0574 <IncludeRules context="FindGlobRangeThenPop"/>
0575 </context>
0576 <context attribute="Path" lineEndContext="#pop" name="PathMaybeBraceExpansion">
0577 <IncludeRules context="DispatchPathBraceExpansion"/>
0578 <DetectChar attribute="Path" context="#pop!PathRecBrace" char="{"/>
0579 </context>
0580 <context attribute="Path" lineEndContext="#pop" name="PathMaybeGroupEnd">
0581 <IncludeRules context="FindNoGroupEndThenPop"/>
0582 <DetectChar context="#pop#pop#pop" char="}" lookAhead="1"/>
0583 </context>
0584 <context attribute="Glob" lineEndContext="#stay" name="FindGlobRangeThenPop">
0585 <RegExpr attribute="Glob" context="#pop!InGlobRange" String="<(?=[0-9]*-[0-9]*>)"/>
0586 </context>
0587 <context attribute="Number" lineEndContext="#stay" name="InGlobRange">
0588 <AnyChar attribute="Number" context="#stay" String="0123456789"/>
0589 <DetectChar attribute="Glob" context="#stay" char="-"/>
0590 <DetectChar attribute="Glob" context="#pop" char=">"/>
0591 </context>
0592
0593 <!-- FindPathThenPopInAlternateValue consumes path in ${xx:here}-->
0594 <context attribute="Normal Text" lineEndContext="#pop" name="FindPathThenPopInAlternateValue">
0595 <AnyChar attribute="Glob" context="PathThenPopInAlternateValue" String="&simpleglob;|"/>
0596 <Detect2Chars context="PathThenPopInAlternateValue" char="(" char1="#" lookAhead="1"/>
0597 <AnyChar context="PathThenPopInAlternateValue" String="[(" lookAhead="1"/>
0598 <RegExpr attribute="Path" context="PathThenPopInAlternateValue" String="&pathpart;"/>
0599 </context>
0600 <context attribute="Path" lineEndContext="#pop" name="PathThenPopInAlternateValue">
0601 <AnyChar context="#pop" String="&wordseps_or_extglog;}" lookAhead="1"/>
0602 <IncludeRules context="IncPath"/>
0603 <DetectIdentifier/>
0604 </context>
0605
0606 <context attribute="Glob" lineEndContext="#stay" name="FindGlobAny">
0607 <DetectChar attribute="Glob" context="GlobAnyFlag" char="["/>
0608 </context>
0609 <context attribute="String SingleQ" lineEndContext="#pop" name="GlobAnyFlag" fallthroughContext="#pop!GlobAny">
0610 <DetectChar attribute="Glob Flag" context="#pop!GlobAny" char="^"/>
0611 </context>
0612 <context attribute="String SingleQ" lineEndContext="#pop" name="GlobAny">
0613 <DetectIdentifier attribute="String SingleQ"/>
0614 <DetectChar context="AssumeEscape" char="\" lookAhead="1"/>
0615 <DetectChar attribute="Glob Flag" context="#stay" char="-"/>
0616 <IncludeRules context="FindStrings"/>
0617 <DetectChar attribute="Glob" context="#pop" char="]"/>
0618 <Detect2Chars attribute="Glob" context="GlobClass" char="[" char1=":"/>
0619 </context>
0620 <context attribute="Glob" lineEndContext="#pop#pop" name="GlobClass">
0621 <DetectIdentifier attribute="Pattern"/>
0622 <Detect2Chars attribute="Glob" context="#pop" char=":" char1="]"/>
0623 <DetectChar attribute="Error" context="#pop" char="]"/>
0624 </context>
0625
0626 <context attribute="Pattern" lineEndContext="#stay" name="FindSingleGlob">
0627 <AnyChar attribute="Glob" context="#stay" String="&simpleglob;"/>
0628 </context>
0629
0630 <context attribute="Pattern" lineEndContext="#stay" name="FindGlobPattern">
0631 <AnyChar attribute="Glob" context="#stay" String="&simpleglob;|"/>
0632 <IncludeRules context="FindGlobAny"/>
0633 <IncludeRules context="FindGroupPattern"/>
0634 </context>
0635
0636 <context attribute="Pattern" lineEndContext="#stay" name="FindPattern">
0637 <IncludeRules context="FindGlobPattern"/>
0638 <DetectChar context="GlobRangeOrError" char="<" lookAhead="1"/>
0639 </context>
0640 <context attribute="Glob" lineEndContext="#stay" name="GlobRangeOrError">
0641 <IncludeRules context="FindGlobRangeThenPop"/>
0642 <DetectChar attribute="Error" context="#pop" char="<"/>
0643 </context>
0644
0645 <context attribute="Pattern" lineEndContext="#stay" name="FindSubPattern">
0646 <IncludeRules context="FindGlobPattern"/>
0647 <DetectChar context="GlobRangeOrPattern" char="<" lookAhead="1"/>
0648 </context>
0649 <context attribute="Pattern" lineEndContext="#stay" name="GlobRangeOrPattern">
0650 <IncludeRules context="FindGlobRangeThenPop"/>
0651 <DetectChar attribute="Pattern" context="#pop" char="<"/>
0652 </context>
0653
0654 <context attribute="Pattern" lineEndContext="#stay" name="FindStringDQPattern">
0655 <IncludeRules context="FindGlobPattern"/>
0656 <DetectChar context="GlobRangeOrStringDQ" char="<" lookAhead="1"/>
0657 </context>
0658 <context attribute="String DoubleQ" lineEndContext="#stay" name="GlobRangeOrStringDQ">
0659 <IncludeRules context="FindGlobRangeThenPop"/>
0660 <DetectChar attribute="String DoubleQ" context="#pop" char="<"/>
0661 </context>
0662
0663 <context attribute="Glob Flag" lineEndContext="#stay" name="FindGroupPattern">
0664 <Detect2Chars attribute="Glob Flag" context="GlobPatFlag" char="(" char1="#"/>
0665 <DetectChar attribute="Glob" context="ExtGlobPattern" char="("/>
0666 </context>
0667 <context attribute="Pattern" lineEndContext="#stay" name="ExtGlobPattern">
0668 <DetectChar attribute="Glob" context="#pop" char=")"/>
0669 <IncludeRules context="FindWord"/>
0670 <IncludeRules context="FindSubPattern"/>
0671 <DetectIdentifier attribute="Pattern"/>
0672 </context>
0673 <context attribute="Pattern" lineEndContext="#stay" name="ExtGlobPatternThenPath">
0674 <DetectChar attribute="Glob" context="#pop!PathThenPop" char=")"/>
0675 <IncludeRules context="FindWord"/>
0676 <IncludeRules context="FindSubPattern"/>
0677 <DetectIdentifier attribute="Pattern"/>
0678 </context>
0679
0680 <context attribute="Normal Text" lineEndContext="#pop" name="VarAssign" fallthroughContext="#pop">
0681 <DetectChar attribute="Parameter Expansion Operator" context="Subscript" char="["/>
0682 <DetectChar attribute="Operator" context="#pop!Assign" char="="/>
0683 <Detect2Chars attribute="Operator" context="#pop!Assign" char="+" char1="="/>
0684 </context>
0685
0686 <context attribute="Normal Text" lineEndContext="#pop" name="DispatchKeyword">
0687 <!-- match do and if blocks -->
0688 <Detect2Chars attribute="Control Flow" context="#pop!NotCond" char="i" char1="f" beginRegion="if"/>
0689 <Detect2Chars attribute="Control Flow" context="#pop" char="f" char1="i" endRegion="if"/>
0690 <StringDetect attribute="Control Flow" context="#pop" String="done" endRegion="do"/>
0691 <Detect2Chars attribute="Control Flow" context="#pop" char="d" char1="o" beginRegion="do"/>
0692 <!-- handle while/until as a special case -->
0693 <StringDetect attribute="Control Flow" context="#pop!NotCond" String="while"/>
0694 <StringDetect attribute="Control Flow" context="#pop!NotCond" String="until"/>
0695 <!-- handle for as a special case -->
0696 <StringDetect attribute="Control Flow" context="#pop!Foreach" String="foreach"/>
0697 <StringDetect attribute="Control Flow" context="#pop!For" String="for"/>
0698 <!-- handle select as a special case -->
0699 <StringDetect attribute="Control Flow" context="#pop!Select" String="select"/>
0700 <StringDetect attribute="Control Flow" context="#pop!Repeat" String="repeat"/>
0701 <!-- handle case as a special case -->
0702 <StringDetect attribute="Control Flow" context="#pop!Case" String="case" beginRegion="case"/>
0703 <!-- handle functions with function keyword before keywords -->
0704 <StringDetect attribute="Keyword" context="#pop!FunctionDef" String="function"/>
0705 <StringDetect attribute="Control Flow" context="#pop!Return" String="return"/>
0706 <!-- not a keyword in this context -->
0707 <Detect2Chars attribute="Error" context="#pop" char="i" char1="n"/>
0708 <StringDetect attribute="Error" context="#pop" String="esac"/>
0709 <!-- handle keywords -->
0710 <DetectIdentifier attribute="Control Flow" context="#pop"/>
0711 </context>
0712
0713 <!-- if ! ... and while ! ... -->
0714 <context attribute="Normal Text" lineEndContext="#pop" name="NotCond" fallthroughContext="#pop">
0715 <DetectSpaces attribute="Normal Text" context="#pop!NotCond2"/>
0716 </context>
0717 <context attribute="Normal Text" lineEndContext="#pop" name="NotCond2" fallthroughContext="#pop">
0718 <Detect2Chars attribute="Expression" context="#pop" char="!" char1="&tab;"/>
0719 <Detect2Chars attribute="Expression" context="#pop" char="!" char1=" "/>
0720 <LineContinue attribute="Expression" context="#pop" char="!"/>
0721 </context>
0722
0723 <context attribute="Normal Text" lineEndContext="#pop" name="Foreach" fallthroughContext="#pop">
0724 <LineContinue attribute="Escape" context="#stay"/>
0725 <DetectSpaces attribute="Normal Text" context="#stay"/>
0726 <DetectIdentifier attribute="Normal Text" context="#stay"/>
0727 <DetectChar attribute="Keyword" context="#pop!ForeachWord" char="("/>
0728 </context>
0729 <context attribute="Normal Text" lineEndContext="#stay" name="ForeachWord" fallthroughContext="NormalOption">
0730 <DetectSpaces attribute="Normal Text" context="#stay"/>
0731 <DetectChar attribute="Control" context="#stay" char=";"/>
0732 <DetectChar attribute="Keyword" context="#pop" char=")"/>
0733 <DetectChar attribute="Backquote" context="CommandBackq" char="`"/>
0734 <AnyChar attribute="Control" context="#stay" String="&symbolseps;"/>
0735 </context>
0736
0737 <context attribute="Normal Text" lineEndContext="#pop" name="For" fallthroughContext="#pop">
0738 <LineContinue attribute="Escape" context="#stay"/>
0739 <DetectSpaces attribute="Normal Text" context="#stay"/>
0740 <WordDetect attribute="Keyword" context="#pop!CommandArgs" String="in"/>
0741 <DetectIdentifier attribute="Normal Text" context="#stay"/>
0742 <Detect2Chars attribute="Keyword" context="#pop!ForArithmeticExpr" char="(" char1="("/>
0743 <DetectChar attribute="Keyword" context="#pop!ForeachWord" char="("/>
0744 </context>
0745 <context attribute="Normal Text" lineEndContext="#pop" name="ForArithmeticExpr">
0746 <DetectSpaces attribute="Normal Text" context="#stay"/>
0747 <DetectChar attribute="Control" context="#stay" char=";"/>
0748 <Detect2Chars attribute="Keyword" context="#pop" char=")" char1=")"/>
0749 <IncludeRules context="FindExprDblParen"/>
0750 </context>
0751
0752 <context attribute="Normal Text" lineEndContext="#pop" name="Select" fallthroughContext="#pop">
0753 <LineContinue attribute="Escape" context="#stay"/>
0754 <DetectSpaces attribute="Normal Text" context="#stay"/>
0755 <DetectIdentifier attribute="Normal Text" context="#pop!SelectIn"/>
0756 </context>
0757 <context attribute="Normal Text" lineEndContext="#pop" name="SelectIn" fallthroughContext="#pop">
0758 <LineContinue attribute="Escape" context="#stay"/>
0759 <DetectSpaces attribute="Normal Text" context="#stay"/>
0760 <WordDetect attribute="Keyword" context="#pop!CommandArgs" String="in"/>
0761 </context>
0762
0763 <context attribute="Normal Text" lineEndContext="#pop" name="Repeat" fallthroughContext="#pop!RepeatArithmeticExpr">
0764 <LineContinue attribute="Escape" context="#stay"/>
0765 <DetectSpaces attribute="Normal Text" context="#stay"/>
0766 </context>
0767 <context attribute="Normal Text" lineEndContext="#pop" name="RepeatArithmeticExpr">
0768 <DetectSpaces attribute="Normal Text" context="#pop"/>
0769 <DetectChar attribute="Control" context="#pop" char=";"/>
0770 <IncludeRules context="FindExprDblParen"/>
0771 </context>
0772
0773 <!-- &> and &>> redirection -->
0774 <context attribute="Normal Text" lineEndContext="#pop" name="Prefix&>" fallthroughContext="#pop!FdRedirection">
0775 <Detect2Chars attribute="Redirection" context="#pop!WordRedirection" char=">" char1="|"/>
0776 <Detect2Chars attribute="Redirection" context="#pop!WordRedirection" char=">" char1="!"/>
0777 <AnyChar attribute="Redirection" context="#pop!WordRedirection" String=">|!"/>
0778 </context>
0779
0780 <context attribute="Normal Text" lineEndContext="#pop" name="AssumeRedirection">
0781 <!-- handle output redirection -->
0782 <StringDetect attribute="Redirection" context="#pop!WordRedirection" String=">>|"/>
0783 <StringDetect attribute="Redirection" context="#pop!WordRedirection" String=">>!"/>
0784 <StringDetect attribute="Redirection" context="#pop!WordRedirection" String=">>&|"/>
0785 <StringDetect attribute="Redirection" context="#pop!WordRedirection" String=">>&!"/>
0786 <StringDetect attribute="Redirection" context="#pop!ProcessSubst" String=">>("/>
0787 <Detect2Chars attribute="Redirection" context="#pop!WordRedirection" char=">" char1=">"/>
0788 <Detect2Chars attribute="Redirection" context="#pop!WordRedirection" char=">" char1="|"/>
0789 <Detect2Chars attribute="Redirection" context="#pop!WordRedirection" char=">" char1="!"/>
0790 <StringDetect attribute="Redirection" context="#pop!WordRedirection" String=">&|"/>
0791 <StringDetect attribute="Redirection" context="#pop!WordRedirection" String=">&!"/>
0792 <Detect2Chars attribute="Redirection" context="#pop!FdRedirection" char=">" char1="&"/>
0793 <Detect2Chars attribute="Redirection" context="#pop!ProcessSubst" char=">" char1="("/>
0794 <DetectChar attribute="Redirection" context="#pop!WordRedirection" char=">"/>
0795 <!-- handle input redirection -->
0796 <Detect2Chars attribute="Redirection" context="#pop!ProcessSubst" char="<" char1="("/>
0797 <StringDetect attribute="Redirection" context="#pop!ProcessSubst" String="<<("/>
0798 <StringDetect attribute="Redirection" context="#pop!StringRedirection" String="<<<"/>
0799 <!-- handle here document -->
0800 <Detect2Chars context="#pop!HereDoc" char="<" char1="<" lookAhead="1"/>
0801 <Detect2Chars attribute="Redirection" context="#pop!FdRedirection" char="<" char1="&"/>
0802 <Detect2Chars attribute="Redirection" context="#pop!WordRedirection" char="<" char1=">"/>
0803 <IncludeRules context="FindGlobRangeThenPop"/>
0804 <DetectChar attribute="Redirection" context="#pop!WordRedirection" char="<"/>
0805 </context>
0806 <context attribute="Normal Text" lineEndContext="#pop" name="FdRedirection" fallthroughContext="#pop!FdRedirection2">
0807 <DetectSpaces attribute="Normal Text" context="#pop!FdRedirection2"/>
0808 </context>
0809 <context attribute="Normal Text" lineEndContext="#pop" name="FdRedirection2" fallthroughContext="#pop!WordRedirection2">
0810 <RegExpr attribute="File Descriptor" context="#pop!CloseFile" String="[0-9]+(?=-?&eoexpr;)"/>
0811 </context>
0812 <context attribute="Normal Text" lineEndContext="#pop" name="WordRedirection" fallthroughContext="#pop!WordRedirection2">
0813 <DetectSpaces attribute="Normal Text" context="#pop!WordRedirection2"/>
0814 </context>
0815 <context attribute="Normal Text" lineEndContext="#pop" name="WordRedirection2" fallthroughContext="#pop">
0816 <AnyChar context="#pop" String="&wordseps;`" lookAhead="1"/>
0817 <IncludeRules context="FindWord"/>
0818 <RegExpr attribute="Path" context="PathThenPop" String="&path;"/>
0819 </context>
0820 <context attribute="Normal Text" lineEndContext="#pop" name="StringRedirection" fallthroughContext="#pop!StringRedirection2">
0821 <DetectSpaces attribute="Normal Text" context="#pop!StringRedirection2"/>
0822 </context>
0823 <context attribute="Normal Text" lineEndContext="#pop" name="StringRedirection2">
0824 <AnyChar context="#pop" String="&wordseps;`" lookAhead="1"/>
0825 <IncludeRules context="FindWord"/>
0826 <DetectIdentifier attribute="Normal Text"/>
0827 </context>
0828 <context attribute="Normal Text" lineEndContext="#pop" name="CloseFile" fallthroughContext="#pop">
0829 <DetectChar attribute="Keyword" context="#pop" char="-"/>
0830 </context>
0831
0832 <!-- HereDoc consumes Here-documents. It is called at the beginning of the "<<" construct. -->
0833 <context attribute="Normal Text" lineEndContext="#stay" name="HereDoc">
0834 <RegExpr attribute="Redirection" context="HereDocIQ" String="<<-[ &tab;]*&heredocq;(?=[ &tab;]*$)"/>
0835 <RegExpr attribute="Redirection" context="HereDocINQ" String="<<-[ &tab;]*([^&wordseps;]+)(?=[ &tab;]*$)"/>
0836 <RegExpr attribute="Redirection" context="HereDocQ" String="<<[ &tab;]*&heredocq;(?=[ &tab;]*$)"/>
0837 <RegExpr attribute="Redirection" context="HereDocNQ" String="<<[ &tab;]*([^&wordseps;]+)(?=[ &tab;]*$)"/>
0838
0839 <RegExpr context="HereDocIQCmd" String="(<<-[ &tab;]*&heredocq;)" lookAhead="1"/>
0840 <RegExpr context="HereDocINQCmd" String="(<<-[ &tab;]*([^&wordseps;]+))" lookAhead="1"/>
0841 <RegExpr context="HereDocQCmd" String="(<<[ &tab;]*&heredocq;)" lookAhead="1"/>
0842 <RegExpr context="HereDocNQCmd" String="(<<[ &tab;]*([^&wordseps;]+))" lookAhead="1"/>
0843
0844 <Detect2Chars attribute="Redirection" context="#pop" char="<" char1="<"/><!-- always met -->
0845 </context>
0846
0847 <context attribute="Normal Text" lineEndContext="#pop" name="HereDocRemainder" fallthroughContext="CommandArg">
0848 <AnyChar context="ZshOneLine" String="&|;`" lookAhead="1"/>
0849 <IncludeRules context="CommandArgs"/>
0850 </context>
0851 <context attribute="Normal Text" lineEndContext="#pop" name="ZshOneLine" fallthroughContext="Command">
0852 <IncludeRules context="Start"/>
0853 </context>
0854
0855 <context attribute="Here Doc" lineEndContext="#stay" name="HereDocQ" dynamic="1" fallthroughContext="HereDocText">
0856 <RegExpr attribute="Redirection" context="#pop#pop" String="^%1$" dynamic="1" column="0"/>
0857 </context>
0858
0859 <context attribute="Here Doc" lineEndContext="#stay" name="HereDocNQ" dynamic="1" fallthroughContext="HereDocSubstitutions">
0860 <IncludeRules context="HereDocQ" />
0861 </context>
0862
0863 <context attribute="Here Doc" lineEndContext="#stay" name="HereDocIQ" dynamic="1" fallthroughContext="HereDocText">
0864 <RegExpr attribute="Redirection" context="#pop#pop" String="^\t*%1$" dynamic="1" column="0"/>
0865 </context>
0866
0867 <context attribute="Here Doc" lineEndContext="#stay" name="HereDocINQ" dynamic="1" fallthroughContext="HereDocSubstitutions">
0868 <IncludeRules context="HereDocIQ" />
0869 </context>
0870
0871 <context attribute="Here Doc" lineEndContext="#stay" name="HereDocCmd">
0872 <!-- Only if the redirect is before the command, but as this is too complicated,
0873 check if the redirect is at the beginning of the line. -->
0874 <StringDetect attribute="Redirection" context="ZshOneLine" String="%1" dynamic="true" firstNonSpace="1"/>
0875 <StringDetect attribute="Redirection" context="HereDocRemainder" String="%1" dynamic="true"/>
0876 </context>
0877
0878 <context attribute="Here Doc" lineEndContext="#stay" name="HereDocQCmd" dynamic="1" fallthroughContext="HereDocText">
0879 <IncludeRules context="HereDocCmd"/>
0880 <RegExpr attribute="Redirection" context="#pop#pop" String="^%2$" dynamic="1" column="0"/>
0881 </context>
0882
0883 <context attribute="Here Doc" lineEndContext="#stay" name="HereDocNQCmd" dynamic="1" fallthroughContext="HereDocSubstitutions">
0884 <IncludeRules context="HereDocQCmd"/>
0885 </context>
0886
0887 <context attribute="Here Doc" lineEndContext="#stay" name="HereDocIQCmd" dynamic="1" fallthroughContext="HereDocText">
0888 <IncludeRules context="HereDocCmd"/>
0889 <RegExpr attribute="Redirection" context="#pop#pop" String="^\t*%2$" dynamic="1" column="0"/>
0890 </context>
0891
0892 <context attribute="Here Doc" lineEndContext="#stay" name="HereDocINQCmd" dynamic="1" fallthroughContext="HereDocSubstitutions">
0893 <IncludeRules context="HereDocIQCmd"/>
0894 </context>
0895
0896 <context attribute="Here Doc" lineEndContext="#pop" name="HereDocText">
0897 </context>
0898
0899 <context attribute="Here Doc" lineEndContext="#pop" name="HereDocSubstitutions">
0900 <DetectSpaces attribute="Here Doc"/>
0901 <DetectIdentifier attribute="Here Doc"/>
0902 <DetectChar context="HereDocVariables" char="$" lookAhead="1"/>
0903 <DetectChar attribute="Backquote" context="CommandBackq" char="`"/>
0904 <DetectChar context="AssumeEscape" char="\" lookAhead="1"/>
0905 </context>
0906 <context attribute="Here Doc" lineEndContext="#pop" name="HereDocVariables">
0907 <IncludeRules context="DispatchSubstVariables"/>
0908 <IncludeRules context="DispatchVarNameVariables"/>
0909 <DetectChar attribute="Here Doc" context="#pop" char="$"/>
0910 </context>
0911
0912 <!-- VarName consumes spare variable names and assignments -->
0913 <context attribute="Normal Text" lineEndContext="#pop" name="VarName">
0914 <StringDetect attribute="Builtin" context="#pop!BuiltinGetopts" String="getopts"/>
0915 <StringDetect attribute="Builtin" context="#pop!BuiltinLet" String="let"/>
0916 <DetectIdentifier attribute="Builtin" context="#pop!VarNameArgs"/>
0917 <AnyChar attribute="Builtin" context="#pop!VarNameArgs" String=".:-"/>
0918 </context>
0919 <context attribute="Normal Text" lineEndContext="#pop" name="VarNameArgs" fallthroughContext="#pop!CommandArgs">
0920 <DetectSpaces attribute="Normal Text" context="VarNameArg"/>
0921 <LineContinue attribute="Escape" context="#stay"/>
0922 </context>
0923 <context attribute="Normal Text" lineEndContext="#pop#pop" name="VarNameArg" fallthroughContext="#pop!VarNameArg2">
0924 <!-- In command arguments, do not allow comments after escaped characters.
0925 This avoids highlighting comments within paths or other text. Ex: pathtext\ #no\ comment -->
0926 <DetectChar context="#pop#pop" char="#" lookAhead="1"/>
0927 <AnyChar attribute="Option" context="#pop!ShortOption" String="-+"/>
0928 <DetectChar attribute="Keyword" context="#pop!VarNameArg2" char="="/>
0929 </context>
0930 <context attribute="Normal Text" lineEndContext="#pop" name="VarNameArg2" fallthroughContext="#pop!NormalOption">
0931 <DetectChar attribute="Variable" context="Subscript" char="["/>
0932 <DetectChar attribute="Operator" context="Assign" char="="/>
0933 <DetectChar attribute="Variable" context="AssignArray" char="("/>
0934 <DetectIdentifier attribute="Variable" context="#stay"/>
0935 </context>
0936 <context attribute="Normal Text" lineEndContext="#pop" name="BuiltinGetopts" fallthroughContext="#pop!CommandArgs">
0937 <DetectSpaces attribute="Normal Text" context="#pop!BuiltinGetoptsOpt"/>
0938 <LineContinue attribute="Escape" context="#stay"/>
0939 </context>
0940 <context attribute="Normal Text" lineEndContext="#pop#pop" name="BuiltinGetoptsOpt" fallthroughContext="#pop!BuiltinGetoptsOpt2">
0941 <DetectChar context="#pop#pop" char="#" lookAhead="1"/>
0942 <DetectChar attribute="Keyword" context="#pop!NormalOption" char="="/>
0943 </context>
0944 <context attribute="Normal Text" lineEndContext="#pop" name="BuiltinGetoptsOpt2" fallthroughContext="#pop!NormalOption">
0945 <DetectChar attribute="Operator" context="#stay" char=":"/>
0946 <DetectIdentifier attribute="Normal Text" context="#stay" />
0947 <DetectSpaces attribute="Normal Text" context="#pop!BuiltinGetoptsVar"/>
0948 <AnyChar context="#pop" String="&wordseps_or_extglog;" lookAhead="1"/>
0949 <IncludeRules context="FindWord"/>
0950 <DetectChar context="NormalOptionMaybeBraceExpansion" char="{" lookAhead="1"/>
0951 <DetectChar context="NormalOptionMaybeGroupEnd" char="}" lookAhead="1"/>
0952 <AnyChar attribute="Normal Text" context="#stay" String="/%.0123456789"/>
0953 </context>
0954 <context attribute="Normal Text" lineEndContext="#pop" name="BuiltinGetoptsVar" fallthroughContext="#pop!CommandArgs">
0955 <DetectIdentifier attribute="Variable" context="#pop!CommandArgs"/>
0956 </context>
0957 <context attribute="Normal Text" lineEndContext="#pop" name="BuiltinLet" fallthroughContext="#pop!CommandArgs">
0958 <DetectSpaces attribute="Normal Text" context="#pop!BuiltinLetArgs"/>
0959 <LineContinue attribute="Escape" context="#stay"/>
0960 </context>
0961 <context attribute="Normal Text" lineEndContext="#pop" name="BuiltinLetArgs" fallthroughContext="BuiltinLetArg">
0962 <AnyChar context="BuiltinLetArgsNumber" String="0123456789" lookAhead="1"/>
0963 <IncludeRules context="CommandArgs"/>
0964 </context>
0965 <context attribute="Normal Text" lineEndContext="#pop" name="BuiltinLetArgsNumber" fallthroughContext="#pop!BuiltinLetArg">
0966 <IncludeRules context="FindRedirection"/>
0967 </context>
0968 <context attribute="Normal Text" lineEndContext="#pop#pop" name="BuiltinLetArg" fallthroughContext="#pop!BuiltinLetExpr">
0969 <DetectChar context="#pop#pop" char="#" lookAhead="1"/>
0970 <DetectChar attribute="Keyword" context="#pop!NormalOption" char="="/>
0971 </context>
0972 <context attribute="Normal Text" lineEndContext="#pop" name="BuiltinLetExpr" fallthroughContext="#pop!NormalOption">
0973 <DetectIdentifier attribute="Variable" context="#stay" />
0974 <AnyChar context="#pop" String="&wordseps_or_extglog;" lookAhead="1"/>
0975 <AnyChar attribute="Operator" context="#stay" String="+-!%=^:"/>
0976 <AnyChar context="Number" String="0123456789." lookAhead="1"/>
0977 <DetectChar attribute="Parameter Expansion Operator" context="Subscript" char="["/>
0978 <IncludeRules context="FindWord"/>
0979 <Detect2Chars attribute="BaseN" context="NoPrefix" char="#" char1="#"/>
0980 <DetectChar attribute="Error" context="#stay" char="#"/>
0981 <DetectChar context="NormalOptionMaybeBraceExpansion" char="{" lookAhead="1"/>
0982 <DetectChar context="NormalOptionMaybeGroupEnd" char="}" lookAhead="1"/>
0983 </context>
0984
0985 <!-- ProcessSubst handles <(command) and >(command) -->
0986 <context attribute="Normal Text" lineEndContext="#stay" name="ProcessSubst" fallthroughContext="Command">
0987 <DetectChar attribute="Redirection" context="#pop" char=")"/>
0988 <IncludeRules context="Start"/>
0989 </context>
0990
0991 <!-- StringSQ consumes anything till ' -->
0992 <context attribute="String SingleQ" lineEndContext="#stay" name="StringSQ">
0993 <DetectSpaces attribute="String SingleQ"/>
0994 <DetectIdentifier attribute="String SingleQ"/>
0995 <DetectChar attribute="String SingleQ" context="#pop" char="'"/>
0996 </context>
0997
0998 <!-- StringDQ consumes anything till ", substitutes vars and expressions -->
0999 <context attribute="String DoubleQ" lineEndContext="#stay" name="StringDQ">
1000 <DetectSpaces attribute="String DoubleQ"/>
1001 <DetectIdentifier attribute="String DoubleQ"/>
1002 <DetectChar attribute="String DoubleQ" context="#pop" char="""/>
1003 <DetectChar context="StringDQEscape" char="\" lookAhead="1"/>
1004 <DetectChar context="StringDQDispatchVariables" char="$" lookAhead="1"/>
1005 <DetectChar attribute="Backquote" context="RegularBackq" char="`"/>
1006 </context>
1007 <context attribute="String DoubleQ" lineEndContext="#stay" name="StringDQDispatchVariables">
1008 <IncludeRules context="DispatchSubstVariables"/>
1009 <IncludeRules context="DispatchVarNameVariables"/>
1010 <DetectChar attribute="String DoubleQ" context="#pop" char="$"/>
1011 </context>
1012 <context attribute="String DoubleQ" lineEndContext="#pop" name="StringDQEscape">
1013 <Detect2Chars attribute="String Escape" context="#pop" char="\" char1="""/>
1014 <Detect2Chars attribute="String Escape" context="#pop" char="\" char1="\"/>
1015 <Detect2Chars attribute="String Escape" context="#pop" char="\" char1="`"/>
1016 <Detect2Chars attribute="String Escape" context="#pop" char="\" char1="$"/>
1017 <LineContinue attribute="String Escape" context="#pop"/>
1018 <DetectChar attribute="String DoubleQ" context="#pop" char="\"/>
1019 </context>
1020
1021 <!-- RegularBackq consumes anything till ` -->
1022 <context attribute="Normal Text" lineEndContext="#stay" name="RegularBackq" fallthroughContext="Command">
1023 <DetectChar attribute="Backquote" context="#pop" char="`"/>
1024 <DetectChar attribute="Comment" context="CommentBackq" char="#"/>
1025 <IncludeRules context="Start"/>
1026 </context>
1027
1028 <!-- StringEsc eats till ', but escaping many characters -->
1029 <context attribute="String SingleQ" lineEndContext="#stay" name="StringEsc">
1030 <DetectSpaces attribute="String SingleQ"/>
1031 <DetectIdentifier attribute="String SingleQ"/>
1032 <DetectChar attribute="String SingleQ" context="#pop" char="'"/>
1033 <RegExpr attribute="String Escape" context="#stay" String="\\(?:[abefnrtv\\']|[0-7]{1,3}|x[A-Fa-f0-9]{1,2}|c.)"/>
1034 </context>
1035
1036 <context attribute="Normal Text" lineEndContext="#stay" name="FindWord">
1037 <IncludeRules context="FindStrings"/>
1038 <DetectChar context="RegularVariable" char="$" lookAhead="1"/>
1039 <DetectChar attribute="Backquote" context="RegularBackq" char="`"/>
1040 <DetectChar context="AssumeEscape" char="\" lookAhead="1"/>
1041 </context>
1042 <context attribute="Normal Text" lineEndContext="#pop" name="RegularVariable">
1043 <IncludeRules context="DispatchVariables"/>
1044 <DetectChar attribute="Normal Text" context="#pop" char="$"/>
1045 </context>
1046
1047 <context attribute="Normal Text" lineEndContext="#pop" name="FindStrings">
1048 <DetectChar attribute="String SingleQ" context="StringSQ" char="'"/>
1049 <DetectChar attribute="String DoubleQ" context="StringDQ" char="""/>
1050 </context>
1051
1052 <!-- SubstCommand is called after a $( is encountered -->
1053 <context attribute="Normal Text" lineEndContext="#stay" name="SubstCommand" fallthroughContext="Command">
1054 <DetectChar attribute="Parameter Expansion" context="#pop" char=")" endRegion="subshell"/>
1055 <IncludeRules context="Start"/>
1056 </context>
1057
1058 <!-- VarBraceStart is called as soon as ${ is encoutered -->
1059 <context attribute="Variable" lineEndContext="#pop" name="VarBraceStart" fallthroughContext="#pop!CheckVarAlt">
1060 <DetectChar attribute="Parameter Expansion" context="#pop!VarFlags" char="("/>
1061 <IncludeRules context="VarFlagsVar"/>
1062 </context>
1063 <context attribute="Variable" lineEndContext="#stay" name="VarBraceStartRecursive" fallthroughContext="#pop#pop!CheckVarAlt">
1064 <Detect2Chars attribute="Parameter Expansion" context="VarBraceStart" char="$" char1="{"/>
1065 <StringDetect context="#pop!ExprDblParenSubstOrSubstCommand" String="$((" lookAhead="1"/>
1066 <Detect2Chars attribute="Parameter Expansion" context="#pop!SubstCommand" char="$" char1="(" beginRegion="subshell"/>
1067 <DetectChar attribute="Error" context="#pop" char="$"/>
1068 </context>
1069 <context attribute="Error" lineEndContext="#stay" name="VarError">
1070 <DetectChar attribute="Parameter Expansion" context="#pop" char="}"/>
1071 </context>
1072 <context attribute="Normal Text" lineEndContext="#stay" name="CheckVarAlt" fallthroughContext="#pop!VarError">
1073 <DetectChar attribute="Parameter Expansion" context="#pop" char="}"/>
1074 <StringDetect attribute="Parameter Expansion Operator" context="#stay" String="[@]"/>
1075 <StringDetect attribute="Parameter Expansion Operator" context="#stay" String="[*]"/>
1076 <DetectChar attribute="Parameter Expansion Operator" context="Subscript" char="["/>
1077 <Detect2Chars attribute="Parameter Expansion Operator" context="#pop!AlternatePatternValue" char="%" char1="%"/>
1078 <Detect2Chars attribute="Parameter Expansion Operator" context="#pop!AlternatePatternValue" char="#" char1="#"/>
1079 <AnyChar attribute="Parameter Expansion Operator" context="#pop!AlternatePatternValue" String="#%"/>
1080 <AnyChar attribute="Parameter Expansion Operator" context="#pop!AlternateValue" String="-+=?"/>
1081 <DetectChar attribute="Parameter Expansion Operator" context="#pop!AlternateValuePrefix" char=":"/>
1082 <Detect2Chars attribute="Parameter Expansion Operator" context="#pop!VarBraceSubst" char="/" char1="/"/>
1083 <DetectChar attribute="Parameter Expansion Operator" context="#pop!VarBraceSubst" char="/"/>
1084 </context>
1085 <context attribute="Parameter Expansion" lineEndContext="#stay" name="AlternateValuePrefix" fallthroughContext="#pop!VarSub">
1086 <Detect2Chars attribute="Parameter Expansion Operator" context="#pop!AlternateValue" char="^" char1="^"/>
1087 <DetectChar attribute="Parameter Expansion Operator" context="#pop!AlternatePatternValue" char="#"/>
1088 <AnyChar attribute="Parameter Expansion Operator" context="#pop!AlternateValue" String="-+=?|*^"/>
1089 <Detect2Chars attribute="Parameter Expansion Operator" context="#pop!AlternateValue" char=":" char1="="/>
1090 <DetectChar attribute="Parameter Expansion Operator" context="#pop!VarBraceSubst" char="/"/>
1091
1092 <!-- Modifiers -->
1093 <AnyChar attribute="Parameter Expansion" context="#pop!VarBraceModifiers" String="aAcehlpPqQrsg&tux" lookAhead="1"/>
1094 </context>
1095
1096 <!-- called as soon as ${xxx:y (with y a modifier) is encoutered -->
1097 <context attribute="Parameter Expansion" lineEndContext="#stay" name="VarBraceModifiers">
1098 <DetectChar attribute="Parameter Expansion" context="#pop" char="}"/>
1099 <DetectChar attribute="Parameter Expansion Operator" context="#stay" char=":"/>
1100 <AnyChar attribute="Parameter Expansion" context="VarBraceModifier_h" String="ht"/>
1101 <DetectChar attribute="Parameter Expansion" context="VarBraceModifier_s" char="s"/>
1102 <Detect2Chars attribute="Parameter Expansion" context="VarBraceModifier_s" char="g" char1="s"/>
1103 </context>
1104 <context attribute="Parameter Expansion" lineEndContext="#stay" name="VarBraceModifier_h" fallthroughContext="#pop">
1105 <AnyChar attribute="Number" context="#stay" String="0123456789"/>
1106 </context>
1107
1108 <!-- called as soon as ${xxx:s and ${xxx:gs is encoutered -->
1109 <context attribute="Parameter Expansion" lineEndContext="#stay" name="VarBraceModifier_s">
1110 <DetectChar attribute="Error" context="#pop#pop" char="}"/>
1111 <DetectChar attribute="Parameter Expansion Operator" context="#pop!VarBraceModifier_s_Str" char="/"/>
1112 <DetectChar context="AssumeEscape" char="\" lookAhead="1"/>
1113 </context>
1114 <context attribute="String SingleQ" lineEndContext="#stay" name="VarBraceModifier_s_Str">
1115 <DetectChar attribute="Parameter Expansion" context="#pop#pop" char="}"/>
1116 <DetectChar attribute="Parameter Expansion Operator" context="#pop!VarBraceModifier_s_Rep" char="/"/>
1117 <DetectChar context="AssumeEscape" char="\" lookAhead="1"/>
1118 <DetectChar attribute="String SingleQ" context="RecursiveVarBraceModifier_s" char="{"/>
1119 </context>
1120 <context attribute="String SingleQ" lineEndContext="#stay" name="RecursiveVarBraceModifier_s">
1121 <DetectChar context="AssumeEscape" char="\" lookAhead="1"/>
1122 <DetectChar attribute="String SingleQ" context="#pop" char="}"/>
1123 </context>
1124 <context attribute="String SingleQ" lineEndContext="#stay" name="VarBraceModifier_s_Rep">
1125 <DetectChar attribute="Parameter Expansion" context="#pop#pop" char="}"/>
1126 <DetectChar attribute="Parameter Expansion Operator" context="#pop" char="/"/>
1127 <DetectChar attribute="String SingleQ" context="RecursiveVarBraceModifier_s" char="{"/>
1128 </context>
1129
1130 <!-- called as soon as ${xxx: is encoutered -->
1131 <context attribute="Normal Text" lineEndContext="#stay" name="VarSub">
1132 <DetectChar attribute="Parameter Expansion" context="#pop" char="}"/>
1133 <AnyChar context="VarOffset" String="0123456789" lookAhead="1"/>
1134 <AnyChar attribute="Operator" context="#stay" String="+-!~*/%<>=&^|"/>
1135 <DetectChar attribute="Parameter Expansion Operator" context="#stay" char=":"/>
1136 <DetectChar context="VarVariables" char="$" lookAhead="1"/>
1137 <IncludeRules context="FindStrings"/>
1138 <DetectChar attribute="Backquote" context="RegularBackq" char="`"/>
1139 <DetectChar context="AssumeEscape" char="\" lookAhead="1"/>
1140 </context>
1141 <context attribute="Command" lineEndContext="#pop" name="VarVariables">
1142 <IncludeRules context="DispatchVariables"/>
1143 <DetectChar attribute="Error" context="#pop" char="$"/>
1144 </context>
1145 <context attribute="Number" lineEndContext="#pop" name="VarOffset" fallthroughContext="#pop">
1146 <Detect2Chars attribute="Hex" context="#pop!Hex" char="0" char1="x"/>
1147 <Detect2Chars attribute="Hex" context="#pop!Hex" char="0" char1="X"/>
1148 <AnyChar attribute="Number" context="#stay" String="0123456789_"/>
1149 <DetectChar attribute="Base" context="#stay" char="#"/>
1150 </context>
1151
1152 <!-- called as soon as ${xxx:-, etc are encoutered -->
1153 <context attribute="String DoubleQ" lineEndContext="#stay" name="AlternateValue">
1154 <DetectChar attribute="String DoubleQ" context="RecursiveAlternateValue" char="{"/>
1155 <DetectChar attribute="Parameter Expansion" context="#pop" char="}"/>
1156 <IncludeRules context="FindWord"/>
1157 <IncludeRules context="FindPathThenPopInAlternateValue"/>
1158 <DetectIdentifier attribute="String DoubleQ"/>
1159 </context>
1160 <context attribute="String DoubleQ" lineEndContext="#stay" name="RecursiveAlternateValue">
1161 <DetectChar attribute="String DoubleQ" context="RecursiveAlternateValue" char="{"/>
1162 <DetectChar attribute="String DoubleQ" context="#pop" char="}"/>
1163 <IncludeRules context="FindWord"/>
1164 <IncludeRules context="FindPathThenPopInAlternateValue"/>
1165 <DetectIdentifier attribute="String DoubleQ"/>
1166 </context>
1167
1168 <!-- called as soon as ${xxx%, etc are encoutered -->
1169 <context attribute="String DoubleQ" lineEndContext="#stay" name="AlternatePatternValue">
1170 <DetectChar attribute="String DoubleQ" context="RecursiveAlternatePatternValue" char="{"/>
1171 <DetectChar attribute="Parameter Expansion" context="#pop" char="}"/>
1172 <IncludeRules context="FindWord"/>
1173 <IncludeRules context="FindStringDQPattern"/>
1174 <DetectIdentifier attribute="String DoubleQ"/>
1175 </context>
1176 <context attribute="String DoubleQ" lineEndContext="#stay" name="RecursiveAlternatePatternValue">
1177 <DetectChar attribute="String DoubleQ" context="RecursiveAlternateValue" char="{"/>
1178 <DetectChar attribute="String DoubleQ" context="#pop" char="}"/>
1179 <IncludeRules context="FindWord"/>
1180 <IncludeRules context="FindStringDQPattern"/>
1181 <DetectIdentifier attribute="String DoubleQ"/>
1182 </context>
1183
1184 <!-- called as soon as ${xxx/ ${xxx// ${xxx:/ are encoutered -->
1185 <context attribute="Normal Text" lineEndContext="#stay" name="VarBraceSubst" fallthroughContext="#pop!VarBraceSubstPat">
1186 <Detect2Chars attribute="Parameter Expansion Operator" context="#pop!VarBraceSubstPat" char="#" char1="%"/>
1187 <AnyChar attribute="Parameter Expansion Operator" context="#pop!VarBraceSubstPat" String="#%"/>
1188 </context>
1189 <context attribute="Pattern" lineEndContext="#stay" name="VarBraceSubstPat">
1190 <DetectChar attribute="Parameter Expansion Operator" context="#pop!AlternateValue" char="/"/>
1191 <DetectChar attribute="String DoubleQ" context="RecursiveAlternateValue" char="{"/>
1192 <DetectChar attribute="Parameter Expansion" context="#pop" char="}"/>
1193 <IncludeRules context="FindWord"/>
1194 <IncludeRules context="FindSubPattern"/>
1195 <DetectIdentifier attribute="Pattern"/>
1196 </context>
1197
1198 <!-- called as soon as ${( is encoutered -->
1199 <context attribute="Parameter Expansion" lineEndContext="#stay" name="VarFlags">
1200 <AnyChar attribute="Parameter Expansion Operator" context="#stay" String="#%*q@AabcCDefFikLnoOPqQ+-tuUvVwWXz0~mSBEMNR"/>
1201 <AnyChar attribute="Parameter Expansion Operator" context="VarFlag_s" String="sjgZ_"/>
1202 <AnyChar attribute="Parameter Expansion Operator" context="VarFlag_l" String="lrI"/>
1203 <DetectChar attribute="Parameter Expansion Operator" context="#pop!VarFlagsSubs" char="p"/>
1204
1205 <DetectChar attribute="Parameter Expansion" context="#pop!VarFlagsVar" char=")"/>
1206 <DetectChar attribute="Error" context="#pop" char="}"/>
1207 </context>
1208 <context attribute="Parameter Expansion" lineEndContext="#stay" name="VarFlagsSubs">
1209 <AnyChar attribute="Parameter Expansion Operator" context="#stay" String="#q@AabcCDefFikLnoOPqQ+-tuUvVwWXz0~mSBEMNRp"/>
1210 <AnyChar attribute="Parameter Expansion Operator" context="VarFlag_s" String="gZ"/>
1211 <AnyChar attribute="Parameter Expansion Operator" context="VarFlag_ps" String="sj_"/>
1212 <AnyChar attribute="Parameter Expansion Operator" context="VarFlag_pl" String="lrI"/>
1213
1214 <DetectChar attribute="Parameter Expansion" context="#pop!VarFlagsVar" char=")"/>
1215 <DetectChar attribute="Error" context="#pop" char="}"/>
1216 </context>
1217 <context attribute="Variable" lineEndContext="#stay" name="VarFlagsVar" fallthroughContext="#pop!CheckVarAlt">
1218 <DetectChar context="VarBraceStartRecursive" char="$" lookAhead="1"/>
1219 <DetectChar attribute="Parameter Expansion" context="#pop" char="}"/>
1220 <DetectChar attribute="String DoubleQ" context="StringDQ" char="""/>
1221 <AnyChar attribute="Parameter Expansion Operator" context="#stay" String="#+^=~"/>
1222 <DetectIdentifier attribute="Variable" context="#pop!CheckVarAlt"/>
1223 <AnyChar attribute="Variable" context="#pop!CheckVarAlt" String="*@?$-"/>
1224 <Int attribute="Variable" context="#pop!CheckVarAlt" additionalDeliminator="#~=^+{}[]:-/$"/>
1225 <Detect2Chars context="#pop!VarSubShell" char="!" char1="}" lookAhead="1"/>
1226 <DetectChar attribute="Parameter Expansion Operator" context="#pop!AlternateValue" char="!"/>
1227 </context>
1228
1229 <context attribute="Parameter Expansion" lineEndContext="#stay" name="VarSubShell">
1230 <DetectChar attribute="Variable" context="#pop!CheckVarAlt" char="!"/>
1231 </context>
1232
1233 <context attribute="Parameter Expansion" lineEndContext="#stay" name="VarFlag_s">
1234 <DetectChar attribute="Parameter Expansion Operator" context="#pop!VarFlag_s[" char="["/>
1235 <DetectChar attribute="Parameter Expansion Operator" context="#pop!VarFlag_s<" char="<"/>
1236 <DetectChar attribute="Parameter Expansion Operator" context="#pop!VarFlag_s{" char="{"/>
1237 <DetectChar attribute="Parameter Expansion Operator" context="#pop!VarFlag_s(" char="("/>
1238 <RegExpr attribute="Parameter Expansion Operator" context="#pop!VarFlag_sx" String="(.)"/>
1239 </context>
1240 <context attribute="String SingleQ" lineEndContext="#stay" name="VarFlag_s[">
1241 <DetectChar attribute="Parameter Expansion Operator" context="#pop" char="]"/>
1242 </context>
1243 <context attribute="String SingleQ" lineEndContext="#stay" name="VarFlag_s<">
1244 <DetectChar attribute="Parameter Expansion Operator" context="#pop" char=">"/>
1245 </context>
1246 <context attribute="String SingleQ" lineEndContext="#stay" name="VarFlag_s{">
1247 <DetectChar attribute="Parameter Expansion Operator" context="#pop" char="}"/>
1248 </context>
1249 <context attribute="String SingleQ" lineEndContext="#stay" name="VarFlag_s(">
1250 <DetectChar attribute="Parameter Expansion Operator" context="#pop" char=")"/>
1251 </context>
1252 <context attribute="String SingleQ" lineEndContext="#stay" name="VarFlag_sx">
1253 <DetectChar attribute="Parameter Expansion Operator" context="#pop" char="1" dynamic="1"/>
1254 </context>
1255
1256 <context attribute="Normal Text" lineEndContext="#stay" name="VarFlag_l">
1257 <DetectChar attribute="Parameter Expansion Operator" context="#pop!VarFlag_l[" char="["/>
1258 <DetectChar attribute="Parameter Expansion Operator" context="#pop!VarFlag_l<" char="<"/>
1259 <DetectChar attribute="Parameter Expansion Operator" context="#pop!VarFlag_l{" char="{"/>
1260 <DetectChar attribute="Parameter Expansion Operator" context="#pop!VarFlag_l(" char="("/>
1261 <RegExpr attribute="Parameter Expansion Operator" context="#pop!VarFlag_lx" String="(.)"/>
1262 </context>
1263 <context attribute="Normal Text" lineEndContext="#stay" name="VarFlag_l[">
1264 <Detect2Chars attribute="Parameter Expansion Operator" context="#pop!VarFlag_l[s" char="]" char1="["/>
1265 <DetectChar attribute="Parameter Expansion Operator" context="#pop" char="]"/>
1266 <IncludeRules context="FindExprDblParen"/>
1267 </context>
1268 <context attribute="Normal Text" lineEndContext="#stay" name="VarFlag_l<">
1269 <Detect2Chars attribute="Parameter Expansion Operator" context="#pop!VarFlag_l<s" char=">" char1="<"/>
1270 <DetectChar attribute="Parameter Expansion Operator" context="#pop" char=">"/>
1271 <IncludeRules context="FindExprDblParen"/>
1272 </context>
1273 <context attribute="Normal Text" lineEndContext="#stay" name="VarFlag_l{">
1274 <Detect2Chars attribute="Parameter Expansion Operator" context="#pop!VarFlag_l{s" char="}" char1="{"/>
1275 <DetectChar attribute="Parameter Expansion Operator" context="#pop" char="}"/>
1276 <IncludeRules context="FindExprDblParen"/>
1277 </context>
1278 <context attribute="Normal Text" lineEndContext="#stay" name="VarFlag_l(">
1279 <Detect2Chars attribute="Parameter Expansion Operator" context="#pop!VarFlag_l(s" char=")" char1="("/>
1280 <DetectChar attribute="Parameter Expansion Operator" context="#pop" char=")"/>
1281 <IncludeRules context="FindExprDblParen"/>
1282 </context>
1283 <context attribute="Normal Text" lineEndContext="#stay" name="VarFlag_lx">
1284 <RegExpr attribute="Parameter Expansion Operator" context="#pop!VarFlag_lxs" String="(%1)%1" dynamic="1"/>
1285 <DetectChar attribute="Parameter Expansion Operator" context="#pop" char="1" dynamic="1"/>
1286 <IncludeRules context="FindExprDblParen"/>
1287 </context>
1288 <context attribute="String SingleQ" lineEndContext="#stay" name="VarFlag_l[s">
1289 <Detect2Chars attribute="Parameter Expansion Operator" context="#stay" char="]" char1="["/>
1290 <DetectChar attribute="Parameter Expansion Operator" context="#pop" char="]"/>
1291 </context>
1292 <context attribute="String SingleQ" lineEndContext="#stay" name="VarFlag_l<s">
1293 <Detect2Chars attribute="Parameter Expansion Operator" context="#stay" char=">" char1="<"/>
1294 <DetectChar attribute="Parameter Expansion Operator" context="#pop" char=">"/>
1295 </context>
1296 <context attribute="String SingleQ" lineEndContext="#stay" name="VarFlag_l{s">
1297 <Detect2Chars attribute="Parameter Expansion Operator" context="#stay" char="}" char1="{"/>
1298 <DetectChar attribute="Parameter Expansion Operator" context="#pop" char="}"/>
1299 </context>
1300 <context attribute="String SingleQ" lineEndContext="#stay" name="VarFlag_l(s">
1301 <Detect2Chars attribute="Parameter Expansion Operator" context="#stay" char=")" char1="("/>
1302 <DetectChar attribute="Parameter Expansion Operator" context="#pop" char=")"/>
1303 </context>
1304 <context attribute="String SingleQ" lineEndContext="#stay" name="VarFlag_lxs">
1305 <StringDetect attribute="Parameter Expansion Operator" context="#stay" String="%1%1" dynamic="1"/>
1306 <DetectChar attribute="Parameter Expansion Operator" context="#pop" char="1" dynamic="1"/>
1307 </context>
1308
1309 <context attribute="Parameter Expansion" lineEndContext="#stay" name="VarFlag_ps">
1310 <DetectChar attribute="Parameter Expansion Operator" context="#pop!VarFlag_ps[" char="["/>
1311 <DetectChar attribute="Parameter Expansion Operator" context="#pop!VarFlag_ps<" char="<"/>
1312 <DetectChar attribute="Parameter Expansion Operator" context="#pop!VarFlag_ps{" char="{"/>
1313 <DetectChar attribute="Parameter Expansion Operator" context="#pop!VarFlag_ps(" char="("/>
1314 <RegExpr attribute="Parameter Expansion Operator" context="#pop!VarFlag_psx" String="(.)"/>
1315 </context>
1316 <context attribute="String SingleQ" lineEndContext="#stay" name="VarFlag_ps[">
1317 <DetectChar attribute="Parameter Expansion Operator" context="#pop" char="]"/>
1318 <RegExpr attribute="Variable" context="#stay" String="\$(&varname;|[0-9]+)(?=\])"/>
1319 </context>
1320 <context attribute="String SingleQ" lineEndContext="#stay" name="VarFlag_ps<">
1321 <DetectChar attribute="Parameter Expansion Operator" context="#pop" char=">"/>
1322 <RegExpr attribute="Variable" context="#stay" String="\$(&varname;|[0-9]+)(?=>)"/>
1323 </context>
1324 <context attribute="String SingleQ" lineEndContext="#stay" name="VarFlag_ps{">
1325 <DetectChar attribute="Parameter Expansion Operator" context="#pop" char="}"/>
1326 <RegExpr attribute="Variable" context="#stay" String="\$(&varname;|[0-9]+)(?=})"/>
1327 </context>
1328 <context attribute="String SingleQ" lineEndContext="#stay" name="VarFlag_ps(">
1329 <DetectChar attribute="Parameter Expansion Operator" context="#pop" char=")"/>
1330 <RegExpr attribute="Variable" context="#stay" String="\$(&varname;|[0-9]+)(?=\))"/>
1331 </context>
1332 <context attribute="String SingleQ" lineEndContext="#stay" name="VarFlag_psx">
1333 <DetectChar attribute="Parameter Expansion Operator" context="#pop" char="1" dynamic="1"/>
1334 <RegExpr attribute="Variable" context="#stay" String="\$(?!%1)(?:[A-Za-z_](?:(?!%1)[A-Za-z0-9_])*+|(?:(?!%1)[0-9])++)(?=%1)" dynamic="1"/>
1335 <RegExpr attribute="String SingleQ" context="#stay" String="[^%1]+" dynamic="1"/>
1336 </context>
1337
1338 <context attribute="Normal Text" lineEndContext="#stay" name="VarFlag_pl">
1339 <DetectChar attribute="Parameter Expansion Operator" context="#pop!VarFlag_pl[" char="["/>
1340 <DetectChar attribute="Parameter Expansion Operator" context="#pop!VarFlag_pl<" char="<"/>
1341 <DetectChar attribute="Parameter Expansion Operator" context="#pop!VarFlag_pl{" char="{"/>
1342 <DetectChar attribute="Parameter Expansion Operator" context="#pop!VarFlag_pl(" char="("/>
1343 <RegExpr attribute="Parameter Expansion Operator" context="#pop!VarFlag_plx" String="(.)"/>
1344 </context>
1345 <context attribute="Normal Text" lineEndContext="#stay" name="VarFlag_pl[">
1346 <Detect2Chars attribute="Parameter Expansion Operator" context="#pop!VarFlag_pl[s" char="]" char1="["/>
1347 <DetectChar attribute="Parameter Expansion Operator" context="#pop" char="]"/>
1348 <IncludeRules context="FindExprDblParen"/>
1349 </context>
1350 <context attribute="Normal Text" lineEndContext="#stay" name="VarFlag_pl<">
1351 <Detect2Chars attribute="Parameter Expansion Operator" context="#pop!VarFlag_pl<s" char=">" char1="<"/>
1352 <DetectChar attribute="Parameter Expansion Operator" context="#pop" char=">"/>
1353 <IncludeRules context="FindExprDblParen"/>
1354 </context>
1355 <context attribute="Normal Text" lineEndContext="#stay" name="VarFlag_pl{">
1356 <Detect2Chars attribute="Parameter Expansion Operator" context="#pop!VarFlag_pl{s" char="}" char1="{"/>
1357 <DetectChar attribute="Parameter Expansion Operator" context="#pop" char="}"/>
1358 <IncludeRules context="FindExprDblParen"/>
1359 </context>
1360 <context attribute="Normal Text" lineEndContext="#stay" name="VarFlag_pl(">
1361 <Detect2Chars attribute="Parameter Expansion Operator" context="#pop!VarFlag_pl(s" char=")" char1="("/>
1362 <DetectChar attribute="Parameter Expansion Operator" context="#pop" char=")"/>
1363 <IncludeRules context="FindExprDblParen"/>
1364 </context>
1365 <context attribute="Normal Text" lineEndContext="#stay" name="VarFlag_plx">
1366 <RegExpr attribute="Parameter Expansion Operator" context="#pop!VarFlag_plxs" String="(%1)%1" dynamic="1"/>
1367 <DetectChar attribute="Parameter Expansion Operator" context="#pop" char="1" dynamic="1"/>
1368 <IncludeRules context="FindExprDblParen"/>
1369 </context>
1370 <context attribute="String SingleQ" lineEndContext="#stay" name="VarFlag_pl[s">
1371 <Detect2Chars attribute="Parameter Expansion Operator" context="#stay" char="]" char1="["/>
1372 <IncludeRules context="VarFlag_ps["/>
1373 </context>
1374 <context attribute="String SingleQ" lineEndContext="#stay" name="VarFlag_pl<s">
1375 <Detect2Chars attribute="Parameter Expansion Operator" context="#stay" char=">" char1="<"/>
1376 <IncludeRules context="VarFlag_ps<"/>
1377 </context>
1378 <context attribute="String SingleQ" lineEndContext="#stay" name="VarFlag_pl{s">
1379 <Detect2Chars attribute="Parameter Expansion Operator" context="#stay" char="}" char1="{"/>
1380 <IncludeRules context="VarFlag_ps{"/>
1381 </context>
1382 <context attribute="String SingleQ" lineEndContext="#stay" name="VarFlag_pl(s">
1383 <Detect2Chars attribute="Parameter Expansion Operator" context="#stay" char=")" char1="("/>
1384 <IncludeRules context="VarFlag_ps("/>
1385 </context>
1386 <context attribute="String SingleQ" lineEndContext="#stay" name="VarFlag_plxs">
1387 <StringDetect attribute="Parameter Expansion Operator" context="#stay" String="%1%1" dynamic="1"/>
1388 <IncludeRules context="VarFlag_psx"/>
1389 </context>
1390
1391 <context attribute="Escape" lineEndContext="#pop" name="BraceExpansion">
1392 <DetectChar attribute="Escape" context="#pop!BraceExpansion2" char="{"/>
1393 </context>
1394 <context attribute="Escape" lineEndContext="#pop" name="BraceExpansion2">
1395 <DetectChar attribute="Operator" context="#stay" char=","/>
1396 <DetectChar attribute="Escape" context="#pop" char="}"/>
1397 <DetectChar context="EscapeMaybeBraceExpansion" char="{" lookAhead="1"/>
1398 <DetectChar context="AssumeEscape" char="\" lookAhead="1"/>
1399 <DetectChar attribute="Backquote" context="CommandBackq" char="`"/>
1400 <DetectChar context="BraceExpansionVariables" char="$" lookAhead="1"/>
1401 <IncludeRules context="FindStrings"/>
1402 <IncludeRules context="FindPattern"/>
1403 <DetectIdentifier attribute="Escape"/>
1404 </context>
1405 <context attribute="Escape" lineEndContext="#pop" name="EscapeMaybeBraceExpansion">
1406 <IncludeRules context="DispatchBraceExpansion"/>
1407 <DetectChar attribute="Escape" context="#pop!BraceExpansion2" char="{"/>
1408 </context>
1409 <context attribute="Escape" lineEndContext="#pop" name="BraceExpansionVariables">
1410 <IncludeRules context="DispatchVariables"/>
1411 <DetectChar attribute="Escape" context="#pop" char="$"/>
1412 </context>
1413
1414 <context attribute="Escape" lineEndContext="#pop" name="PathBraceExpansion">
1415 <DetectChar attribute="Escape" context="#pop!PathBraceExpansion2" char="{"/>
1416 </context>
1417 <context attribute="Path" lineEndContext="#pop" name="PathBraceExpansion2">
1418 <DetectChar attribute="Operator" context="#stay" char=","/>
1419 <DetectChar attribute="Escape" context="#pop" char="}"/>
1420 <DetectChar context="PathMaybeBraceExpansion" char="{" lookAhead="1"/>
1421 <IncludeRules context="FindWord"/>
1422 <IncludeRules context="FindPattern"/>
1423 <DetectIdentifier attribute="Path"/>
1424 </context>
1425
1426 <context attribute="Normal Text" lineEndContext="#pop" name="SequenceExpression">
1427 <AnyChar attribute="Number" context="#stay" String="0123456789-"/>
1428 <IncludeRules context="FindWord"/>
1429 <Detect2Chars attribute="Escape" context="#stay" char="." char1="."/>
1430 <DetectChar attribute="Escape" context="#pop" char="}"/>
1431 </context>
1432
1433 <!-- ====== These are the contexts that can be branched to ======= -->
1434
1435 <context attribute="Normal Text" lineEndContext="#stay" name="ExprDblParenOrSubShell">
1436 <RegExpr attribute="Keyword" context="#pop!SubShell" String="\((?=&arithmetic_as_subshell;)|" beginRegion="subshell"/>
1437 <Detect2Chars attribute="Keyword" context="#pop!ExprDblParen" char="(" char1="(" beginRegion="expression"/>
1438 </context>
1439 <!-- ExprDblParen consumes an expression started in command mode till )) -->
1440 <context attribute="Normal Text" lineEndContext="#stay" name="ExprDblParen">
1441 <DetectSpaces attribute="Normal Text" context="#stay"/>
1442 <Detect2Chars attribute="Keyword" context="#pop" char=")" char1=")" endRegion="expression"/>
1443 <IncludeRules context="FindExprDblParen"/>
1444 <!-- ((cmd
1445 ) # jump to SubShell context -->
1446 <DetectChar attribute="Keyword" context="#pop!SubShell" char=")" endRegion="expression" beginRegion="subshell"/>
1447 </context>
1448 <context attribute="Normal Text" lineEndContext="#stay" name="FindExprDblParen">
1449 <Detect2Chars attribute="Control" context="#stay" char="&" char1="&"/>
1450 <Detect2Chars attribute="Control" context="#stay" char="|" char1="|"/>
1451 <AnyChar attribute="Operator" context="#stay" String="+-!~*/%<>=&^|?:"/>
1452 <DetectChar attribute="Control" context="#stay" char=","/>
1453 <DetectChar attribute="Normal Text" context="ExprSubDblParen" char="("/>
1454 <AnyChar context="Number" String="0123456789." lookAhead="1"/>
1455 <DetectChar attribute="Parameter Expansion Operator" context="Subscript" char="["/>
1456 <IncludeRules context="FindWord"/>
1457 <DetectChar context="MaybeArithmeticBrace" char="{" lookAhead="1"/>
1458 <Detect2Chars attribute="BaseN" context="NoPrefix" char="#" char1="#"/>
1459 <DetectChar attribute="Error" context="#stay" char="#"/>
1460 <DetectIdentifier attribute="Variable" context="#stay"/>
1461 </context>
1462 <context attribute="Normal Text" lineEndContext="#stay" name="ExprSubDblParen">
1463 <DetectSpaces attribute="Normal Text" context="#stay"/>
1464 <DetectChar attribute="Normal Text" context="#pop" char=")"/>
1465 <IncludeRules context="FindExprDblParen"/>
1466 </context>
1467 <context attribute="Error" lineEndContext="#pop" name="MaybeArithmeticBrace">
1468 <IncludeRules context="DispatchBraceExpansion"/>
1469 <DetectChar attribute="Error" context="#pop" char="{"/>
1470 </context>
1471 <context attribute="Normal Text" lineEndContext="#pop" name="NoPrefix" fallthroughContext="#pop">
1472 <DetectChar context="AssumeEscape" char="\"/>
1473 <RegExpr attribute="Number" context="#pop" String="[^][()]"/>
1474 </context>
1475
1476 <context attribute="Number" lineEndContext="#pop" name="Number">
1477 <Detect2Chars attribute="Hex" context="#pop!Hex" char="0" char1="x"/>
1478 <Detect2Chars attribute="Hex" context="#pop!Hex" char="0" char1="X"/>
1479 <RegExpr attribute="Base" context="#pop!BaseN" String="[1-9][0-9_]*+#"/>
1480 <RegExpr attribute="Number" context="#pop" String="∫(\.(∫&exp;?+|&exp;)?|&exp;)?|\.∫&exp;?"/>
1481 <DetectChar attribute="Operator" context="#pop" char="."/>
1482 </context>
1483 <context attribute="Hex" lineEndContext="#pop" name="Hex" fallthroughContext="#pop">
1484 <RegExpr attribute="Hex" context="#pop" String="[0-9a-fA-F_]+"/>
1485 </context>
1486 <context attribute="BaseN" lineEndContext="#pop" name="BaseN" fallthroughContext="#pop">
1487 <RegExpr attribute="BaseN" context="#pop" String="[0-9a-zA-Z@_]+"/>
1488 </context>
1489
1490 <context attribute="Normal Text" lineEndContext="#stay" name="ExprDblParenSubstOrSubstCommand">
1491 <RegExpr attribute="Parameter Expansion" context="#pop!SubstCommand" String="\$\((?=&arithmetic_as_subshell;)|" beginRegion="subshell"/>
1492 <StringDetect attribute="Parameter Expansion" context="#pop!ExprDblParenSubst" String="$((" beginRegion="expression"/>
1493 </context>
1494 <!-- ExprDblParenSubst like ExprDblParen but matches )) as Variable -->
1495 <context attribute="Normal Text" lineEndContext="#stay" name="ExprDblParenSubst">
1496 <DetectSpaces attribute="Normal Text" context="#stay"/>
1497 <Detect2Chars attribute="Parameter Expansion" context="#pop" char=")" char1=")" endRegion="expression"/>
1498 <IncludeRules context="FindExprDblParen"/>
1499 <!-- $((cmd
1500 ) # jump to SubstCommand context -->
1501 <DetectChar attribute="Parameter Expansion" context="#pop!SubstCommand" char=")" endRegion="expression" beginRegion="subshell"/>
1502 </context>
1503
1504 <!-- ExprBracket consumes an expression till ] -->
1505 <context attribute="Normal Text" lineEndContext="#stay" name="ExprBracket" fallthroughContext="#pop!ExprBracketNot">
1506 <DetectSpaces attribute="Normal Text" context="#stay"/>
1507 <IncludeRules context="FindExprBracketEnd"/>
1508 </context>
1509
1510 <context attribute="Normal Text" lineEndContext="#stay" name="ExprBracketNot" fallthroughContext="#pop!ExprBracketParam1">
1511 <DetectSpaces attribute="Normal Text" context="#pop!ExprBracketParam1"/>
1512 <Detect2Chars attribute="Expression" context="ExprBracketTestMaybeNot" char="!" char1=" " lookAhead="1"/>
1513 <Detect2Chars attribute="Expression" context="ExprBracketTestMaybeNot" char="!" char1="&tab;" lookAhead="1"/>
1514 </context>
1515 <context attribute="Normal Text" lineEndContext="#pop" name="ExprBracketTestMaybeNot">
1516 <DetectChar attribute="Expression" context="#pop" char="!"/>
1517 </context>
1518
1519 <context attribute="Normal Text" lineEndContext="#stay" name="ExprBracketParam1" fallthroughContext="ExprBracketValue">
1520 <DetectSpaces attribute="Normal Text" context="#pop!ExprBracketParam2"/>
1521 <DetectChar context="TestMaybeUnary" char="-" lookAhead="1"/>
1522 <IncludeRules context="FindExprBracketEnd"/>
1523 </context>
1524
1525 <context attribute="Normal Text" lineEndContext="#pop" name="ExprBracketValue">
1526 <AnyChar context="#pop" String=" &tab;" lookAhead="1"/>
1527 <AnyChar attribute="Error" context="#stay" String="&symbolseps;"/>
1528 <IncludeRules context="FindWord"/>
1529 <IncludeRules context="FindGlobAny"/>
1530 <IncludeRules context="FindPathThenPop"/>
1531 <DetectChar context="ExprBracketValueMaybeBraceExpansion" char="{" lookAhead="1"/>
1532 <DetectChar context="NormalOptionMaybeGroupEnd" char="}" lookAhead="1"/>
1533 <DetectIdentifier attribute="Normal Text"/>
1534 </context>
1535 <context attribute="Normal Text" lineEndContext="#pop" name="ExprBracketValueRecBrace">
1536 <AnyChar context="#pop#pop" String=" &tab;" lookAhead="1"/>
1537 <AnyChar attribute="Error" context="#stay" String="&symbolseps;"/>
1538 <IncludeRules context="FindWord"/>
1539 <IncludeRules context="FindGlobAny"/>
1540 <DetectChar context="ExprBracketValueMaybeBraceExpansion" char="{" lookAhead="1"/>
1541 <DetectChar attribute="Normal Text" context="#pop" char="}"/>
1542 <DetectIdentifier attribute="Normal Text"/>
1543 </context>
1544 <context attribute="Normal Text" lineEndContext="#pop" name="ExprBracketValueMaybeBraceExpansion">
1545 <IncludeRules context="DispatchBraceExpansion"/>
1546 <DetectChar attribute="Normal Text" context="#pop!ExprBracketValueRecBrace" char="{"/>
1547 </context>
1548
1549 <context attribute="Normal Text" lineEndContext="#stay" name="ExprBracketParam2" fallthroughContext="ExprBracketValue">
1550 <DetectSpaces attribute="Normal Text" context="#pop!ExprBracketParam3"/>
1551 <AnyChar context="TestMaybeBinary" String="-=!" lookAhead="1"/>
1552 <IncludeRules context="FindExprBracketEnd"/>
1553 </context>
1554
1555 <context attribute="Normal Text" lineEndContext="ExprBracketFinal" name="ExprBracketParam3" fallthroughContext="ExprBracketValue">
1556 <DetectSpaces attribute="Normal Text" context="#pop!ExprBracketFinal"/>
1557 <IncludeRules context="FindExprBracketEnd"/>
1558 </context>
1559
1560 <context attribute="Normal Text" lineEndContext="#stay" name="ExprBracketFinal" fallthroughContext="ExprBracketValue">
1561 <DetectSpaces attribute="Normal Text" context="#stay"/>
1562 <IncludeRules context="FindExprBracketEnd"/>
1563 <RegExpr attribute="Expression" context="#pop!ExprBracket" String="-[ao]&eos;"/>
1564 <RegExpr attribute="Error" context="#pop" String="(?:[^] &tab;]++|\][^ &tab;])++" endRegion="expression"/>
1565 </context>
1566
1567 <context attribute="Normal Text" lineEndContext="#stay" name="FindExprBracketEnd">
1568 <DetectChar context="AssumeEscape" char="\" lookAhead="1"/>
1569 <RegExpr attribute="Builtin" context="#pop" String="\](?=($|[ &tab;;|&<>)]))" endRegion="expression"/>
1570 </context>
1571
1572 <context attribute="Normal Text" lineEndContext="#pop" name="TestMaybeUnary" fallthroughContext="#pop!ExprBracketValue">
1573 <RegExpr attribute="Expression" context="#pop#pop!ExprBracketParam2" String="&unary_operators;"/>
1574 </context>
1575 <context attribute="Normal Text" lineEndContext="#pop" name="TestMaybeBinary" fallthroughContext="#pop!ExprBracketValue">
1576 <RegExpr attribute="Expression" context="#pop" String="&binary_operators;"/>
1577 </context>
1578
1579
1580 <!-- ExprDblBracket consumes an expression till ]] -->
1581 <context attribute="Normal Text" lineEndContext="#stay" name="ExprDblBracket" fallthroughContext="#pop!ExprDblBracketNot">
1582 <DetectSpaces attribute="Normal Text" context="#stay"/>
1583 <IncludeRules context="FindExprDblBracketEnd"/>
1584 <DetectChar attribute="Comment" context="Comment" char="#"/>
1585 </context>
1586
1587 <context attribute="Normal Text" lineEndContext="#stay" name="ExprDblBracketNot" fallthroughContext="#pop!ExprDblBracketParam1">
1588 <DetectChar context="ExprDblBracketTestMaybeNot" char="!" lookAhead="1"/>
1589 <DetectSpaces attribute="Normal Text" context="#stay"/>
1590 <DetectChar attribute="Comment" context="Comment" char="#"/>
1591 </context>
1592 <context attribute="Normal Text" lineEndContext="#pop" name="ExprDblBracketTestMaybeNot" fallthroughContext="#pop#pop!ExprDblBracketParam1">
1593 <RegExpr attribute="Expression" context="#pop" String="!(?=$|[ &tab;(])"/>
1594 </context>
1595
1596 <context attribute="Normal Text" lineEndContext="#stay" name="ExprDblBracketParam1" fallthroughContext="#pop!ExprDblBracketParam1_2">
1597 <DetectSpaces attribute="Normal Text" context="#stay"/>
1598 </context>
1599 <context attribute="Normal Text" lineEndContext="#stay" name="ExprDblBracketParam1_2" fallthroughContext="ExprDblBracketValueText">
1600 <DetectSpaces attribute="Normal Text" context="#pop!ExprDblBracketParam2"/>
1601 <DetectChar context="TestMaybeUnary2" char="-" lookAhead="1"/>
1602 <DetectChar context="ExprDblBracketSubValue" char="(" lookAhead="1"/>
1603 <IncludeRules context="FindExprDblBracketEnd"/>
1604 </context>
1605 <context attribute="Normal Text" lineEndContext="#pop" name="TestMaybeUnary2" fallthroughContext="#pop!ExprDblBracketValueText">
1606 <RegExpr attribute="Expression" context="#pop!ExprDblBracketUnary" String="&unary_operators;(?!\s+(?:=~|&binary_operators;))"/>
1607 </context>
1608 <context attribute="Normal Text" lineEndContext="#stay" name="ExprDblBracketUnary" fallthroughContext="#pop!ExprDblBracketValueText">
1609 <DetectSpaces attribute="Normal Text"/>
1610 <DetectChar attribute="Comment" context="Comment" char="#"/>
1611 </context>
1612 <context attribute="Normal Text" lineEndContext="#pop" name="ExprDblBracketSubValue" fallthroughContext="#pop">
1613 <DetectChar attribute="Operator" context="ExprDblBracketNot" char="("/>
1614 <DetectChar attribute="Operator" context="#pop" char=")"/>
1615 </context>
1616
1617 <context attribute="Normal Text" lineEndContext="#pop" name="ExprDblBracketValueText" fallthroughContext="#pop!ExprDblBracketValueText2">
1618 <Detect2Chars context="#pop!ExprDblBracketValueTextMaybeEnd" char="]" char1="]" lookAhead="1"/>
1619 <IncludeRules context="FindExprDblBracketValueTextPath"/>
1620 </context>
1621 <context attribute="Normal Text" lineEndContext="#pop" name="FindExprDblBracketValueTextPath">
1622 <RegExpr context="#pop!ExprDblBracketValueTextPath" String="&path_with_sep;|" lookAhead="1"/>
1623 </context>
1624 <context attribute="Normal Text" lineEndContext="#pop" name="ExprDblBracketValueTextMaybeEnd">
1625 <RegExpr attribute="Keyword" context="#pop#pop" String="&dblbracket_close;" endRegion="expression"/>
1626 <IncludeRules context="FindExprDblBracketValueTextPath"/>
1627 <Detect2Chars context="#pop!ExprDblBracketValueText2" char="]" char1="]" lookAhead="1"/>
1628 </context>
1629 <context attribute="Normal Text" lineEndContext="#pop" name="ExprDblBracketValueText2">
1630 <DetectIdentifier/>
1631 <AnyChar String="*?+@~^:%+-/,"/>
1632 <Detect2Chars attribute="Control" context="#pop#pop!ExprDblBracket" char="&" char1="&"/>
1633 <Detect2Chars attribute="Control" context="#pop#pop!ExprDblBracket" char="|" char1="|"/>
1634 <AnyChar context="#pop" String=" &tab;)" lookAhead="1"/>
1635 <IncludeRules context="FindWord"/>
1636 <IncludeRules context="FindGroupPattern"/>
1637 <AnyChar attribute="Error" context="#stay" String="&;|"/>
1638 <DetectChar context="ExprDblBracketValueTextMaybeRange" char="<" lookAhead="1"/>
1639 <DetectChar attribute="Expression" context="#pop!ExprDblBracketValuePattern" char=">"/>
1640 </context>
1641 <context attribute="Path" lineEndContext="#pop" name="ExprDblBracketValueTextPath">
1642 <IncludeRules context="ExprDblBracketValueText2"/>
1643 </context>
1644 <context attribute="Normal Text" lineEndContext="#pop" name="ExprDblBracketValueTextMaybeRange">
1645 <RegExpr context="#pop" String="&globrange;"/>
1646 <DetectChar attribute="Expression" context="#pop#pop!ExprDblBracketValuePattern" char="<"/>
1647 </context>
1648
1649 <context attribute="Normal Text" lineEndContext="#pop" name="ExprDblBracketValuePattern" fallthroughContext="#pop!ExprDblBracketValuePattern2">
1650 <RegExpr context="ExprDblBracketValuePatternPath" String="&path_with_sep;|" lookAhead="1"/>
1651 </context>
1652 <context attribute="Normal Text" lineEndContext="#pop" name="ExprDblBracketValuePatternPath" fallthroughContext="#pop!PathThenPop">
1653 <DetectChar attribute="Path" context="#pop!PathThenPop" char="~"/>
1654 </context>
1655 <context attribute="Normal Text" lineEndContext="#pop" name="ExprDblBracketValuePattern2">
1656 <DetectIdentifier attribute="Normal Text"/>
1657 <Detect2Chars attribute="Control" context="#pop#pop!ExprDblBracket" char="&" char1="&"/>
1658 <Detect2Chars attribute="Control" context="#pop#pop!ExprDblBracket" char="|" char1="|"/>
1659 <AnyChar context="#pop" String=" &tab;)" lookAhead="1"/>
1660 <IncludeRules context="FindWord"/>
1661 <IncludeRules context="FindSingleGlob"/>
1662 <IncludeRules context="FindGlobAny"/>
1663 <IncludeRules context="FindGroupPattern"/>
1664 <DetectChar context="ExprDblBracketValueMaybeGlobRange" char="<" lookAhead="1"/>
1665 <AnyChar attribute="Error" context="#stay" String=">&|;"/>
1666 </context>
1667 <context attribute="Normal Text" lineEndContext="#stay" name="ExprDblBracketValueMaybeGlobRange">
1668 <IncludeRules context="FindGlobRangeThenPop"/>
1669 <DetectChar attribute="Error" context="#pop" char="<"/>
1670 </context>
1671
1672 <context attribute="Normal Text" lineEndContext="#stay" name="ExprDblBracketParam2" fallthroughContext="#pop!ExprDblBracketParam2_2">
1673 <DetectSpaces attribute="Normal Text" context="#stay"/>
1674 <DetectChar attribute="Comment" context="Comment" char="#"/>
1675 </context>
1676 <context attribute="Normal Text" lineEndContext="#stay" name="ExprDblBracketParam2_2" fallthroughContext="ExprDblBracketValuePattern">
1677 <DetectSpaces attribute="Normal Text" context="#pop!ExprDblBracketParam3"/>
1678 <AnyChar context="TestMaybeBinary2" String="-=!" lookAhead="1"/>
1679 <AnyChar attribute="Expression" context="#pop!ExprDblBracketParam3Spe" String="<>"/>
1680 <IncludeRules context="FindExprDblBracketEnd"/>
1681 </context>
1682 <context attribute="Normal Text" lineEndContext="#pop" name="TestMaybeBinary2" fallthroughContext="#pop!ExprDblBracketValuePattern">
1683 <IncludeRules context="TestMaybeBinary"/>
1684 <RegExpr attribute="Expression" context="#pop#pop!ExprDblBracketRegex" String="=~&eos;"/>
1685 </context>
1686
1687 <context attribute="Normal Text" lineEndContext="#stay" name="ExprDblBracketParam3Spe" fallthroughContext="#pop!ExprDblBracketParam3">
1688 <DetectSpaces attribute="Normal Text" context="#pop!ExprDblBracketParam3"/>
1689 </context>
1690
1691 <context attribute="Normal Text" lineEndContext="#stay" name="ExprDblBracketParam3" fallthroughContext="#pop!ExprDblBracketParam3_2">
1692 <DetectSpaces attribute="Normal Text" context="#stay"/>
1693 <DetectChar attribute="Comment" context="Comment" char="#"/>
1694 </context>
1695 <context attribute="Normal Text" lineEndContext="#pop!ExprDblBracketFinal" name="ExprDblBracketParam3_2" fallthroughContext="ExprDblBracketValuePattern">
1696 <DetectSpaces attribute="Normal Text" context="#pop!ExprDblBracketFinal"/>
1697 <IncludeRules context="FindExprDblBracketEnd"/>
1698 </context>
1699
1700 <context attribute="Normal Text" lineEndContext="#stay" name="ExprDblBracketFinal" fallthroughContext="ExprDblBracketValuePattern">
1701 <DetectSpaces attribute="Normal Text" context="#stay"/>
1702 <IncludeRules context="FindExprDblBracketEnd"/>
1703 <DetectChar attribute="Comment" context="Comment" char="#"/>
1704 <RegExpr attribute="Error" context="#pop" String="(?:[^] &tab;]++|\](?:[^]]|\][^ &tab;]))++" endRegion="expression"/>
1705 </context>
1706
1707 <context attribute="Normal Text" lineEndContext="#stay" name="FindExprDblBracketEnd">
1708 <DetectChar context="AssumeEscape" char="\" lookAhead="1"/>
1709 <DetectChar context="#pop" char=")" lookAhead="1"/>
1710 <Detect2Chars attribute="Control" context="#pop!ExprDblBracket" char="&" char1="&"/>
1711 <Detect2Chars attribute="Control" context="#pop!ExprDblBracket" char="|" char1="|"/>
1712 <RegExpr attribute="Keyword" context="#pop" String="&dblbracket_close;" endRegion="expression"/>
1713 </context>
1714
1715 <context attribute="Normal Text" lineEndContext="#stay" name="ExprDblBracketRegex" fallthroughContext="#pop!Regex">
1716 <DetectSpaces attribute="Normal Text" context="#stay"/>
1717 <DetectChar attribute="Comment" context="Comment" char="#"/>
1718 </context>
1719 <context attribute="Pattern" lineEndContext="#stay" name="Regex">
1720 <DetectIdentifier attribute="Pattern"/>
1721 <DetectSpaces attribute="Normal Text" context="#pop!ExprDblBracketFinal"/>
1722 <DetectChar attribute="Operator" context="#pop" char=")"/>
1723 <Detect2Chars attribute="Operator" context="RegexChar" char="[" char1="^"/>
1724 <DetectChar attribute="Operator" context="RegexChar" char="["/>
1725 <IncludeRules context="FindRegex"/>
1726 </context>
1727 <context attribute="Pattern" lineEndContext="#stay" name="ExprDblBracketSubRegex">
1728 <DetectIdentifier attribute="Pattern"/>
1729 <DetectSpaces attribute="Pattern" context="#stay"/>
1730 <DetectChar attribute="Operator" context="#pop" char=")"/>
1731 <Detect2Chars attribute="Operator" context="RegexSubChar" char="[" char1="^"/>
1732 <DetectChar attribute="Operator" context="RegexSubChar" char="["/>
1733 <IncludeRules context="FindRegex"/>
1734 </context>
1735
1736 <context attribute="Pattern" lineEndContext="#stay" name="FindRegex">
1737 <DetectChar attribute="Operator" context="ExprDblBracketSubRegex" char="("/>
1738 <DetectChar attribute="Escape" context="RegexEscape" char="\"/>
1739 <DetectChar attribute="Parameter Expansion" context="RegexDup" char="{"/>
1740 <AnyChar attribute="Glob" context="#stay" String="^?+*.|"/>
1741 <IncludeRules context="FindStrings"/>
1742 <DetectChar context="RegexDispatchVariables" char="$" lookAhead="1"/>
1743 <DetectChar attribute="Backquote" context="RegularBackq" char="`"/>
1744 </context>
1745 <context attribute="Normal Text" lineEndContext="#stay" name="RegexDispatchVariables">
1746 <IncludeRules context="DispatchVariables"/>
1747 <DetectChar attribute="Operator" context="#pop" char="$"/>
1748 </context>
1749
1750 <context attribute="Normal Text" lineEndContext="#pop" name="RegexEscape">
1751 <RegExpr attribute="Escape" context="#pop" String="x[0-9a-fA-F]{1,2}|[0-7]{1,3}|."/>
1752 </context>
1753
1754 <context attribute="Normal Text" lineEndContext="#pop" name="RegexDup">
1755 <Int attribute="Number"/>
1756 <DetectChar attribute="Parameter Expansion Operator" context="#stay" char=","/>
1757 <DetectChar attribute="Parameter Expansion" context="#pop" char="}"/>
1758 </context>
1759
1760 <context attribute="Pattern" lineEndContext="#pop" name="RegexSubChar" fallthroughContext="#pop!RegexSubInChar">
1761 <AnyChar attribute="Pattern" context="#pop!RegexSubInChar" String="-]"/>
1762 </context>
1763 <context attribute="Pattern" lineEndContext="#pop" name="RegexSubInChar">
1764 <DetectSpaces attribute="Pattern" context="#stay"/>
1765 <IncludeRules context="RegexInChar"/>
1766 </context>
1767
1768 <context attribute="Pattern" lineEndContext="#pop" name="RegexChar" fallthroughContext="#pop!RegexInChar">
1769 <AnyChar attribute="Pattern" context="#pop!RegexInChar" String="-]"/>
1770 </context>
1771 <context attribute="Pattern" lineEndContext="#pop" name="RegexInChar">
1772 <Detect2Chars context="RegexInCharEnd" char="-" char1="]" lookAhead="1"/>
1773 <DetectChar attribute="Operator" context="#stay" char="-"/>
1774 <DetectChar attribute="Escape" context="RegexEscape" char="\"/>
1775 <DetectChar context="RegexCharClassSelect" char="[" lookAhead="1"/>
1776 <DetectChar attribute="Operator" context="#pop" char="]"/>
1777 <AnyChar context="#pop" String="() &tab;" lookAhead="1"/>
1778 <IncludeRules context="FindStrings"/>
1779 </context>
1780 <context attribute="Operator" lineEndContext="#stay" name="RegexInCharEnd">
1781 <DetectChar attribute="Pattern" context="#stay" char="-"/>
1782 <DetectChar attribute="Operator" context="#pop#pop" char="]"/>
1783 </context>
1784 <context attribute="Parameter Expansion" lineEndContext="#pop#pop#pop" name="RegexCharClassSelect">
1785 <Detect2Chars attribute="Parameter Expansion Operator" context="#pop!RegexCharClass" char="[" char1=":"/>
1786 <Detect2Chars attribute="Parameter Expansion Operator" context="#pop!RegexCollatingSymbols" char="[" char1="."/>
1787 <Detect2Chars attribute="Parameter Expansion Operator" context="#pop!RegexEquivalenceClass" char="[" char1="="/>
1788 <DetectChar attribute="Pattern" context="#pop" char="["/>
1789 </context>
1790
1791 <context attribute="Parameter Expansion" lineEndContext="#pop#pop#pop" name="RegexCharClass">
1792 <DetectIdentifier attribute="Parameter Expansion"/>
1793 <Detect2Chars attribute="Parameter Expansion Operator" context="#pop" char=":" char1="]"/>
1794 <DetectChar attribute="Error" context="#pop" char="]"/>
1795 </context>
1796 <context attribute="Parameter Expansion" lineEndContext="#pop#pop#pop" name="RegexCollatingSymbols">
1797 <DetectIdentifier attribute="Parameter Expansion"/>
1798 <Detect2Chars attribute="Parameter Expansion Operator" context="#pop" char="." char1="]"/>
1799 <DetectChar attribute="Error" context="#pop" char="]"/>
1800 </context>
1801 <context attribute="Parameter Expansion" lineEndContext="#pop#pop#pop" name="RegexEquivalenceClass">
1802 <DetectIdentifier attribute="Parameter Expansion"/>
1803 <Detect2Chars attribute="Parameter Expansion Operator" context="#pop" char="=" char1="]"/>
1804 <DetectChar attribute="Error" context="#pop" char="]"/>
1805 </context>
1806
1807 <!-- SubShell consumes shell input till ) -->
1808 <context attribute="Normal Text" lineEndContext="#stay" name="SubShell" fallthroughContext="Command">
1809 <DetectChar attribute="Keyword" context="#pop" char=")" endRegion="subshell"/>
1810 <IncludeRules context="Start"/>
1811 </context>
1812
1813 <!-- Assign consumes an expression till EOL or whitespace -->
1814 <context attribute="Normal Text" lineEndContext="#pop" name="Assign" fallthroughContext="#pop!RegularAssign">
1815 <DetectChar attribute="Variable" context="#pop!AssignArray" char="("/>
1816 </context>
1817 <context attribute="Normal Text" lineEndContext="#pop" name="RegularAssign" fallthroughContext="#pop">
1818 <DetectChar attribute="Backquote" context="RegularBackq" char="`"/>
1819 <IncludeRules context="NormalOption"/>
1820 </context>
1821
1822 <!-- AssignArray consumes everything till ), marking assignments -->
1823 <context attribute="Normal Text" lineEndContext="#stay" name="AssignArray" fallthroughContext="NormalOption">
1824 <DetectSpaces attribute="Normal Text" context="#stay"/>
1825 <DetectChar attribute="Comment" context="Comment" char="#"/>
1826 <DetectChar attribute="Variable" context="#pop" char=")"/>
1827 <DetectChar context="AssignArrayKey" char="[" lookAhead="1"/>
1828 <DetectChar attribute="Backquote" context="AssignArrayBackq" char="`"/>
1829 <AnyChar attribute="Error" context="#stay" String="&symbolseps;"/>
1830 </context>
1831 <context attribute="Normal Text" lineEndContext="#pop" name="AssignArrayKey" fallthroughContext="#pop">
1832 <DetectChar attribute="Parameter Expansion Operator" context="Subscript" char="["/>
1833 <DetectChar attribute="Variable" context="#pop" char="="/>
1834 </context>
1835 <context attribute="Normal Text" lineEndContext="#stay" name="AssignArrayBackq" fallthroughContext="Command">
1836 <DetectChar attribute="Backquote" context="#pop!NormalOption" char="`"/>
1837 <DetectChar attribute="Comment" context="CommentBackq" char="#"/>
1838 <IncludeRules context="Start"/>
1839 </context>
1840
1841 <!-- Subscript consumes anything till ], marks as Variable -->
1842 <context attribute="Normal Text" lineEndContext="#stay" name="Subscript" fallthroughContext="Subscript2">
1843 <DetectChar attribute="Parameter Expansion Operator" context="#pop" char="]"/>
1844 <AnyChar attribute="Number" context="#stay" String="0123456789-"/>
1845 </context>
1846 <context attribute="Normal Text" lineEndContext="#stay" name="Subscript2">
1847 <DetectIdentifier attribute="Normal Text"/>
1848 <DetectChar attribute="Parameter Expansion Operator" context="#pop#pop" char="]"/>
1849 <DetectChar attribute="Parameter Expansion Operator" context="#pop" char=","/>
1850 <IncludeRules context="FindGroupPattern"/>
1851 <IncludeRules context="FindStrings"/>
1852 <DetectChar context="VariableOrSubscriptPos" char="$" lookAhead="1"/>
1853 <DetectChar attribute="Backquote" context="RegularBackq" char="`"/>
1854 <DetectChar context="AssumeEscape" char="\" lookAhead="1"/>
1855 <AnyChar attribute="Operator" context="#pop" String="@+-!~*/%<>=&^|?:"/>
1856 </context>
1857 <context attribute="Normal Text" lineEndContext="#pop" name="VariableOrSubscriptPos">
1858 <IncludeRules context="DispatchVariables"/>
1859 <DetectChar attribute="Number" context="#pop" char="$"/>
1860 </context>
1861
1862 <!-- FunctionDef consumes a name, possibly with (), marks as Function -->
1863 <context attribute="Function" lineEndContext="#pop" name="FunctionDef" fallthroughContext="#pop">
1864 <Detect2Chars attribute="Operator" context="#pop" char="(" char1=")"/>
1865 <DetectSpaces attribute="Normal Text" context="FunctionNameStart"/>
1866 </context>
1867 <context attribute="Function" lineEndContext="#pop" name="FunctionNameStart" fallthroughContext="#pop!FunctionName">
1868 <AnyChar context="#pop#pop" String="&symbolseps;#" lookAhead="1"/>
1869 <DetectChar context="FunctionNameStartMaybeBraceExpansion" char="{" lookAhead="1"/>
1870 </context>
1871 <context attribute="Function" lineEndContext="#pop" name="FunctionName">
1872 <AnyChar context="#pop" String=" &tab;(" lookAhead="1"/>
1873 <IncludeRules context="FindWord"/>
1874 <DetectChar context="FunctionNameMaybeBraceExpansion" char="{" lookAhead="1"/>
1875 <DetectChar context="NormalOptionMaybeGroupEnd" char="}" lookAhead="1"/>
1876 <DetectIdentifier attribute="Function"/>
1877 </context>
1878 <context attribute="Function" lineEndContext="#pop" name="FunctionNameRecBrace" fallthroughContext="#pop">
1879 <IncludeRules context="FindWord"/>
1880 <DetectChar context="FunctionNameMaybeBraceExpansion" char="{" lookAhead="1"/>
1881 <DetectChar attribute="Function" context="#pop" char="}"/>
1882 <DetectIdentifier attribute="Function"/>
1883 </context>
1884 <context attribute="Function" lineEndContext="#pop" name="FunctionNameStartMaybeBraceExpansion">
1885 <IncludeRules context="DispatchBraceExpansion"/>
1886 <DetectChar attribute="Keyword" context="#pop#pop#pop!Group" char="{" beginRegion="group"/>
1887 </context>
1888 <context attribute="Function" lineEndContext="#pop" name="FunctionNameMaybeBraceExpansion">
1889 <IncludeRules context="DispatchBraceExpansion"/>
1890 <DetectChar attribute="Function" context="#pop!FunctionNameRecBrace" char="{" beginRegion="group"/>
1891 </context>
1892
1893 <!-- Case is called after the case keyword is encoutered. We handle this because of
1894 the lonely closing parentheses that would otherwise disturb the expr matching -->
1895 <context attribute="Normal Text" lineEndContext="#stay" name="Case">
1896 <DetectSpaces attribute="Normal Text" context="#stay"/>
1897 <DetectChar attribute="Keyword" context="#pop!CaseAlt" char="{"/>
1898 <WordDetect attribute="Keyword" context="#pop!CaseIn" String="in"/>
1899 <IncludeRules context="FindWord"/>
1900 <DetectIdentifier attribute="Normal Text" context="#stay"/>
1901 </context>
1902
1903 <!-- CaseIn is called when the construct 'case ... in' has been found. -->
1904 <context attribute="Normal Text" lineEndContext="#stay" name="CaseIn" fallthroughContext="CasePattern">
1905 <DetectSpaces attribute="Normal Text" context="#stay"/>
1906 <DetectChar attribute="Keyword" context="CaseClosedPattern" char="("/>
1907 <DetectChar attribute="Comment" context="Comment" char="#"/>
1908 </context>
1909 <context attribute="Pattern" lineEndContext="#stay" name="CasePattern">
1910 <WordDetect attribute="Control Flow" context="#pop#pop" String="esac" endRegion="case"/>
1911 <IncludeRules context="CaseClosedPattern"/>
1912 </context>
1913 <context attribute="Pattern" lineEndContext="#stay" name="CaseClosedPattern">
1914 <DetectSpaces attribute="Normal Text" context="#stay"/>
1915 <DetectChar attribute="Keyword" context="#pop!CaseExpr" char=")" beginRegion="caseexpr"/>
1916 <DetectChar context="AssumeEscape" char="\" lookAhead="1"/>
1917 <DetectChar attribute="Keyword" context="#stay" char="|"/>
1918 <IncludeRules context="FindWord"/>
1919 <IncludeRules context="FindPattern"/>
1920 <DetectIdentifier attribute="Pattern" context="#stay"/>
1921 </context>
1922
1923 <context attribute="Normal Text" lineEndContext="#stay" name="CaseAlt" fallthroughContext="CasePattern">
1924 <DetectSpaces attribute="Normal Text" context="#stay"/>
1925 <DetectChar attribute="Keyword" context="CasePattern" char="("/>
1926 <DetectChar attribute="Keyword" context="#pop!CaseAltEnd" char="}" endRegion="caseexpr" lookAhead="1"/>
1927 </context>
1928 <context attribute="Normal Text" lineEndContext="#stay" name="CaseAltEnd">
1929 <DetectChar attribute="Keyword" context="#pop" char="}" endRegion="case"/>
1930 </context>
1931
1932 <!-- CaseExpr eats shell input till ;; / ;& / ;| -->
1933 <context attribute="Normal Text" lineEndContext="#stay" name="CaseExpr" fallthroughContext="Command">
1934 <Detect2Chars attribute="Control Flow" context="#pop" char=";" char1="|" endRegion="caseexpr"/>
1935 <Detect2Chars attribute="Control Flow" context="#pop" char=";" char1=";" endRegion="caseexpr"/>
1936 <Detect2Chars attribute="Control Flow" context="#pop" char=";" char1="&" endRegion="caseexpr"/>
1937 <WordDetect context="#pop" String="esac" endRegion="caseexpr" lookAhead="1"/>
1938 <DetectChar context="#pop" char="}" lookAhead="1"/>
1939 <IncludeRules context="Start"/>
1940 </context>
1941
1942 <!-- ExprGlobParen is called after a ( is encountered in a argument -->
1943 <context attribute="Glob Flag" lineEndContext="#pop" name="ExprGlobParen" fallthroughContext="#pop">
1944 <Detect2Chars attribute="Glob Flag" context="#pop!GlobPatFlag" char="(" char1="#"/>
1945 <RegExpr attribute="Glob" context="#pop!ExtGlobPattern" String="\((?=&ispattern;)"/>
1946 <DetectChar attribute="Glob Flag" context="#pop!GlobQualifier" char="("/>
1947 </context>
1948 <context attribute="Glob Flag" lineEndContext="#pop" name="ExprGlobParenThenPath" fallthroughContext="#pop">
1949 <Detect2Chars attribute="Glob Flag" context="#pop!GlobPatFlagThenPath" char="(" char1="#"/>
1950 <RegExpr attribute="Glob" context="#pop!ExtGlobPatternThenPath" String="\((?=&ispattern;)"/>
1951 <DetectChar attribute="Glob Flag" context="#pop!GlobQualifier" char="("/>
1952 </context>
1953 <context attribute="Glob Flag" lineEndContext="#pop" name="GlobQualifier">
1954 <AnyChar attribute="Glob Flag" context="#stay" String="/F.@=p*%bcrwxAIERWXsStUG^-MTNDn"/>
1955 <AnyChar attribute="Glob Flag" context="GlobQualifier_e" String="eP"/>
1956 <AnyChar attribute="Glob Flag" context="GlobQualifier_u" String="ug"/>
1957 <AnyChar attribute="Glob Flag" context="GlobQualifier_a" String="amc"/>
1958 <AnyChar attribute="Glob Flag" context="GlobQualifier_o" String="oO"/>
1959 <DetectChar attribute="Glob Flag" context="GlobQualifier_f" char="f"/>
1960 <DetectChar attribute="Glob Flag" context="GlobQualifier_+" char="+"/>
1961 <DetectChar attribute="Glob Flag" context="GlobQualifier_d" char="d"/>
1962 <DetectChar attribute="Glob Flag" context="GlobQualifier_L" char="L"/>
1963 <DetectChar attribute="Glob Flag" context="GlobQualifier_Y" char="Y"/>
1964 <DetectChar attribute="Parameter Expansion Operator" context="Subscript" char="["/>
1965
1966 <DetectChar attribute="Operator" context="#stay" char=","/>
1967 <DetectChar attribute="Parameter Expansion Operator" context="#pop!GlobModifier" char=":"/>
1968 <DetectChar attribute="Glob Flag" context="#pop" char=")"/>
1969 <IncludeRules context="FindWord"/>
1970 </context>
1971
1972 <context attribute="Normal Text" lineEndContext="#pop" name="GlobQualifier_o" fallthroughContext="#pop">
1973 <AnyChar attribute="Normal Text" context="#stay" String="nLlamcdN"/>
1974 </context>
1975
1976 <context attribute="Number" lineEndContext="#pop" name="GlobQualifier_Y" fallthroughContext="#pop">
1977 <AnyChar attribute="Number" context="#stay" String="0123456789"/>
1978 </context>
1979
1980 <context attribute="Glob Flag" lineEndContext="#pop" name="GlobQualifier_L" fallthroughContext="#pop">
1981 <AnyChar attribute="Normal Text" context="#stay" String="kKmMpPgGtT"/>
1982 <AnyChar attribute="Number" context="#pop!GlobQualifier_Y" String="-+0123456789"/>
1983 </context>
1984
1985 <context attribute="Glob Flag" lineEndContext="#pop" name="GlobQualifier_a" fallthroughContext="#pop">
1986 <AnyChar attribute="Normal Text" context="#stay" String="Mwhmsd"/>
1987 <AnyChar attribute="Number" context="#pop!GlobQualifier_Y" String="-+0123456789"/>
1988 </context>
1989
1990 <context attribute="Glob Flag" lineEndContext="#pop" name="GlobQualifier_+" fallthroughContext="#pop">
1991 <RegExpr attribute="Function" context="#pop" String="[^&_fragpathseps;=,\[]+"/>
1992 </context>
1993
1994 <context attribute="Path" lineEndContext="#pop" name="GlobQualifier_d">
1995 <AnyChar context="#pop" String=")," lookAhead="1"/>
1996 </context>
1997
1998 <context attribute="Glob Flag" lineEndContext="#pop" name="GlobQualifier_u">
1999 <AnyChar attribute="Number" context="#pop!GlobQualifier_Y" String="0123456789"/>
2000 <IncludeRules context="GlobQualifier_e"/>
2001 </context>
2002
2003 <context attribute="Glob Flag" lineEndContext="#pop" name="GlobQualifier_f" fallthroughContext="#pop">
2004 <AnyChar attribute="Number" context="#pop!GlobQualifier_fo" String="0123456789=+-"/>
2005 <DetectChar attribute="Glob" context="#pop!GlobQualifier_fo" char="?"/>
2006 <DetectChar attribute="Glob Flag" context="#pop!GlobQualifier_f[" char="["/>
2007 <DetectChar attribute="Glob Flag" context="#pop!GlobQualifier_f<" char="<"/>
2008 <DetectChar attribute="Glob Flag" context="#pop!GlobQualifier_f{" char="{"/>
2009 <RegExpr attribute="Glob Flag" context="#pop!GlobQualifier_fx" String="(.)"/>
2010 </context>
2011 <context attribute="Number" lineEndContext="#pop" name="GlobQualifier_fo" fallthroughContext="#pop">
2012 <AnyChar attribute="Number" context="#stay" String="0123456789"/>
2013 <DetectChar attribute="Glob" context="#stay" char="?"/>
2014 </context>
2015 <context attribute="Normal Text" lineEndContext="#stay" name="GlobQualifier_f[">
2016 <DetectChar attribute="Operator" context="#stay" char=","/>
2017 <DetectChar attribute="Glob Flag" context="#pop" char="]"/>
2018 </context>
2019 <context attribute="Normal Text" lineEndContext="#stay" name="GlobQualifier_f<">
2020 <DetectChar attribute="Operator" context="#stay" char=","/>
2021 <DetectChar attribute="Glob Flag" context="#pop" char=">"/>
2022 </context>
2023 <context attribute="Normal Text" lineEndContext="#stay" name="GlobQualifier_f{">
2024 <DetectChar attribute="Operator" context="#stay" char=","/>
2025 <DetectChar attribute="Glob Flag" context="#pop" char="}"/>
2026 </context>
2027 <context attribute="Normal Text" lineEndContext="#stay" name="GlobQualifier_fx">
2028 <DetectChar attribute="Operator" context="#stay" char=","/>
2029 <DetectChar attribute="Glob Flag" context="#pop" char="1" dynamic="1"/>
2030 </context>
2031
2032 <context attribute="Glob Flag" lineEndContext="#pop" name="GlobQualifier_e" fallthroughContext="#pop">
2033 <DetectChar attribute="Glob Flag" context="#pop!GlobQualifier_e[" char="["/>
2034 <DetectChar attribute="Glob Flag" context="#pop!GlobQualifier_e<" char="<"/>
2035 <DetectChar attribute="Glob Flag" context="#pop!GlobQualifier_e{" char="{"/>
2036 <RegExpr attribute="Glob Flag" context="#pop!GlobQualifier_ex" String="(.)"/>
2037 </context>
2038 <context attribute="Normal Text" lineEndContext="#stay" name="IncGlobQualifier_e">
2039 <IncludeRules context="FindStrings"/>
2040 <DetectChar context="RegularVariable" char="$" lookAhead="1"/>
2041 <DetectChar attribute="Backquote" context="RegularBackq" char="`"/>
2042 </context>
2043 <context attribute="Normal Text" lineEndContext="#stay" name="GlobQualifier_e[">
2044 <DetectChar attribute="Glob Flag" context="#pop" char="]"/>
2045 <IncludeRules context="IncGlobQualifier_e"/>
2046 </context>
2047 <context attribute="Normal Text" lineEndContext="#stay" name="GlobQualifier_e<">
2048 <DetectChar attribute="Glob Flag" context="#pop" char=">"/>
2049 <IncludeRules context="IncGlobQualifier_e"/>
2050 </context>
2051 <context attribute="Normal Text" lineEndContext="#stay" name="GlobQualifier_e{">
2052 <DetectChar attribute="Glob Flag" context="#pop" char="}"/>
2053 <IncludeRules context="IncGlobQualifier_e"/>
2054 </context>
2055 <context attribute="Normal Text" lineEndContext="#stay" name="GlobQualifier_ex">
2056 <DetectChar attribute="Glob Flag" context="#pop" char="1" dynamic="1"/>
2057 <IncludeRules context="IncGlobQualifier_e"/>
2058 </context>
2059
2060 <!-- GlobPatFlag is called after a (# is encountered -->
2061 <context attribute="Glob Flag" lineEndContext="#pop" name="GlobPatFlag" fallthroughContext="#pop">
2062 <IncludeRules context="IncGlobPatFlag"/>
2063 <DetectChar attribute="Glob Flag" context="#pop" char=")"/>
2064 </context>
2065 <context attribute="Glob Flag" lineEndContext="#pop" name="GlobPatFlagThenPath" fallthroughContext="#pop">
2066 <IncludeRules context="IncGlobPatFlag"/>
2067 <DetectChar attribute="Glob Flag" context="#pop!PathThenPop" char=")"/>
2068 </context>
2069 <context attribute="Glob Flag" lineEndContext="#pop" name="IncGlobPatFlag" fallthroughContext="#pop">
2070 <AnyChar attribute="Glob Flag" context="#stay" String="ilIbBcmMaseuU,"/>
2071 <AnyChar attribute="Number" context="#stay" String="0123456789"/>
2072 <DetectChar attribute="Glob Flag" context="#pop!GlobQualifier" char="q"/>
2073 </context>
2074
2075 <!-- GlobModifier is called after a : is encountered in a GlobQualifier -->
2076 <context attribute="Parameter Expansion" lineEndContext="#pop" name="GlobModifier">
2077 <DetectChar attribute="Parameter Expansion Operator" context="#stay" char=":"/>
2078 <AnyChar attribute="Parameter Expansion" context="VarBraceModifier_h" String="ht"/>
2079 <DetectChar attribute="Parameter Expansion" context="GlobModifier_s" char="s"/>
2080 <Detect2Chars attribute="Parameter Expansion" context="GlobModifier_s" char="g" char1="s"/>
2081 <DetectChar attribute="Glob Flag" context="#pop" char=")"/>
2082 </context>
2083 <context attribute="Parameter Expansion" lineEndContext="#stay" name="GlobModifier_s" fallthroughContext="#pop">
2084 <DetectChar attribute="Error" context="#pop#pop" char=")"/>
2085 <DetectChar attribute="Parameter Expansion Operator" context="#pop!GlobModifier_s_PatPrefix" char="/"/>
2086 </context>
2087 <context attribute="Pattern" lineEndContext="#stay" name="GlobModifier_s_PatPrefix" fallthroughContext="#pop!GlobModifier_s_Pat">
2088 <Detect2Chars attribute="Parameter Expansion Operator" context="#pop!GlobModifier_s_Pat" char="#" char1="%"/>
2089 <AnyChar attribute="Parameter Expansion Operator" context="#pop!GlobModifier_s_Pat" String="#%"/>
2090 </context>
2091 <context attribute="Pattern" lineEndContext="#stay" name="GlobModifier_s_Pat">
2092 <DetectChar attribute="Parameter Expansion Operator" context="#pop!GlobModifier_s_Rep" char="/"/>
2093 <IncludeRules context="FindWord"/>
2094 <IncludeRules context="FindSubPattern"/>
2095 <DetectChar attribute="Error" context="#pop#pop" char=")"/>
2096 <DetectIdentifier attribute="Pattern"/>
2097 </context>
2098 <context attribute="String DoubleQ" lineEndContext="#stay" name="GlobModifier_s_Rep">
2099 <DetectChar attribute="Glob Flag" context="#pop#pop" char=")"/>
2100 <DetectChar attribute="Parameter Expansion Operator" context="#pop" char="/"/>
2101 <DetectChar attribute="String DoubleQ" context="GlobModifier_s_RecursiveRep" char="("/>
2102 <IncludeRules context="FindWord"/>
2103 <DetectIdentifier attribute="String DoubleQ"/>
2104 </context>
2105 <context attribute="String DoubleQ" lineEndContext="#stay" name="GlobModifier_s_RecursiveRep">
2106 <DetectChar attribute="String DoubleQ" context="#pop" char=")"/>
2107 <DetectChar attribute="String DoubleQ" context="GlobModifier_s_RecursiveRep" char="("/>
2108 <IncludeRules context="FindWord"/>
2109 <DetectIdentifier attribute="String DoubleQ"/>
2110 </context>
2111
2112 </contexts>
2113
2114 <itemDatas>
2115 <itemData name="Normal Text" defStyleNum="dsNormal"/>
2116 <itemData name="Comment" defStyleNum="dsComment"/>
2117 <itemData name="Keyword" defStyleNum="dsKeyword" spellChecking="false"/>
2118 <itemData name="Control" defStyleNum="dsKeyword" spellChecking="false"/>
2119 <itemData name="Control Flow" defStyleNum="dsControlFlow" spellChecking="false"/>
2120 <itemData name="Builtin" defStyleNum="dsBuiltIn" spellChecking="false"/>
2121 <itemData name="Command" defStyleNum="dsFunction" spellChecking="false"/>
2122 <itemData name="OtherCommand" defStyleNum="dsExtension" spellChecking="false"/>
2123 <itemData name="Redirection" defStyleNum="dsOperator" spellChecking="false"/>
2124 <itemData name="Escape" defStyleNum="dsDataType" spellChecking="false"/>
2125 <itemData name="String SingleQ" defStyleNum="dsString"/>
2126 <itemData name="String DoubleQ" defStyleNum="dsString"/>
2127 <itemData name="Here Doc" defStyleNum="dsString"/>
2128 <itemData name="Backquote" defStyleNum="dsKeyword" spellChecking="false"/>
2129 <itemData name="String Transl." defStyleNum="dsString"/>
2130 <itemData name="String Escape" defStyleNum="dsDataType"/>
2131 <itemData name="Variable" defStyleNum="dsVariable" spellChecking="false"/>
2132 <itemData name="Dollar Prefix" defStyleNum="dsVariable" spellChecking="false"/>
2133 <itemData name="Expression" defStyleNum="dsOthers" spellChecking="false"/>
2134 <itemData name="Function" defStyleNum="dsFunction" spellChecking="false"/>
2135 <itemData name="Pattern" defStyleNum="dsSpecialString" spellChecking="false"/>
2136 <itemData name="Path" defStyleNum="dsNormal" spellChecking="false"/>
2137 <itemData name="Glob" defStyleNum="dsPreprocessor" spellChecking="false"/>
2138 <itemData name="Glob Flag" defStyleNum="dsOperator" spellChecking="false"/>
2139 <itemData name="Option" defStyleNum="dsAttribute" spellChecking="false"/>
2140 <itemData name="Hex" defStyleNum="dsBaseN" spellChecking="false"/>
2141 <itemData name="Number" defStyleNum="dsDecVal" spellChecking="false"/>
2142 <itemData name="Base" defStyleNum="dsDataType" spellChecking="false"/>
2143 <itemData name="BaseN" defStyleNum="dsBaseN" spellChecking="false"/>
2144 <itemData name="File Descriptor" defStyleNum="dsDecVal" spellChecking="false"/>
2145 <itemData name="Parameter Expansion" defStyleNum="dsVariable" spellChecking="false"/>
2146 <itemData name="Parameter Expansion Operator" defStyleNum="dsOperator" spellChecking="false"/>
2147 <itemData name="Operator" defStyleNum="dsOperator" spellChecking="false"/>
2148 <itemData name="Error" defStyleNum="dsError" spellChecking="false"/>
2149 </itemDatas>
2150 </highlighting>
2151 <general>
2152 <comments>
2153 <comment name="singleLine" start="#"/>
2154 </comments>
2155 <keywords casesensitive="1" weakDeliminator="^%#[]$._:-/" additionalDeliminator="`"/>
2156 </general>
2157 </language>
2158 <!-- kate: replace-tabs on; indent-width 2; -->