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?&quot;"><token type="LiteralString"/><push state="string"/></rule>
    
  22.       <rule pattern="L?&#x27;(\\.|\\[0-7]{1,3}|\\x[a-fA-F0-9]{1,2}|[^\\\&#x27;\n])&#x27;"><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="[~!%^&amp;*+=|?:&lt;&gt;/-]"><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="&quot;"><token type="LiteralString"/><pop depth="1"/></rule>
    
  39.       <rule pattern="\\([\\abfnrtv&quot;\&#x27;]|x[a-fA-F0-9]{2,4}|[0-7]{1,3})"><token type="LiteralStringEscape"/></rule>
    
  40.       <rule pattern="[^\\&quot;\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="(?&lt;=\\)\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.*?(?&lt;!\\)\n"><token type="CommentPreproc"/><push/></rule>
    
  55.       <rule pattern="^\s*#endif.*?(?&lt;!\\)\n"><token type="CommentPreproc"/><pop depth="1"/></rule>
    
  56.       <rule pattern=".*?\n"><token type="Comment"/></rule>
    
  57.     </state>
    
  58.   </rules>
    
  59. </lexer>