...

Text file src/github.com/alecthomas/chroma/v2/lexers/embedded/perl.xml

Documentation: github.com/alecthomas/chroma/v2/lexers/embedded

     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>

View as plain text