perl.xml

  1<lexer>
  2  <config>
  3    <name>Perl</name>
  4    <alias>perl</alias>
  5    <alias>pl</alias>
  6    <filename>*.pl</filename>
  7    <filename>*.pm</filename>
  8    <filename>*.t</filename>
  9    <mime_type>text/x-perl</mime_type>
 10    <mime_type>application/x-perl</mime_type>
 11    <dot_all>true</dot_all>
 12  </config>
 13  <rules>
 14    <state name="root">
 15      <rule pattern="\A\#!.+?$">
 16        <token type="CommentHashbang"/>
 17      </rule>
 18      <rule pattern="\#.*?$">
 19        <token type="CommentSingle"/>
 20      </rule>
 21      <rule pattern="^=[a-zA-Z0-9]+\s+.*?\n=cut">
 22        <token type="CommentMultiline"/>
 23      </rule>
 24      <rule pattern="(continue|foreach|unless|return|elsif|CHECK|while|BEGIN|reset|print|until|next|else|INIT|then|last|redo|case|our|new|for|END|if|do|my)\b">
 25        <token type="Keyword"/>
 26      </rule>
 27      <rule pattern="(format)(\s+)(\w+)(\s*)(=)(\s*\n)">
 28        <bygroups>
 29          <token type="Keyword"/>
 30          <token type="Text"/>
 31          <token type="Name"/>
 32          <token type="Text"/>
 33          <token type="Punctuation"/>
 34          <token type="Text"/>
 35        </bygroups>
 36        <push state="format"/>
 37      </rule>
 38      <rule pattern="(eq|lt|gt|le|ge|ne|not|and|or|cmp)\b">
 39        <token type="OperatorWord"/>
 40      </rule>
 41      <rule pattern="s/(\\\\|\\[^\\]|[^\\/])*/(\\\\|\\[^\\]|[^\\/])*/[egimosx]*">
 42        <token type="LiteralStringRegex"/>
 43      </rule>
 44      <rule pattern="s!(\\\\|\\!|[^!])*!(\\\\|\\!|[^!])*![egimosx]*">
 45        <token type="LiteralStringRegex"/>
 46      </rule>
 47      <rule pattern="s\\(\\\\|[^\\])*\\(\\\\|[^\\])*\\[egimosx]*">
 48        <token type="LiteralStringRegex"/>
 49      </rule>
 50      <rule pattern="s@(\\\\|\\[^\\]|[^\\@])*@(\\\\|\\[^\\]|[^\\@])*@[egimosx]*">
 51        <token type="LiteralStringRegex"/>
 52      </rule>
 53      <rule pattern="s%(\\\\|\\[^\\]|[^\\%])*%(\\\\|\\[^\\]|[^\\%])*%[egimosx]*">
 54        <token type="LiteralStringRegex"/>
 55      </rule>
 56      <rule pattern="s\{(\\\\|\\[^\\]|[^\\}])*\}\s*">
 57        <token type="LiteralStringRegex"/>
 58        <push state="balanced-regex"/>
 59      </rule>
 60      <rule pattern="s&lt;(\\\\|\\[^\\]|[^\\&gt;])*&gt;\s*">
 61        <token type="LiteralStringRegex"/>
 62        <push state="balanced-regex"/>
 63      </rule>
 64      <rule pattern="s\[(\\\\|\\[^\\]|[^\\\]])*\]\s*">
 65        <token type="LiteralStringRegex"/>
 66        <push state="balanced-regex"/>
 67      </rule>
 68      <rule pattern="s\((\\\\|\\[^\\]|[^\\)])*\)\s*">
 69        <token type="LiteralStringRegex"/>
 70        <push state="balanced-regex"/>
 71      </rule>
 72      <rule pattern="m?/(\\\\|\\[^\\]|[^\\/\n])*/[gcimosx]*">
 73        <token type="LiteralStringRegex"/>
 74      </rule>
 75      <rule pattern="m(?=[/!\\{&lt;\[(@%$])">
 76        <token type="LiteralStringRegex"/>
 77        <push state="balanced-regex"/>
 78      </rule>
 79      <rule pattern="((?&lt;==~)|(?&lt;=\())\s*/(\\\\|\\[^\\]|[^\\/])*/[gcimosx]*">
 80        <token type="LiteralStringRegex"/>
 81      </rule>
 82      <rule pattern="\s+">
 83        <token type="Text"/>
 84      </rule>
 85      <rule pattern="(getprotobynumber|getprotobyname|getservbyport|getservbyname|gethostbyname|gethostbyaddr|getnetbyaddr|getnetbyname|setprotoent|setpriority|getsockname|getprotoent|getpriority|getpeername|endprotoent|setsockopt|endhostent|setservent|socketpair|getsockopt|endservent|sethostent|getservent|gethostent|getnetent|wantarray|localtime|quotemeta|setnetent|prototype|endnetent|rewinddir|endpwent|endgrent|getpwent|getpwnam|getgrgid|dbmclose|continue|closedir|shutdown|setpwent|shmwrite|syswrite|truncate|formline|setgrent|getgrent|readpipe|getgrnam|readlink|readline|getpwuid|getlogin|telldir|opendir|shmread|readdir|getpgrp|getppid|waitpid|binmode|reverse|sprintf|unshift|symlink|seekdir|sysopen|defined|dbmopen|sysread|sysseek|connect|lcfirst|ucfirst|setpgrp|syscall|import|chroot|system|gmtime|unlink|unpack|semget|semctl|select|msgrcv|length|printf|listen|scalar|caller|rindex|substr|splice|rename|msgctl|msgget|delete|msgsnd|exists|values|socket|fileno|format|accept|shmget|shmctl|ioctl|alarm|atan2|utime|untie|bless|chdir|chmod|undef|umask|chomp|times|close|crypt|srand|split|mkdir|sleep|lstat|study|rmdir|local|fcntl|flock|write|shift|index|semop|chown|tell|join|send|warn|kill|wait|grep|glob|bind|last|pack|getc|fork|link|seek|push|rand|read|exit|sort|exec|open|eval|sqrt|redo|stat|chop|next|each|dump|time|recv|tied|goto|keys|pipe|map|tie|cos|die|eof|pop|sin|pos|oct|ref|exp|int|ord|log|our|hex|abs|vec|chr|uc|tr|my|lc)\b">
 86        <token type="NameBuiltin"/>
 87      </rule>
 88      <rule pattern="((__(DATA|DIE|WARN)__)|(STD(IN|OUT|ERR)))\b">
 89        <token type="NameBuiltinPseudo"/>
 90      </rule>
 91      <rule pattern="(&lt;&lt;)([\&#39;&#34;]?)([a-zA-Z_]\w*)(\2;?\n.*?\n)(\3)(\n)">
 92        <bygroups>
 93          <token type="LiteralString"/>
 94          <token type="LiteralString"/>
 95          <token type="LiteralStringDelimiter"/>
 96          <token type="LiteralString"/>
 97          <token type="LiteralStringDelimiter"/>
 98          <token type="Text"/>
 99        </bygroups>
