1. 
    
  2. <lexer>
    
  3.   <config>
    
  4.     <name>Vala</name>
    
  5.     <alias>vala</alias>
    
  6.     <alias>vapi</alias>
    
  7.     <filename>*.vala</filename>
    
  8.     <filename>*.vapi</filename>
    
  9.     <mime_type>text/x-vala</mime_type>
    
  10.   </config>
    
  11.   <rules>
    
  12.     <state name="whitespace">
    
  13.       <rule pattern="^\s*#if\s+0"><token type="CommentPreproc"/><push state="if0"/></rule>
    
  14.       <rule pattern="\n"><token type="TextWhitespace"/></rule>
    
  15.       <rule pattern="\s+"><token type="TextWhitespace"/></rule>
    
  16.       <rule pattern="\\\n"><token type="Text"/></rule>
    
  17.       <rule pattern="//(\n|(.|\n)*?[^\\]\n)"><token type="CommentSingle"/></rule>
    
  18.       <rule pattern="/(\\\n)?[*](.|\n)*?[*](\\\n)?/"><token type="CommentMultiline"/></rule>
    
  19.     </state>
    
  20.     <state name="statements">
    
  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="(?s)&quot;&quot;&quot;.*?&quot;&quot;&quot;"><token type="LiteralString"/></rule>
    
  24.       <rule pattern="(\d+\.\d*|\.\d+|\d+)[eE][+-]?\d+[lL]?"><token type="LiteralNumberFloat"/></rule>
    
  25.       <rule pattern="(\d+\.\d*|\.\d+|\d+[fF])[fF]?"><token type="LiteralNumberFloat"/></rule>
    
  26.       <rule pattern="0x[0-9a-fA-F]+[Ll]?"><token type="LiteralNumberHex"/></rule>
    
  27.       <rule pattern="0[0-7]+[Ll]?"><token type="LiteralNumberOct"/></rule>
    
  28.       <rule pattern="\d+[Ll]?"><token type="LiteralNumberInteger"/></rule>
    
  29.       <rule pattern="[~!%^&amp;*+=|?:&lt;&gt;/-]"><token type="Operator"/></rule>
    
  30.       <rule pattern="(\[)(Compact|Immutable|(?:Boolean|Simple)Type)(\])"><bygroups><token type="Punctuation"/><token type="NameDecorator"/><token type="Punctuation"/></bygroups></rule>
    
  31.       <rule pattern="(\[)(CCode|(?:Integer|Floating)Type)"><bygroups><token type="Punctuation"/><token type="NameDecorator"/></bygroups></rule>
    
  32.       <rule pattern="[()\[\],.]"><token type="Punctuation"/></rule>
    
  33.       <rule pattern="(as|base|break|case|catch|construct|continue|default|delete|do|else|enum|finally|for|foreach|get|if|in|is|lock|new|out|params|return|set|sizeof|switch|this|throw|try|typeof|while|yield)\b"><token type="Keyword"/></rule>
    
  34.       <rule pattern="(abstract|const|delegate|dynamic|ensures|extern|inline|internal|override|owned|private|protected|public|ref|requires|signal|static|throws|unowned|var|virtual|volatile|weak|yields)\b"><token type="KeywordDeclaration"/></rule>
    
  35.       <rule pattern="(namespace|using)(\s+)"><bygroups><token type="KeywordNamespace"/><token type="TextWhitespace"/></bygroups><push state="namespace"/></rule>
    
  36.       <rule pattern="(class|errordomain|interface|struct)(\s+)"><bygroups><token type="KeywordDeclaration"/><token type="TextWhitespace"/></bygroups><push state="class"/></rule>
    
  37.       <rule pattern="(\.)([a-zA-Z_]\w*)"><bygroups><token type="Operator"/><token type="NameAttribute"/></bygroups></rule>
    
  38.       <rule pattern="(void|bool|char|double|float|int|int8|int16|int32|int64|long|short|size_t|ssize_t|string|time_t|uchar|uint|uint8|uint16|uint32|uint64|ulong|unichar|ushort)\b"><token type="KeywordType"/></rule>
    
  39.       <rule pattern="(true|false|null)\b"><token type="NameBuiltin"/></rule>
    
  40.       <rule pattern="[a-zA-Z_]\w*"><token type="Name"/></rule>
    
  41.     </state>
    
  42.     <state name="root">
    
  43.       <rule><include state="whitespace"/></rule>
    
  44.       <rule><push state="statement"/></rule>
    
  45.     </state>
    
  46.     <state name="statement">
    
  47.       <rule><include state="whitespace"/></rule>
    
  48.       <rule><include state="statements"/></rule>
    
  49.       <rule pattern="[{}]"><token type="Punctuation"/></rule>
    
  50.       <rule pattern=";"><token type="Punctuation"/><pop depth="1"/></rule>
    
  51.     </state>
    
  52.     <state name="string">
    
  53.       <rule pattern="&quot;"><token type="LiteralString"/><pop depth="1"/></rule>
    
  54.       <rule pattern="\\([\\abfnrtv&quot;\&#x27;]|x[a-fA-F0-9]{2,4}|[0-7]{1,3})"><token type="LiteralStringEscape"/></rule>
    
  55.       <rule pattern="[^\\&quot;\n]+"><token type="LiteralString"/></rule>
    
  56.       <rule pattern="\\\n"><token type="LiteralString"/></rule>
    
  57.       <rule pattern="\\"><token type="LiteralString"/></rule>
    
  58.     </state>
    
  59.     <state name="if0">
    
  60.       <rule pattern="^\s*#if.*?(?&lt;!\\)\n"><token type="CommentPreproc"/><push/></rule>
    
  61.       <rule pattern="^\s*#el(?:se|if).*\n"><token type="CommentPreproc"/><pop depth="1"/></rule>
    
  62.       <rule pattern="^\s*#endif.*?(?&lt;!\\)\n"><token type="CommentPreproc"/><pop depth="1"/></rule>
    
  63.       <rule pattern=".*?\n"><token type="Comment"/></rule>
    
  64.     </state>
    
  65.     <state name="class">
    
  66.       <rule pattern="[a-zA-Z_]\w*"><token type="NameClass"/><pop depth="1"/></rule>
    
  67.     </state>
    
  68.     <state name="namespace">
    
  69.       <rule pattern="[a-zA-Z_][\w.]*"><token type="NameNamespace"/><pop depth="1"/></rule>
    
  70.     </state>
    
  71.   </rules>
    
  72. </lexer>