1<lexer>
  2  <config>
  3    <name>Bash</name>
  4    <alias>bash</alias>
  5    <alias>sh</alias>
  6    <alias>ksh</alias>
  7    <alias>zsh</alias>
  8    <alias>shell</alias>
  9    <filename>*.sh</filename>
 10    <filename>*.ksh</filename>
 11    <filename>*.bash</filename>
 12    <filename>*.ebuild</filename>
 13    <filename>*.eclass</filename>
 14    <filename>.env</filename>
 15    <filename>*.env</filename>
 16    <filename>*.exheres-0</filename>
 17    <filename>*.exlib</filename>
 18    <filename>*.zsh</filename>
 19    <filename>*.zshrc</filename>
 20    <filename>.bashrc</filename>
 21    <filename>bashrc</filename>
 22    <filename>.bash_*</filename>
 23    <filename>bash_*</filename>
 24    <filename>zshrc</filename>
 25    <filename>.zshrc</filename>
 26    <filename>PKGBUILD</filename>
 27    <mime_type>application/x-sh</mime_type>
 28    <mime_type>application/x-shellscript</mime_type>
 29  </config>
 30  <rules>
 31    <state name="data">
 32      <rule pattern="(?s)\$?&#34;(\\\\|\\[0-7]+|\\.|[^&#34;\\$])*&#34;">
 33        <token type="LiteralStringDouble"/>
 34      </rule>
 35      <rule pattern="&#34;">
 36        <token type="LiteralStringDouble"/>
 37        <push state="string"/>
 38      </rule>
 39      <rule pattern="(?s)\$&#39;(\\\\|\\[0-7]+|\\.|[^&#39;\\])*&#39;">
 40        <token type="LiteralStringSingle"/>
 41      </rule>
 42      <rule pattern="(?s)&#39;.*?&#39;">
 43        <token type="LiteralStringSingle"/>
 44      </rule>
 45      <rule pattern=";">
 46        <token type="Punctuation"/>
 47      </rule>
 48      <rule pattern="&amp;">
 49        <token type="Punctuation"/>
 50      </rule>
 51      <rule pattern="\|">
 52        <token type="Punctuation"/>
 53      </rule>
 54      <rule pattern="\s+">
 55        <token type="Text"/>
 56      </rule>
 57      <rule pattern="\d+(?= |$)">
 58        <token type="LiteralNumber"/>
 59      </rule>
 60      <rule pattern="[^=\s\[\]{}()$&#34;\&#39;`\\&lt;&amp;|;]+">
 61        <token type="Text"/>
 62      </rule>
 63      <rule pattern="&lt;">
 64        <token type="Text"/>
 65      </rule>
 66    </state>
 67    <state name="string">
 68      <rule pattern="&#34;">
 69        <token type="LiteralStringDouble"/>
 70        <pop depth="1"/>
 71      </rule>
 72      <rule pattern="(?s)(\\\\|\\[0-7]+|\\.|[^&#34;\\$])+">
 73        <token type="LiteralStringDouble"/>
 74      </rule>
 75      <rule>
 76        <include state="interp"/>
 77      </rule>
 78    </state>
 79    <state name="interp">
 80      <rule pattern="\$\(\(">
 81        <token type="Keyword"/>
 82        <push state="math"/>
 83      </rule>
 84      <rule pattern="\$\(">
 85        <token type="Keyword"/>
 86        <push state="paren"/>
 87      </rule>
 88      <rule pattern="\$\{#?">
 89        <token type="LiteralStringInterpol"/>
 90        <push state="curly"/>
 91      </rule>
 92      <rule pattern="\$[a-zA-Z_]\w*">
 93        <token type="NameVariable"/>
 94      </rule>
 95      <rule pattern="\$(?:\d+|[#$?!_*@-])">
 96        <token type="NameVariable"/>
 97      </rule>
 98      <rule pattern="\$">
 99        <token type="Text"/>
