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)\$?"(\\\\|\\[0-7]+|\\.|[^"\\$])*"">
36 <token type="LiteralStringDouble"/>
37 </rule>
38 <rule pattern=""">
39 <token type="LiteralStringDouble"/>
40 <push state="string"/>
41 </rule>
42 <rule pattern="(?s)\$'(\\\\|\\[0-7]+|\\.|[^'\\])*'">
43 <token type="LiteralStringSingle"/>
44 </rule>
45 <rule pattern="(?s)'.*?'">
46 <token type="LiteralStringSingle"/>
47 </rule>
48 <rule pattern=";">
49 <token type="Punctuation"/>
50 </rule>
51 <rule pattern="&">
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\[\]{}()$"\'`\\<&|;]+">
64 <token type="Text"/>
65 </rule>
66 <rule pattern="<">
67 <token type="Text"/>
68 </rule>
69 </state>
70 <state name="string">
71 <rule pattern=""">
72 <token type="LiteralStringDouble"/>
73 <pop depth="1"/>
74 </rule>
75 <rule pattern="(?s)(\\\\|\\[0-7]+|\\.|[^"\\$])+">
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="[-+*/%^|&]|\*\*|\|\|">
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="<<<">
189 <token type="Operator"/>
190 </rule>
191 <rule pattern="<<-?\s*(\'?)\\?(\w+)[\w\W]+?\2">
192 <token type="LiteralString"/>
193 </rule>
194 <rule pattern="&&|\|\|">
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="[^}:"\'`$\\]+">
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>