1. <lexer>
    
  2.   <config>
    
  3.     <name>Lua</name>
    
  4.     <alias>lua</alias>
    
  5.     <filename>*.lua</filename>
    
  6.     <filename>*.wlua</filename>
    
  7.     <mime_type>text/x-lua</mime_type>
    
  8.     <mime_type>application/x-lua</mime_type>
    
  9.   </config>
    
  10.   <rules>
    
  11.     <state name="funcname">
    
  12.       <rule>
    
  13.         <include state="ws"/>
    
  14.       </rule>
    
  15.       <rule pattern="[.:]">
    
  16.         <token type="Punctuation"/>
    
  17.       </rule>
    
  18.       <rule pattern="(?:[^\W\d]\w*)(?=(?:(?:--\[(=*)\[[\w\W]*?\](\2)\])|(?:--.*$)|(?:\s+))*[.:])">
    
  19.         <token type="NameClass"/>
    
  20.       </rule>
    
  21.       <rule pattern="(?:[^\W\d]\w*)">
    
  22.         <token type="NameFunction"/>
    
  23.         <pop depth="1"/>
    
  24.       </rule>
    
  25.       <rule pattern="\(">
    
  26.         <token type="Punctuation"/>
    
  27.         <pop depth="1"/>
    
  28.       </rule>
    
  29.     </state>
    
  30.     <state name="label">
    
  31.       <rule>
    
  32.         <include state="ws"/>
    
  33.       </rule>
    
  34.       <rule pattern="::">
    
  35.         <token type="Punctuation"/>
    
  36.         <pop depth="1"/>
    
  37.       </rule>
    
  38.       <rule pattern="(?:[^\W\d]\w*)">
    
  39.         <token type="NameLabel"/>
    
  40.       </rule>
    
  41.     </state>
    
  42.     <state name="dqs">
    
  43.       <rule pattern="&#34;">
    
  44.         <token type="LiteralStringDouble"/>
    
  45.         <pop depth="1"/>
    
  46.       </rule>
    
  47.       <rule pattern="[^\\&#34;]+">
    
  48.         <token type="LiteralStringDouble"/>
    
  49.       </rule>
    
  50.     </state>
    
  51.     <state name="root">
    
  52.       <rule pattern="#!.*">
    
  53.         <token type="CommentPreproc"/>
    
  54.       </rule>
    
  55.       <rule>
    
  56.         <push state="base"/>
    
  57.       </rule>
    
  58.     </state>
    
  59.     <state name="ws">
    
  60.       <rule pattern="(?:--\[(=*)\[[\w\W]*?\](\1)\])">
    
  61.         <token type="CommentMultiline"/>
    
  62.       </rule>
    
  63.       <rule pattern="(?:--.*$)">
    
  64.         <token type="CommentSingle"/>
    
  65.       </rule>
    
  66.       <rule pattern="(?:\s+)">
    
  67.         <token type="Text"/>
    
  68.       </rule>
    
  69.     </state>
    
  70.     <state name="goto">
    
  71.       <rule>
    
  72.         <include state="ws"/>
    
  73.       </rule>
    
  74.       <rule pattern="(?:[^\W\d]\w*)">
    
  75.         <token type="NameLabel"/>
    
  76.         <pop depth="1"/>
    
  77.       </rule>
    
  78.     </state>
    
  79.     <state name="sqs">
    
  80.       <rule pattern="&#39;">
    
  81.         <token type="LiteralStringSingle"/>
    
  82.         <pop depth="1"/>
    
  83.       </rule>
    
  84.       <rule pattern="[^\\&#39;]+">
    
  85.         <token type="LiteralStringSingle"/>
    
  86.       </rule>
    
  87.     </state>
    
  88.     <state name="base">
    
  89.       <rule>
    
  90.         <include state="ws"/>
    
  91.       </rule>
    
  92.       <rule pattern="(?i)0x[\da-f]*(\.[\da-f]*)?(p[+-]?\d+)?">
    
  93.         <token type="LiteralNumberHex"/>
    
  94.       </rule>
    
  95.       <rule pattern="(?i)(\d*\.\d+|\d+\.\d*)(e[+-]?\d+)?">
    
  96.         <token type="LiteralNumberFloat"/>
    
  97.       </rule>
    
  98.       <rule pattern="(?i)\d+e[+-]?\d+">
    
  99.         <token type="LiteralNumberFloat"/>
    
  100.       </rule>
    
  101.       <rule pattern="\d+">
    
  102.         <token type="LiteralNumberInteger"/>
    
  103.       </rule>
    
  104.       <rule pattern="(?s)\[(=*)\[.*?\]\1\]">
    
  105.         <token type="LiteralString"/>
    
  106.       </rule>
    
  107.       <rule pattern="::">
    
  108.         <token type="Punctuation"/>
    
  109.         <push state="label"/>
    
  110.       </rule>
    
  111.       <rule pattern="\.{3}">
    
  112.         <token type="Punctuation"/>
    
  113.       </rule>
    
  114.       <rule pattern="[=&lt;&gt;|~&amp;+\-*/%#^]+|\.\.">
    
  115.         <token type="Operator"/>
    
  116.       </rule>
    
  117.       <rule pattern="[\[\]{}().,:;]">
    
  118.         <token type="Punctuation"/>
    
  119.       </rule>
    
  120.       <rule pattern="(and|or|not)\b">
    
  121.         <token type="OperatorWord"/>
    
  122.       </rule>
    
  123.       <rule pattern="(break|do|else|elseif|end|for|if|in|repeat|return|then|until|while)\b">
    
  124.         <token type="KeywordReserved"/>
    
  125.       </rule>
    
  126.       <rule pattern="goto\b">
    
  127.         <token type="KeywordReserved"/>
    
  128.         <push state="goto"/>
    
  129.       </rule>
    
  130.       <rule pattern="(local)\b">
    
  131.         <token type="KeywordDeclaration"/>
    
  132.       </rule>
    
  133.       <rule pattern="(true|false|nil)\b">
    
  134.         <token type="KeywordConstant"/>
    
  135.       </rule>
    
  136.       <rule pattern="(function)\b">
    
  137.         <token type="KeywordReserved"/>
    
  138.         <push state="funcname"/>
    
  139.       </rule>
    
  140.       <rule pattern="[A-Za-z_]\w*(\.[A-Za-z_]\w*)?">
    
  141.         <token type="Name"/>
    
  142.       </rule>
    
  143.       <rule pattern="&#39;">
    
  144.         <token type="LiteralStringSingle"/>
    
  145.         <combined state="stringescape" state="sqs"/>
    
  146.       </rule>
    
  147.       <rule pattern="&#34;">
    
  148.         <token type="LiteralStringDouble"/>
    
  149.         <combined state="stringescape" state="dqs"/>
    
  150.       </rule>
    
  151.     </state>
    
  152.     <state name="stringescape">
    
  153.       <rule pattern="\\([abfnrtv\\&#34;\&#39;]|[\r\n]{1,2}|z\s*|x[0-9a-fA-F]{2}|\d{1,3}|u\{[0-9a-fA-F]+\})">
    
  154.         <token type="LiteralStringEscape"/>
    
  155.       </rule>
    
  156.     </state>
    
  157.   </rules>
    
  158. </lexer>