100      </rule>
101    </state>
102    <state name="paren">
103      <rule pattern="\)">
104        <token type="Keyword"/>
105        <pop depth="1"/>
106      </rule>
107      <rule>
108        <include state="root"/>
109      </rule>
110    </state>
111    <state name="math">
112      <rule pattern="\)\)">
113        <token type="Keyword"/>
114        <pop depth="1"/>
115      </rule>
116      <rule pattern="[-+*/%^|&amp;]|\*\*|\|\|">
117        <token type="Operator"/>
118      </rule>
119      <rule pattern="\d+#\d+">
120        <token type="LiteralNumber"/>
121      </rule>
122      <rule pattern="\d+#(?! )">
123        <token type="LiteralNumber"/>
124      </rule>
125      <rule pattern="\d+">
126        <token type="LiteralNumber"/>
127      </rule>
128      <rule>
129        <include state="root"/>
130      </rule>
131    </state>
132    <state name="backticks">
133      <rule pattern="`">
134        <token type="LiteralStringBacktick"/>
135        <pop depth="1"/>
136      </rule>
137      <rule>
138        <include state="root"/>
139      </rule>
140    </state>
141    <state name="root">
142      <rule>
143        <include state="basic"/>
144      </rule>
145      <rule pattern="`">
146        <token type="LiteralStringBacktick"/>
147        <push state="backticks"/>
148      </rule>
149      <rule>
150        <include state="data"/>
151      </rule>
152      <rule>
153        <include state="interp"/>
154      </rule>
155    </state>
156    <state name="basic">
157      <rule pattern="\b(if|fi|else|while|do|done|for|then|return|function|case|select|continue|until|esac|elif)(\s*)\b">
158        <bygroups>
159          <token type="Keyword"/>
160          <token type="Text"/>
161        </bygroups>
162      </rule>
163      <rule pattern="\b(alias|bg|bind|break|builtin|caller|cd|command|compgen|complete|declare|dirs|disown|echo|enable|eval|exec|exit|export|false|fc|fg|getopts|hash|help|history|jobs|kill|let|local|logout|popd|printf|pushd|pwd|read|readonly|set|shift|shopt|source|suspend|test|time|times|trap|true|type|typeset|ulimit|umask|unalias|unset|wait)(?=[\s)`])">
164        <token type="NameBuiltin"/>
165      </rule>
166      <rule pattern="\A#!.+\n">
167        <token type="CommentPreproc"/>
168      </rule>
169      <rule pattern="#.*(\S|$)">
170        <token type="CommentSingle"/>
171      </rule>
172      <rule pattern="\\[\w\W]">
173        <token type="LiteralStringEscape"/>
174      </rule>
175      <rule pattern="(\b\w+)(\s*)(\+?=)">
176        <bygroups>
177          <token type="NameVariable"/>
178          <token type="Text"/>
179          <token type="Operator"/>
180        </bygroups>
181      </rule>
182      <rule pattern="[\[\]{}()=]">
183        <token type="Operator"/>
184      </rule>
185      <rule pattern="&lt;&lt;&lt;">
186        <token type="Operator"/>
187      </rule>
188      <rule pattern="&lt;&lt;-?\s*(\&#39;?)\\?(\w+)[\w\W]+?\2">
189        <token type="LiteralString"/>
190      </rule>
191      <rule pattern="&amp;&amp;|\|\|">
192        <token type="Operator"/>
193      </rule>
194    </state>
195    <state name="curly">
196      <rule pattern="\}">
197        <token type="LiteralStringInterpol"/>
198        <pop depth="1"/>
199      </rule>
200      <rule pattern=":-">
201        <token type="Keyword"/>
202      </rule>
203      <rule pattern="\w+">
204        <token type="NameVariable"/>
205      </rule>
206      <rule pattern="[^}:&#34;\&#39;`$\\]+">
207        <token type="Punctuation"/>
208      </rule>
209      <rule pattern=":">
210        <token type="Punctuation"/>
211      </rule>
212      <rule>
213        <include state="root"/>
214      </rule>
215    </state>
216  </rules>
217</lexer>