lua.xml

  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>