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="51" 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"/> 1009 <DetectChar attribute="Comment" context="#pop!Comment" char="#"/> 1010 </context> 1011 <context attribute="Normal Text" lineEndContext="#pop" name="FdRedirection2" fallthroughContext="#pop!WordRedirection2"> 1012 <RegExpr attribute="File Descriptor" context="#pop!CloseFile" String="[0-9]+(?=-?&eoexpr;)"/> 1013 </context> 1014 <context attribute="Normal Text" lineEndContext="#pop" name="WordRedirection" fallthroughContext="#pop!WordRedirection2"> 1015 <DetectSpaces attribute="Normal Text"/> 1016 <DetectChar attribute="Comment" context="#pop!Comment" char="#"/> 1017 </context> 1018 <context attribute="Normal Text" lineEndContext="#pop" name="WordRedirection2" fallthroughContext="#pop"> 1019 <AnyChar context="#pop" String="&wordseps;`" lookAhead="1"/> 1020 <IncludeRules context="FindWord"/> 1021 <RegExpr attribute="Path" context="PathThenPop" String="&path;"/> 1022 </context> 1023 <context attribute="Normal Text" lineEndContext="#pop" name="StringRedirection" fallthroughContext="#pop!StringRedirection2"> 1024 <DetectSpaces attribute="Normal Text"/> 1025 <DetectChar attribute="Comment" context="#pop!Comment" char="#"/> 1026 </context> 1027 <context attribute="Normal Text" lineEndContext="#pop" name="StringRedirection2"> 1028 <AnyChar context="#pop" String="&wordseps;`" lookAhead="1"/> 1029 <IncludeRules context="FindWord"/> 1030 <DetectIdentifier attribute="Normal Text"/> 1031 </context> 1032 <context attribute="Normal Text" lineEndContext="#pop" name="CloseFile" fallthroughContext="#pop"> 1033 <DetectChar attribute="Keyword" context="#pop" char="-"/> 1034 </context> 1035 1036 <!-- HereDoc consumes Here-documents. It is called at the beginning of the "<<" construct. --> 1037 <context attribute="Normal Text" lineEndContext="#stay" name="HereDoc"> 1038 <RegExpr attribute="Redirection" context="HereDocMLComment" String="^[ &tab;]*<<[ &tab;]*'#([^']+)'$" column="0"/> 1039 <RegExpr attribute="Redirection" context="HereDocIQ" String="<<-[ &tab;]*&heredocq;(?=[ &tab;]*$)"/> 1040 <RegExpr attribute="Redirection" context="HereDocINQ" String="<<-[ &tab;]*([^&wordseps;]+)(?=[ &tab;]*$)"/> 1041 <RegExpr attribute="Redirection" context="HereDocQ" String="<<[ &tab;]*&heredocq;(?=[ &tab;]*$)"/> 1042 <RegExpr attribute="Redirection" context="HereDocNQ" String="<<[ &tab;]*([^&wordseps;]+)(?=[ &tab;]*$)"/> 1043 1044 <RegExpr context="HereDocIQCmd" String="(<<-[ &tab;]*&heredocq;)" lookAhead="1"/> 1045 <RegExpr context="HereDocINQCmd" String="(<<-[ &tab;]*([^&wordseps;]+))" lookAhead="1"/> 1046 <RegExpr context="HereDocQCmd" String="(<<[ &tab;]*&heredocq;)" lookAhead="1"/> 1047 <RegExpr context="HereDocNQCmd" String="(<<[ &tab;]*([^&wordseps;]+))" lookAhead="1"/> 1048 1049 <Detect2Chars attribute="Redirection" context="#pop" char="<" char1="<"/><!-- always met --> 1050 </context> 1051 1052 <context attribute="Normal Text" lineEndContext="#pop" name="HereDocRemainder" fallthroughContext="CommandArg"> 1053 <AnyChar context="BashOneLine" String="&|;`" lookAhead="1"/> 1054 <IncludeRules context="CommandArgs"/> 1055 </context> 1056 1057 <!-- Highlight the builtin `:` (true) and the followed redirection, then fall into `HereDocMLComment` --> 1058 <context attribute="Comment" lineEndContext="#stay" name="PreHereDocMLComment"> 1059 <DetectChar attribute="Builtin" context="#stay" char=":" column="0"/> 1060 <RegExpr attribute="Redirection" context="HereDocMLComment" String="<<[ &tab;]*'#([^']+)'$"/> 1061 </context> 1062 1063 <context attribute="Comment" lineEndContext="#stay" name="HereDocMLComment" dynamic="true" fallthroughContext="Comment"> 1064 <RegExpr attribute="Redirection" context="#pop#pop" String="^#%1$" column="0" dynamic="true"/> 1065 <RegExpr attribute="Region Marker" context="RST Documentation" String="^#?\[(=*)\[\.rst:" column="0" beginRegion="RSTDocumentation" /> 1066 <IncludeRules context="Comment"/> 1067 </context> 1068 1069 <context attribute="Comment" lineEndContext="#stay" name="RST Documentation" dynamic="true"> 1070 <RegExpr attribute="Redirection" context="#pop#pop#pop" String="^#BLOCK-COMMENT$" column="0"/> 1071 <RegExpr attribute="Region Marker" context="#pop" String="^#?\]%1\]" dynamic="true" column="0" endRegion="RSTDocumentation" /> 1072 <IncludeRules context="##reStructuredText" /> 1073 </context> 1074 1075 <context attribute="Here Doc" lineEndContext="#stay" name="HereDocQ" dynamic="true" fallthroughContext="HereDocText"> 1076 <RegExpr attribute="Redirection" context="#pop#pop" String="^%1$" dynamic="true" column="0"/> 1077 </context> 1078 1079 <context attribute="Here Doc" lineEndContext="#stay" name="HereDocNQ" dynamic="true" fallthroughContext="HereDocSubstitutions"> 1080 <IncludeRules context="HereDocQ" /> 1081 </context> 1082 1083 <context attribute="Here Doc" lineEndContext="#stay" name="HereDocIQ" dynamic="true" fallthroughContext="HereDocText"> 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="HereDocINQ" dynamic="true" fallthroughContext="HereDocSubstitutions"> 1088 <IncludeRules context="HereDocIQ" /> 1089 </context> 1090 1091 <context attribute="Here Doc" lineEndContext="#stay" name="HereDocCmd"> 1092 <!-- Only if the redirect is before the command, but as this is too complicated, 1093 check if the redirect is at the beginning of the line. --> 1094 <StringDetect attribute="Redirection" context="BashOneLine" String="%1" dynamic="true" firstNonSpace="1"/> 1095 <StringDetect attribute="Redirection" context="HereDocRemainder" String="%1" dynamic="true"/> 1096 </context> 1097 1098 <context attribute="Here Doc" lineEndContext="#stay" name="HereDocQCmd" dynamic="true" fallthroughContext="HereDocText"> 1099 <IncludeRules context="HereDocCmd"/> 1100 <RegExpr attribute="Redirection" context="#pop#pop" String="^%2$" dynamic="true" column="0"/> 1101 </context> 1102 1103 <context attribute="Here Doc" lineEndContext="#stay" name="HereDocNQCmd" dynamic="true" fallthroughContext="HereDocSubstitutions"> 1104 <IncludeRules context="HereDocQCmd"/> 1105 </context> 1106 1107 <context attribute="Here Doc" lineEndContext="#stay" name="HereDocIQCmd" dynamic="true" fallthroughContext="HereDocText"> 1108 <IncludeRules context="HereDocCmd"/> 1109 <RegExpr attribute="Redirection" context="#pop#pop" String="^\t*%2$" dynamic="true" column="0"/> 1110 </context> 1111 1112 <context attribute="Here Doc" lineEndContext="#stay" name="HereDocINQCmd" dynamic="true" fallthroughContext="HereDocSubstitutions"> 1113 <IncludeRules context="HereDocIQCmd"/> 1114 </context> 1115 1116 <context attribute="Here Doc" lineEndContext="#pop" name="HereDocText"> 1117 </context> 1118 1119 <context attribute="Here Doc" lineEndContext="#pop" name="HereDocSubstitutions"> 1120 <DetectSpaces attribute="Here Doc"/> 1121 <DetectIdentifier attribute="Here Doc"/> 1122 <DetectChar context="HereDocVariables" char="$" lookAhead="1"/> 1123 <DetectChar attribute="Backquote" context="CommandBackq" char="`"/> 1124 <DetectChar context="AssumeEscape" char="\" lookAhead="1"/> 1125 </context> 1126 <context attribute="Here Doc" lineEndContext="#pop" name="HereDocVariables"> 1127 <IncludeRules context="DispatchSubstVariables"/> 1128 <IncludeRules context="DispatchVarnameVariables"/> 1129 <DetectChar attribute="Here Doc" context="#pop" char="$"/> 1130 </context> 1131 1132 <!-- VarName consumes spare variable names and assignments --> 1133 <context attribute="Normal Text" lineEndContext="#pop" name="VarName"> 1134 <StringDetect attribute="Builtin" context="#pop!BuiltinGetopts" String="getopts"/> 1135 <StringDetect attribute="Builtin" context="#pop!BuiltinLet" String="let"/> 1136 <DetectIdentifier attribute="Builtin" context="#pop!VarNameArgs"/> 1137 <AnyChar attribute="Builtin" context="#pop!VarNameArgs" String=".:"/> 1138 </context> 1139 <context attribute="Normal Text" lineEndContext="#pop" name="VarNameArgs" fallthroughContext="#pop!CommandArgs"> 1140 <DetectSpaces attribute="Normal Text" context="VarNameArg"/> 1141 <LineContinue attribute="Escape" context="#stay"/> 1142 </context> 1143 <context attribute="Normal Text" lineEndContext="#pop#pop" name="VarNameArg" fallthroughContext="#pop!VarNameArg2"> 1144 <!-- In command arguments, do not allow comments after escaped characters. 1145 This avoids highlighting comments within paths or other text. Ex: pathtext\ #no\ comment --> 1146 <DetectChar context="#pop#pop" char="#" lookAhead="1"/> 1147 <DetectChar attribute="Option" context="#pop!ShortOption" char="-"/> 1148 </context> 1149 <context attribute="Normal Text" lineEndContext="#pop" name="VarNameArg2" fallthroughContext="#pop!NormalOption"> 1150 <DetectChar attribute="Variable" context="Subscript" char="["/> 1151 <DetectChar attribute="Operator" context="Assign" char="="/> 1152 <DetectChar attribute="Variable" context="AssignArray" char="("/> 1153 <DetectIdentifier attribute="Variable" context="#stay"/> 1154 </context> 1155 <context attribute="Normal Text" lineEndContext="#pop" name="BuiltinGetopts" fallthroughContext="#pop!CommandArgs"> 1156 <DetectSpaces attribute="Normal Text" context="#pop!BuiltinGetoptsOpt"/> 1157 <LineContinue attribute="Escape" context="#stay"/> 1158 </context> 1159 <context attribute="Normal Text" lineEndContext="#pop#pop" name="BuiltinGetoptsOpt" fallthroughContext="#pop!BuiltinGetoptsOpt2"> 1160 <DetectChar context="#pop#pop" char="#" lookAhead="1"/> 1161 </context> 1162 <context attribute="Normal Text" lineEndContext="#pop" name="BuiltinGetoptsOpt2" fallthroughContext="#pop!NormalOption"> 1163 <DetectChar attribute="Operator" context="#stay" char=":"/> 1164 <DetectIdentifier attribute="Normal Text" context="#stay" /> 1165 <DetectSpaces attribute="Normal Text" context="#pop!BuiltinGetoptsVar"/> 1166 <AnyChar context="#pop" String="&wordseps;`" lookAhead="1"/> 1167 <IncludeRules context="FindWord"/> 1168 <DetectChar context="NormalMaybeBraceExpansion" char="{" lookAhead="1"/> 1169 <AnyChar attribute="Normal Text" context="#stay" String="/%.0123456789"/> 1170 </context> 1171 <context attribute="Normal Text" lineEndContext="#pop" name="BuiltinGetoptsVar" fallthroughContext="#pop!CommandArgs"> 1172 <DetectIdentifier attribute="Variable" context="#pop!CommandArgs"/> 1173 </context> 1174 <context attribute="Normal Text" lineEndContext="#pop" name="BuiltinLet" fallthroughContext="#pop!CommandArgs"> 1175 <DetectSpaces attribute="Normal Text" context="#pop!BuiltinLetArgs"/> 1176 <LineContinue attribute="Escape" context="#stay"/> 1177 </context> 1178 <context attribute="Normal Text" lineEndContext="#pop" name="BuiltinLetArgs" fallthroughContext="BuiltinLetArg"> 1179 <AnyChar context="BuiltinLetArgsNumber" String="0123456789" lookAhead="1"/> 1180 <IncludeRules context="CommandArgs"/> 1181 </context> 1182 <context attribute="Normal Text" lineEndContext="#pop" name="BuiltinLetArgsNumber" fallthroughContext="#pop!BuiltinLetArg"> 1183 <IncludeRules context="FindRedirection"/> 1184 </context> 1185 <context attribute="Normal Text" lineEndContext="#pop#pop" name="BuiltinLetArg" fallthroughContext="#pop!BuiltinLetExpr"> 1186 <DetectChar context="#pop#pop" char="#" lookAhead="1"/> 1187 </context> 1188 <context attribute="Normal Text" lineEndContext="#pop" name="BuiltinLetExpr" fallthroughContext="#pop!NormalOption"> 1189 <DetectIdentifier attribute="Variable" context="#stay" /> 1190 <AnyChar context="#pop" String="&wordseps;`" lookAhead="1"/> 1191 <AnyChar attribute="Operator" context="#stay" String="+-/%=^:"/> 1192 <AnyChar context="Number" String="0123456789" lookAhead="1"/> 1193 <DetectChar attribute="Parameter Expansion Operator" context="Subscript" char="["/> 1194 <IncludeRules context="FindWord"/> 1195 <DetectChar attribute="Error" context="#stay" char="#"/> 1196 <DetectChar context="NormalMaybeBraceExpansion" char="{" lookAhead="1"/> 1197 </context> 1198 1199 <!-- ProcessSubst handles <(command) and >(command) --> 1200 <context attribute="Normal Text" lineEndContext="#stay" name="ProcessSubst" fallthroughContext="Command"> 1201 <DetectChar attribute="Redirection" context="#pop" char=")"/> 1202 <IncludeRules context="Start"/> 1203 </context> 1204 1205 <!-- StringSQ consumes anything till ' --> 1206 <context attribute="String SingleQ" lineEndContext="#stay" name="StringSQ"> 1207 <DetectSpaces attribute="String SingleQ"/> 1208 <DetectIdentifier attribute="String SingleQ"/> 1209 <DetectChar attribute="String SingleQ" context="#pop" char="'"/> 1210 </context> 1211 1212 <!-- StringDQ consumes anything till ", substitutes vars and expressions --> 1213 <context attribute="String DoubleQ" lineEndContext="#stay" name="StringDQ"> 1214 <DetectSpaces attribute="String DoubleQ"/> 1215 <DetectIdentifier attribute="String DoubleQ"/> 1216 <DetectChar attribute="String DoubleQ" context="#pop" char="""/> 1217 <DetectChar context="StringDQEscape" char="\" lookAhead="1"/> 1218 <DetectChar context="StringDQDispatchVariables" char="$" lookAhead="1"/> 1219 <DetectChar attribute="Backquote" context="RegularBackq" char="`"/> 1220 </context> 1221 <context attribute="String DoubleQ" lineEndContext="#stay" name="StringDQDispatchVariables"> 1222 <IncludeRules context="DispatchSubstVariables"/> 1223 <IncludeRules context="DispatchVarnameVariables"/> 1224 <DetectChar attribute="String DoubleQ" context="#pop" char="$"/> 1225 </context> 1226 <context attribute="String DoubleQ" lineEndContext="#pop" name="StringDQEscape"> 1227 <Detect2Chars attribute="String Escape" context="#pop" char="\" char1="""/> 1228 <Detect2Chars attribute="String Escape" context="#pop" char="\" char1="\"/> 1229 <Detect2Chars attribute="String Escape" context="#pop" char="\" char1="`"/> 1230 <Detect2Chars attribute="String Escape" context="#pop" char="\" char1="$"/> 1231 <LineContinue attribute="String Escape" context="#pop"/> 1232 <DetectChar attribute="String DoubleQ" context="#pop" char="\"/> 1233 </context> 1234 1235 <!-- RegularBackq consumes anything till ` --> 1236 <context attribute="Normal Text" lineEndContext="#stay" name="RegularBackq" fallthroughContext="Command"> 1237 <DetectChar attribute="Backquote" context="#pop" char="`"/> 1238 <DetectChar attribute="Comment" context="CommentBackq" char="#"/> 1239 <IncludeRules context="Start"/> 1240 </context> 1241 1242 <!-- StringEsc eats till ', but escaping many characters --> 1243 <context attribute="String SingleQ" lineEndContext="#stay" name="StringEsc"> 1244 <DetectSpaces attribute="String SingleQ"/> 1245 <DetectIdentifier attribute="String SingleQ"/> 1246 <DetectChar attribute="String SingleQ" context="#pop" char="'"/> 1247 <RegExpr attribute="String Escape" context="#stay" String="\\(?:[abefnrtv\\']|[0-7]{1,3}|x[A-Fa-f0-9]{1,2}|c.)"/> 1248 </context> 1249 1250 <context attribute="Normal Text" lineEndContext="#stay" name="FindWord"> 1251 <IncludeRules context="FindStrings"/> 1252 <DetectChar context="RegularVariable" char="$" lookAhead="1"/> 1253 <DetectChar attribute="Backquote" context="RegularBackq" char="`"/> 1254 <DetectChar context="AssumeEscape" char="\" lookAhead="1"/> 1255 </context> 1256 <context attribute="Normal Text" lineEndContext="#pop" name="RegularVariable"> 1257 <IncludeRules context="DispatchVariables"/> 1258 <DetectChar attribute="Normal Text" context="#pop" char="$"/> 1259 </context> 1260 1261 <context attribute="Normal Text" lineEndContext="#pop" name="FindStrings"> 1262 <DetectChar attribute="String SingleQ" context="StringSQ" char="'"/> 1263 <DetectChar attribute="String DoubleQ" context="StringDQ" char="""/> 1264 </context> 1265 1266 <!-- SubstCommand is called after a $( is encountered --> 1267 <context attribute="Normal Text" lineEndContext="#stay" name="SubstCommand" fallthroughContext="Command"> 1268 <DetectChar attribute="Parameter Expansion" context="#pop" char=")" endRegion="subshell"/> 1269 <IncludeRules context="Start"/> 1270 </context> 1271 1272 <!-- VarBraceStart is called as soon as ${ is encoutered --> 1273 <context attribute="Variable" lineEndContext="#pop!VarBrace" name="VarBraceStart" fallthroughContext="#pop!VarBrace"> 1274 <StringDetect context="#pop!VarBrace" String="!}" lookAhead="1"/> 1275 <DetectChar attribute="Parameter Expansion Operator" context="#pop!VarBracePrefix" char="!"/> 1276 <DetectChar attribute="Parameter Expansion Operator" context="#pop!VarBrace" char="#"/> 1277 </context> 1278 1279 <!-- VarBracePrefix called as soon as ${! is encoutered --> 1280 <context attribute="Variable" lineEndContext="#pop" name="VarBracePrefix"> 1281 <DetectIdentifier attribute="Variable" context="#pop!VarBracePrefixSuffix"/> 1282 <Int attribute="Variable" context="#pop!VarBracePrefixSuffix"/> 1283 <AnyChar attribute="Parameter Expansion Operator" context="#pop!VarBracePrefixSharp" String="@*#"/> 1284 <DetectChar attribute="Parameter Expansion" context="#pop" char="}"/> 1285 </context> 1286 <context attribute="Variable" lineEndContext="#pop" name="VarBracePrefixSuffix" fallthroughContext="#pop!VarError"> 1287 <DetectChar attribute="Parameter Expansion" context="#pop" char="}"/> 1288 <AnyChar attribute="Parameter Expansion Operator" context="#stay" String="@*"/> 1289 <StringDetect attribute="Parameter Expansion Operator" context="#stay" String="[@]"/> 1290 <StringDetect attribute="Parameter Expansion Operator" context="#stay" String="[*]"/> 1291 </context> 1292 <context attribute="Variable" lineEndContext="#pop" name="VarBracePrefixSharp" fallthroughContext="#pop!VarError"> 1293 <DetectChar attribute="Parameter Expansion" context="#pop" char="}"/> 1294 <DetectChar attribute="Parameter Expansion Operator" char="#"/> 1295 </context> 1296 1297 <!-- VarBrace is called as soon as ${ or ${# are encoutered --> 1298 <context attribute="Variable" lineEndContext="#stay" name="VarBrace" fallthroughContext="#pop!VarError"> 1299 <DetectChar attribute="Parameter Expansion" context="#pop" char="}"/> 1300 <DetectIdentifier attribute="Variable" context="#pop!CheckVarAlt"/> 1301 <AnyChar attribute="Variable" context="#pop!CheckVarAlt" String="*@?$!-"/> 1302 <Int attribute="Variable" context="#pop!CheckVarAlt" additionalDeliminator=":#%^,/@{}"/> 1303 </context> 1304 <context attribute="Error" lineEndContext="#stay" name="VarError"> 1305 <DetectChar attribute="Parameter Expansion" context="#pop" char="}"/> 1306 </context> 1307 <context attribute="Normal Text" lineEndContext="#stay" name="CheckVarAlt" fallthroughContext="#pop!VarError"> 1308 <DetectChar attribute="Parameter Expansion" context="#pop" char="}"/> 1309 <StringDetect attribute="Parameter Expansion Operator" context="#stay" String="[@]"/> 1310 <StringDetect attribute="Parameter Expansion Operator" context="#stay" String="[*]"/> 1311 <DetectChar attribute="Parameter Expansion Operator" context="Subscript" char="["/> 1312 <Detect2Chars attribute="Parameter Expansion Operator" context="#pop!AlternateValue" char=":" char1="-"/> 1313 <Detect2Chars attribute="Parameter Expansion Operator" context="#pop!AlternateValue" char=":" char1="="/> 1314 <Detect2Chars attribute="Parameter Expansion Operator" context="#pop!AlternateValue" char=":" char1="?"/> 1315 <Detect2Chars attribute="Parameter Expansion Operator" context="#pop!AlternateValue" char=":" char1="+"/> 1316 <Detect2Chars attribute="Parameter Expansion Operator" context="#pop!AlternateValue" char="#" char1="#"/> 1317 <Detect2Chars attribute="Parameter Expansion Operator" context="#pop!AlternateValue" char="%" char1="%"/> 1318 <Detect2Chars attribute="Parameter Expansion Operator" context="#pop!AlternatePatternValue" char="^" char1="^"/> 1319 <Detect2Chars attribute="Parameter Expansion Operator" context="#pop!AlternatePatternValue" char="," char1=","/> 1320 <DetectChar attribute="Parameter Expansion Operator" context="#pop!VarSub" char=":"/> 1321 <DetectChar attribute="Parameter Expansion Operator" context="#pop!VarSubst" char="/"/> 1322 <AnyChar attribute="Parameter Expansion Operator" context="#pop!AlternateValue" String="-+=?#%"/> 1323 <AnyChar attribute="Parameter Expansion Operator" context="#pop!AlternatePatternValue" String="^,"/> 1324 <DetectChar attribute="Parameter Expansion Operator" context="#pop!VarTransformation" char="@"/> 1325 </context> 1326 1327 <!-- called as soon as ${xxx: is encoutered --> 1328 <context attribute="Normal Text" lineEndContext="#stay" name="VarSub"> 1329 <DetectChar attribute="Parameter Expansion" context="#pop" char="}"/> 1330 <!-- <Int> doesn't match :3 because : is a weakDeliminator --> 1331 <AnyChar attribute="Decimal" String="0123456789"/> 1332 <DetectChar attribute="Parameter Expansion Operator" context="#stay" char=":"/> 1333 <DetectChar context="VarVariables" char="$" lookAhead="1"/> 1334 <IncludeRules context="FindStrings"/> 1335 <DetectChar attribute="Backquote" context="RegularBackq" char="`"/> 1336 <DetectChar context="AssumeEscape" char="\" lookAhead="1"/> 1337 </context> 1338 <context attribute="Command" lineEndContext="#pop" name="VarVariables"> 1339 <IncludeRules context="DispatchVariables"/> 1340 <DetectChar attribute="Error" context="#pop" char="$"/> 1341 </context> 1342 1343 <!-- called as soon as ${xxx:- ${xxx:= ${xxx:? ${xxx:+ ${xxx# ${xxx% and ${xxx are encoutered --> 1344 <context attribute="Normal Text" lineEndContext="#stay" name="AlternateValue"> 1345 <DetectChar attribute="Parameter Expansion" context="#pop" char="}"/> 1346 <IncludeRules context="FindWord"/> 1347 <IncludeRules context="FindPathThenPopInAlternateValue"/> 1348 <DetectIdentifier attribute="Normal Text"/> 1349 </context> 1350 1351 <!-- called as soon as ${xxx^ are ${xxx, are encoutered --> 1352 <context attribute="Pattern" lineEndContext="#stay" name="AlternatePatternValue"> 1353 <DetectChar attribute="Parameter Expansion" context="#pop" char="}"/> 1354 <IncludeRules context="FindWord"/> 1355 <IncludeRules context="FindPattern"/> 1356 <DetectIdentifier attribute="Pattern"/> 1357 </context> 1358 1359 <!-- called as soon as ${xxx/ is encoutered --> 1360 <context attribute="Normal Text" lineEndContext="#stay" name="VarSubst" fallthroughContext="#pop!VarSubstPat"> 1361 <AnyChar attribute="Parameter Expansion Operator" context="#pop!VarSubstPat" String="/#%"/> 1362 </context> 1363 <context attribute="Pattern" lineEndContext="#stay" name="VarSubstPat"> 1364 <DetectChar attribute="Parameter Expansion Operator" context="#pop!AlternateValue" char="/"/> 1365 <IncludeRules context="AlternatePatternValue"/> 1366 </context> 1367 1368 <!-- called as soon as ${xxx@ is encoutered --> 1369 <context attribute="Normal Text" lineEndContext="#stay" name="VarTransformation" fallthroughContext="#pop!VarError"> 1370 <DetectChar attribute="Parameter Expansion" context="#pop" char="}"/> 1371 <AnyChar attribute="Parameter Expansion" context="#stay" String="UuLQEPAKa"/> 1372 </context> 1373 1374 <context attribute="Escape" lineEndContext="#pop" name="BraceExpansion"> 1375 <DetectChar attribute="Escape" context="#pop!BraceExpansion2" char="{"/> 1376 </context> 1377 <context attribute="Escape" lineEndContext="#pop" name="BraceExpansion2"> 1378 <DetectChar attribute="Operator" context="#stay" char=","/> 1379 <DetectChar attribute="Escape" context="#pop" char="}"/> 1380 <DetectChar context="EscapeMaybeBraceExpansion" char="{" lookAhead="1"/> 1381 <DetectChar context="AssumeEscape" char="\" lookAhead="1"/> 1382 <DetectChar attribute="Backquote" context="CommandBackq" char="`"/> 1383 <DetectChar context="BraceExpansionVariables" char="$" lookAhead="1"/> 1384 <IncludeRules context="FindStrings"/> 1385 <IncludeRules context="FindPattern"/> 1386 <DetectIdentifier attribute="Escape"/> 1387 </context> 1388 <context attribute="Escape" lineEndContext="#pop" name="EscapeMaybeBraceExpansion"> 1389 <IncludeRules context="DispatchBraceExpansion"/> 1390 <DetectChar attribute="Escape" context="#pop!BraceExpansion2" char="{"/> 1391 </context> 1392 <context attribute="Escape" lineEndContext="#pop" name="BraceExpansionVariables"> 1393 <IncludeRules context="DispatchVariables"/> 1394 <DetectChar attribute="Escape" context="#pop" char="$"/> 1395 </context> 1396 1397 <context attribute="Normal Text" lineEndContext="#pop" name="SequenceExpression"> 1398 <AnyChar attribute="Decimal" context="#stay" String="0123456789-+"/> 1399 <Detect2Chars attribute="Escape" context="#stay" char="." char1="."/> 1400 <DetectChar attribute="Escape" context="#pop" char="}"/> 1401 </context> 1402 1403 <!-- ====== These are the contexts that can be branched to ======= --> 1404 1405 <context attribute="Normal Text" lineEndContext="#stay" name="ExprDblParenOrSubShell"> 1406 <RegExpr attribute="Keyword" context="#pop!SubShell" String="\((?=&arithmetic_as_subshell;)|" beginRegion="subshell"/> 1407 <Detect2Chars attribute="Keyword" context="#pop!ExprDblParen" char="(" char1="(" beginRegion="expression"/> 1408 </context> 1409 <!-- ExprDblParen consumes an expression started in command mode till )) --> 1410 <context attribute="Normal Text" lineEndContext="#stay" name="ExprDblParen"> 1411 <DetectSpaces attribute="Normal Text" context="#stay"/> 1412 <Detect2Chars attribute="Keyword" context="#pop" char=")" char1=")" endRegion="expression"/> 1413 <IncludeRules context="FindExprDblParen"/> 1414 <!-- ((cmd 1415 ) # jump to SubShell context --> 1416 <DetectChar attribute="Keyword" context="#pop!SubShell" char=")" endRegion="expression" beginRegion="subshell"/> 1417 </context> 1418 <context attribute="Normal Text" lineEndContext="#stay" name="FindExprDblParen"> 1419 <Detect2Chars attribute="Control" context="#stay" char="&" char1="&"/> 1420 <Detect2Chars attribute="Control" context="#stay" char="|" char1="|"/> 1421 <AnyChar attribute="Operator" context="#stay" String="+-!~*/%<>=&^|?:"/> 1422 <AnyChar context="Number" String="0123456789" lookAhead="1"/> 1423 <DetectChar attribute="Control" context="#stay" char=","/> 1424 <DetectChar attribute="Normal Text" context="ExprSubDblParen" char="("/> 1425 <DetectChar attribute="Parameter Expansion Operator" context="Subscript" char="["/> 1426 <IncludeRules context="FindWord"/> 1427 <DetectChar attribute="Error" context="#stay" char="#"/> 1428 <DetectChar context="MaybeArithmeticBrace" char="{" lookAhead="1"/> 1429 <DetectIdentifier attribute="Variable" context="#stay"/> 1430 </context> 1431 <context attribute="Normal Text" lineEndContext="#stay" name="ExprSubDblParen"> 1432 <DetectSpaces attribute="Normal Text" context="#stay"/> 1433 <DetectChar attribute="Normal Text" context="#pop" char=")"/> 1434 <IncludeRules context="FindExprDblParen"/> 1435 </context> 1436 <context attribute="Normal Text" lineEndContext="#pop" name="MaybeArithmeticBrace"> 1437 <IncludeRules context="DispatchBraceExpansion"/> 1438 <DetectChar attribute="Error" context="#pop" char="{"/> 1439 </context> 1440 1441 <context attribute="Decimal" lineEndContext="#pop" name="Number"> 1442 <HlCHex attribute="Hex" context="#pop" additionalDeliminator="&weakDeliminatorSymbols;"/> 1443 <HlCOct attribute="Octal" context="#pop!NumberError" additionalDeliminator="&weakDeliminatorSymbols;"/> 1444 <RegExpr attribute="Base" context="#pop!BaseN" String="[1-9][0-9]*#"/> 1445 <DetectChar attribute="Decimal" context="#pop!NumberError" char="0"/> 1446 <Int attribute="Decimal" context="#pop" additionalDeliminator="&weakDeliminatorSymbols;"/> 1447 </context> 1448 <context attribute="BaseN" lineEndContext="#pop" name="BaseN" fallthroughContext="#pop"> 1449 <RegExpr attribute="BaseN" context="#pop" String="[0-9a-zA-Z@_]+"/> 1450 </context> 1451 <context attribute="Error" lineEndContext="#pop" name="NumberError" fallthroughContext="#pop"> 1452 <Int attribute="Error" context="#pop" additionalDeliminator="0123456789"/> 1453 </context> 1454 1455 <context attribute="Normal Text" lineEndContext="#stay" name="ExprDblParenSubstOrSubstCommand"> 1456 <RegExpr attribute="Parameter Expansion" context="#pop!SubstCommand" String="\$\((?=&arithmetic_as_subshell;)|" beginRegion="subshell"/> 1457 <StringDetect attribute="Parameter Expansion" context="#pop!ExprDblParenSubst" String="$((" beginRegion="expression"/> 1458 </context> 1459 <!-- ExprDblParenSubst like ExprDblParen but matches )) as Variable --> 1460 <context attribute="Normal Text" lineEndContext="#stay" name="ExprDblParenSubst"> 1461 <DetectSpaces attribute="Normal Text" context="#stay"/> 1462 <Detect2Chars attribute="Parameter Expansion" context="#pop" char=")" char1=")" endRegion="expression"/> 1463 <IncludeRules context="FindExprDblParen"/> 1464 <!-- $((cmd 1465 ) # jump to SubstCommand context --> 1466 <DetectChar attribute="Parameter Expansion" context="#pop!SubstCommand" char=")" endRegion="expression" beginRegion="subshell"/> 1467 </context> 1468 1469 <!-- ExprBracket consumes an expression till ] --> 1470 <context attribute="Normal Text" lineEndContext="#stay" name="ExprBracket" fallthroughContext="#pop!ExprBracketNot"> 1471 <DetectSpaces attribute="Normal Text" context="#stay"/> 1472 <IncludeRules context="FindExprBracketEnd"/> 1473 </context> 1474 1475 <context attribute="Normal Text" lineEndContext="#stay" name="ExprBracketNot" fallthroughContext="#pop!ExprBracketParam1"> 1476 <DetectSpaces attribute="Normal Text" context="#pop!ExprBracketParam1"/> 1477 <Detect2Chars attribute="Expression" context="ExprBracketTestMaybeNot" char="!" char1=" " lookAhead="1"/> 1478 <Detect2Chars attribute="Expression" context="ExprBracketTestMaybeNot" char="!" char1="&tab;" lookAhead="1"/> 1479 </context> 1480 <context attribute="Normal Text" lineEndContext="#pop" name="ExprBracketTestMaybeNot"> 1481 <DetectChar attribute="Expression" context="#pop" char="!"/> 1482 </context> 1483 1484 <context attribute="Normal Text" lineEndContext="#stay" name="ExprBracketParam1" fallthroughContext="ExprBracketValue"> 1485 <DetectSpaces attribute="Normal Text" context="#pop!ExprBracketParam2"/> 1486 <DetectChar context="TestMaybeUnary" char="-" lookAhead="1"/> 1487 <IncludeRules context="FindExprBracketEnd"/> 1488 </context> 1489 1490 <context attribute="Normal Text" lineEndContext="#pop" name="ExprBracketValue"> 1491 <AnyChar attribute="Error" context="#stay" String="&symbolseps;"/> 1492 <AnyChar context="#pop" String=" &tab;" lookAhead="1"/> 1493 <IncludeRules context="FindWord"/> 1494 <DetectChar context="NormalMaybeBraceExpansion" char="{" lookAhead="1"/> 1495 <IncludeRules context="FindNormalText"/> 1496 </context> 1497 1498 <context attribute="Normal Text" lineEndContext="#stay" name="ExprBracketParam2" fallthroughContext="ExprBracketValue"> 1499 <DetectSpaces attribute="Normal Text" context="#pop!ExprBracketParam3"/> 1500 <AnyChar context="TestMaybeBinary" String="-=!" lookAhead="1"/> 1501 <IncludeRules context="FindExprBracketEnd"/> 1502 </context> 1503 1504 <context attribute="Normal Text" lineEndContext="ExprBracketFinal" name="ExprBracketParam3" fallthroughContext="ExprBracketValue"> 1505 <DetectSpaces attribute="Normal Text" context="#pop!ExprBracketFinal"/> 1506 <IncludeRules context="FindExprBracketEnd"/> 1507 </context> 1508 1509 <context attribute="Normal Text" lineEndContext="#stay" name="ExprBracketFinal" fallthroughContext="ExprBracketValue"> 1510 <DetectSpaces attribute="Normal Text" context="#stay"/> 1511 <IncludeRules context="FindExprBracketEnd"/> 1512 <RegExpr attribute="Expression" context="#pop!ExprBracket" String="-[ao]&eos;"/> 1513 <RegExpr attribute="Error" context="#pop" String="(?:[^] &tab;]++|\][^ &tab;])++" endRegion="expression"/> 1514 </context> 1515 1516 <context attribute="Normal Text" lineEndContext="#stay" name="FindExprBracketEnd"> 1517 <LineContinue attribute="Escape" context="#stay"/> 1518 <RegExpr attribute="Builtin" context="#pop" String="\](?=($|[ &tab;;|&<>)]))" endRegion="expression"/> 1519 </context> 1520 1521 <context attribute="Normal Text" lineEndContext="#pop" name="TestMaybeUnary" fallthroughContext="#pop!ExprBracketValue"> 1522 <RegExpr attribute="Expression" context="#pop#pop!ExprBracketParam2" String="&unary_operators;"/> 1523 </context> 1524 <context attribute="Normal Text" lineEndContext="#pop" name="TestMaybeBinary" fallthroughContext="#pop!ExprBracketValue"> 1525 <RegExpr attribute="Expression" context="#pop" String="&binary_operators;"/> 1526 </context> 1527 1528 1529 <!-- ExprDblBracket consumes an expression till ]] --> 1530 <context attribute="Normal Text" lineEndContext="#stay" name="ExprDblBracket" fallthroughContext="#pop!ExprDblBracketNot"> 1531 <DetectSpaces attribute="Normal Text" context="#stay"/> 1532 <DetectChar attribute="Comment" context="Comment" char="#"/> 1533 <IncludeRules context="FindExprDblBracketEnd"/> 1534 </context> 1535 1536 <context attribute="Normal Text" lineEndContext="#stay" name="ExprDblBracketNot" fallthroughContext="#pop!ExprDblBracketParam1"> 1537 <DetectSpaces attribute="Normal Text" context="#pop!ExprDblBracketParam1"/> 1538 <DetectChar context="ExprDblBracketTestMaybeNot" char="!" lookAhead="1"/> 1539 </context> 1540 <context attribute="Normal Text" lineEndContext="#pop" name="ExprDblBracketTestMaybeNot" fallthroughContext="#pop#pop!ExprDblBracketParam1"> 1541 <RegExpr attribute="Expression" context="#pop" String="!(?=$|[ &tab;(])"/> 1542 </context> 1543 1544 <context attribute="Normal Text" lineEndContext="#stay" name="ExprDblBracketParam1" fallthroughContext="ExprDblBracketValueText"> 1545 <DetectSpaces attribute="Normal Text" context="#pop!ExprDblBracketParam2"/> 1546 <DetectChar context="TestMaybeUnary2" char="-" lookAhead="1"/> 1547 <AnyChar attribute="Expression" context="#pop!ExprDblBracketParam3Spe" String="<>"/> 1548 <IncludeRules context="FindExprDblBracketEnd"/> 1549 </context> 1550 <context attribute="Normal Text" lineEndContext="#pop" name="TestMaybeUnary2" fallthroughContext="#pop!ExprDblBracketValueText"> 1551 <RegExpr attribute="Expression" context="#pop!ExprDblBracketUnary" String="&unary_operators;(?!\s+(?:=~|&binary_operators;))"/> 1552 </context> 1553 <context attribute="Normal Text" lineEndContext="#pop" name="ExprDblBracketUnary"> 1554 <DetectSpaces attribute="Normal Text" context="#pop!ExprDblBracketValueText"/> 1555 </context> 1556 1557 <context attribute="Normal Text" lineEndContext="#pop" name="ExprDblBracketValueText" fallthroughContext="#pop!ExprDblBracketValueText2"> 1558 <Detect2Chars context="#pop!ExprDblBracketValueTextMaybeEnd" char="]" char1="]" lookAhead="1"/> 1559 <DetectChar attribute="Error" context="#pop!Comment" char="#"/> 1560 <IncludeRules context="FindExprDblBracketValueTextPath"/> 1561 </context> 1562 <context attribute="Normal Text" lineEndContext="#pop" name="FindExprDblBracketValueTextPath"> 1563 <RegExpr context="#pop!ExprDblBracketValueTextPath" String="&path_with_sep;|" lookAhead="1"/> 1564 </context> 1565 <context attribute="Normal Text" lineEndContext="#pop" name="ExprDblBracketValueTextMaybeEnd"> 1566 <RegExpr attribute="Keyword" context="#pop#pop" String="&dblbracket_close;" endRegion="expression"/> 1567 <IncludeRules context="FindExprDblBracketValueTextPath"/> 1568 <Detect2Chars context="#pop!ExprDblBracketValueText2" char="]" char1="]" lookAhead="1"/> 1569 </context> 1570 <context attribute="Normal Text" lineEndContext="#pop" name="ExprDblBracketValueText2"> 1571 <DetectIdentifier/> 1572 <AnyChar String="*?+!@~^:%+-/,"/> 1573 <IncludeRules context="ExprDblBracketValueCommon"/> 1574 </context> 1575 <context attribute="Path" lineEndContext="#pop" name="ExprDblBracketValueTextPath"> 1576 <IncludeRules context="ExprDblBracketValueText2"/> 1577 </context> 1578 1579 <context attribute="Normal Text" lineEndContext="#pop" name="ExprDblBracketValuePattern" fallthroughContext="#pop!ExprDblBracketValuePattern2"> 1580 <RegExpr context="PathThenPop" String="&path_with_sep;|" lookAhead="1"/> 1581 </context> 1582 <context attribute="Normal Text" lineEndContext="#pop" name="ExprDblBracketValuePattern2"> 1583 <DetectIdentifier attribute="Normal Text"/> 1584 <IncludeRules context="ExprDblBracketValueCommon"/> 1585 <IncludeRules context="FindExprDblBracketValueExtGlob"/> 1586 <AnyChar attribute="Glob" String="?*"/> 1587 </context> 1588 <context attribute="Glob" lineEndContext="#stay" name="FindExprDblBracketValueExtGlob"> 1589 <Detect2Chars attribute="Glob" context="ExprDblBracketValueExtGlob" char="?" char1="("/> 1590 <Detect2Chars attribute="Glob" context="ExprDblBracketValueExtGlob" char="*" char1="("/> 1591 <Detect2Chars attribute="Glob" context="ExprDblBracketValueExtGlob" char="+" char1="("/> 1592 <Detect2Chars attribute="Glob" context="ExprDblBracketValueExtGlob" char="@" char1="("/> 1593 <Detect2Chars attribute="Glob" context="ExprDblBracketValueExtGlob" char="!" char1="("/> 1594 <DetectChar context="ExprDblBracketValueMaybeGlobAny" char="[" lookAhead="1"/> 1595 </context> 1596 <context attribute="Normal Text" lineEndContext="#stay" name="ExprDblBracketValueMaybeGlobAny" fallthroughContext="#pop"> 1597 <IncludeRules context="FindGlobAny"/> 1598 <DetectChar attribute="Normal Text" context="#pop" char="["/> 1599 </context> 1600 <context attribute="Normal Text" lineEndContext="#pop#pop" name="ExprDblBracketValueExtGlob"> 1601 <DetectIdentifier attribute="Normal Text"/> 1602 <DetectChar attribute="Glob" context="#pop" char=")"/> 1603 <DetectChar attribute="Normal Text" context="ExprDblBracketValueExtGlobNormal" char="("/> 1604 <IncludeRules context="FindExprDblBracketValueExtGlob"/> 1605 <AnyChar attribute="Glob" String="|?*"/> 1606 <IncludeRules context="FindWord"/> 1607 </context> 1608 <context attribute="Normal Text" lineEndContext="#pop#pop" name="ExprDblBracketValueExtGlobNormal"> 1609 <DetectIdentifier attribute="Normal Text"/> 1610 <DetectChar attribute="Normal Text" context="#pop" char=")"/> 1611 <DetectChar attribute="Normal Text" context="ExprDblBracketValueExtGlobNormal" char="("/> 1612 <IncludeRules context="FindExprDblBracketValueExtGlob"/> 1613 <AnyChar attribute="Glob" String="?*"/> 1614 <IncludeRules context="FindWord"/> 1615 </context> 1616 1617 <context attribute="Normal Text" lineEndContext="#pop" name="ExprDblBracketValueCommon"> 1618 <Detect2Chars context="ExprDblBracketDblParentOrSubValue" char="(" char1="(" lookAhead="1"/> 1619 <DetectChar context="ExprDblBracketSubValue" char="(" lookAhead="1"/> 1620 <DetectChar attribute="Operator" context="#pop#pop" char=")"/> 1621 <Detect2Chars attribute="Control" context="#pop#pop!ExprDblBracket" char="&" char1="&"/> 1622 <Detect2Chars attribute="Control" context="#pop#pop!ExprDblBracket" char="|" char1="|"/> 1623 <AnyChar attribute="Error" context="#stay" String="|&;"/> 1624 <AnyChar context="#pop" String=" &tab;<>" lookAhead="1"/> 1625 <IncludeRules context="FindWord"/> 1626 </context> 1627 <context attribute="Normal Text" lineEndContext="#pop" name="ExprDblBracketSubValue" fallthroughContext="#pop"> 1628 <DetectChar attribute="Operator" context="ExprDblBracketNot" char="("/> 1629 <Detect2Chars context="#pop#pop" char="]" char1="]" lookAhead="1"/> 1630 </context> 1631 <context attribute="Normal Text" lineEndContext="#pop" name="ExprDblBracketDblParentOrSubValue"> 1632 <RegExpr context="#pop!ExprDblBracketSubValue" String="\((?=&arithmetic_as_subshell;)|" lookAhead="1"/> 1633 <Detect2Chars attribute="Keyword" context="#pop!ExprDblBracketExprDblParen" char="(" char1="(" beginRegion="expression"/> 1634 </context> 1635 <context attribute="Normal Text" lineEndContext="#stay" name="ExprDblBracketExprDblParen"> 1636 <DetectSpaces attribute="Normal Text" context="#stay"/> 1637 <Detect2Chars attribute="Keyword" context="#pop" char=")" char1=")" endRegion="expression"/> 1638 <IncludeRules context="FindExprDblParen"/> 1639 <!-- ((cmd 1640 ) # jump to ExprDblBracketValuePattern context --> 1641 <DetectChar attribute="Operator" context="ExprDblBracketValuePattern" char=")" endRegion="expression" beginRegion="subshell"/> 1642 </context> 1643 1644 <context attribute="Normal Text" lineEndContext="#stay" name="ExprDblBracketParam2" fallthroughContext="ExprDblBracketValuePattern"> 1645 <DetectSpaces attribute="Normal Text" context="#pop!ExprDblBracketParam3"/> 1646 <AnyChar context="TestMaybeBinary2" String="-=!" lookAhead="1"/> 1647 <AnyChar attribute="Expression" context="#pop!ExprDblBracketParam3Spe" String="<>"/> 1648 <IncludeRules context="FindExprDblBracketEnd"/> 1649 <DetectChar attribute="Comment" context="Comment" char="#"/> 1650 </context> 1651 <context attribute="Normal Text" lineEndContext="#pop" name="TestMaybeBinary2" fallthroughContext="#pop!ExprDblBracketValuePattern"> 1652 <IncludeRules context="TestMaybeBinary"/> 1653 <RegExpr attribute="Expression" context="#pop!ExprDblBracketRegex" String="=~(?=[ &tab;(])"/> 1654 </context> 1655 1656 <context attribute="Normal Text" lineEndContext="#stay" name="ExprDblBracketParam3Spe" fallthroughContext="#pop!ExprDblBracketParam3"> 1657 <DetectSpaces attribute="Normal Text" context="#pop!ExprDblBracketParam3"/> 1658 </context> 1659 1660 <context attribute="Normal Text" lineEndContext="#stay" name="ExprDblBracketParam3" fallthroughContext="ExprDblBracketValuePattern"> 1661 <DetectSpaces attribute="Normal Text" context="#pop!ExprDblBracketFinal"/> 1662 <IncludeRules context="FindExprDblBracketEnd"/> 1663 <AnyChar attribute="Error" context="#stay" String="<>"/> 1664 <DetectChar attribute="Comment" context="Comment" char="#"/> 1665 </context> 1666 1667 <context attribute="Normal Text" lineEndContext="#stay" name="ExprDblBracketFinal" fallthroughContext="ExprDblBracketValuePattern"> 1668 <DetectSpaces attribute="Normal Text" context="#stay"/> 1669 <IncludeRules context="FindExprDblBracketEnd"/> 1670 <DetectChar attribute="Comment" context="Comment" char="#"/> 1671 <DetectChar attribute="Operator" context="#pop" char=")"/> 1672 <RegExpr attribute="Error" context="#pop" String="(?:[^] &tab;]++|\](?:[^]]|\][^ &tab;]))++" endRegion="expression"/> 1673 </context> 1674 1675 <context attribute="Normal Text" lineEndContext="#stay" name="FindExprDblBracketEnd"> 1676 <LineContinue attribute="Escape" context="#stay"/> 1677 <Detect2Chars attribute="Control" context="#pop!ExprDblBracket" char="&" char1="&"/> 1678 <Detect2Chars attribute="Control" context="#pop!ExprDblBracket" char="|" char1="|"/> 1679 <RegExpr attribute="Keyword" context="#pop" String="&dblbracket_close;" endRegion="expression"/> 1680 </context> 1681 1682 <context attribute="Normal Text" lineEndContext="#stay" name="ExprDblBracketRegex" fallthroughContext="#pop!ExprDblBracketRegexCheck"> 1683 <DetectSpaces attribute="Normal Text" context="#pop!ExprDblBracketRegexCheck"/> 1684 </context> 1685 <context attribute="Normal Text" lineEndContext="#pop" name="ExprDblBracketRegexCheck" fallthroughContext="#pop#pop!Regex"> 1686 <DetectChar attribute="Error" context="Comment" char="#"/> 1687 </context> 1688 <context attribute="Pattern" lineEndContext="#stay" name="Regex"> 1689 <DetectIdentifier attribute="Pattern"/> 1690 <DetectSpaces attribute="Normal Text" context="#pop!ExprDblBracketFinal"/> 1691 <DetectChar attribute="Operator" context="#pop" char=")"/> 1692 <Detect2Chars attribute="Operator" context="RegexChar" char="[" char1="^"/> 1693 <DetectChar attribute="Operator" context="RegexChar" char="["/> 1694 <IncludeRules context="FindRegex"/> 1695 </context> 1696 <context attribute="Pattern" lineEndContext="#stay" name="ExprDblBracketSubRegex"> 1697 <DetectIdentifier attribute="Pattern"/> 1698 <DetectSpaces attribute="Pattern" context="#stay"/> 1699 <DetectChar attribute="Operator" context="#pop" char=")"/> 1700 <Detect2Chars attribute="Operator" context="RegexSubChar" char="[" char1="^"/> 1701 <DetectChar attribute="Operator" context="RegexSubChar" char="["/> 1702 <IncludeRules context="FindRegex"/> 1703 </context> 1704 1705 <context attribute="Pattern" lineEndContext="#stay" name="FindRegex"> 1706 <DetectChar attribute="Operator" context="ExprDblBracketSubRegex" char="("/> 1707 <DetectChar attribute="Escape" context="RegexEscape" char="\"/> 1708 <DetectChar attribute="Parameter Expansion" context="RegexDup" char="{"/> 1709 <AnyChar attribute="Glob" context="#stay" String="^?+*.|"/> 1710 <IncludeRules context="FindStrings"/> 1711 <DetectChar context="RegexDispatchVariables" char="$" lookAhead="1"/> 1712 <DetectChar attribute="Backquote" context="RegularBackq" char="`"/> 1713 </context> 1714 <context attribute="Normal Text" lineEndContext="#stay" name="RegexDispatchVariables"> 1715 <IncludeRules context="DispatchVariables"/> 1716 <DetectChar attribute="Operator" context="#pop" char="$"/> 1717 </context> 1718 1719 <context attribute="Normal Text" lineEndContext="#pop" name="RegexEscape"> 1720 <RegExpr attribute="Escape" context="#pop" String="x[0-9a-fA-F]{1,2}|[0-7]{1,3}|."/> 1721 </context> 1722 1723 <context attribute="Normal Text" lineEndContext="#pop" name="RegexDup"> 1724 <Int attribute="Decimal" additionalDeliminator="{"/> 1725 <DetectChar attribute="Parameter Expansion Operator" context="#stay" char=","/> 1726 <DetectChar attribute="Parameter Expansion" context="#pop" char="}"/> 1727 </context> 1728 1729 <context attribute="Pattern" lineEndContext="#pop" name="RegexSubChar" fallthroughContext="#pop!RegexSubInChar"> 1730 <AnyChar attribute="Pattern" context="#pop!RegexSubInChar" String="-]"/> 1731 </context> 1732 <context attribute="Pattern" lineEndContext="#pop" name="RegexSubInChar"> 1733 <DetectSpaces attribute="Pattern" context="#stay"/> 1734 <IncludeRules context="RegexInChar"/> 1735 </context> 1736 1737 <context attribute="Pattern" lineEndContext="#pop" name="RegexChar" fallthroughContext="#pop!RegexInChar"> 1738 <AnyChar attribute="Pattern" context="#pop!RegexInChar" String="-]"/> 1739 </context> 1740 <context attribute="Pattern" lineEndContext="#pop" name="RegexInChar"> 1741 <Detect2Chars context="RegexInCharEnd" char="-" char1="]" lookAhead="1"/> 1742 <DetectChar attribute="Operator" context="#stay" char="-"/> 1743 <DetectChar attribute="Escape" context="RegexEscape" char="\"/> 1744 <DetectChar context="RegexCharClassSelect" char="[" lookAhead="1"/> 1745 <DetectChar attribute="Operator" context="#pop" char="]"/> 1746 <AnyChar context="#pop" String="() &tab;" lookAhead="1"/> 1747 <IncludeRules context="FindStrings"/> 1748 </context> 1749 <context attribute="Operator" lineEndContext="#stay" name="RegexInCharEnd"> 1750 <DetectChar attribute="Pattern" context="#stay" char="-"/> 1751 <DetectChar attribute="Operator" context="#pop#pop" char="]"/> 1752 </context> 1753 <context attribute="Parameter Expansion" lineEndContext="#pop#pop#pop" name="RegexCharClassSelect"> 1754 <Detect2Chars attribute="Parameter Expansion Operator" context="#pop!RegexCharClass" char="[" char1=":"/> 1755 <Detect2Chars attribute="Parameter Expansion Operator" context="#pop!RegexCollatingSymbols" char="[" char1="."/> 1756 <Detect2Chars attribute="Parameter Expansion Operator" context="#pop!RegexEquivalenceClass" char="[" char1="="/> 1757 <DetectChar attribute="Pattern" context="#pop" char="["/> 1758 </context> 1759 1760 <context attribute="Parameter Expansion" lineEndContext="#pop#pop#pop" name="RegexCharClass"> 1761 <DetectIdentifier attribute="Parameter Expansion"/> 1762 <Detect2Chars attribute="Parameter Expansion Operator" context="#pop" char=":" char1="]"/> 1763 <DetectChar attribute="Error" context="#pop" char="]"/> 1764 </context> 1765 <context attribute="Parameter Expansion" lineEndContext="#pop#pop#pop" name="RegexCollatingSymbols"> 1766 <DetectIdentifier attribute="Parameter Expansion"/> 1767 <Detect2Chars attribute="Parameter Expansion Operator" context="#pop" char="." char1="]"/> 1768 <DetectChar attribute="Error" context="#pop" char="]"/> 1769 </context> 1770 <context attribute="Parameter Expansion" lineEndContext="#pop#pop#pop" name="RegexEquivalenceClass"> 1771 <DetectIdentifier attribute="Parameter Expansion"/> 1772 <Detect2Chars attribute="Parameter Expansion Operator" context="#pop" char="=" char1="]"/> 1773 <DetectChar attribute="Error" context="#pop" char="]"/> 1774 </context> 1775 1776 <!-- SubShell consumes shell input till ) --> 1777 <context attribute="Normal Text" lineEndContext="#stay" name="SubShell" fallthroughContext="Command"> 1778 <DetectChar attribute="Keyword" context="#pop" char=")" endRegion="subshell"/> 1779 <IncludeRules context="Start"/> 1780 </context> 1781 1782 <!-- Assign consumes an expression till EOL or whitespace --> 1783 <context attribute="Normal Text" lineEndContext="#pop" name="Assign" fallthroughContext="#pop!Assign2"> 1784 <DetectChar attribute="Variable" context="#pop!AssignArray" char="("/> 1785 </context> 1786 <context attribute="Normal Text" lineEndContext="#pop" name="Assign2" fallthroughContext="#pop"> 1787 <DetectChar attribute="Backquote" context="RegularBackq" char="`"/> 1788 <IncludeRules context="NormalOption"/> 1789 </context> 1790 1791 <!-- AssignArray consumes everything till ), marking assignments --> 1792 <context attribute="Normal Text" lineEndContext="#stay" name="AssignArray" fallthroughContext="NormalOption"> 1793 <DetectSpaces attribute="Normal Text" context="#stay"/> 1794 <DetectChar attribute="Comment" context="Comment" char="#"/> 1795 <DetectChar attribute="Variable" context="#pop!Assign2" char=")"/> 1796 <DetectChar context="AssignArrayKey" char="[" lookAhead="1"/> 1797 <DetectChar attribute="Backquote" context="AssignArrayBackq" char="`"/> 1798 <AnyChar attribute="Error" context="#stay" String="&symbolseps;"/> 1799 </context> 1800 <context attribute="Normal Text" lineEndContext="#pop" name="AssignArrayKey" fallthroughContext="#pop"> 1801 <DetectChar attribute="Parameter Expansion Operator" context="Subscript" char="["/> 1802 <DetectChar attribute="Variable" context="#pop" char="="/> 1803 </context> 1804 <context attribute="Normal Text" lineEndContext="#stay" name="AssignArrayBackq" fallthroughContext="Command"> 1805 <DetectChar attribute="Backquote" context="#pop!NormalOption" char="`"/> 1806 <DetectChar attribute="Comment" context="CommentBackq" char="#"/> 1807 <IncludeRules context="Start"/> 1808 </context> 1809 1810 <!-- Subscript consumes anything till ], marks as Variable --> 1811 <context attribute="Normal Text" lineEndContext="#stay" name="Subscript" fallthroughContext="#pop!Subscript2"> 1812 <DetectChar attribute="Parameter Expansion Operator" context="#pop" char="]"/> 1813 <AnyChar attribute="Decimal" context="#stay" String="0123456789"/> 1814 </context> 1815 <context attribute="Normal Text" lineEndContext="#stay" name="Subscript2"> 1816 <DetectIdentifier attribute="Normal Text"/> 1817 <DetectChar attribute="Parameter Expansion Operator" context="#pop" char="]"/> 1818 <IncludeRules context="FindWord"/> 1819 <IncludeRules context="FindPattern"/> 1820 </context> 1821 1822 <!-- FunctionDef consumes a name, possibly with (), marks as Function --> 1823 <context attribute="Function" lineEndContext="#pop" name="FunctionDef" fallthroughContext="#pop"> 1824 <RegExpr attribute="Function" context="#pop" String="[ &tab;]+&funcname;(?:[ &tab;]*\(\))?"/> 1825 </context> 1826 1827 <!-- Case is called after the case keyword is encoutered. We handle this because of 1828 the lonely closing parentheses that would otherwise disturb the expr matching --> 1829 <context attribute="Normal Text" lineEndContext="#stay" name="Case"> 1830 <DetectSpaces attribute="Normal Text" context="#stay"/> 1831 <WordDetect attribute="Keyword" context="#pop!CaseIn" String="in"/> 1832 <IncludeRules context="FindWord"/> 1833 <DetectIdentifier attribute="Normal Text" context="#stay"/> 1834 </context> 1835 1836 <!-- CaseIn is called when the construct 'case ... in' has been found. --> 1837 <context attribute="Normal Text" lineEndContext="#stay" name="CaseIn" fallthroughContext="CasePattern"> 1838 <DetectSpaces attribute="Normal Text" context="#stay"/> 1839 <DetectChar attribute="Keyword" context="CasePattern" char="("/> 1840 <DetectChar attribute="Comment" context="Comment" char="#"/> 1841 </context> 1842 <context attribute="Pattern" lineEndContext="#stay" name="CasePattern"> 1843 <DetectSpaces attribute="Normal Text" context="#stay"/> 1844 <DetectChar attribute="Keyword" context="#pop!CaseExpr" char=")" beginRegion="caseexpr"/> 1845 <DetectChar context="AssumeEscape" char="\" lookAhead="1"/> 1846 <DetectChar attribute="Keyword" context="#stay" char="|"/> 1847 <IncludeRules context="FindWord"/> 1848 <IncludeRules context="FindPattern"/> 1849 <WordDetect attribute="Control Flow" context="#pop#pop" String="esac" endRegion="case"/> 1850 <DetectIdentifier attribute="Pattern" context="#stay"/> 1851 </context> 1852 1853 <!-- CaseExpr eats shell input till ;; / ;& / ;;& --> 1854 <context attribute="Normal Text" lineEndContext="#stay" name="CaseExpr" fallthroughContext="Command"> 1855 <StringDetect attribute="Control Flow" context="#pop" String=";;&" endRegion="caseexpr"/> 1856 <Detect2Chars attribute="Control Flow" context="#pop" char=";" char1=";" endRegion="caseexpr"/> 1857 <Detect2Chars attribute="Control Flow" context="#pop" char=";" char1="&" endRegion="caseexpr"/> 1858 <WordDetect context="#pop" String="esac" endRegion="caseexpr" lookAhead="1"/> 1859 <IncludeRules context="Start"/> 1860 </context> 1861 1862 </contexts> 1863 1864 <itemDatas> 1865 <itemData name="Normal Text" defStyleNum="dsNormal"/> 1866 <itemData name="Comment" defStyleNum="dsComment"/> 1867 <itemData name="Keyword" defStyleNum="dsKeyword" spellChecking="false"/> 1868 <itemData name="Control" defStyleNum="dsKeyword" spellChecking="false"/> 1869 <itemData name="Control Flow" defStyleNum="dsControlFlow" spellChecking="false"/> 1870 <itemData name="Builtin" defStyleNum="dsBuiltIn" spellChecking="false"/> 1871 <itemData name="Command" defStyleNum="dsFunction" spellChecking="false"/> 1872 <itemData name="OtherCommand" defStyleNum="dsExtension" spellChecking="false"/> 1873 <itemData name="Redirection" defStyleNum="dsOperator" spellChecking="false"/> 1874 <itemData name="Escape" defStyleNum="dsDataType" spellChecking="false"/> 1875 <itemData name="String SingleQ" defStyleNum="dsString"/> 1876 <itemData name="String DoubleQ" defStyleNum="dsString"/> 1877 <itemData name="Here Doc" defStyleNum="dsString"/> 1878 <itemData name="Backquote" defStyleNum="dsKeyword" spellChecking="false"/> 1879 <itemData name="String Transl." defStyleNum="dsString"/> 1880 <itemData name="String Escape" defStyleNum="dsDataType"/> 1881 <itemData name="Variable" defStyleNum="dsVariable" spellChecking="false"/> 1882 <itemData name="Dollar Prefix" defStyleNum="dsVariable" spellChecking="false"/> 1883 <itemData name="Expression" defStyleNum="dsOthers" spellChecking="false"/> 1884 <itemData name="Function" defStyleNum="dsFunction" spellChecking="false"/> 1885 <itemData name="Pattern" defStyleNum="dsSpecialString" spellChecking="false"/> 1886 <itemData name="Path" defStyleNum="dsNormal" spellChecking="false"/> 1887 <itemData name="Glob" defStyleNum="dsPreprocessor" spellChecking="false"/> 1888 <itemData name="Option" defStyleNum="dsAttribute" spellChecking="false"/> 1889 <itemData name="Hex" defStyleNum="dsBaseN" spellChecking="false"/> 1890 <itemData name="Octal" defStyleNum="dsBaseN" spellChecking="false"/> 1891 <itemData name="Decimal" defStyleNum="dsDecVal" spellChecking="false"/> 1892 <itemData name="Base" defStyleNum="dsDataType" spellChecking="false"/> 1893 <itemData name="BaseN" defStyleNum="dsBaseN" spellChecking="false"/> 1894 <itemData name="File Descriptor" defStyleNum="dsDecVal" spellChecking="false"/> 1895 <itemData name="Parameter Expansion" defStyleNum="dsVariable" spellChecking="false"/> 1896 <itemData name="Parameter Expansion Operator" defStyleNum="dsOperator" spellChecking="false"/> 1897 <itemData name="Operator" defStyleNum="dsOperator" spellChecking="false"/> 1898 <itemData name="Error" defStyleNum="dsError" spellChecking="false"/> 1899 <itemData name="Region Marker" defStyleNum="dsRegionMarker" spellChecking="false" /> 1900 </itemDatas> 1901 </highlighting> 1902 <general> 1903 <comments> 1904 <comment name="singleLine" start="#"/> 1905 </comments> 1906 <keywords casesensitive="1" weakDeliminator="_&weakDeliminatorSymbols;" additionalDeliminator="`"/> 1907 </general> 1908 </language>