1<lexer>
 2  <config>
 3    <name>SourcePawn</name>
 4    <alias>sp</alias>
 5    <filename>*.sp</filename>
 6    <filename>*.inc</filename>
 7    <mime_type>text/x-sourcepawn</mime_type>
 8  </config>
 9  <rules>
10    <state name="root">
11      <rule pattern="^#if\s+0"><token type="CommentPreproc"/><push state="if0"/></rule>
12      <rule pattern="^#"><token type="CommentPreproc"/><push state="macro"/></rule>
13      <rule pattern="^\s*(?:/[*].*?[*]/\s*)*#if\s+0"><token type="CommentPreproc"/><push state="if0"/></rule>
14      <rule pattern="^\s*(?:/[*].*?[*]/\s*)*#"><token type="CommentPreproc"/><push state="macro"/></rule>
15      <rule pattern="\n"><token type="Text"/></rule>
16      <rule pattern="\s+"><token type="Text"/></rule>
17      <rule pattern="\\\n"><token type="Text"/></rule>
18      <rule pattern="/(\\\n)?/(\n|(.|\n)*?[^\\]\n)"><token type="CommentSingle"/></rule>
19      <rule pattern="/(\\\n)?\*(.|\n)*?\*(\\\n)?/"><token type="CommentMultiline"/></rule>
20      <rule pattern="[{}]"><token type="Punctuation"/></rule>
21      <rule pattern="L?""><token type="LiteralString"/><push state="string"/></rule>
22      <rule pattern="L?'(\\.|\\[0-7]{1,3}|\\x[a-fA-F0-9]{1,2}|[^\\\'\n])'"><token type="LiteralStringChar"/></rule>
23      <rule pattern="(\d+\.\d*|\.\d+|\d+)[eE][+-]?\d+[LlUu]*"><token type="LiteralNumberFloat"/></rule>
24      <rule pattern="(\d+\.\d*|\.\d+|\d+[fF])[fF]?"><token type="LiteralNumberFloat"/></rule>
25      <rule pattern="0x[0-9a-fA-F]+[LlUu]*"><token type="LiteralNumberHex"/></rule>
26      <rule pattern="0[0-7]+[LlUu]*"><token type="LiteralNumberOct"/></rule>
27      <rule pattern="\d+[LlUu]*"><token type="LiteralNumberInteger"/></rule>
28      <rule pattern="[~!%^&*+=|?:<>/-]"><token type="Operator"/></rule>
29      <rule pattern="[()\[\],.;]"><token type="Punctuation"/></rule>
30      <rule pattern="(case|const|continue|native|default|else|enum|for|if|new|operator|public|return|sizeof|static|decl|struct|switch)\b"><token type="Keyword"/></rule>
31      <rule pattern="(bool|float|void|int|char)\b"><token type="KeywordType"/></rule>
32      <rule pattern="(true|false)\b"><token type="KeywordConstant"/></rule>
33      <rule pattern="[a-zA-Z_]\w*"><token type="Name"/></rule>
34      <rule pattern="((?:[\w*\s])+?(?:\s|[*]))([a-zA-Z_]\w*)(\s*\([^;]*?\))([^;{]*)(\{)"><bygroups><usingself state="root"/><token type="NameFunction"/><usingself state="root"/><usingself state="root"/><token type="Punctuation"/></bygroups><push state="function"/></rule>
35      <rule pattern="((?:[\w*\s])+?(?:\s|[*]))([a-zA-Z_]\w*)(\s*\([^;]*?\))([^;]*)(;)"><bygroups><usingself state="root"/><token type="NameFunction"/><usingself state="root"/><usingself state="root"/><token type="Punctuation"/></bygroups></rule>
36    </state>
37    <state name="string">
38      <rule pattern="""><token type="LiteralString"/><pop depth="1"/></rule>
39      <rule pattern="\\([\\abfnrtv"\']|x[a-fA-F0-9]{2,4}|[0-7]{1,3})"><token type="LiteralStringEscape"/></rule>
40      <rule pattern="[^\\"\n]+"><token type="LiteralString"/></rule>
41      <rule pattern="\\\n"><token type="LiteralString"/></rule>
42      <rule pattern="\\"><token type="LiteralString"/></rule>
43    </state>
44    <state name="macro">
45      <rule pattern="(include)(\s*(?:/[*].*?[*]/\s*)?)([^\n]+)"><bygroups><token type="CommentPreproc"/><token type="Text"/><token type="CommentPreprocFile"/></bygroups></rule>
46      <rule pattern="[^/\n]+"><token type="CommentPreproc"/></rule>
47      <rule pattern="/\*(.|\n)*?\*/"><token type="CommentMultiline"/></rule>
48      <rule pattern="//.*?\n"><token type="CommentSingle"/><pop depth="1"/></rule>
49      <rule pattern="/"><token type="CommentPreproc"/></rule>
50      <rule pattern="(?<=\\)\n"><token type="CommentPreproc"/></rule>
51      <rule pattern="\n"><token type="CommentPreproc"/><pop depth="1"/></rule>
52    </state>
53    <state name="if0">
54      <rule pattern="^\s*#if.*?(?<!\\)\n"><token type="CommentPreproc"/><push/></rule>
55      <rule pattern="^\s*#endif.*?(?<!\\)\n"><token type="CommentPreproc"/><pop depth="1"/></rule>
56      <rule pattern=".*?\n"><token type="Comment"/></rule>
57    </state>
58  </rules>
59</lexer>