bash.xml

  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    <analyse first="true" >
 30      <regex pattern="(?m)^#!.*/bin/(?:env |)(?:bash|zsh|sh|ksh)" score="1.0" />
 31    </analyse>
 32  </config>
 33  <rules>
 34    <state name="data">
 35      <rule pattern="(?s)\$?&#34;(\\\\|\\[0-7]+|\\.|[^&#34;\\$])*&#34;">
 36        <token type="LiteralStringDouble"/>
 37      </rule>
 38      <rule pattern="&#34;">
 39        <token type="LiteralStringDouble"/>
 40        <push state="string"/>
 41      </rule>
 42      <rule pattern="(?s)\$&#39;(\\\\|\\[0-7]+|\\.|[^&#39;\\])*&#39;">
 43        <token type="LiteralStringSingle"/>
 44      </rule>
 45      <rule pattern="(?s)&#39;.*?&#39;">
 46        <token type="LiteralStringSingle"/>
 47      </rule>
 48      <rule pattern=";">
 49        <token type="Punctuation"/>
 50      </rule>
 51      <rule pattern="&amp;">
 52        <token type="Punctuation"/>
 53      </rule>
 54      <rule pattern="\|">
 55        <token type="Punctuation"/>
 56      </rule>
 57      <rule pattern="\s+">
 58        <token type="Text"/>
 59      </rule>
 60      <rule pattern="\d+(?= |$)">
 61        <token type="LiteralNumber"/>
 62      </rule>
 63      <rule pattern="[^=\s\[\]{}()$&#34;\&#39;`\\&lt;&amp;|;]+">
 64        <token type="Text"/>
 65      </rule>
 66      <rule pattern="&lt;">
 67        <token type="Text"/>
 68      </rule>
 69    </state>
 70    <state name="string">
 71      <rule pattern="&#34;">
 72        <token type="LiteralStringDouble"/>
 73        <pop depth="1"/>
 74      </rule>
 75      <rule pattern="(?s)(\\\\|\\[0-7]+|\\.|[^&#34;\\$])+">
 76        <token type="LiteralStringDouble"/>
 77      </rule>
 78      <rule>
 79        <include state="interp"/>
 80      </rule>
 81    </state>
 82    <state name="interp">
 83      <rule pattern="\$\(\(">
 84        <token type="Keyword"/>
 85        <push state="math"/>
 86      </rule>
 87      <rule pattern="\$\(">
 88        <token type="Keyword"/>
 89        <push state="paren"/>
 90      </rule>
 91      <rule pattern="\$\{#?">
 92        <token type="LiteralStringInterpol"/>
 93        <push state="curly"/>
 94      </rule>
 95      <rule pattern="\$[a-zA-Z_]\w*">
 96        <token type="NameVariable"/>
 97      </rule>
 98      <rule pattern="\$(?:\d+|[#$?!_*@-])">
 99        <token type="NameVariable"/>
100      </rule>
101      <rule pattern="\$">
102        <token type="Text"/>
103      </rule>
104    </state>
105    <state name="paren">
106      <rule pattern="\)">
107        <token type="Keyword"/>
108        <pop depth="1"/>
109      </rule>
110      <rule>
111        <include state="root"/>
112      </rule>
113    </state>
114    <state name="math">
115      <rule pattern="\)\)">
116        <token type="Keyword"/>
117        <pop depth="1"/>
118      </rule>
119      <rule pattern="[-+*/%^|&amp;]|\*\*|\|\|">
120        <token type="Operator"/>
121      </rule>
122      <rule pattern="\d+#\d+">
123        <token type="LiteralNumber"/>
124      </rule>
125      <rule pattern="\d+#(?! )">
126        <token type="LiteralNumber"/>
127      </rule>
128      <rule pattern="\d+">
129        <token type="LiteralNumber"/>
130      </rule>
131      <rule>
132        <include state="root"/>
133      </rule>
134    </state>
135    <state name="backticks">
136      <rule pattern="`">
137        <token type="LiteralStringBacktick"/>
138        <pop depth="1"/>
139      </rule>
140      <rule>
141        <include state="root"/>
142      </rule>
143    </state>
144    <state name="root">
145      <rule>
146        <include state="basic"/>
147      </rule>
148      <rule pattern="`">
149        <token type="LiteralStringBacktick"/>
150        <push state="backticks"/>
151      </rule>
152      <rule>
153        <include state="data"/>
154      </rule>
155      <rule>
156        <include state="interp"/>
157      </rule>
158    </state>
159    <state name="basic">
160      <rule pattern="\b(if|fi|else|while|do|done|for|then|return|function|case|select|continue|until|esac|elif)(\s*)\b">
161        <bygroups>
162          <token type="Keyword"/>
163          <token type="Text"/>
164        </bygroups>
165      </rule>
166      <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)`])">
167        <token type="NameBuiltin"/>
168      </rule>
169      <rule pattern="\A#!.+\n">
170        <token type="CommentPreproc"/>
171      </rule>
172      <rule pattern="#.*(\S|$)">
173        <token type="CommentSingle"/>
174      </rule>
175      <rule pattern="\\[\w\W]">
176        <token type="LiteralStringEscape"/>
177      </rule>
178      <rule pattern="(\b\w+)(\s*)(\+?=)">
179        <bygroups>
180          <token type="NameVariable"/>
181          <token type="Text"/>
182          <token type="Operator"/>
183        </bygroups>
184      </rule>
185      <rule pattern="[\[\]{}()=]">
186        <token type="Operator"/>
187      </rule>
188      <rule pattern="&lt;&lt;&lt;">
189        <token type="Operator"/>
190      </rule>
191      <rule pattern="&lt;&lt;-?\s*(\&#39;?)\\?(\w+)[\w\W]+?\2">
192        <token type="LiteralString"/>
193      </rule>
194      <rule pattern="&amp;&amp;|\|\|">
195        <token type="Operator"/>
196      </rule>
197    </state>
198    <state name="curly">
199      <rule pattern="\}">
200        <token type="LiteralStringInterpol"/>
201        <pop depth="1"/>
202      </rule>
203      <rule pattern=":-">
204        <token type="Keyword"/>
205      </rule>
206      <rule pattern="\w+">
207        <token type="NameVariable"/>
208      </rule>
209      <rule pattern="[^}:&#34;\&#39;`$\\]+">
210        <token type="Punctuation"/>
211      </rule>
212      <rule pattern=":">
213        <token type="Punctuation"/>
214      </rule>
215      <rule>
216        <include state="root"/>
217      </rule>
218    </state>
219  </rules>
220</lexer>