Warning, /frameworks/syntax-highlighting/data/syntax/bash.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;}=#$]|[+!@](?!\())([^&_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 "<>|&;()"> <!-- see man bash --> 0012 <!ENTITY wordseps " &tab;&symbolseps;"> <!-- see man bash --> 0013 0014 <!ENTITY bq_string "`[^`]*+`"> 0015 <!ENTITY sq_string "'[^']*+'"> 0016 <!ENTITY dq_string ""(?:[^"\\`]*+|&bq_string;|\\.)*+""> 0017 <!ENTITY strings "(?:&sq_string;|&dq_string;|&bq_string;)"> 0018 0019 <!ENTITY globany "\[(?:[^&wordseps;"'`\\\[\]]+|\\.|&strings;|\[:\w+:\]|\[)*\]"> 0020 0021 <!ENTITY next_is_globany "(?:\^?\]\]|(?:\^?\]?)?(?:\\.|[^'" &tab;<>|&;()\\[\]]+|&strings;|\[:\w+:\])+\])"> 0022 <!ENTITY bracket_noglobany "\[(?!&next_is_globany;)"> 0023 0024 <!ENTITY _fragpathseps "*?+!@&wordseps;&substseps;"> 0025 <!ENTITY _fragpathnosep "(?:[+!@](?!\()|\\.|&_brace_noexpansion;)?+"> 0026 <!ENTITY path "(?:[^&_fragpathseps;\[]*+&_fragpathnosep;)*+"> 0027 <!ENTITY fragpath "(?:[^&_fragpathseps;\[/]*+&_fragpathnosep;)*+"> 0028 <!ENTITY opt "(?:[^&_fragpathseps;\[=/]*+&_fragpathnosep;)*+"> 0029 <!ENTITY pathpart "(?:~|\.\.?|&fragpath;)(?:/&path;|(?=[*?]|[+!@]\(|&fragpath;(?:[/*?]|\[&next_is_globany;|[+!@]\()))|(?:~|\.\.?)(?=[&wordseps;]|$)"> 0030 0031 <!ENTITY _fragpathseps_alt "*?+!@&substseps;}"> 0032 <!ENTITY _fragpathnosep_alt "(?:[+!@](?!\()|\\.)?+"> 0033 <!ENTITY path_alt "(?:[^&_fragpathseps_alt;]*+&_fragpathnosep_alt;)*+"> 0034 <!ENTITY fragpath_alt "(?:[^&_fragpathseps_alt;/]*+&_fragpathnosep_alt;)*+"> 0035 <!ENTITY opt_alt "(?:[^&_fragpathseps_alt;=/]*+&_fragpathnosep_alt;)*+"> 0036 <!ENTITY pathpart_alt "(?:~|\.\.?|&fragpath_alt;)(?:/&path_alt;|(?=[*?]|[+!@]\(|&fragpath_alt;(?:[/*?]|[+!@]\()))|(?:~|\.\.?)(?=\}|$)"> 0037 0038 <!-- Path only with / --> 0039 <!ENTITY path_with_sep_text "[^?*+!@&wordseps;'"`\\/]"> 0040 <!ENTITY path_with_sep_text2 "[^?*+!@()'"`\\/]"> 0041 <!ENTITY path_with_sep_expr "\\.|&strings;|&globany;|[?*+](?!\()"> 0042 <!ENTITY path_with_sep_spe "(~|\.\.?)($|[/ &tab;<>|&;)])"> 0043 <!ENTITY path_with_sep_sub "[?*+!@]\((&path_with_sep_text2;++|&path_with_sep_expr;)*+(\)|(?=/))"> 0044 <!ENTITY path_with_sep "/|&path_with_sep_spe;|(&path_with_sep_text;++|&path_with_sep_expr;|&path_with_sep_sub;)*+/"> 0045 0046 <!ENTITY _braceexpansion_spe " &tab;<>|&;{}\\`'"$"> 0047 <!ENTITY _brace_noexpansion "\{[^&_braceexpansion_spe;,]*+\}"> 0048 <!ENTITY _braceexpansion_var "\$(?:\{[^\[\]&_braceexpansion_spe;]*+(?:\[[*@a-zA-Z0-9]\])\})?"> 0049 <!ENTITY _braceexpansion_string "'[^']*'|"([^"\`]*+|`[^`]*`)*+""> 0050 <!ENTITY _braceexpansion_elems "\\.|`[^`]*`|&_braceexpansion_string;|&_braceexpansion_var;|&_brace_noexpansion;"> 0051 <!ENTITY _braceexpansion_consume "&_braceexpansion_elems;|{(?:[^&_braceexpansion_spe;,]++|&_braceexpansion_elems;)*?}|(?R)?+"> 0052 <!ENTITY _braceexpansion "(?:[^&_braceexpansion_spe;,]++|&_braceexpansion_consume;)*?,(?:[^&_braceexpansion_spe;]++|&_braceexpansion_consume;)*?}"> 0053 <!ENTITY braceexpansion "{&_braceexpansion;"> 0054 0055 <!ENTITY heredocq "(?|"([^"]+)"|'([^']+)'|\\(.[^&wordseps;&substseps;]*))"> 0056 0057 <!ENTITY arithmetic_as_subshell "\(((?:[^`'"()$]++|\$\{[^`'"(){}$]+\}|\$(?=[^{`'"()])|`[^`]*+`|\((?1)(?:[)]|(?=['"])))++)(?:[)](?=$|[^)])|["'])"> 0058 0059 <!ENTITY unary_operators "-[abcdefghkprstuwxGLNOSovRnz]&eos;"> 0060 <!ENTITY binary_operators "(?:-(?:e[fq]|[nolg]t|[nlg]e)|==?|!=)&eos;"> 0061 0062 <!ENTITY dblbracket_close "\]\](?=($|[ &tab;;|&)]))"> 0063 0064 <!ENTITY weakDeliminatorSymbols "^%#[]$.{}:-/"> 0065 ]> 0066 0067 <language 0068 name="Bash" 0069 version="47" 0070 kateversion="5.79" 0071 section="Scripts" 0072 extensions="*.sh;*.bash;*.ebuild;*.eclass;*.exlib;*.exheres-0;.bashrc;.bash_profile;.bash_login;.profile;PKGBUILD;APKBUILD" 0073 mimetype="application/x-shellscript" 0074 casesensitive="1" 0075 author="Wilbert Berendsen (wilbert@kde.nl)" 0076 license="LGPL" 0077 > 0078 0079 <!-- (c) 2004 by Wilbert Berendsen (wilbert@kde.nl) 0080 Changes by Matthew Woehlke (mw_triad@users.sourceforge.net) 0081 Changes by Sebastian Pipping (webmaster@hartwork.org) 0082 Changes by Luiz Angelo Daros de Luca (luizluca@gmail.com) 0083 Released under the LGPL, part of kdelibs/kate --> 0084 0085 <highlighting> 0086 <list name="keywords"> 0087 <item>break</item> 0088 <item>case</item> 0089 <item>continue</item> 0090 <item>do</item> 0091 <item>done</item> 0092 <item>elif</item> 0093 <item>else</item> 0094 <item>esac</item> 0095 <item>fi</item> 0096 <item>for</item> 0097 <item>function</item> 0098 <item>if</item> 0099 <item>in</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"> 0108 <item>.</item> 0109 <item>:</item> 0110 <item>source</item> 0111 <item>alias</item> 0112 <item>bg</item> 0113 <item>bind</item> 0114 <item>builtin</item> 0115 <item>cd</item> 0116 <item>caller</item> 0117 <item>command</item> 0118 <item>compgen</item> 0119 <item>complete</item> 0120 <item>coproc</item> 0121 <item>dirs</item> 0122 <item>disown</item> 0123 <item>echo</item> 0124 <item>enable</item> 0125 <item>eval</item> 0126 <item>exec</item> 0127 <item>exit</item> 0128 <item>fc</item> 0129 <item>fg</item> 0130 <item>hash</item> 0131 <item>help</item> 0132 <item>history</item> 0133 <item>jobs</item> 0134 <item>kill</item> 0135 <item>logout</item> 0136 <item>popd</item> 0137 <item>printf</item> 0138 <item>pushd</item> 0139 <item>pwd</item> 0140 <item>set</item> 0141 <item>shift</item> 0142 <item>shopt</item> 0143 <item>suspend</item> 0144 <item>test</item> 0145 <item>time</item> 0146 <item>times</item> 0147 <item>trap</item> 0148 <item>type</item> 0149 <item>ulimit</item> 0150 <item>umask</item> 0151 <item>unalias</item> 0152 <item>wait</item> 0153 </list> 0154 0155 <list name="builtins_var"> 0156 <item>export</item> 0157 <item>declare</item> 0158 <item>getopts</item> 0159 <item>let</item> 0160 <item>local</item> 0161 <item>read</item> 0162 <item>readonly</item> 0163 <item>typeset</item> 0164 <item>unset</item> 0165 </list> 0166 0167 <list name="unixcommands"> 0168 <!-- /bin --> 0169 <item>arch</item> 0170 <item>awk</item> 0171 <item>b2sum</item> 0172 <item>base32</item> 0173 <item>base64</item> 0174 <item>bash</item> 0175 <item>bunzip2</item> 0176 <item>bzcat</item> 0177 <item>bzcmp</item> 0178 <item>bzdiff</item> 0179 <item>bzegrep</item> 0180 <item>bzfgrep</item> 0181 <item>bzgrep</item> 0182 <item>bzip2</item> 0183 <item>bzip2recover</item> 0184 <item>bzless</item> 0185 <item>bzmore</item> 0186 <item>cat</item> 0187 <item>chattr</item> 0188 <item>chcon</item> 0189 <item>chgrp</item> 0190 <item>chmod</item> 0191 <item>chown</item> 0192 <item>chvt</item> 0193 <item>cksum</item> 0194 <item>cp</item> 0195 <item>crontab</item> 0196 <item>csplit</item> 0197 <item>date</item> 0198 <item>dd</item> 0199 <item>deallocvt</item> 0200 <item>df</item> 0201 <item>dir</item> 0202 <item>dircolors</item> 0203 <item>dmesg</item> 0204 <item>dnsdomainname</item> 0205 <item>domainname</item> 0206 <item>du</item> 0207 <item>dumpkeys</item> 0208 <item>ed</item> 0209 <item>egrep</item> 0210 <item>expand</item> 0211 <item>false</item> 0212 <item>fgconsole</item> 0213 <item>fgrep</item> 0214 <item>fold</item> 0215 <item>fuser</item> 0216 <item>gawk</item> 0217 <item>getkeycodes</item> 0218 <item>gocr</item> 0219 <item>grep</item> 0220 <item>groff</item> 0221 <item>groups</item> 0222 <item>gunzip</item> 0223 <item>gzexe</item> 0224 <item>gzip</item> 0225 <item>hostid</item> 0226 <item>hostname</item> 0227 <item>iconv</item> 0228 <item>igawk</item> 0229 <item>install</item> 0230 <item>kbd_mode</item> 0231 <item>kbdrate</item> 0232 <item>killall</item> 0233 <item>last</item> 0234 <item>lastb</item> 0235 <item>link</item> 0236 <item>ln</item> 0237 <item>loadkeys</item> 0238 <item>loadunimap</item> 0239 <item>login</item> 0240 <item>ls</item> 0241 <item>lsattr</item> 0242 <item>lsmod</item> 0243 <item>lsmod.old</item> 0244 <item>lzcat</item> 0245 <item>lzcmp</item> 0246 <item>lzdiff</item> 0247 <item>lzegrep</item> 0248 <item>lzfgrep</item> 0249 <item>lzgrep</item> 0250 <item>lzless</item> 0251 <item>lzma</item> 0252 <item>lzmainfo</item> 0253 <item>lzmore</item> 0254 <item>mapscrn</item> 0255 <item>md5sum</item> 0256 <item>mesg</item> 0257 <item>mkdir</item> 0258 <item>mkfifo</item> 0259 <item>mknod</item> 0260 <item>mktemp</item> 0261 <item>more</item> 0262 <item>mount</item> 0263 <item>mv</item> 0264 <item>nano</item> 0265 <item>netstat</item> 0266 <item>nisdomainname</item> 0267 <item>nproc</item> 0268 <item>nroff</item> 0269 <item>numfmt</item> 0270 <item>openvt</item> 0271 <item>paste</item> 0272 <item>pathchk</item> 0273 <item>pgawk</item> 0274 <item>pidof</item> 0275 <item>ping</item> 0276 <item>pinky</item> 0277 <item>printenv</item> 0278 <item>ps</item> 0279 <item>pstree</item> 0280 <item>ptx</item> 0281 <item>rbash</item> 0282 <item>readlink</item> 0283 <item>realpath</item> 0284 <item>red</item> 0285 <item>resizecons</item> 0286 <item>rm</item> 0287 <item>rmdir</item> 0288 <item>run-parts</item> 0289 <item>runcon</item> 0290 <item>sash</item> 0291 <item>sed</item> 0292 <item>setfont</item> 0293 <item>setkeycodes</item> 0294 <item>setleds</item> 0295 <item>setmetamode</item> 0296 <item>setserial</item> 0297 <item>sh</item> 0298 <item>sha1sum</item> 0299 <item>sha224sum</item> 0300 <item>sha256sum</item> 0301 <item>sha384sum</item> 0302 <item>sha512sum</item> 0303 <item>showkey</item> 0304 <item>shred</item> 0305 <item>shuf</item> 0306 <item>sleep</item> 0307 <item>ssed</item> 0308 <item>stat</item> 0309 <item>stdbuf</item> 0310 <item>stty</item> 0311 <item>su</item> 0312 <item>sync</item> 0313 <item>tar</item> 0314 <item>tempfile</item> 0315 <item>timeout</item> 0316 <item>touch</item> 0317 <item>tput</item> 0318 <item>troff</item> 0319 <item>true</item> 0320 <item>truncate</item> 0321 <item>tty</item> 0322 <item>umount</item> 0323 <item>uname</item> 0324 <item>unexpand</item> 0325 <item>unicode_start</item> 0326 <item>unicode_stop</item> 0327 <item>unlink</item> 0328 <item>unlzma</item> 0329 <item>unxz</item> 0330 <item>utmpdump</item> 0331 <item>uuidgen</item> 0332 <item>vdir</item> 0333 <item>vi</item> 0334 <item>wall</item> 0335 <item>wc</item> 0336 <item>xz</item> 0337 <item>xzcat</item> 0338 <item>ypdomainname</item> 0339 <item>zcat</item> 0340 <item>zcmp</item> 0341 <item>zdiff</item> 0342 <item>zegrep</item> 0343 <item>zfgrep</item> 0344 <item>zforce</item> 0345 <item>zgrep</item> 0346 <item>zless</item> 0347 <item>zmore</item> 0348 <item>znew</item> 0349 <item>zsh</item> 0350 0351 <!-- some from /usr/bin --> 0352 <item>aclocal</item> 0353 <item>aconnect</item> 0354 <item>aplay</item> 0355 <item>apm</item> 0356 <item>apmsleep</item> 0357 <item>apropos</item> 0358 <item>ar</item> 0359 <item>arecord</item> 0360 <item>as</item> 0361 <item>as86</item> 0362 <item>autoconf</item> 0363 <item>autoheader</item> 0364 <item>automake</item> 0365 <item>basename</item> 0366 <item>bc</item> 0367 <item>bison</item> 0368 <item>c++</item> 0369 <item>cal</item> 0370 <item>cc</item> 0371 <item>cdda2wav</item> 0372 <item>cdparanoia</item> 0373 <item>cdrdao</item> 0374 <item>cd-read</item> 0375 <item>cdrecord</item> 0376 <item>chfn</item> 0377 <item>chroot</item> 0378 <item>chsh</item> 0379 <item>clear</item> 0380 <item>cmp</item> 0381 <item>co</item> 0382 <item>col</item> 0383 <item>comm</item> 0384 <item>cpio</item> 0385 <item>cpp</item> 0386 <item>cut</item> 0387 <item>dc</item> 0388 <item>diff</item> 0389 <item>diff3</item> 0390 <item>directomatic</item> 0391 <item>dirname</item> 0392 <item>env</item> 0393 <item>expr</item> 0394 <item>fbset</item> 0395 <item>file</item> 0396 <item>find</item> 0397 <item>flex</item> 0398 <item>flex++</item> 0399 <item>fmt</item> 0400 <item>free</item> 0401 <item>ftp</item> 0402 <item>funzip</item> 0403 <item>g++</item> 0404 <item>gc</item> 0405 <item>gcc</item> 0406 <item>clang</item> 0407 <item>clang++</item> 0408 <item>valgrind</item> 0409 <item>xdg-open</item> 0410 <item>cmake</item> 0411 <item>qmake</item> 0412 <item>svn</item> 0413 <item>git</item> 0414 <item>rsync</item> 0415 <item>gdb</item> 0416 <item>getent</item> 0417 <item>getopt</item> 0418 <item>gettext</item> 0419 <item>gettextize</item> 0420 <item>gimp</item> 0421 <item>gimp-remote</item> 0422 <item>gimptool</item> 0423 <item>gmake</item> 0424 <item>gs</item> 0425 <item>head</item> 0426 <item>hexdump</item> 0427 <item>id</item> 0428 <item>join</item> 0429 <item>ld</item> 0430 <item>ld86</item> 0431 <item>ldd</item> 0432 <item>less</item> 0433 <item>lex</item> 0434 <item>locate</item> 0435 <item>lockfile</item> 0436 <item>logname</item> 0437 <item>lp</item> 0438 <item>lpr</item> 0439 <item>lynx</item> 0440 <item>m4</item> 0441 <item>make</item> 0442 <item>man</item> 0443 <item>msgfmt</item> 0444 <item>namei</item> 0445 <item>nasm</item> 0446 <item>nawk</item> 0447 <item>nice</item> 0448 <item>nl</item> 0449 <item>nm</item> 0450 <item>nm86</item> 0451 <item>nmap</item> 0452 <item>nohup</item> 0453 <item>nop</item> 0454 <item>od</item> 0455 <item>passwd</item> 0456 <item>patch</item> 0457 <item>pcregrep</item> 0458 <item>pcretest</item> 0459 <item>perl</item> 0460 <item>perror</item> 0461 <item>pr</item> 0462 <item>procmail</item> 0463 <item>prune</item> 0464 <item>ps2ascii</item> 0465 <item>ps2epsi</item> 0466 <item>ps2frag</item> 0467 <item>ps2pdf</item> 0468 <item>ps2ps</item> 0469 <item>psbook</item> 0470 <item>psmerge</item> 0471 <item>psnup</item> 0472 <item>psresize</item> 0473 <item>psselect</item> 0474 <item>pstops</item> 0475 <item>rcs</item> 0476 <item>rev</item> 0477 <item>scp</item> 0478 <item>seq</item> 0479 <item>setterm</item> 0480 <item>size</item> 0481 <item>size86</item> 0482 <item>skill</item> 0483 <item>slogin</item> 0484 <item>snice</item> 0485 <item>sort</item> 0486 <item>sox</item> 0487 <item>split</item> 0488 <item>ssh</item> 0489 <item>ssh-add</item> 0490 <item>ssh-agent</item> 0491 <item>ssh-keygen</item> 0492 <item>ssh-keyscan</item> 0493 <item>strings</item> 0494 <item>strip</item> 0495 <item>sudo</item> 0496 <item>suidperl</item> 0497 <item>sum</item> 0498 <item>tac</item> 0499 <item>tail</item> 0500 <item>tee</item> 0501 <item>tr</item> 0502 <item>tsort</item> 0503 <item>uniq</item> 0504 <item>unzip</item> 0505 <item>updatedb</item> 0506 <item>updmap</item> 0507 <item>uptime</item> 0508 <item>users</item> 0509 <item>vmstat</item> 0510 <item>w</item> 0511 <item>wget</item> 0512 <item>whatis</item> 0513 <item>whereis</item> 0514 <item>which</item> 0515 <item>who</item> 0516 <item>whoami</item> 0517 <item>write</item> 0518 <item>xargs</item> 0519 <item>yacc</item> 0520 <item>yes</item> 0521 <item>zip</item> 0522 <item>zsoelim</item> 0523 0524 <!-- others --> 0525 <item>dcop</item> 0526 <item>kdialog</item> 0527 <item>kfile</item> 0528 <item>xhost</item> 0529 <item>xmodmap</item> 0530 <item>xset</item> 0531 </list> 0532 0533 0534 <contexts> 0535 <context attribute="Normal Text" lineEndContext="#stay" name="Start" fallthroughContext="Command"> 0536 <IncludeRules context="BashOneLine"/> 0537 </context> 0538 0539 <!-- used by other syntaxes --> 0540 <context attribute="Normal Text" lineEndContext="#pop" name="FindOneLineBackq" fallthroughContext="#pop"> 0541 <DetectChar attribute="Backquote" context="OneLineBackq" char="`"/> 0542 </context> 0543 <context attribute="Normal Text" lineEndContext="#stay" name="OneLineBackq" fallthroughContext="Command"> 0544 <DetectChar attribute="Backquote" context="#pop" char="`"/> 0545 <IncludeRules context="Start"/> 0546 </context> 0547 0548 <context attribute="Normal Text" lineEndContext="#pop" name="BashOneLine" fallthroughContext="Command"> 0549 <DetectSpaces attribute="Normal Text" context="#stay"/> 0550 <DetectChar attribute="Comment" context="Comment" char="#"/> 0551 <!-- start expression in double parentheses --> 0552 <Detect2Chars context="ExprDblParenOrSubShell" char="(" char1="(" lookAhead="1"/> 0553 <!-- start a subshell --> 0554 <DetectChar attribute="Keyword" context="SubShell" char="(" beginRegion="subshell"/> 0555 <!-- start expression in single/double brackets --> 0556 <DetectChar context="MaybeBracketExpression" char="[" lookAhead="1"/> 0557 <!-- start a group command or BraceExpansion with { --> 0558 <DetectChar context="MaybeGroup" char="{" lookAhead="1"/> 0559 0560 <!-- handle ` --> 0561 <DetectChar attribute="Backquote" context="CommandBackq" char="`"/> 0562 0563 <!-- &> and &>> redirection --> 0564 <StringDetect attribute="Redirection" context="WordRedirection" String="&>>"/> 0565 <Detect2Chars attribute="Redirection" context="FdRedirection" char="&" char1=">"/> 0566 0567 <!-- handle branche conditions --> 0568 <Detect2Chars attribute="Control" context="#stay" char="&" char1="&"/> 0569 <Detect2Chars attribute="Control" context="#stay" char="|" char1="|"/> 0570 0571 <!-- handle &, |, ; --> 0572 <AnyChar attribute="Control" context="#stay" String="&|;"/> 0573 0574 <!-- handle variable assignments --> 0575 <RegExpr attribute="Variable" context="VarAssign" String="&varname;(?=\+?=|\[(?:$|[^]]))"/> 0576 <!-- handle keywords --> 0577 <keyword context="DispatchKeyword" String="keywords" lookAhead="1"/> 0578 <!-- handle commands that have variable names as argument --> 0579 <keyword attribute="Builtin" context="VarName" String="builtins_var" lookAhead="1"/> 0580 <!-- mark function definitions without function keyword --> 0581 <RegExpr attribute="Function" context="#stay" String="&funcname;[ &tab;]*\(\)"/> 0582 <!-- Special case for `: << '#BLOCK-COMMENT' form of "multiline" comments--> 0583 <RegExpr attribute="Normal Text" context="PreHereDocMLComment" String="^:[ &tab;]+<<[ &tab;]*'#([^']+)'$" lookAhead="1" column="0"/> 0584 <WordDetect attribute="Builtin" context="Coproc" String="coproc"/> 0585 <keyword attribute="Builtin" context="CommandArgs" String="builtins"/> 0586 <keyword attribute="Command" context="CommandArgs" String="unixcommands"/> 0587 0588 <!-- handle redirection --> 0589 <AnyChar context="CommandMaybeRedirection" String="<>0123456789" lookAhead="1"/> 0590 0591 <AnyChar attribute="Error" context="#stay" String=")}"/> 0592 0593 <LineContinue attribute="Escape" context="#stay"/> 0594 0595 <Detect2Chars attribute="Expression" context="#stay" char="!" char1=" "/> 0596 </context> 0597 <context attribute="Normal Text" lineEndContext="#pop" name="MaybeBracketExpression" fallthroughContext="#pop!Command"> 0598 <!-- start expression in double brackets --> 0599 <RegExpr attribute="Keyword" context="#pop!ExprDblBracket" String="\[\[(?=$|[ &tab;(])" beginRegion="expression"/> 0600 <!-- start expression in single brackets --> 0601 <RegExpr attribute="Builtin" context="#pop!ExprBracket" String="\[&eos;" beginRegion="expression"/> 0602 </context> 0603 <context attribute="Normal Text" lineEndContext="#pop" name="MaybeGroup"> 0604 <!-- start a group command with { --> 0605 <RegExpr attribute="Keyword" context="#pop!Group" String="\{&eos;" beginRegion="group"/> 0606 <DetectChar context="#pop!Command" char="{" lookAhead="1"/> 0607 </context> 0608 <context attribute="Normal Text" lineEndContext="#pop" name="CommandMaybeRedirection" fallthroughContext="#pop!Command"> 0609 <IncludeRules context="FindRedirection"/> 0610 </context> 0611 <context attribute="Normal Text" lineEndContext="#pop" name="Return" fallthroughContext="#pop"> 0612 <DetectSpaces attribute="Normal Text" context="#stay"/> 0613 <Int attribute="Decimal" context="#stay"/> 0614 </context> 0615 <!-- Comment consumes shell comments till EOL --> 0616 <context attribute="Comment" lineEndContext="#pop" name="Comment"> 0617 <DetectSpaces attribute="Comment"/> 0618 <IncludeRules context="##Comments"/> 0619 <DetectIdentifier attribute="Comment" context="#stay"/> 0620 </context> 0621 0622 <!-- Group is called after a { is encountered --> 0623 <context attribute="Normal Text" lineEndContext="#stay" name="Group" fallthroughContext="Command"> 0624 <DetectChar context="MaybeGroupEnd" char="}" lookAhead="1"/> 0625 <IncludeRules context="Start"/> 0626 </context> 0627 <context attribute="Normal Text" lineEndContext="#pop" name="MaybeGroupEnd"> 0628 <!-- stop a group command with } --> 0629 <RegExpr attribute="Keyword" context="#pop#pop" String="\}&eoexpr;" endRegion="group"/> 0630 <DetectChar context="#pop!Command" char="}" lookAhead="1"/> 0631 </context> 0632 0633 <context attribute="Normal Text" lineEndContext="#pop" name="Coproc" fallthroughContext="#pop"> 0634 <DetectSpaces attribute="Normal Text"/> 0635 <LineContinue attribute="Escape" context="#stay"/> 0636 <RegExpr context="CoprocName" String="(\$?&varname;|\$\{&varname;\}|'&varname;'|"(\$?&varname;|\$\{&varname;\}|[a-zA-Z0-9_])+")+(?=\s+\{($|\s))" lookAhead="1"/> 0637 </context> 0638 <context attribute="Normal Text" lineEndContext="#stay" name="CoprocName"> 0639 <DetectChar attribute="Keyword" context="#pop#pop!Group" char="{" beginRegion="group"/> 0640 <DetectSpaces attribute="Normal Text"/> 0641 <DetectIdentifier attribute="Normal Text"/> 0642 <IncludeRules context="FindWord"/> 0643 </context> 0644 0645 <context attribute="Command" lineEndContext="#pop" name="Command" fallthroughContext="#pop"> 0646 <DetectSpaces attribute="Normal Text" context="#pop!CommandArgs"/> 0647 <DetectChar context="CommandVariables" char="$" lookAhead="1"/> 0648 <IncludeRules context="FindStrings"/> 0649 <DetectChar context="#pop" char="`" lookAhead="1"/> 0650 <RegExpr attribute="OtherCommand" context="CommandName" String="(?:[^&wordseps;&substseps;]++|\\.)+"/> 0651 <LineContinue attribute="Escape" context="#stay"/> 0652 <DetectChar context="CommandMaybeBraceExpansion" char="{" lookAhead="1"/> 0653 </context> 0654 <context attribute="Command" lineEndContext="#pop#pop" name="CommandVariables"> 0655 <IncludeRules context="DispatchVariables"/> 0656 <DetectChar attribute="OtherCommand" context="#pop" char="$"/> 0657 </context> 0658 <context attribute="Command" lineEndContext="#pop#pop" name="DispatchVariables"> 0659 <IncludeRules context="DispatchSubstVariables"/> 0660 <IncludeRules context="DispatchStringVariables"/> 0661 <IncludeRules context="DispatchVarnameVariables"/> 0662 </context> 0663 <context attribute="Command" lineEndContext="#pop#pop" name="DispatchSubstVariables"> 0664 <Detect2Chars attribute="Parameter Expansion" context="#pop!VarBraceStart" char="$" char1="{"/> 0665 <StringDetect context="#pop!ExprDblParenSubstOrSubstCommand" String="$((" lookAhead="1"/> 0666 <Detect2Chars attribute="Parameter Expansion" context="#pop!SubstCommand" char="$" char1="(" beginRegion="subshell"/> 0667 </context> 0668 <context attribute="Command" lineEndContext="#pop#pop" name="DispatchStringVariables"> 0669 <Detect2Chars attribute="String SingleQ" context="#pop!StringEsc" char="$" char1="'"/> 0670 <Detect2Chars attribute="String Transl." context="#pop!StringDQ" char="$" char1="""/> 0671 </context> 0672 <context attribute="Command" lineEndContext="#pop#pop" name="DispatchVarnameVariables"> 0673 <RegExpr attribute="Dollar Prefix" context="#pop!VarNamePrefixedWithDollar" String="\$(?=&varname;|[*@#?$!0-9-])"/> 0674 </context> 0675 <context attribute="Variable" lineEndContext="#pop" name="VarNamePrefixedWithDollar"> 0676 <DetectIdentifier attribute="Variable" context="#pop"/> 0677 <AnyChar attribute="Variable" context="#pop" String="*@#?$!0123456789-"/> 0678 </context> 0679 <context attribute="OtherCommand" lineEndContext="#pop#pop" name="CommandName"> 0680 <DetectSpaces attribute="Normal Text" context="#pop#pop!CommandArgs"/> 0681 <DetectIdentifier attribute="OtherCommand" context="#stay"/> 0682 <DetectChar context="CommandVariables" char="$" lookAhead="1"/> 0683 <IncludeRules context="FindStrings"/> 0684 <Detect2Chars attribute="Control" context="#pop#pop" char="&" char1="&"/> 0685 <Detect2Chars attribute="Control" context="#pop#pop" char="|" char1="|"/> 0686 <DetectChar attribute="Control" context="#pop#pop" char="|"/> 0687 <AnyChar context="#pop#pop" String=";)`" lookAhead="1"/> 0688 <AnyChar context="#pop#pop!CommandArgs" String="&<>" lookAhead="1"/> 0689 <!-- start expression in double parentheses --> 0690 <Detect2Chars attribute="Error" context="#pop#pop!ExprDblParen" char="(" char1="(" beginRegion="expression"/> 0691 <!-- start a subshell --> 0692 <DetectChar attribute="Error" context="#pop#pop!SubShell" char="(" beginRegion="subshell"/> 0693 <LineContinue attribute="Escape" context="#stay"/> 0694 <DetectChar context="#pop!CommandMaybeBraceExpansion" char="{" lookAhead="1"/> 0695 </context> 0696 <context attribute="Normal Text" lineEndContext="#pop" name="CommandMaybeBraceExpansion"> 0697 <IncludeRules context="DispatchBraceExpansion"/> 0698 <DetectChar attribute="OtherCommand" context="#pop" char="{"/> 0699 </context> 0700 0701 <context attribute="Normal Text" lineEndContext="#stay" name="CommandBackq" fallthroughContext="Command"> 0702 <DetectChar attribute="Backquote" context="#pop!CommandArgs" char="`"/> 0703 <DetectChar attribute="Comment" context="CommentBackq" char="#"/> 0704 <IncludeRules context="Start"/> 0705 </context> 0706 <!-- CommentBackq consumes shell comments till EOL or a backquote --> 0707 <context attribute="Comment" lineEndContext="#pop" name="CommentBackq"> 0708 <DetectChar context="#pop" char="`" lookAhead="1"/> 0709 <IncludeRules context="Comment"/> 0710 </context> 0711 0712 <!-- CommandArgs matches the items after a command --> 0713 <context attribute="Normal Text" lineEndContext="#pop" name="CommandArgs" fallthroughContext="CommandArg"> 0714 <DetectSpaces attribute="Normal Text" context="#stay"/> 0715 0716 <!-- &> and &>> redirection --> 0717 <StringDetect attribute="Redirection" context="WordRedirection" String="&>>"/> 0718 <Detect2Chars attribute="Redirection" context="FdRedirection" char="&" char1=">"/> 0719 0720 <!-- handle &, |, ;, ` --> 0721 <AnyChar context="#pop" String="&|;`" lookAhead="1"/> 0722 0723 <!-- handle redirection --> 0724 <AnyChar context="CommandArgMaybeRedirection" String="<>0123456789" lookAhead="1"/> 0725 0726 <DetectChar context="#pop" char=")" lookAhead="1"/> 0727 <DetectChar attribute="Error" context="#pop!SubShell" char="("/> 0728 </context> 0729 <context attribute="Normal Text" lineEndContext="#pop#pop" name="CommandArg" fallthroughContext="#pop!NormalOption"> 0730 <!-- In command arguments, do not allow comments after escaped characters. 0731 This avoids highlighting comments within paths or other text. Ex: pathtext\ #no\ comment --> 0732 <DetectChar context="#pop#pop" char="#" lookAhead="1"/> 0733 <Detect2Chars attribute="Option" context="#pop!LongOption" char="-" char1="-"/> 0734 <DetectChar attribute="Option" context="#pop!ShortOption" char="-"/> 0735 </context> 0736 <context attribute="Normal Text" lineEndContext="#pop" name="CommandArgMaybeRedirection" fallthroughContext="#pop!NormalOption"> 0737 <IncludeRules context="FindRedirection"/> 0738 </context> 0739 0740 <context attribute="Option" lineEndContext="#pop" name="ShortOption" fallthroughContext="#pop"> 0741 <DetectChar attribute="Path" context="PathThenPop" char="/"/> 0742 <IncludeRules context="LongOption"/> 0743 </context> 0744 <context attribute="Option" lineEndContext="#pop" name="LongOption" fallthroughContext="#pop"> 0745 <AnyChar context="#pop" String="&wordseps;`" lookAhead="1"/> 0746 <DetectChar attribute="Operator" context="#pop!NormalOption" char="="/> 0747 <IncludeRules context="FindWord"/> 0748 <IncludeRules context="FindGlobAndPop"/> 0749 <DetectChar context="OptionMaybeBraceExpansion" char="{" lookAhead="1"/> 0750 <DetectChar context="LongOptionMaybeGlobAny" char="[" lookAhead="1"/> 0751 <RegExpr attribute="Option" context="#stay" String="&opt;"/> 0752 </context> 0753 <context attribute="Option" lineEndContext="#pop#pop" name="LongOptionMaybeGlobAny" fallthroughContext="#pop"> 0754 <IncludeRules context="FindGlobAny"/> 0755 <DetectChar attribute="Option" context="#pop" char="["/> 0756 </context> 0757 <context attribute="Normal Text" lineEndContext="#pop" name="NormalOption" fallthroughContext="#pop"> 0758 <AnyChar context="#pop" String="&wordseps;`" lookAhead="1"/> 0759 <IncludeRules context="FindWord"/> 0760 <DetectChar context="NormalMaybeBraceExpansion" char="{" lookAhead="1"/> 0761 <IncludeRules context="FindNormalText"/> 0762 </context> 0763 <context attribute="Normal Text" lineEndContext="#stay" name="FindNormalText"> 0764 <IncludeRules context="FindGlobAndPop"/> 0765 <RegExpr attribute="Path" context="PathThenPop" String="&pathpart;"/> 0766 <DetectChar context="FindPathThenPopMaybeGlobAny" char="[" lookAhead="1"/> 0767 <RegExpr attribute="Normal Text" context="#stay" String="[^&wordseps;&substseps;\[]+"/> 0768 </context> 0769 <context attribute="Normal Text" lineEndContext="#pop" name="OptionMaybeBraceExpansion"> 0770 <IncludeRules context="DispatchBraceExpansion"/> 0771 <DetectChar attribute="Option" context="#pop" char="{"/> 0772 </context> 0773 <context attribute="Normal Text" lineEndContext="#pop" name="NormalMaybeBraceExpansion"> 0774 <IncludeRules context="DispatchBraceExpansion"/> 0775 <DetectChar attribute="Normal Text" context="#pop" char="{"/> 0776 </context> 0777 0778 <context attribute="Normal Text" lineEndContext="#pop" name="AssumeEscape"> 0779 <LineContinue attribute="Escape" context="#pop"/> 0780 <RegExpr attribute="Escape" context="#pop" String="\\."/> 0781 </context> 0782 0783 <!-- ====== The following rulessets are meant to be included ======== --> 0784 0785 <!-- FindRedirection consumes shell redirection --> 0786 <context attribute="Normal Text" lineEndContext="#pop" name="FindRedirection"> 0787 <RegExpr attribute="File Descriptor" context="#pop!AssumeRedirection" String="[0-9]++(?=[<>])"/> 0788 <IncludeRules context="AssumeRedirection"/> 0789 </context> 0790 0791 <!-- DispatchBraceExpansion consumes brace expansions --> 0792 <context attribute="Normal Text" lineEndContext="#pop" name="DispatchBraceExpansion"> 0793 <!-- Only highlighting closed braces. The "BraceExpansion" context corrects 0794 the closure of braces and allows recursive braces (bug #387915). --> 0795 <RegExpr context="#pop!BraceExpansion" String="&braceexpansion;" lookAhead="1"/> 0796 <RegExpr attribute="Escape" context="#pop!SequenceExpression" String="{(?=([-+]?[0-9]+\.\.[-+]?[0-9]+|[a-zA-Z]\.\.[a-zA-Z])(\.\.[-+]?[0-9]+)?\})"/> 0797 </context> 0798 0799 <!-- FindPathThenPopMaybeGlobAny consumes path --> 0800 <context attribute="Normal Text" lineEndContext="#pop#pop" name="FindPathThenPopMaybeGlobAny" fallthroughContext="#pop!PathThenPop"> 0801 <IncludeRules context="FindGlobAny"/> 0802 <DetectChar attribute="Normal Text" context="#pop" char="["/> 0803 </context> 0804 <context attribute="Path" lineEndContext="#pop" name="FindGlobAndPop"> 0805 <Detect2Chars attribute="Glob" context="ExtGlobAndPop" char="?" char1="("/> 0806 <Detect2Chars attribute="Glob" context="ExtGlobAndPop" char="*" char1="("/> 0807 <AnyChar attribute="Glob" context="PathThenPop" String="?*"/> 0808 <Detect2Chars attribute="Glob" context="ExtGlobAndPop" char="+" char1="("/> 0809 <Detect2Chars attribute="Glob" context="ExtGlobAndPop" char="@" char1="("/> 0810 <Detect2Chars attribute="Glob" context="ExtGlobAndPop" char="!" char1="("/> 0811 </context> 0812 <context attribute="Path" lineEndContext="#stay" name="ExtGlobAndPop"> 0813 <DetectChar attribute="Glob" context="#pop!PathThenPop" char=")"/> 0814 <IncludeRules context="FindWord"/> 0815 <IncludeRules context="IncExtGlob"/> 0816 </context> 0817 <context attribute="Path" lineEndContext="#stay" name="FindExtGlob"> 0818 <Detect2Chars attribute="Glob" context="RecursiveExtGlob" char="?" char1="("/> 0819 <Detect2Chars attribute="Glob" context="RecursiveExtGlob" char="*" char1="("/> 0820 <Detect2Chars attribute="Glob" context="RecursiveExtGlob" char="+" char1="("/> 0821 <Detect2Chars attribute="Glob" context="RecursiveExtGlob" char="@" char1="("/> 0822 <Detect2Chars attribute="Glob" context="RecursiveExtGlob" char="!" char1="("/> 0823 <AnyChar attribute="Glob" context="#stay" String="|?*"/> 0824 </context> 0825 <context attribute="Path" lineEndContext="#stay" name="RecursiveExtGlob"> 0826 <DetectChar attribute="Glob" context="#pop" char=")"/> 0827 <IncludeRules context="FindWord"/> 0828 <IncludeRules context="IncExtGlob"/> 0829 <IncludeRules context="PathThenPopMaybeGlobAny"/> 0830 </context> 0831 <context attribute="Path" lineEndContext="#stay" name="IncExtGlob"> 0832 <DetectIdentifier attribute="Path"/> 0833 <IncludeRules context="FindExtGlob"/> 0834 <DetectChar context="PathMaybeBraceExpansion" char="{" lookAhead="1"/> 0835 </context> 0836 <context attribute="Path" lineEndContext="#pop#pop" name="PathThenPop"> 0837 <AnyChar context="#pop#pop" String="&wordseps;`" lookAhead="1"/> 0838 <IncludeRules context="FindWord"/> 0839 <IncludeRules context="FindExtGlob"/> 0840 <DetectChar context="PathMaybeBraceExpansion" char="{" lookAhead="1"/> 0841 <DetectChar context="PathThenPopMaybeGlobAny" char="[" lookAhead="1"/> 0842 <RegExpr attribute="Path" context="#stay" String="&path;"/> 0843 </context> 0844 <context attribute="Path" lineEndContext="#pop#pop" name="PathThenPopMaybeGlobAny" fallthroughContext="#pop"> 0845 <IncludeRules context="FindGlobAny"/> 0846 <DetectChar attribute="Path" context="#pop" char="["/> 0847 </context> 0848 <context attribute="Path" lineEndContext="#pop" name="PathMaybeBraceExpansion" fallthroughContext="#pop"> 0849 <IncludeRules context="DispatchBraceExpansion"/> 0850 <DetectChar attribute="Path" context="#pop" char="{"/> 0851 </context> 0852 0853 <context attribute="Glob" lineEndContext="#stay" name="FindGlobAny"> 0854 <RegExpr attribute="Glob" context="GlobAnyFlag" String="\[(?=&next_is_globany;)"/> 0855 </context> 0856 <context attribute="Pattern" lineEndContext="#pop" name="GlobAnyFlag" fallthroughContext="#pop!GlobAny"> 0857 <DetectChar attribute="Glob" context="#pop!GlobAny" char="^"/> 0858 </context> 0859 <context attribute="Pattern" lineEndContext="#pop" name="GlobAny"> 0860 <DetectIdentifier attribute="Pattern"/> 0861 <DetectChar context="AssumeEscape" char="\" lookAhead="1"/> 0862 <DetectChar attribute="Glob" context="#stay" char="-"/> 0863 <IncludeRules context="FindStrings"/> 0864 <DetectChar attribute="Glob" context="#pop" char="]"/> 0865 <Detect2Chars attribute="Glob" context="GlobClass" char="[" char1=":"/> 0866 </context> 0867 <context attribute="Glob" lineEndContext="#pop#pop" name="GlobClass"> 0868 <DetectIdentifier attribute="Pattern"/> 0869 <Detect2Chars attribute="Glob" context="#pop" char=":" char1="]"/> 0870 <DetectChar attribute="Error" context="#pop" char="]"/> 0871 </context> 0872 0873 <!-- FindPathThenPopInAlternateValue consumes path in ${xx:here}--> 0874 <context attribute="Normal Text" lineEndContext="#pop" name="FindPathThenPopInAlternateValue"> 0875 <Detect2Chars context="#pop!PathThenPopInAlternateValue" char="?" char1="(" lookAhead="1"/> 0876 <Detect2Chars context="#pop!PathThenPopInAlternateValue" char="*" char1="(" lookAhead="1"/> 0877 <Detect2Chars context="#pop!PathThenPopInAlternateValue" char="+" char1="(" lookAhead="1"/> 0878 <Detect2Chars context="#pop!PathThenPopInAlternateValue" char="@" char1="(" lookAhead="1"/> 0879 <Detect2Chars context="#pop!PathThenPopInAlternateValue" char="!" char1="(" lookAhead="1"/> 0880 <AnyChar attribute="Glob" context="#pop!PathThenPopInAlternateValue" String="?*"/> 0881 <RegExpr attribute="Path" context="#pop!PathThenPopInAlternateValue" String="&pathpart_alt;"/> 0882 </context> 0883 <context attribute="Path" lineEndContext="#pop#pop" name="PathThenPopInAlternateValue"> 0884 <DetectChar attribute="Parameter Expansion" context="#pop" char="}"/> 0885 <IncludeRules context="FindWord"/> 0886 <Detect2Chars attribute="Glob" context="ExtGlobAndPopInAlternateValue" char="?" char1="("/> 0887 <Detect2Chars attribute="Glob" context="ExtGlobAndPopInAlternateValue" char="*" char1="("/> 0888 <Detect2Chars attribute="Glob" context="ExtGlobAndPopInAlternateValue" char="+" char1="("/> 0889 <Detect2Chars attribute="Glob" context="ExtGlobAndPopInAlternateValue" char="@" char1="("/> 0890 <Detect2Chars attribute="Glob" context="ExtGlobAndPopInAlternateValue" char="!" char1="("/> 0891 <AnyChar attribute="Glob" context="#stay" String="?*"/> 0892 <RegExpr attribute="Path" context="#stay" String="&path_alt;"/> 0893 </context> 0894 <context attribute="Path" lineEndContext="#stay" name="ExtGlobAndPopInAlternateValue"> 0895 <DetectChar attribute="Glob" context="#pop" char=")"/> 0896 <DetectChar attribute="Error" context="#pop#pop" char="}"/> 0897 <IncludeRules context="FindWord"/> 0898 <IncludeRules context="FindExtGlobInAlternateValue"/> 0899 </context> 0900 <context attribute="Path" lineEndContext="#stay" name="FindExtGlobInAlternateValue"> 0901 <DetectIdentifier attribute="Path"/> 0902 <Detect2Chars attribute="Glob" context="RecursiveExtGlobInAlternateValue" char="?" char1="("/> 0903 <Detect2Chars attribute="Glob" context="RecursiveExtGlobInAlternateValue" char="*" char1="("/> 0904 <Detect2Chars attribute="Glob" context="RecursiveExtGlobInAlternateValue" char="+" char1="("/> 0905 <Detect2Chars attribute="Glob" context="RecursiveExtGlobInAlternateValue" char="@" char1="("/> 0906 <Detect2Chars attribute="Glob" context="RecursiveExtGlobInAlternateValue" char="!" char1="("/> 0907 <AnyChar attribute="Glob" context="#stay" String="|?*"/> 0908 </context> 0909 <context attribute="Path" lineEndContext="#stay" name="RecursiveExtGlobInAlternateValue"> 0910 <DetectChar attribute="Glob" context="#pop" char=")"/> 0911 <DetectChar context="#pop" char="}" lookAhead="1"/> 0912 <IncludeRules context="FindWord"/> 0913 <IncludeRules context="FindExtGlobInAlternateValue"/> 0914 </context> 0915 0916 <context attribute="Pattern" lineEndContext="#stay" name="FindPattern"> 0917 <Detect2Chars attribute="Glob" context="ExtPattern" char="?" char1="("/> 0918 <Detect2Chars attribute="Glob" context="ExtPattern" char="*" char1="("/> 0919 <Detect2Chars attribute="Glob" context="ExtPattern" char="+" char1="("/> 0920 <Detect2Chars attribute="Glob" context="ExtPattern" char="@" char1="("/> 0921 <Detect2Chars attribute="Glob" context="ExtPattern" char="!" char1="("/> 0922 <AnyChar attribute="Glob" context="#stay" String="?*"/> 0923 </context> 0924 <context attribute="Pattern" lineEndContext="#stay" name="ExtPattern"> 0925 <DetectIdentifier attribute="Pattern"/> 0926 <DetectChar attribute="Glob" context="#stay" char="|"/> 0927 <IncludeRules context="FindWord"/> 0928 <DetectChar attribute="Glob" context="#pop" char=")"/> 0929 <IncludeRules context="FindPattern"/> 0930 </context> 0931 0932 <context attribute="Normal Text" lineEndContext="#pop" name="VarAssign" fallthroughContext="#pop"> 0933 <DetectChar attribute="Parameter Expansion Operator" context="Subscript" char="["/> 0934 <DetectChar attribute="Operator" context="#pop!Assign" char="="/> 0935 <Detect2Chars attribute="Operator" context="#pop!Assign" char="+" char1="="/> 0936 </context> 0937 0938 <context attribute="Normal Text" lineEndContext="#pop" name="DispatchKeyword"> 0939 <!-- match do and if blocks --> 0940 <Detect2Chars attribute="Control Flow" context="#pop!NotCond" char="i" char1="f" beginRegion="if"/> 0941 <Detect2Chars attribute="Control Flow" context="#pop" char="f" char1="i" endRegion="if"/> 0942 <StringDetect attribute="Control Flow" context="#pop" String="done" endRegion="do"/> 0943 <Detect2Chars attribute="Control Flow" context="#pop" char="d" char1="o" beginRegion="do"/> 0944 <!-- handle while/until as a special case --> 0945 <StringDetect attribute="Control Flow" context="#pop!NotCond" String="while"/> 0946 <StringDetect attribute="Control Flow" context="#pop!NotCond" String="until"/> 0947 <!-- handle for as a special case --> 0948 <StringDetect attribute="Control Flow" context="#pop!For" String="for"/> 0949 <!-- handle select as a special case --> 0950 <StringDetect attribute="Control Flow" context="#pop!For" String="select"/> 0951 <!-- handle case as a special case --> 0952 <StringDetect attribute="Control Flow" context="#pop!Case" String="case" beginRegion="case"/> 0953 <!-- handle functions with function keyword before keywords --> 0954 <StringDetect attribute="Keyword" context="#pop!FunctionDef" String="function"/> 0955 <StringDetect attribute="Control Flow" context="#pop!Return" String="return"/> 0956 <!-- not a keyword in this context --> 0957 <Detect2Chars attribute="Error" context="#pop" char="i" char1="n"/> 0958 <StringDetect attribute="Error" context="#pop" String="esac"/> 0959 <!-- handle keywords --> 0960 <DetectIdentifier attribute="Control Flow" context="#pop"/> 0961 </context> 0962 0963 <!-- if ! ..., while ! ... and until ! ... --> 0964 <context attribute="Normal Text" lineEndContext="#pop" name="NotCond" fallthroughContext="#pop"> 0965 <DetectSpaces attribute="Normal Text" context="#pop!NotCond2"/> 0966 </context> 0967 <context attribute="Normal Text" lineEndContext="#pop" name="NotCond2" fallthroughContext="#pop"> 0968 <Detect2Chars attribute="Expression" context="#pop" char="!" char1="&tab;"/> 0969 <Detect2Chars attribute="Expression" context="#pop" char="!" char1=" "/> 0970 <LineContinue attribute="Expression" context="#pop" char="!"/> 0971 </context> 0972 0973 <context attribute="Normal Text" lineEndContext="#pop" name="For" fallthroughContext="#pop"> 0974 <LineContinue attribute="Escape" context="#stay"/> 0975 <DetectSpaces attribute="Normal Text" context="#stay"/> 0976 <DetectIdentifier attribute="Normal Text" context="#pop!ForIn"/> 0977 <Detect2Chars attribute="Keyword" context="#pop!ForArithmeticExpr" char="(" char1="("/> 0978 </context> 0979 <context attribute="Normal Text" lineEndContext="#pop" name="ForIn" fallthroughContext="#pop"> 0980 <DetectSpaces attribute="Normal Text" context="#stay"/> 0981 <DetectChar attribute="Control" context="#pop" char=";"/> 0982 <WordDetect attribute="Keyword" context="#pop!CommandArgs" String="in"/> 0983 </context> 0984 <context attribute="Normal Text" lineEndContext="#pop" name="ForArithmeticExpr"> 0985 <DetectSpaces attribute="Normal Text" context="#stay"/> 0986 <DetectChar attribute="Control" context="#stay" char=";"/> 0987 <Detect2Chars attribute="Keyword" context="#pop" char=")" char1=")"/> 0988 <IncludeRules context="FindExprDblParen"/> 0989 </context> 0990 0991 <context attribute="Normal Text" lineEndContext="#pop" name="AssumeRedirection"> 0992 <!-- handle output redirection --> 0993 <Detect2Chars attribute="Redirection" context="#pop!WordRedirection" char=">" char1=">"/> 0994 <Detect2Chars attribute="Redirection" context="#pop!WordRedirection" char=">" char1="|"/> 0995 <Detect2Chars attribute="Redirection" context="#pop!FdRedirection" char=">" char1="&"/> 0996 <Detect2Chars attribute="Redirection" context="#pop!ProcessSubst" char=">" char1="("/> 0997 <DetectChar attribute="Redirection" context="#pop!WordRedirection" char=">"/> 0998 <StringDetect attribute="Redirection" context="#pop!StringRedirection" String="<<<"/> 0999 <!-- handle here document --> 1000 <Detect2Chars context="#pop!HereDoc" char="<" char1="<" lookAhead="1"/> 1001 <!-- handle input redirection --> 1002 <Detect2Chars attribute="Redirection" context="#pop!FdRedirection" char="<" char1="&"/> 1003 <Detect2Chars attribute="Redirection" context="#pop!WordRedirection" char="<" char1=">"/> 1004 <Detect2Chars attribute="Redirection" context="#pop!ProcessSubst" char="<" char1="("/> 1005 <DetectChar attribute="Redirection" context="#pop!WordRedirection" char="<"/> 1006 </context> 1007 <context attribute="Normal Text" lineEndContext="#pop" name="FdRedirection" fallthroughContext="#pop!FdRedirection2"> 1008 <DetectSpaces attribute="Normal Text" context="#pop!FdRedirection2"/> 1009 </context> 1010 <context attribute="Normal Text" lineEndContext="#pop" name="FdRedirection2" fallthroughContext="#pop!WordRedirection2"> 1011 <RegExpr attribute="File Descriptor" context="#pop!CloseFile" String="[0-9]+(?=-?&eoexpr;)"/> 1012 </context> 1013 <context attribute="Normal Text" lineEndContext="#pop" name="WordRedirection" fallthroughContext="#pop!WordRedirection2"> 1014 <DetectSpaces attribute="Normal Text" context="#pop!WordRedirection2"/> 1015 </context> 1016 <context attribute="Normal Text" lineEndContext="#pop" name="WordRedirection2" fallthroughContext="#pop"> 1017 <AnyChar context="#pop" String="&wordseps;`" lookAhead="1"/> 1018 <IncludeRules context="FindWord"/> 1019 <RegExpr attribute="Path" context="PathThenPop" String="&path;"/> 1020 </context> 1021 <context attribute="Normal Text" lineEndContext="#pop" name="StringRedirection" fallthroughContext="#pop!StringRedirection2"> 1022 <DetectSpaces attribute="Normal Text" context="#pop!StringRedirection2"/> 1023 </context> 1024 <context attribute="Normal Text" lineEndContext="#pop" name="StringRedirection2"> 1025 <AnyChar context="#pop" String="&wordseps;`" lookAhead="1"/> 1026 <IncludeRules context="FindWord"/> 1027 <DetectIdentifier attribute="Normal Text"/> 1028 </context> 1029 <context attribute="Normal Text" lineEndContext="#pop" name="CloseFile" fallthroughContext="#pop"> 1030 <DetectChar attribute="Keyword" context="#pop" char="-"/> 1031 </context> 1032 1033 <!-- HereDoc consumes Here-documents. It is called at the beginning of the "<<" construct. --> 1034 <context attribute="Normal Text" lineEndContext="#stay" name="HereDoc"> 1035 <RegExpr attribute="Redirection" context="HereDocMLComment" String="^[ &tab;]*<<[ &tab;]*'#([^']+)'$" column="0"/> 1036 <RegExpr attribute="Redirection" context="HereDocIQ" String="<<-[ &tab;]*&heredocq;(?=[ &tab;]*$)"/> 1037 <RegExpr attribute="Redirection" context="HereDocINQ" String="<<-[ &tab;]*([^&wordseps;]+)(?=[ &tab;]*$)"/> 1038 <RegExpr attribute="Redirection" context="HereDocQ" String="<<[ &tab;]*&heredocq;(?=[ &tab;]*$)"/> 1039 <RegExpr attribute="Redirection" context="HereDocNQ" String="<<[ &tab;]*([^&wordseps;]+)(?=[ &tab;]*$)"/> 1040 1041 <RegExpr context="HereDocIQCmd" String="(<<-[ &tab;]*&heredocq;)" lookAhead="1"/> 1042 <RegExpr context="HereDocINQCmd" String="(<<-[ &tab;]*([^&wordseps;]+))" lookAhead="1"/> 1043 <RegExpr context="HereDocQCmd" String="(<<[ &tab;]*&heredocq;)" lookAhead="1"/> 1044 <RegExpr context="HereDocNQCmd" String="(<<[ &tab;]*([^&wordseps;]+))" lookAhead="1"/> 1045 1046 <Detect2Chars attribute="Redirection" context="#pop" char="<" char1="<"/><!-- always met --> 1047 </context> 1048 1049 <context attribute="Normal Text" lineEndContext="#pop" name="HereDocRemainder" fallthroughContext="Command"> 1050 <IncludeRules context="Start"/> 1051 </context> 1052 1053 <!-- Highlight the builtin `:` (true) and the followed redirection, then fall into `HereDocMLComment` --> 1054 <context attribute="Comment" lineEndContext="#stay" name="PreHereDocMLComment"> 1055 <DetectChar attribute="Builtin" context="#stay" char=":" column="0"/> 1056 <RegExpr attribute="Redirection" context="HereDocMLComment" String="<<[ &tab;]*'#([^']+)'$"/> 1057 </context> 1058 1059 <context attribute="Comment" lineEndContext="#stay" name="HereDocMLComment" dynamic="true" fallthroughContext="Comment"> 1060 <RegExpr attribute="Redirection" context="#pop#pop" String="^#%1$" column="0" dynamic="true"/> 1061 <RegExpr attribute="Region Marker" context="RST Documentation" String="^#?\[(=*)\[\.rst:" column="0" beginRegion="RSTDocumentation" /> 1062 <IncludeRules context="Comment"/> 1063 </context> 1064 1065 <context attribute="Comment" lineEndContext="#stay" name="RST Documentation" dynamic="true"> 1066 <RegExpr attribute="Redirection" context="#pop#pop#pop" String="^#BLOCK-COMMENT$" column="0"/> 1067 <RegExpr attribute="Region Marker" context="#pop" String="^#?\]%1\]" dynamic="true" column="0" endRegion="RSTDocumentation" /> 1068 <IncludeRules context="##reStructuredText" /> 1069 </context> 1070 1071 <context attribute="Here Doc" lineEndContext="#stay" name="HereDocQ" dynamic="true" fallthroughContext="HereDocText"> 1072 <RegExpr attribute="Redirection" context="#pop#pop" String="^%1$" dynamic="true" column="0"/> 1073 </context> 1074 1075 <context attribute="Here Doc" lineEndContext="#stay" name="HereDocNQ" dynamic="true" fallthroughContext="HereDocSubstitutions"> 1076 <RegExpr attribute="Redirection" context="#pop#pop" String="^%1$" dynamic="true" column="0"/> 1077 </context> 1078 1079 <context attribute="Here Doc" lineEndContext="#stay" name="HereDocIQ" dynamic="true" fallthroughContext="HereDocText"> 1080 <RegExpr attribute="Redirection" context="#pop#pop" String="^\t*%1$" dynamic="true" column="0"/> 1081 </context> 1082 1083 <context attribute="Here Doc" lineEndContext="#stay" name="HereDocINQ" dynamic="true" fallthroughContext="HereDocSubstitutions"> 1084 <RegExpr attribute="Redirection" context="#pop#pop" String="^\t*%1$" dynamic="true" column="0"/> 1085 </context> 1086 1087 <context attribute="Here Doc" lineEndContext="#stay" name="HereDocQCmd" dynamic="true" fallthroughContext="HereDocText"> 1088 <StringDetect attribute="Redirection" context="HereDocRemainder" String="%1" dynamic="true"/> 1089 <RegExpr attribute="Redirection" context="#pop#pop" String="^%2$" dynamic="true" column="0"/> 1090 </context> 1091 1092 <context attribute="Here Doc" lineEndContext="#stay" name="HereDocNQCmd" dynamic="true" fallthroughContext="HereDocSubstitutions"> 1093 <StringDetect attribute="Redirection" context="HereDocRemainder" String="%1" dynamic="true"/> 1094 <RegExpr attribute="Redirection" context="#pop#pop" String="^%2$" dynamic="true" column="0"/> 1095 </context> 1096 1097 <context attribute="Here Doc" lineEndContext="#stay" name="HereDocIQCmd" dynamic="true" fallthroughContext="HereDocText"> 1098 <StringDetect attribute="Redirection" context="HereDocRemainder" String="%1" dynamic="true"/> 1099 <RegExpr attribute="Redirection" context="#pop#pop" String="^\t*%2$" dynamic="true" column="0"/> 1100 </context> 1101 1102 <context attribute="Here Doc" lineEndContext="#stay" name="HereDocINQCmd" dynamic="true" fallthroughContext="HereDocSubstitutions"> 1103 <StringDetect attribute="Redirection" context="HereDocRemainder" String="%1" dynamic="true"/> 1104 <RegExpr attribute="Redirection" context="#pop#pop" String="^\t*%2$" dynamic="true" column="0"/> 1105 </context> 1106 1107 <context attribute="Here Doc" lineEndContext="#pop" name="HereDocText"> 1108 </context> 1109 1110 <context attribute="Here Doc" lineEndContext="#pop" name="HereDocSubstitutions"> 1111 <DetectSpaces attribute="Here Doc"/> 1112 <DetectIdentifier attribute="Here Doc"/> 1113 <DetectChar context="HereDocVariables" char="$" lookAhead="1"/> 1114 <DetectChar attribute="Backquote" context="CommandBackq" char="`"/> 1115 <DetectChar context="AssumeEscape" char="\" lookAhead="1"/> 1116 </context> 1117 <context attribute="Here Doc" lineEndContext="#pop" name="HereDocVariables"> 1118 <IncludeRules context="DispatchSubstVariables"/> 1119 <IncludeRules context="DispatchVarnameVariables"/> 1120 <DetectChar attribute="Here Doc" context="#pop" char="$"/> 1121 </context> 1122 1123 <!-- VarName consumes spare variable names and assignments --> 1124 <context attribute="Normal Text" lineEndContext="#pop" name="VarName"> 1125 <StringDetect attribute="Builtin" context="#pop!BuiltinGetopts" String="getopts"/> 1126 <StringDetect attribute="Builtin" context="#pop!BuiltinLet" String="let"/> 1127 <DetectIdentifier attribute="Builtin" context="#pop!VarNameArgs"/> 1128 <AnyChar attribute="Builtin" context="#pop!VarNameArgs" String=".:"/> 1129 </context> 1130 <context attribute="Normal Text" lineEndContext="#pop" name="VarNameArgs" fallthroughContext="#pop!CommandArgs"> 1131 <DetectSpaces attribute="Normal Text" context="VarNameArg"/> 1132 <LineContinue attribute="Escape" context="#stay"/> 1133 </context> 1134 <context attribute="Normal Text" lineEndContext="#pop#pop" name="VarNameArg" fallthroughContext="#pop!VarNameArg2"> 1135 <!-- In command arguments, do not allow comments after escaped characters. 1136 This avoids highlighting comments within paths or other text. Ex: pathtext\ #no\ comment --> 1137 <DetectChar context="#pop#pop" char="#" lookAhead="1"/> 1138 <DetectChar attribute="Option" context="#pop!ShortOption" char="-"/> 1139 </context> 1140 <context attribute="Normal Text" lineEndContext="#pop" name="VarNameArg2" fallthroughContext="#pop!NormalOption"> 1141 <DetectChar attribute="Variable" context="Subscript" char="["/> 1142 <DetectChar attribute="Operator" context="Assign" char="="/> 1143 <DetectChar attribute="Variable" context="AssignArray" char="("/> 1144 <DetectIdentifier attribute="Variable" context="#stay"/> 1145 </context> 1146 <context attribute="Normal Text" lineEndContext="#pop" name="BuiltinGetopts" fallthroughContext="#pop!CommandArgs"> 1147 <DetectSpaces attribute="Normal Text" context="#pop!BuiltinGetoptsOpt"/> 1148 <LineContinue attribute="Escape" context="#stay"/> 1149 </context> 1150 <context attribute="Normal Text" lineEndContext="#pop#pop" name="BuiltinGetoptsOpt" fallthroughContext="#pop!BuiltinGetoptsOpt2"> 1151 <DetectChar context="#pop#pop" char="#" lookAhead="1"/> 1152 </context> 1153 <context attribute="Normal Text" lineEndContext="#pop" name="BuiltinGetoptsOpt2" fallthroughContext="#pop!NormalOption"> 1154 <DetectChar attribute="Operator" context="#stay" char=":"/> 1155 <DetectIdentifier attribute="Normal Text" context="#stay" /> 1156 <DetectSpaces attribute="Normal Text" context="#pop!BuiltinGetoptsVar"/> 1157 <AnyChar context="#pop" String="&wordseps;`" lookAhead="1"/> 1158 <IncludeRules context="FindWord"/> 1159 <DetectChar context="NormalMaybeBraceExpansion" char="{" lookAhead="1"/> 1160 <AnyChar attribute="Normal Text" context="#stay" String="/%.0123456789"/> 1161 </context> 1162 <context attribute="Normal Text" lineEndContext="#pop" name="BuiltinGetoptsVar" fallthroughContext="#pop!CommandArgs"> 1163 <DetectIdentifier attribute="Variable" context="#pop!CommandArgs"/> 1164 </context> 1165 <context attribute="Normal Text" lineEndContext="#pop" name="BuiltinLet" fallthroughContext="#pop!CommandArgs"> 1166 <DetectSpaces attribute="Normal Text" context="#pop!BuiltinLetArgs"/> 1167 <LineContinue attribute="Escape" context="#stay"/> 1168 </context> 1169 <context attribute="Normal Text" lineEndContext="#pop" name="BuiltinLetArgs" fallthroughContext="BuiltinLetArg"> 1170 <AnyChar context="BuiltinLetArgsNumber" String="0123456789" lookAhead="1"/> 1171 <IncludeRules context="CommandArgs"/> 1172 </context> 1173 <context attribute="Normal Text" lineEndContext="#pop" name="BuiltinLetArgsNumber" fallthroughContext="#pop!BuiltinLetArg"> 1174 <IncludeRules context="FindRedirection"/> 1175 </context> 1176 <context attribute="Normal Text" lineEndContext="#pop#pop" name="BuiltinLetArg" fallthroughContext="#pop!BuiltinLetExpr"> 1177 <DetectChar context="#pop#pop" char="#" lookAhead="1"/> 1178 </context> 1179 <context attribute="Normal Text" lineEndContext="#pop" name="BuiltinLetExpr" fallthroughContext="#pop!NormalOption"> 1180 <DetectIdentifier attribute="Variable" context="#stay" /> 1181 <AnyChar context="#pop" String="&wordseps;`" lookAhead="1"/> 1182 <AnyChar attribute="Operator" context="#stay" String="+-/%=^:"/> 1183 <AnyChar context="Number" String="0123456789" lookAhead="1"/> 1184 <DetectChar attribute="Parameter Expansion Operator" context="Subscript" char="["/> 1185 <IncludeRules context="FindWord"/> 1186 <DetectChar attribute="Error" context="#stay" char="#"/> 1187 <DetectChar context="NormalMaybeBraceExpansion" char="{" lookAhead="1"/> 1188 </context> 1189 1190 <!-- ProcessSubst handles <(command) and >(command) --> 1191 <context attribute="Normal Text" lineEndContext="#stay" name="ProcessSubst" fallthroughContext="Command"> 1192 <DetectChar attribute="Redirection" context="#pop" char=")"/> 1193 <IncludeRules context="Start"/> 1194 </context> 1195 1196 <!-- StringSQ consumes anything till ' --> 1197 <context attribute="String SingleQ" lineEndContext="#stay" name="StringSQ"> 1198 <DetectSpaces attribute="String SingleQ"/> 1199 <DetectIdentifier attribute="String SingleQ"/> 1200 <DetectChar attribute="String SingleQ" context="#pop" char="'"/> 1201 </context> 1202 1203 <!-- StringDQ consumes anything till ", substitutes vars and expressions --> 1204 <context attribute="String DoubleQ" lineEndContext="#stay" name="StringDQ"> 1205 <DetectSpaces attribute="String DoubleQ"/> 1206 <DetectIdentifier attribute="String DoubleQ"/> 1207 <DetectChar attribute="String DoubleQ" context="#pop" char="""/> 1208 <DetectChar context="StringDQEscape" char="\" lookAhead="1"/> 1209 <DetectChar context="StringDQDispatchVariables" char="$" lookAhead="1"/> 1210 <DetectChar attribute="Backquote" context="RegularBackq" char="`"/> 1211 </context> 1212 <context attribute="String DoubleQ" lineEndContext="#stay" name="StringDQDispatchVariables"> 1213 <IncludeRules context="DispatchSubstVariables"/> 1214 <IncludeRules context="DispatchVarnameVariables"/> 1215 <DetectChar attribute="String DoubleQ" context="#pop" char="$"/> 1216 </context> 1217 <context attribute="String DoubleQ" lineEndContext="#pop" name="StringDQEscape"> 1218 <Detect2Chars attribute="String Escape" context="#pop" char="\" char1="""/> 1219 <Detect2Chars attribute="String Escape" context="#pop" char="\" char1="\"/> 1220 <Detect2Chars attribute="String Escape" context="#pop" char="\" char1="`"/> 1221 <Detect2Chars attribute="String Escape" context="#pop" char="\" char1="$"/> 1222 <LineContinue attribute="String Escape" context="#pop"/> 1223 <DetectChar attribute="String DoubleQ" context="#pop" char="\"/> 1224 </context> 1225 1226 <!-- RegularBackq consumes anything till ` --> 1227 <context attribute="Normal Text" lineEndContext="#stay" name="RegularBackq" fallthroughContext="Command"> 1228 <DetectChar attribute="Backquote" context="#pop" char="`"/> 1229 <DetectChar attribute="Comment" context="CommentBackq" char="#"/> 1230 <IncludeRules context="Start"/> 1231 </context> 1232 1233 <!-- StringEsc eats till ', but escaping many characters --> 1234 <context attribute="String SingleQ" lineEndContext="#stay" name="StringEsc"> 1235 <DetectSpaces attribute="String SingleQ"/> 1236 <DetectIdentifier attribute="String SingleQ"/> 1237 <DetectChar attribute="String SingleQ" context="#pop" char="'"/> 1238 <RegExpr attribute="String Escape" context="#stay" String="\\(?:[abefnrtv\\']|[0-7]{1,3}|x[A-Fa-f0-9]{1,2}|c.)"/> 1239 </context> 1240 1241 <context attribute="Normal Text" lineEndContext="#stay" name="FindWord"> 1242 <IncludeRules context="FindStrings"/> 1243 <DetectChar context="RegularVariable" char="$" lookAhead="1"/> 1244 <DetectChar attribute="Backquote" context="RegularBackq" char="`"/> 1245 <DetectChar context="AssumeEscape" char="\" lookAhead="1"/> 1246 </context> 1247 <context attribute="Normal Text" lineEndContext="#pop" name="RegularVariable"> 1248 <IncludeRules context="DispatchVariables"/> 1249 <DetectChar attribute="Normal Text" context="#pop" char="$"/> 1250 </context> 1251 1252 <context attribute="Normal Text" lineEndContext="#pop" name="FindStrings"> 1253 <DetectChar attribute="String SingleQ" context="StringSQ" char="'"/> 1254 <DetectChar attribute="String DoubleQ" context="StringDQ" char="""/> 1255 </context> 1256 1257 <!-- SubstCommand is called after a $( is encountered --> 1258 <context attribute="Normal Text" lineEndContext="#stay" name="SubstCommand" fallthroughContext="Command"> 1259 <DetectChar attribute="Parameter Expansion" context="#pop" char=")" endRegion="subshell"/> 1260 <IncludeRules context="Start"/> 1261 </context> 1262 1263 <!-- VarBraceStart is called as soon as ${ is encoutered --> 1264 <context attribute="Variable" lineEndContext="#pop!VarBrace" name="VarBraceStart" fallthroughContext="#pop!VarBrace"> 1265 <DetectChar attribute="Parameter Expansion Operator" context="#pop!VarBracePrefix" char="!"/> 1266 <DetectChar attribute="Parameter Expansion Operator" context="#pop!VarBrace" char="#"/> 1267 </context> 1268 1269 <!-- VarBracePrefix called as soon as ${! is encoutered --> 1270 <context attribute="Variable" lineEndContext="#pop" name="VarBracePrefix"> 1271 <DetectIdentifier attribute="Variable" context="#pop!VarBracePrefixSuffix"/> 1272 <Int attribute="Variable" context="#pop!VarBracePrefixSuffix"/> 1273 <AnyChar attribute="Parameter Expansion Operator" context="#pop!VarBracePrefixSharp" String="@*#"/> 1274 </context> 1275 <context attribute="Variable" lineEndContext="#pop" name="VarBracePrefixSuffix" fallthroughContext="#pop!VarError"> 1276 <DetectChar attribute="Parameter Expansion" context="#pop" char="}"/> 1277 <AnyChar attribute="Parameter Expansion Operator" context="#stay" String="@*"/> 1278 <StringDetect attribute="Parameter Expansion Operator" context="#stay" String="[@]"/> 1279 <StringDetect attribute="Parameter Expansion Operator" context="#stay" String="[*]"/> 1280 </context> 1281 <context attribute="Variable" lineEndContext="#pop" name="VarBracePrefixSharp" fallthroughContext="#pop!VarError"> 1282 <DetectChar attribute="Parameter Expansion" context="#pop" char="}"/> 1283 <DetectChar attribute="Parameter Expansion Operator" char="#"/> 1284 </context> 1285 1286 <!-- VarBrace is called as soon as ${ or ${# are encoutered --> 1287 <context attribute="Variable" lineEndContext="#stay" name="VarBrace" fallthroughContext="#pop!VarError"> 1288 <DetectChar attribute="Parameter Expansion" context="#pop" char="}"/> 1289 <DetectIdentifier attribute="Variable" context="#pop!CheckVarAlt"/> 1290 <AnyChar attribute="Variable" context="#pop!CheckVarAlt" String="*@?$!-"/> 1291 <Int attribute="Variable" context="#pop!CheckVarAlt" additionalDeliminator=":#%^,/@{}"/> 1292 </context> 1293 <context attribute="Error" lineEndContext="#stay" name="VarError"> 1294 <DetectChar attribute="Parameter Expansion" context="#pop" char="}"/> 1295 </context> 1296 <context attribute="Normal Text" lineEndContext="#stay" name="CheckVarAlt" fallthroughContext="#pop!VarError"> 1297 <DetectChar attribute="Parameter Expansion" context="#pop" char="}"/> 1298 <StringDetect attribute="Parameter Expansion Operator" context="#stay" String="[@]"/> 1299 <StringDetect attribute="Parameter Expansion Operator" context="#stay" String="[*]"/> 1300 <DetectChar attribute="Parameter Expansion Operator" context="Subscript" char="["/> 1301 <Detect2Chars attribute="Parameter Expansion Operator" context="#pop!AlternateValue" char=":" char1="-"/> 1302 <Detect2Chars attribute="Parameter Expansion Operator" context="#pop!AlternateValue" char=":" char1="="/> 1303 <Detect2Chars attribute="Parameter Expansion Operator" context="#pop!AlternateValue" char=":" char1="?"/> 1304 <Detect2Chars attribute="Parameter Expansion Operator" context="#pop!AlternateValue" char=":" char1="+"/> 1305 <Detect2Chars attribute="Parameter Expansion Operator" context="#pop!AlternateValue" char="#" char1="#"/> 1306 <Detect2Chars attribute="Parameter Expansion Operator" context="#pop!AlternateValue" char="%" char1="%"/> 1307 <Detect2Chars attribute="Parameter Expansion Operator" context="#pop!AlternatePatternValue" char="^" char1="^"/> 1308 <Detect2Chars attribute="Parameter Expansion Operator" context="#pop!AlternatePatternValue" char="," char1=","/> 1309 <DetectChar attribute="Parameter Expansion Operator" context="#pop!VarSub" char=":"/> 1310 <DetectChar attribute="Parameter Expansion Operator" context="#pop!VarSubst" char="/"/> 1311 <AnyChar attribute="Parameter Expansion Operator" context="#pop!AlternateValue" String="-+=?#%"/> 1312 <AnyChar attribute="Parameter Expansion Operator" context="#pop!AlternatePatternValue" String="^,"/> 1313 <DetectChar attribute="Parameter Expansion Operator" context="#pop!VarTransformation" char="@"/> 1314 </context> 1315 1316 <!-- called as soon as ${xxx: is encoutered --> 1317 <context attribute="Normal Text" lineEndContext="#stay" name="VarSub"> 1318 <DetectChar attribute="Parameter Expansion" context="#pop" char="}"/> 1319 <!-- <Int> doesn't match :3 because : is a weakDeliminator --> 1320 <AnyChar attribute="Decimal" String="0123456789"/> 1321 <DetectChar attribute="Parameter Expansion Operator" context="#stay" char=":"/> 1322 <DetectChar context="VarVariables" char="$" lookAhead="1"/> 1323 <IncludeRules context="FindStrings"/> 1324 <DetectChar attribute="Backquote" context="RegularBackq" char="`"/> 1325 <DetectChar context="AssumeEscape" char="\" lookAhead="1"/> 1326 </context> 1327 <context attribute="Command" lineEndContext="#pop" name="VarVariables"> 1328 <IncludeRules context="DispatchVariables"/> 1329 <DetectChar attribute="Error" context="#pop" char="$"/> 1330 </context> 1331 1332 <!-- called as soon as ${xxx:- ${xxx:= ${xxx:? ${xxx:+ ${xxx# ${xxx% and ${xxx are encoutered --> 1333 <context attribute="Normal Text" lineEndContext="#stay" name="AlternateValue"> 1334 <DetectChar attribute="Parameter Expansion" context="#pop" char="}"/> 1335 <IncludeRules context="FindWord"/> 1336 <IncludeRules context="FindPathThenPopInAlternateValue"/> 1337 <DetectIdentifier attribute="Normal Text"/> 1338 </context> 1339 1340 <!-- called as soon as ${xxx^ are ${xxx, are encoutered --> 1341 <context attribute="Pattern" lineEndContext="#stay" name="AlternatePatternValue"> 1342 <DetectChar attribute="Parameter Expansion" context="#pop" char="}"/> 1343 <IncludeRules context="FindWord"/> 1344 <IncludeRules context="FindPattern"/> 1345 <DetectIdentifier attribute="Pattern"/> 1346 </context> 1347 1348 <!-- called as soon as ${xxx/ is encoutered --> 1349 <context attribute="Normal Text" lineEndContext="#stay" name="VarSubst" fallthroughContext="#pop!VarSubstPat"> 1350 <AnyChar attribute="Parameter Expansion Operator" context="#pop!VarSubstPat" String="/#%"/> 1351 </context> 1352 <context attribute="Pattern" lineEndContext="#stay" name="VarSubstPat"> 1353 <DetectChar attribute="Parameter Expansion Operator" context="#pop!AlternateValue" char="/"/> 1354 <IncludeRules context="AlternatePatternValue"/> 1355 </context> 1356 1357 <!-- called as soon as ${xxx@ is encoutered --> 1358 <context attribute="Normal Text" lineEndContext="#stay" name="VarTransformation" fallthroughContext="#pop!VarError"> 1359 <DetectChar attribute="Parameter Expansion" context="#pop" char="}"/> 1360 <AnyChar attribute="Parameter Expansion" context="#stay" String="QEPAa"/> 1361 </context> 1362 1363 <context attribute="Escape" lineEndContext="#pop" name="BraceExpansion"> 1364 <DetectChar attribute="Escape" context="#pop!BraceExpansion2" char="{"/> 1365 </context> 1366 <context attribute="Escape" lineEndContext="#pop" name="BraceExpansion2"> 1367 <DetectChar attribute="Operator" context="#stay" char=","/> 1368 <DetectChar attribute="Escape" context="#pop" char="}"/> 1369 <DetectChar context="EscapeMaybeBraceExpansion" char="{" lookAhead="1"/> 1370 <DetectChar context="AssumeEscape" char="\" lookAhead="1"/> 1371 <DetectChar attribute="Backquote" context="CommandBackq" char="`"/> 1372 <DetectChar context="BraceExpansionVariables" char="$" lookAhead="1"/> 1373 <IncludeRules context="FindStrings"/> 1374 <IncludeRules context="FindPattern"/> 1375 <DetectIdentifier attribute="Escape"/> 1376 </context> 1377 <context attribute="Escape" lineEndContext="#pop" name="EscapeMaybeBraceExpansion"> 1378 <IncludeRules context="DispatchBraceExpansion"/> 1379 <DetectChar attribute="Escape" context="#pop!BraceExpansion2" char="{"/> 1380 </context> 1381 <context attribute="Escape" lineEndContext="#pop" name="BraceExpansionVariables"> 1382 <IncludeRules context="DispatchVariables"/> 1383 <DetectChar attribute="Escape" context="#pop" char="$"/> 1384 </context> 1385 1386 <context attribute="Normal Text" lineEndContext="#pop" name="SequenceExpression"> 1387 <AnyChar attribute="Decimal" context="#stay" String="0123456789-+"/> 1388 <Detect2Chars attribute="Escape" context="#stay" char="." char1="."/> 1389 <DetectChar attribute="Escape" context="#pop" char="}"/> 1390 </context> 1391 1392 <!-- ====== These are the contexts that can be branched to ======= --> 1393 1394 <context attribute="Normal Text" lineEndContext="#stay" name="ExprDblParenOrSubShell"> 1395 <RegExpr attribute="Keyword" context="#pop!SubShell" String="\((?=&arithmetic_as_subshell;)|" beginRegion="subshell"/> 1396 <Detect2Chars attribute="Keyword" context="#pop!ExprDblParen" char="(" char1="(" beginRegion="expression"/> 1397 </context> 1398 <!-- ExprDblParen consumes an expression started in command mode till )) --> 1399 <context attribute="Normal Text" lineEndContext="#stay" name="ExprDblParen"> 1400 <DetectSpaces attribute="Normal Text" context="#stay"/> 1401 <Detect2Chars attribute="Keyword" context="#pop" char=")" char1=")" endRegion="expression"/> 1402 <IncludeRules context="FindExprDblParen"/> 1403 <!-- ((cmd 1404 ) # jump to SubShell context --> 1405 <DetectChar attribute="Keyword" context="#pop!SubShell" char=")" endRegion="expression" beginRegion="subshell"/> 1406 </context> 1407 <context attribute="Normal Text" lineEndContext="#stay" name="FindExprDblParen"> 1408 <Detect2Chars attribute="Control" context="#stay" char="&" char1="&"/> 1409 <Detect2Chars attribute="Control" context="#stay" char="|" char1="|"/> 1410 <AnyChar attribute="Operator" context="#stay" String="+-!~*/%<>=&^|?:"/> 1411 <AnyChar context="Number" String="0123456789" lookAhead="1"/> 1412 <DetectChar attribute="Control" context="#stay" char=","/> 1413 <DetectChar attribute="Normal Text" context="ExprSubDblParen" char="("/> 1414 <DetectChar attribute="Parameter Expansion Operator" context="Subscript" char="["/> 1415 <IncludeRules context="FindWord"/> 1416 <DetectChar attribute="Error" context="#stay" char="#"/> 1417 <DetectChar context="MaybeArithmeticBrace" char="{" lookAhead="1"/> 1418 <DetectIdentifier attribute="Variable" context="#stay"/> 1419 </context> 1420 <context attribute="Normal Text" lineEndContext="#stay" name="ExprSubDblParen"> 1421 <DetectSpaces attribute="Normal Text" context="#stay"/> 1422 <DetectChar attribute="Normal Text" context="#pop" char=")"/> 1423 <IncludeRules context="FindExprDblParen"/> 1424 </context> 1425 <context attribute="Normal Text" lineEndContext="#pop" name="MaybeArithmeticBrace"> 1426 <IncludeRules context="DispatchBraceExpansion"/> 1427 <DetectChar attribute="Error" context="#pop" char="{"/> 1428 </context> 1429 1430 <context attribute="Decimal" lineEndContext="#pop" name="Number"> 1431 <HlCHex attribute="Hex" context="#pop" additionalDeliminator="&weakDeliminatorSymbols;"/> 1432 <HlCOct attribute="Octal" context="#pop!NumberError" additionalDeliminator="&weakDeliminatorSymbols;"/> 1433 <RegExpr attribute="Base" context="#pop!BaseN" String="[1-9][0-9]*#"/> 1434 <DetectChar attribute="Decimal" context="#pop!NumberError" char="0"/> 1435 <Int attribute="Decimal" context="#pop" additionalDeliminator="&weakDeliminatorSymbols;"/> 1436 </context> 1437 <context attribute="BaseN" lineEndContext="#pop" name="BaseN" fallthroughContext="#pop"> 1438 <RegExpr attribute="BaseN" context="#pop" String="[0-9a-zA-Z@_]+"/> 1439 </context> 1440 <context attribute="Error" lineEndContext="#pop" name="NumberError" fallthroughContext="#pop"> 1441 <Int attribute="Error" context="#pop" additionalDeliminator="0123456789"/> 1442 </context> 1443 1444 <context attribute="Normal Text" lineEndContext="#stay" name="ExprDblParenSubstOrSubstCommand"> 1445 <RegExpr attribute="Parameter Expansion" context="#pop!SubstCommand" String="\$\((?=&arithmetic_as_subshell;)|" beginRegion="subshell"/> 1446 <StringDetect attribute="Parameter Expansion" context="#pop!ExprDblParenSubst" String="$((" beginRegion="expression"/> 1447 </context> 1448 <!-- ExprDblParenSubst like ExprDblParen but matches )) as Variable --> 1449 <context attribute="Normal Text" lineEndContext="#stay" name="ExprDblParenSubst"> 1450 <DetectSpaces attribute="Normal Text" context="#stay"/> 1451 <Detect2Chars attribute="Parameter Expansion" context="#pop" char=")" char1=")" endRegion="expression"/> 1452 <IncludeRules context="FindExprDblParen"/> 1453 <!-- $((cmd 1454 ) # jump to SubstCommand context --> 1455 <DetectChar attribute="Parameter Expansion" context="#pop!SubstCommand" char=")" endRegion="expression" beginRegion="subshell"/> 1456 </context> 1457 1458 <!-- ExprBracket consumes an expression till ] --> 1459 <context attribute="Normal Text" lineEndContext="#stay" name="ExprBracket" fallthroughContext="#pop!ExprBracketNot"> 1460 <DetectSpaces attribute="Normal Text" context="#stay"/> 1461 <IncludeRules context="FindExprBracketEnd"/> 1462 </context> 1463 1464 <context attribute="Normal Text" lineEndContext="#stay" name="ExprBracketNot" fallthroughContext="#pop!ExprBracketParam1"> 1465 <DetectSpaces attribute="Normal Text" context="#pop!ExprBracketParam1"/> 1466 <Detect2Chars attribute="Expression" context="ExprBracketTestMaybeNot" char="!" char1=" " lookAhead="1"/> 1467 <Detect2Chars attribute="Expression" context="ExprBracketTestMaybeNot" char="!" char1="&tab;" lookAhead="1"/> 1468 </context> 1469 <context attribute="Normal Text" lineEndContext="#pop" name="ExprBracketTestMaybeNot"> 1470 <DetectChar attribute="Expression" context="#pop" char="!"/> 1471 </context> 1472 1473 <context attribute="Normal Text" lineEndContext="#stay" name="ExprBracketParam1" fallthroughContext="ExprBracketValue"> 1474 <DetectSpaces attribute="Normal Text" context="#pop!ExprBracketParam2"/> 1475 <DetectChar context="TestMaybeUnary" char="-" lookAhead="1"/> 1476 <IncludeRules context="FindExprBracketEnd"/> 1477 </context> 1478 1479 <context attribute="Normal Text" lineEndContext="#pop" name="ExprBracketValue"> 1480 <AnyChar attribute="Error" context="#stay" String="&symbolseps;"/> 1481 <AnyChar context="#pop" String=" &tab;" lookAhead="1"/> 1482 <IncludeRules context="FindWord"/> 1483 <DetectChar context="NormalMaybeBraceExpansion" char="{" lookAhead="1"/> 1484 <IncludeRules context="FindNormalText"/> 1485 </context> 1486 1487 <context attribute="Normal Text" lineEndContext="#stay" name="ExprBracketParam2" fallthroughContext="ExprBracketValue"> 1488 <DetectSpaces attribute="Normal Text" context="#pop!ExprBracketParam3"/> 1489 <AnyChar context="TestMaybeBinary" String="-=!" lookAhead="1"/> 1490 <IncludeRules context="FindExprBracketEnd"/> 1491 </context> 1492 1493 <context attribute="Normal Text" lineEndContext="ExprBracketFinal" name="ExprBracketParam3" fallthroughContext="ExprBracketValue"> 1494 <DetectSpaces attribute="Normal Text" context="#pop!ExprBracketFinal"/> 1495 <IncludeRules context="FindExprBracketEnd"/> 1496 </context> 1497 1498 <context attribute="Normal Text" lineEndContext="#stay" name="ExprBracketFinal" fallthroughContext="ExprBracketValue"> 1499 <DetectSpaces attribute="Normal Text" context="#stay"/> 1500 <IncludeRules context="FindExprBracketEnd"/> 1501 <RegExpr attribute="Expression" context="#pop!ExprBracket" String="-[ao]&eos;"/> 1502 <RegExpr attribute="Error" context="#pop" String="(?:[^] &tab;]++|\][^ &tab;])++" endRegion="expression"/> 1503 </context> 1504 1505 <context attribute="Normal Text" lineEndContext="#stay" name="FindExprBracketEnd"> 1506 <LineContinue attribute="Escape" context="#stay"/> 1507 <RegExpr attribute="Builtin" context="#pop" String="\](?=($|[ &tab;;|&<>)]))" endRegion="expression"/> 1508 </context> 1509 1510 <context attribute="Normal Text" lineEndContext="#pop" name="TestMaybeUnary" fallthroughContext="#pop!ExprBracketValue"> 1511 <RegExpr attribute="Expression" context="#pop#pop!ExprBracketParam2" String="&unary_operators;"/> 1512 </context> 1513 <context attribute="Normal Text" lineEndContext="#pop" name="TestMaybeBinary" fallthroughContext="#pop!ExprBracketValue"> 1514 <RegExpr attribute="Expression" context="#pop" String="&binary_operators;"/> 1515 </context> 1516 1517 1518 <!-- ExprDblBracket consumes an expression till ]] --> 1519 <context attribute="Normal Text" lineEndContext="#stay" name="ExprDblBracket" fallthroughContext="#pop!ExprDblBracketNot"> 1520 <DetectSpaces attribute="Normal Text" context="#stay"/> 1521 <DetectChar attribute="Comment" context="Comment" char="#"/> 1522 <IncludeRules context="FindExprDblBracketEnd"/> 1523 </context> 1524 1525 <context attribute="Normal Text" lineEndContext="#stay" name="ExprDblBracketNot" fallthroughContext="#pop!ExprDblBracketParam1"> 1526 <DetectSpaces attribute="Normal Text" context="#pop!ExprDblBracketParam1"/> 1527 <DetectChar context="ExprDblBracketTestMaybeNot" char="!" lookAhead="1"/> 1528 </context> 1529 <context attribute="Normal Text" lineEndContext="#pop" name="ExprDblBracketTestMaybeNot" fallthroughContext="#pop#pop!ExprDblBracketParam1"> 1530 <RegExpr attribute="Expression" context="#pop" String="!(?=$|[ &tab;(])"/> 1531 </context> 1532 1533 <context attribute="Normal Text" lineEndContext="#stay" name="ExprDblBracketParam1" fallthroughContext="ExprDblBracketValueText"> 1534 <DetectSpaces attribute="Normal Text" context="#pop!ExprDblBracketParam2"/> 1535 <DetectChar context="TestMaybeUnary2" char="-" lookAhead="1"/> 1536 <AnyChar attribute="Expression" context="#pop!ExprDblBracketParam3Spe" String="<>"/> 1537 <IncludeRules context="FindExprDblBracketEnd"/> 1538 </context> 1539 <context attribute="Normal Text" lineEndContext="#pop" name="TestMaybeUnary2" fallthroughContext="#pop!ExprDblBracketValueText"> 1540 <RegExpr attribute="Expression" context="#pop!ExprDblBracketUnary" String="&unary_operators;(?!\s+(?:=~|&binary_operators;))"/> 1541 </context> 1542 <context attribute="Normal Text" lineEndContext="#pop" name="ExprDblBracketUnary"> 1543 <DetectSpaces attribute="Normal Text" context="#pop!ExprDblBracketValueText"/> 1544 </context> 1545 1546 <context attribute="Normal Text" lineEndContext="#pop" name="ExprDblBracketValueText" fallthroughContext="#pop!ExprDblBracketValueText2"> 1547 <Detect2Chars context="#pop!ExprDblBracketValueTextMaybeEnd" char="]" char1="]" lookAhead="1"/> 1548 <DetectChar attribute="Error" context="#pop!Comment" char="#"/> 1549 <IncludeRules context="FindExprDblBracketValueTextPath"/> 1550 </context> 1551 <context attribute="Normal Text" lineEndContext="#pop" name="FindExprDblBracketValueTextPath"> 1552 <RegExpr context="#pop!ExprDblBracketValueTextPath" String="&path_with_sep;|" lookAhead="1"/> 1553 </context> 1554 <context attribute="Normal Text" lineEndContext="#pop" name="ExprDblBracketValueTextMaybeEnd"> 1555 <RegExpr attribute="Keyword" context="#pop#pop" String="&dblbracket_close;" endRegion="expression"/> 1556 <IncludeRules context="FindExprDblBracketValueTextPath"/> 1557 <Detect2Chars context="#pop!ExprDblBracketValueText2" char="]" char1="]" lookAhead="1"/> 1558 </context> 1559 <context attribute="Normal Text" lineEndContext="#pop" name="ExprDblBracketValueText2"> 1560 <DetectIdentifier/> 1561 <AnyChar String="*?+!@~^:%+-/,"/> 1562 <IncludeRules context="ExprDblBracketValueCommon"/> 1563 </context> 1564 <context attribute="Path" lineEndContext="#pop" name="ExprDblBracketValueTextPath"> 1565 <IncludeRules context="ExprDblBracketValueText2"/> 1566 </context> 1567 1568 <context attribute="Normal Text" lineEndContext="#pop" name="ExprDblBracketValuePattern" fallthroughContext="#pop!ExprDblBracketValuePattern2"> 1569 <RegExpr context="PathThenPop" String="&path_with_sep;|" lookAhead="1"/> 1570 </context> 1571 <context attribute="Normal Text" lineEndContext="#pop" name="ExprDblBracketValuePattern2"> 1572 <DetectIdentifier attribute="Normal Text"/> 1573 <IncludeRules context="ExprDblBracketValueCommon"/> 1574 <IncludeRules context="FindExprDblBracketValueExtGlob"/> 1575 <AnyChar attribute="Glob" String="?*"/> 1576 </context> 1577 <context attribute="Glob" lineEndContext="#stay" name="FindExprDblBracketValueExtGlob"> 1578 <Detect2Chars attribute="Glob" context="ExprDblBracketValueExtGlob" char="?" char1="("/> 1579 <Detect2Chars attribute="Glob" context="ExprDblBracketValueExtGlob" char="*" char1="("/> 1580 <Detect2Chars attribute="Glob" context="ExprDblBracketValueExtGlob" char="+" char1="("/> 1581 <Detect2Chars attribute="Glob" context="ExprDblBracketValueExtGlob" char="@" char1="("/> 1582 <Detect2Chars attribute="Glob" context="ExprDblBracketValueExtGlob" char="!" char1="("/> 1583 <DetectChar context="ExprDblBracketValueMaybeGlobAny" char="[" lookAhead="1"/> 1584 </context> 1585 <context attribute="Normal Text" lineEndContext="#stay" name="ExprDblBracketValueMaybeGlobAny" fallthroughContext="#pop"> 1586 <IncludeRules context="FindGlobAny"/> 1587 <DetectChar attribute="Normal Text" context="#pop" char="["/> 1588 </context> 1589 <context attribute="Normal Text" lineEndContext="#pop#pop" name="ExprDblBracketValueExtGlob"> 1590 <DetectIdentifier attribute="Normal Text"/> 1591 <DetectChar attribute="Glob" context="#pop" char=")"/> 1592 <DetectChar attribute="Normal Text" context="ExprDblBracketValueExtGlobNormal" char="("/> 1593 <IncludeRules context="FindExprDblBracketValueExtGlob"/> 1594 <AnyChar attribute="Glob" String="|?*"/> 1595 <IncludeRules context="FindWord"/> 1596 </context> 1597 <context attribute="Normal Text" lineEndContext="#pop#pop" name="ExprDblBracketValueExtGlobNormal"> 1598 <DetectIdentifier attribute="Normal Text"/> 1599 <DetectChar attribute="Normal Text" context="#pop" char=")"/> 1600 <DetectChar attribute="Normal Text" context="ExprDblBracketValueExtGlobNormal" char="("/> 1601 <IncludeRules context="FindExprDblBracketValueExtGlob"/> 1602 <AnyChar attribute="Glob" String="?*"/> 1603 <IncludeRules context="FindWord"/> 1604 </context> 1605 1606 <context attribute="Normal Text" lineEndContext="#pop" name="ExprDblBracketValueCommon"> 1607 <Detect2Chars context="ExprDblBracketDblParentOrSubValue" char="(" char1="(" lookAhead="1"/> 1608 <DetectChar context="ExprDblBracketSubValue" char="(" lookAhead="1"/> 1609 <DetectChar attribute="Operator" context="#pop#pop" char=")"/> 1610 <Detect2Chars attribute="Control" context="#pop#pop!ExprDblBracket" char="&" char1="&"/> 1611 <Detect2Chars attribute="Control" context="#pop#pop!ExprDblBracket" char="|" char1="|"/> 1612 <AnyChar attribute="Error" context="#stay" String="|&;"/> 1613 <AnyChar context="#pop" String=" &tab;<>" lookAhead="1"/> 1614 <IncludeRules context="FindWord"/> 1615 </context> 1616 <context attribute="Normal Text" lineEndContext="#pop" name="ExprDblBracketSubValue" fallthroughContext="#pop"> 1617 <DetectChar attribute="Operator" context="ExprDblBracketNot" char="("/> 1618 <Detect2Chars context="#pop#pop" char="]" char1="]" lookAhead="1"/> 1619 </context> 1620 <context attribute="Normal Text" lineEndContext="#pop" name="ExprDblBracketDblParentOrSubValue"> 1621 <RegExpr context="#pop!ExprDblBracketSubValue" String="\((?=&arithmetic_as_subshell;)|" lookAhead="1"/> 1622 <Detect2Chars attribute="Keyword" context="#pop!ExprDblBracketExprDblParen" char="(" char1="(" beginRegion="expression"/> 1623 </context> 1624 <context attribute="Normal Text" lineEndContext="#stay" name="ExprDblBracketExprDblParen"> 1625 <DetectSpaces attribute="Normal Text" context="#stay"/> 1626 <Detect2Chars attribute="Keyword" context="#pop" char=")" char1=")" endRegion="expression"/> 1627 <IncludeRules context="FindExprDblParen"/> 1628 <!-- ((cmd 1629 ) # jump to ExprDblBracketValuePattern context --> 1630 <DetectChar attribute="Operator" context="ExprDblBracketValuePattern" char=")" endRegion="expression" beginRegion="subshell"/> 1631 </context> 1632 1633 <context attribute="Normal Text" lineEndContext="#stay" name="ExprDblBracketParam2" fallthroughContext="ExprDblBracketValuePattern"> 1634 <DetectSpaces attribute="Normal Text" context="#pop!ExprDblBracketParam3"/> 1635 <AnyChar context="TestMaybeBinary2" String="-=!" lookAhead="1"/> 1636 <AnyChar attribute="Expression" context="#pop!ExprDblBracketParam3Spe" String="<>"/> 1637 <IncludeRules context="FindExprDblBracketEnd"/> 1638 <DetectChar attribute="Comment" context="Comment" char="#"/> 1639 </context> 1640 <context attribute="Normal Text" lineEndContext="#pop" name="TestMaybeBinary2" fallthroughContext="#pop!ExprDblBracketValuePattern"> 1641 <IncludeRules context="TestMaybeBinary"/> 1642 <RegExpr attribute="Expression" context="#pop!ExprDblBracketRegex" String="=~(?=[ &tab;(])"/> 1643 </context> 1644 1645 <context attribute="Normal Text" lineEndContext="#stay" name="ExprDblBracketParam3Spe" fallthroughContext="#pop!ExprDblBracketParam3"> 1646 <DetectSpaces attribute="Normal Text" context="#pop!ExprDblBracketParam3"/> 1647 </context> 1648 1649 <context attribute="Normal Text" lineEndContext="#stay" name="ExprDblBracketParam3" fallthroughContext="ExprDblBracketValuePattern"> 1650 <DetectSpaces attribute="Normal Text" context="#pop!ExprDblBracketFinal"/> 1651 <IncludeRules context="FindExprDblBracketEnd"/> 1652 <AnyChar attribute="Error" context="#stay" String="<>"/> 1653 <DetectChar attribute="Comment" context="Comment" char="#"/> 1654 </context> 1655 1656 <context attribute="Normal Text" lineEndContext="#stay" name="ExprDblBracketFinal" fallthroughContext="ExprDblBracketValuePattern"> 1657 <DetectSpaces attribute="Normal Text" context="#stay"/> 1658 <IncludeRules context="FindExprDblBracketEnd"/> 1659 <DetectChar attribute="Comment" context="Comment" char="#"/> 1660 <DetectChar attribute="Operator" context="#pop" char=")"/> 1661 <RegExpr attribute="Error" context="#pop" String="(?:[^] &tab;]++|\](?:[^]]|\][^ &tab;]))++" endRegion="expression"/> 1662 </context> 1663 1664 <context attribute="Normal Text" lineEndContext="#stay" name="FindExprDblBracketEnd"> 1665 <LineContinue attribute="Escape" context="#stay"/> 1666 <Detect2Chars attribute="Control" context="#pop!ExprDblBracket" char="&" char1="&"/> 1667 <Detect2Chars attribute="Control" context="#pop!ExprDblBracket" char="|" char1="|"/> 1668 <RegExpr attribute="Keyword" context="#pop" String="&dblbracket_close;" endRegion="expression"/> 1669 </context> 1670 1671 <context attribute="Normal Text" lineEndContext="#stay" name="ExprDblBracketRegex" fallthroughContext="#pop!ExprDblBracketRegexCheck"> 1672 <DetectSpaces attribute="Normal Text" context="#pop!ExprDblBracketRegexCheck"/> 1673 </context> 1674 <context attribute="Normal Text" lineEndContext="#pop" name="ExprDblBracketRegexCheck" fallthroughContext="#pop#pop!Regex"> 1675 <DetectChar attribute="Error" context="Comment" char="#"/> 1676 </context> 1677 <context attribute="Pattern" lineEndContext="#stay" name="Regex"> 1678 <DetectIdentifier attribute="Pattern"/> 1679 <DetectSpaces attribute="Normal Text" context="#pop!ExprDblBracketFinal"/> 1680 <DetectChar attribute="Operator" context="#pop" char=")"/> 1681 <Detect2Chars attribute="Operator" context="RegexChar" char="[" char1="^"/> 1682 <DetectChar attribute="Operator" context="RegexChar" char="["/> 1683 <IncludeRules context="FindRegex"/> 1684 </context> 1685 <context attribute="Pattern" lineEndContext="#stay" name="ExprDblBracketSubRegex"> 1686 <DetectIdentifier attribute="Pattern"/> 1687 <DetectSpaces attribute="Pattern" context="#stay"/> 1688 <DetectChar attribute="Operator" context="#pop" char=")"/> 1689 <Detect2Chars attribute="Operator" context="RegexSubChar" char="[" char1="^"/> 1690 <DetectChar attribute="Operator" context="RegexSubChar" char="["/> 1691 <IncludeRules context="FindRegex"/> 1692 </context> 1693 1694 <context attribute="Pattern" lineEndContext="#stay" name="FindRegex"> 1695 <DetectChar attribute="Operator" context="ExprDblBracketSubRegex" char="("/> 1696 <DetectChar attribute="Escape" context="RegexEscape" char="\"/> 1697 <DetectChar attribute="Parameter Expansion" context="RegexDup" char="{"/> 1698 <AnyChar attribute="Glob" context="#stay" String="^?+*.|"/> 1699 <IncludeRules context="FindStrings"/> 1700 <DetectChar context="RegexDispatchVariables" char="$" lookAhead="1"/> 1701 <DetectChar attribute="Backquote" context="RegularBackq" char="`"/> 1702 </context> 1703 <context attribute="Normal Text" lineEndContext="#stay" name="RegexDispatchVariables"> 1704 <IncludeRules context="DispatchVariables"/> 1705 <DetectChar attribute="Operator" context="#pop" char="$"/> 1706 </context> 1707 1708 <context attribute="Normal Text" lineEndContext="#pop" name="RegexEscape"> 1709 <RegExpr attribute="Escape" context="#pop" String="x[0-9a-fA-F]{1,2}|[0-7]{1,3}|."/> 1710 </context> 1711 1712 <context attribute="Normal Text" lineEndContext="#pop" name="RegexDup"> 1713 <Int attribute="Decimal" additionalDeliminator="{"/> 1714 <DetectChar attribute="Parameter Expansion Operator" context="#stay" char=","/> 1715 <DetectChar attribute="Parameter Expansion" context="#pop" char="}"/> 1716 </context> 1717 1718 <context attribute="Pattern" lineEndContext="#pop" name="RegexSubChar" fallthroughContext="#pop!RegexSubInChar"> 1719 <AnyChar attribute="Pattern" context="#pop!RegexSubInChar" String="-]"/> 1720 </context> 1721 <context attribute="Pattern" lineEndContext="#pop" name="RegexSubInChar"> 1722 <DetectSpaces attribute="Pattern" context="#stay"/> 1723 <IncludeRules context="RegexInChar"/> 1724 </context> 1725 1726 <context attribute="Pattern" lineEndContext="#pop" name="RegexChar" fallthroughContext="#pop!RegexInChar"> 1727 <AnyChar attribute="Pattern" context="#pop!RegexInChar" String="-]"/> 1728 </context> 1729 <context attribute="Pattern" lineEndContext="#pop" name="RegexInChar"> 1730 <Detect2Chars context="RegexInCharEnd" char="-" char1="]" lookAhead="1"/> 1731 <DetectChar attribute="Operator" context="#stay" char="-"/> 1732 <DetectChar attribute="Escape" context="RegexEscape" char="\"/> 1733 <DetectChar context="RegexCharClassSelect" char="[" lookAhead="1"/> 1734 <DetectChar attribute="Operator" context="#pop" char="]"/> 1735 <AnyChar context="#pop" String="() &tab;" lookAhead="1"/> 1736 <IncludeRules context="FindStrings"/> 1737 </context> 1738 <context attribute="Operator" lineEndContext="#stay" name="RegexInCharEnd"> 1739 <DetectChar attribute="Pattern" context="#stay" char="-"/> 1740 <DetectChar attribute="Operator" context="#pop#pop" char="]"/> 1741 </context> 1742 <context attribute="Parameter Expansion" lineEndContext="#pop#pop#pop" name="RegexCharClassSelect"> 1743 <Detect2Chars attribute="Parameter Expansion Operator" context="#pop!RegexCharClass" char="[" char1=":"/> 1744 <Detect2Chars attribute="Parameter Expansion Operator" context="#pop!RegexCollatingSymbols" char="[" char1="."/> 1745 <Detect2Chars attribute="Parameter Expansion Operator" context="#pop!RegexEquivalenceClass" char="[" char1="="/> 1746 <DetectChar attribute="Pattern" context="#pop" char="["/> 1747 </context> 1748 1749 <context attribute="Parameter Expansion" lineEndContext="#pop#pop#pop" name="RegexCharClass"> 1750 <DetectIdentifier attribute="Parameter Expansion"/> 1751 <Detect2Chars attribute="Parameter Expansion Operator" context="#pop" char=":" char1="]"/> 1752 <DetectChar attribute="Error" context="#pop" char="]"/> 1753 </context> 1754 <context attribute="Parameter Expansion" lineEndContext="#pop#pop#pop" name="RegexCollatingSymbols"> 1755 <DetectIdentifier attribute="Parameter Expansion"/> 1756 <Detect2Chars attribute="Parameter Expansion Operator" context="#pop" char="." char1="]"/> 1757 <DetectChar attribute="Error" context="#pop" char="]"/> 1758 </context> 1759 <context attribute="Parameter Expansion" lineEndContext="#pop#pop#pop" name="RegexEquivalenceClass"> 1760 <DetectIdentifier attribute="Parameter Expansion"/> 1761 <Detect2Chars attribute="Parameter Expansion Operator" context="#pop" char="=" char1="]"/> 1762 <DetectChar attribute="Error" context="#pop" char="]"/> 1763 </context> 1764 1765 <!-- SubShell consumes shell input till ) --> 1766 <context attribute="Normal Text" lineEndContext="#stay" name="SubShell" fallthroughContext="Command"> 1767 <DetectChar attribute="Keyword" context="#pop" char=")" endRegion="subshell"/> 1768 <IncludeRules context="Start"/> 1769 </context> 1770 1771 <!-- Assign consumes an expression till EOL or whitespace --> 1772 <context attribute="Normal Text" lineEndContext="#pop" name="Assign" fallthroughContext="#pop!Assign2"> 1773 <DetectChar attribute="Variable" context="#pop!AssignArray" char="("/> 1774 </context> 1775 <context attribute="Normal Text" lineEndContext="#pop" name="Assign2" fallthroughContext="#pop"> 1776 <DetectChar attribute="Backquote" context="RegularBackq" char="`"/> 1777 <IncludeRules context="NormalOption"/> 1778 </context> 1779 1780 <!-- AssignArray consumes everything till ), marking assignments --> 1781 <context attribute="Normal Text" lineEndContext="#stay" name="AssignArray" fallthroughContext="NormalOption"> 1782 <DetectSpaces attribute="Normal Text" context="#stay"/> 1783 <DetectChar attribute="Comment" context="Comment" char="#"/> 1784 <DetectChar attribute="Variable" context="#pop!Assign2" char=")"/> 1785 <DetectChar context="AssignArrayKey" char="[" lookAhead="1"/> 1786 <DetectChar attribute="Backquote" context="AssignArrayBackq" char="`"/> 1787 <AnyChar attribute="Error" context="#stay" String="&symbolseps;"/> 1788 </context> 1789 <context attribute="Normal Text" lineEndContext="#pop" name="AssignArrayKey" fallthroughContext="#pop"> 1790 <DetectChar attribute="Parameter Expansion Operator" context="Subscript" char="["/> 1791 <DetectChar attribute="Variable" context="#pop" char="="/> 1792 </context> 1793 <context attribute="Normal Text" lineEndContext="#stay" name="AssignArrayBackq" fallthroughContext="Command"> 1794 <DetectChar attribute="Backquote" context="#pop!NormalOption" char="`"/> 1795 <DetectChar attribute="Comment" context="CommentBackq" char="#"/> 1796 <IncludeRules context="Start"/> 1797 </context> 1798 1799 <!-- Subscript consumes anything till ], marks as Variable --> 1800 <context attribute="Normal Text" lineEndContext="#stay" name="Subscript" fallthroughContext="#pop!Subscript2"> 1801 <DetectChar attribute="Parameter Expansion Operator" context="#pop" char="]"/> 1802 <AnyChar attribute="Decimal" context="#stay" String="0123456789"/> 1803 </context> 1804 <context attribute="Normal Text" lineEndContext="#stay" name="Subscript2"> 1805 <DetectIdentifier attribute="Normal Text"/> 1806 <DetectChar attribute="Parameter Expansion Operator" context="#pop" char="]"/> 1807 <IncludeRules context="FindWord"/> 1808 <IncludeRules context="FindPattern"/> 1809 </context> 1810 1811 <!-- FunctionDef consumes a name, possibly with (), marks as Function --> 1812 <context attribute="Function" lineEndContext="#pop" name="FunctionDef" fallthroughContext="#pop"> 1813 <RegExpr attribute="Function" context="#pop" String="[ &tab;]+&funcname;(?:[ &tab;]*\(\))?"/> 1814 </context> 1815 1816 <!-- Case is called after the case keyword is encoutered. We handle this because of 1817 the lonely closing parentheses that would otherwise disturb the expr matching --> 1818 <context attribute="Normal Text" lineEndContext="#stay" name="Case"> 1819 <DetectSpaces attribute="Normal Text" context="#stay"/> 1820 <WordDetect attribute="Keyword" context="#pop!CaseIn" String="in"/> 1821 <IncludeRules context="FindWord"/> 1822 <DetectIdentifier attribute="Normal Text" context="#stay"/> 1823 </context> 1824 1825 <!-- CaseIn is called when the construct 'case ... in' has been found. --> 1826 <context attribute="Normal Text" lineEndContext="#stay" name="CaseIn" fallthroughContext="CasePattern"> 1827 <DetectSpaces attribute="Normal Text" context="#stay"/> 1828 <DetectChar attribute="Keyword" context="CasePattern" char="("/> 1829 <DetectChar attribute="Comment" context="Comment" char="#"/> 1830 </context> 1831 <context attribute="Pattern" lineEndContext="#stay" name="CasePattern"> 1832 <DetectSpaces attribute="Normal Text" context="#stay"/> 1833 <DetectChar attribute="Keyword" context="#pop!CaseExpr" char=")" beginRegion="caseexpr"/> 1834 <DetectChar context="AssumeEscape" char="\" lookAhead="1"/> 1835 <DetectChar attribute="Keyword" context="#stay" char="|"/> 1836 <IncludeRules context="FindWord"/> 1837 <IncludeRules context="FindPattern"/> 1838 <WordDetect attribute="Control Flow" context="#pop#pop" String="esac" endRegion="case"/> 1839 <DetectIdentifier attribute="Pattern" context="#stay"/> 1840 </context> 1841 1842 <!-- CaseExpr eats shell input till ;; / ;& / ;;& --> 1843 <context attribute="Normal Text" lineEndContext="#stay" name="CaseExpr" fallthroughContext="Command"> 1844 <StringDetect attribute="Control Flow" context="#pop" String=";;&" endRegion="caseexpr"/> 1845 <Detect2Chars attribute="Control Flow" context="#pop" char=";" char1=";" endRegion="caseexpr"/> 1846 <Detect2Chars attribute="Control Flow" context="#pop" char=";" char1="&" endRegion="caseexpr"/> 1847 <WordDetect context="#pop" String="esac" endRegion="caseexpr" lookAhead="1"/> 1848 <IncludeRules context="Start"/> 1849 </context> 1850 1851 </contexts> 1852 1853 <itemDatas> 1854 <itemData name="Normal Text" defStyleNum="dsNormal"/> 1855 <itemData name="Comment" defStyleNum="dsComment"/> 1856 <itemData name="Keyword" defStyleNum="dsKeyword" spellChecking="false"/> 1857 <itemData name="Control" defStyleNum="dsKeyword" spellChecking="false"/> 1858 <itemData name="Control Flow" defStyleNum="dsControlFlow" spellChecking="false"/> 1859 <itemData name="Builtin" defStyleNum="dsBuiltIn" spellChecking="false"/> 1860 <itemData name="Command" defStyleNum="dsFunction" spellChecking="false"/> 1861 <itemData name="OtherCommand" defStyleNum="dsExtension" spellChecking="false"/> 1862 <itemData name="Redirection" defStyleNum="dsOperator" spellChecking="false"/> 1863 <itemData name="Escape" defStyleNum="dsDataType" spellChecking="false"/> 1864 <itemData name="String SingleQ" defStyleNum="dsString"/> 1865 <itemData name="String DoubleQ" defStyleNum="dsString"/> 1866 <itemData name="Here Doc" defStyleNum="dsString"/> 1867 <itemData name="Backquote" defStyleNum="dsKeyword" spellChecking="false"/> 1868 <itemData name="String Transl." defStyleNum="dsString"/> 1869 <itemData name="String Escape" defStyleNum="dsDataType"/> 1870 <itemData name="Variable" defStyleNum="dsVariable" spellChecking="false"/> 1871 <itemData name="Dollar Prefix" defStyleNum="dsVariable" spellChecking="false"/> 1872 <itemData name="Expression" defStyleNum="dsOthers" spellChecking="false"/> 1873 <itemData name="Function" defStyleNum="dsFunction" spellChecking="false"/> 1874 <itemData name="Pattern" defStyleNum="dsSpecialString" spellChecking="false"/> 1875 <itemData name="Path" defStyleNum="dsNormal" spellChecking="false"/> 1876 <itemData name="Glob" defStyleNum="dsPreprocessor" spellChecking="false"/> 1877 <itemData name="Option" defStyleNum="dsAttribute" spellChecking="false"/> 1878 <itemData name="Hex" defStyleNum="dsBaseN" spellChecking="false"/> 1879 <itemData name="Octal" defStyleNum="dsBaseN" spellChecking="false"/> 1880 <itemData name="Decimal" defStyleNum="dsDecVal" spellChecking="false"/> 1881 <itemData name="Base" defStyleNum="dsDataType" spellChecking="false"/> 1882 <itemData name="BaseN" defStyleNum="dsBaseN" spellChecking="false"/> 1883 <itemData name="File Descriptor" defStyleNum="dsDecVal" spellChecking="false"/> 1884 <itemData name="Parameter Expansion" defStyleNum="dsVariable" spellChecking="false"/> 1885 <itemData name="Parameter Expansion Operator" defStyleNum="dsOperator" spellChecking="false"/> 1886 <itemData name="Operator" defStyleNum="dsOperator" spellChecking="false"/> 1887 <itemData name="Error" defStyleNum="dsError" spellChecking="false"/> 1888 <itemData name="Region Marker" defStyleNum="dsRegionMarker" spellChecking="false" /> 1889 </itemDatas> 1890 </highlighting> 1891 <general> 1892 <comments> 1893 <comment name="singleLine" start="#"/> 1894 </comments> 1895 <keywords casesensitive="1" weakDeliminator="_&weakDeliminatorSymbols;" additionalDeliminator="`"/> 1896 </general> 1897 </language>