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