100      </rule>
101      <rule pattern="__END__">
102        <token type="CommentPreproc"/>
103        <push state="end-part"/>
104      </rule>
105      <rule pattern="\$\^[ADEFHILMOPSTWX]">
106        <token type="NameVariableGlobal"/>
107      </rule>
108      <rule pattern="\$[\\\&#34;\[\]&#39;&amp;`+*.,;=%~?@$!&lt;&gt;(^|/-](?!\w)">
109        <token type="NameVariableGlobal"/>
110      </rule>
111      <rule pattern="[$@%#]+">
112        <token type="NameVariable"/>
113        <push state="varname"/>
114      </rule>
115      <rule pattern="0_?[0-7]+(_[0-7]+)*">
116        <token type="LiteralNumberOct"/>
117      </rule>
118      <rule pattern="0x[0-9A-Fa-f]+(_[0-9A-Fa-f]+)*">
119        <token type="LiteralNumberHex"/>
120      </rule>
121      <rule pattern="0b[01]+(_[01]+)*">
122        <token type="LiteralNumberBin"/>
123      </rule>
124      <rule pattern="(?i)(\d*(_\d*)*\.\d+(_\d*)*|\d+(_\d*)*\.\d+(_\d*)*)(e[+-]?\d+)?">
125        <token type="LiteralNumberFloat"/>
126      </rule>
127      <rule pattern="(?i)\d+(_\d*)*e[+-]?\d+(_\d*)*">
128        <token type="LiteralNumberFloat"/>
129      </rule>
130      <rule pattern="\d+(_\d+)*">
131        <token type="LiteralNumberInteger"/>
132      </rule>
133      <rule pattern="&#39;(\\\\|\\[^\\]|[^&#39;\\])*&#39;">
134        <token type="LiteralString"/>
135      </rule>
136      <rule pattern="&#34;(\\\\|\\[^\\]|[^&#34;\\])*&#34;">
137        <token type="LiteralString"/>
138      </rule>
139      <rule pattern="`(\\\\|\\[^\\]|[^`\\])*`">
140        <token type="LiteralStringBacktick"/>
141      </rule>
142      <rule pattern="&lt;([^\s&gt;]+)&gt;">
143        <token type="LiteralStringRegex"/>
144      </rule>
145      <rule pattern="(q|qq|qw|qr|qx)\{">
146        <token type="LiteralStringOther"/>
147        <push state="cb-string"/>
148      </rule>
149      <rule pattern="(q|qq|qw|qr|qx)\(">
150        <token type="LiteralStringOther"/>
151        <push state="rb-string"/>
152      </rule>
153      <rule pattern="(q|qq|qw|qr|qx)\[">
154        <token type="LiteralStringOther"/>
155        <push state="sb-string"/>
156      </rule>
157      <rule pattern="(q|qq|qw|qr|qx)\&lt;">
158        <token type="LiteralStringOther"/>
159        <push state="lt-string"/>
160      </rule>
161      <rule pattern="(q|qq|qw|qr|qx)([\W_])(.|\n)*?\2">
162        <token type="LiteralStringOther"/>
163      </rule>
164      <rule pattern="(package)(\s+)([a-zA-Z_]\w*(?:::[a-zA-Z_]\w*)*)">
165        <bygroups>
166          <token type="Keyword"/>
167          <token type="Text"/>
168          <token type="NameNamespace"/>
169        </bygroups>
170      </rule>
171      <rule pattern="(use|require|no)(\s+)([a-zA-Z_]\w*(?:::[a-zA-Z_]\w*)*)">
172        <bygroups>
173          <token type="Keyword"/>
174          <token type="Text"/>
175          <token type="NameNamespace"/>
176        </bygroups>
177      </rule>
178      <rule pattern="(sub)(\s+)">
179        <bygroups>
180          <token type="Keyword"/>
181          <token type="Text"/>
182        </bygroups>
183        <push state="funcname"/>
184      </rule>
185      <rule pattern="(package|require|use|no)\b">
186        <token type="Keyword"/>
187      </rule>
188      <rule pattern="(\[\]|\*\*|::|&lt;&lt;|&gt;&gt;|&gt;=|&lt;=&gt;|&lt;=|={3}|!=|=~|!~|&amp;&amp;?|\|\||\.{1,3})">
189        <token type="Operator"/>
190      </rule>
191      <rule pattern="[-+/*%=&lt;&gt;&amp;^|!\\~]=?">
192        <token type="Operator"/>
193      </rule>
194      <rule pattern="[()\[\]:;,&lt;&gt;/?{}]">
195        <token type="Punctuation"/>
196      </rule>
197      <rule pattern="(?=\w)">
198        <token type="Name"/>
199        <push state="name"/>
200      </rule>
201    </state>
202    <state name="cb-string">
203      <rule pattern="\\[{}\\]">
204        <token type="LiteralStringOther"/>
205      </rule>
206      <rule pattern="\\">
207        <token type="LiteralStringOther"/>
208      </rule>
209      <rule pattern="\{">
210        <token type="LiteralStringOther"/>
211        <push state="cb-string"/>
212      </rule>
213      <rule pattern="\}">
214        <token type="LiteralStringOther"/>
215        <pop depth="1"/>
216      </rule>
217      <rule pattern="[^{}\\]+">
218        <token type="LiteralStringOther"/>
219      </rule>
220    </state>
221    <state name="balanced-regex">
222      <rule pattern="/(\\\\|\\[^\\]|[^\\/])*/[egimosx]*">
223        <token type="LiteralStringRegex"/>
224        <pop depth="1"/>
225      </rule>
226      <rule pattern="!(\\\\|\\[^\\]|[^\\!])*![egimosx]*">
227        <token type="LiteralStringRegex"/>
228        <pop depth="1"/>
229      </rule>
230      <rule pattern="\\(\\\\|[^\\])*\\[egimosx]*">
231        <token type="LiteralStringRegex"/>
232        <pop depth="1"/>
233      </rule>
234      <rule pattern="\{(\\\\|\\[^\\]|[^\\}])*\}[egimosx]*">
235        <token type="LiteralStringRegex"/>
236        <pop depth="1"/>
237      </rule>
238      <rule pattern="&lt;(\\\\|\\[^\\]|[^\\&gt;])*&gt;[egimosx]*">
239        <token type="LiteralStringRegex"/>
240        <pop depth="1"/>
241      </rule>
242      <rule pattern="\[(\\\\|\\[^\\]|[^\\\]])*\][egimosx]*">
243        <token type="LiteralStringRegex"/>
244        <pop depth="1"/>
245      </rule>
246      <rule pattern="\((\\\\|\\[^\\]|[^\\)])*\)[egimosx]*">
247        <token type="LiteralStringRegex"/>
248        <pop depth="1"/>
249      </rule>
250      <rule pattern="@(\\\\|\\[^\\]|[^\\@])*@[egimosx]*">
251        <token type="LiteralStringRegex"/>
252        <pop depth="1"/>
253      </rule>
254      <rule pattern="%(\\\\|\\[^\\]|[^\\%])*%[egimosx]*">
255        <token type="LiteralStringRegex"/>
256        <pop depth="1"/>
257      </rule>
258      <rule pattern="\$(\\\\|\\[^\\]|[^\\$])*\$[egimosx]*">
259        <token type="LiteralStringRegex"/>
260        <pop depth="1"/>
261      </rule>
262    </state>
263    <state name="lt-string">
264      <rule pattern="\\[&lt;&gt;\\]">
265        <token type="LiteralStringOther"/>
266      </rule>
267      <rule pattern="\\">
268        <token type="LiteralStringOther"/>
269      </rule>
270      <rule pattern="\&lt;">
271        <token type="LiteralStringOther"/>
272        <push state="lt-string"/>
273      </rule>
274      <rule pattern="\&gt;">
275        <token type="LiteralStringOther"/>
276        <pop depth="1"/>
277      </rule>
278      <rule pattern="[^&lt;&gt;]+">
279        <token type="LiteralStringOther"/>
280      </rule>
281    </state>
282    <state name="format">
283      <rule pattern="\.\n">
284        <token type="LiteralStringInterpol"/>
285        <pop depth="1"/>
286      </rule>
287      <rule pattern="[^\n]*\n">
288        <token type="LiteralStringInterpol"/>
289      </rule>
290    </state>
291    <state name="funcname">
292      <rule pattern="[a-zA-Z_]\w*[!?]?">
293        <token type="NameFunction"/>
294      </rule>
295      <rule pattern="\s+">
296        <token type="Text"/>
297      </rule>
298      <rule pattern="(\([$@%]*\))(\s*)">
299        <bygroups>
300          <token type="Punctuation"/>
301          <token type="Text"/>
302        </bygroups>
303      </rule>
304      <rule pattern=";">
305        <token type="Punctuation"/>
306        <pop depth="1"/>
307      </rule>
308      <rule pattern=".*?\{">
309        <token type="Punctuation"/>
310        <pop depth="1"/>
311      </rule>
312    </state>
313    <state name="end-part">
314      <rule pattern=".+">
315        <token type="CommentPreproc"/>
316        <pop depth="1"/>
317      </rule>
318    </state>
319    <state name="varname">
320      <rule pattern="\s+">
321        <token type="Text"/>
322      </rule>
323      <rule pattern="\{">
324        <token type="Punctuation"/>
325        <pop depth="1"/>
326      </rule>
327      <rule pattern="\)|,">
328        <token type="Punctuation"/>
329        <pop depth="1"/>
330      </rule>
331      <rule pattern="\w+::">
332        <token type="NameNamespace"/>
333      </rule>
334      <rule pattern="[\w:]+">
335        <token type="NameVariable"/>
336        <pop depth="1"/>
337      </rule>
338    </state>
339    <state name="name">
340      <rule pattern="[a-zA-Z_]\w*(::[a-zA-Z_]\w*)*(::)?(?=\s*-&gt;)">
341        <token type="NameNamespace"/>
342        <pop depth="1"/>
343      </rule>
344      <rule pattern="[a-zA-Z_]\w*(::[a-zA-Z_]\w*)*::">
345        <token type="NameNamespace"/>
346        <pop depth="1"/>
347      </rule>
348      <rule pattern="[\w:]+">
349        <token type="Name"/>
350        <pop depth="1"/>
351      </rule>
352      <rule pattern="[A-Z_]+(?=\W)">
353        <token type="NameConstant"/>
354        <pop depth="1"/>
355      </rule>
356      <rule pattern="(?=\W)">
357        <token type="Text"/>
358        <pop depth="1"/>
359      </rule>
360    </state>
361    <state name="rb-string">
362      <rule pattern="\\[()\\]">
363        <token type="LiteralStringOther"/>
364      </rule>
365      <rule pattern="\\">
366        <token type="LiteralStringOther"/>
367      </rule>
368      <rule pattern="\(">
369        <token type="LiteralStringOther"/>
370        <push state="rb-string"/>
371      </rule>
372      <rule pattern="\)">
373        <token type="LiteralStringOther"/>
374        <pop depth="1"/>
375      </rule>
376      <rule pattern="[^()]+">
377        <token type="LiteralStringOther"/>
378      </rule>
379    </state>
380    <state name="sb-string">
381      <rule pattern="\\[\[\]\\]">
382        <token type="LiteralStringOther"/>
383      </rule>
384      <rule pattern="\\">
385        <token type="LiteralStringOther"/>
386      </rule>
387      <rule pattern="\[">
388        <token type="LiteralStringOther"/>
389        <push state="sb-string"/>
390      </rule>
391      <rule pattern="\]">
392        <token type="LiteralStringOther"/>
393        <pop depth="1"/>
394      </rule>
395      <rule pattern="[^\[\]]+">
396        <token type="LiteralStringOther"/>
397      </rule>
398    </state>
399  </rules>
400</lexer>