odin.xml

  1<lexer>
  2  <config>
  3    <name>Odin</name>
  4    <alias>odin</alias>
  5    <filename>*.odin</filename>
  6    <mime_type>text/odin</mime_type>
  7  </config>
  8  <rules>
  9    <state name="NestedComment">
 10        <rule pattern = "/[*]">
 11            <token type = "CommentMultiline"/>
 12            <push/>
 13        </rule>
 14        <rule pattern = "[*]/">
 15            <token type = "CommentMultiline"/>
 16            <pop depth = "1"/>
 17        </rule>
 18        <rule pattern = "[\s\S]">
 19            <token type = "CommentMultiline"/>
 20        </rule>
 21    </state>
 22    <state name="root">
 23        <rule pattern = "\n">
 24            <token type = "TextWhitespace"/>
 25        </rule>
 26        <rule pattern = "\s+">
 27            <token type = "TextWhitespace"/>
 28        </rule>
 29        <rule pattern = "//.*?\n">
 30            <token type = "CommentSingle"/>
 31        </rule>
 32        <rule pattern = "/[*]">
 33            <token type = "CommentMultiline"/>
 34            <push state="NestedComment"/>
 35        </rule>
 36        <rule pattern = "(import|package)\b">
 37            <token type = "KeywordNamespace"/>
 38        </rule>
 39        <rule pattern = "(proc|struct|map|enum|union)\b">
 40            <token type = "KeywordDeclaration"/>
 41        </rule>
 42        <rule pattern = "(asm|auto_cast|bit_set|break|case|cast|context|continue|defer|distinct|do|dynamic|else|enum|fallthrough|for|foreign|if|import|in|map|not_in|or_else|or_return|package|proc|return|struct|switch|transmute|typeid|union|using|when|where|panic|real|imag|len|cap|append|copy|delete|new|make|clearpanic|real|imag|len|cap|append|copy|delete|new|make|clear)\b">
 43            <token type = "Keyword"/>
 44        </rule>
 45        <rule pattern = "(true|false|nil)\b">
 46            <token type = "KeywordConstant"/>
 47        </rule>
 48        <rule pattern = "(uint|u8|u16|u32|u64|int|i8|i16|i32|i64|i16le|i32le|i64le|i128le|u16le|u32le|u64le|u128le|i16be|i32be|i64be|i128be|u16be|u32be|u64be|u128be|f16|f32|f64|complex32|complex64|complex128|quaternion64|quaternion128|quaternion256|byte|rune|string|cstring|typeid|any|bool|b8|b16|b32|b64|uintptr|rawptr)\b">
 49            <token type = "KeywordType"/>
 50        </rule>
 51        <rule pattern = "\#[a-zA-Z_]+\b">
 52            <token type = "NameDecorator"/>
 53        </rule>
 54        <rule pattern = "\@(\([a-zA-Z_]+\b\s*.*\)|\(?[a-zA-Z_]+\)?)">
 55            <token type = "NameAttribute"/>
 56        </rule>
 57        <rule pattern="[a-zA-Z_]\w*">
 58            <token type="Name"/>
 59        </rule>
 60        <rule pattern="([a-zA-Z_]\w*)(\s*)(\()">
 61            <token type="NameFunction"/>
 62        </rule>
 63        <rule pattern="[^\W\d]\w*">
 64            <token type="NameOther"/>
 65        </rule>
 66        <rule pattern = "\d+i">
 67            <token type = "LiteralNumber"/>
 68        </rule>
 69        <rule pattern = "\d+\.\d*([Ee][-+]\d+)?i">
 70            <token type = "LiteralNumber"/>
 71        </rule>
 72        <rule pattern = "\.\d+([Ee][-+]\d+)?i">
 73            <token type = "LiteralNumber"/>
 74        </rule>
 75        <rule pattern = "\d+[Ee][-+]\d+i">
 76            <token type = "LiteralNumber"/>
 77        </rule>
 78        <rule pattern = "\d+(\.\d+[eE][+\-]?\d+|\.\d*|[eE][+\-]?\d+)">
 79            <token type = "LiteralNumberFloat"/>
 80        </rule>
 81        <rule pattern = "\.\d+([eE][+\-]?\d+)?">
 82            <token type = "LiteralNumberFloat"/>
 83        </rule>
 84        <rule pattern = "0o[0-7]+">
 85            <token type = "LiteralNumberOct"/>
 86        </rule>
 87        <rule pattern = "0x[0-9a-fA-F_]+">
 88            <token type = "LiteralNumberHex"/>
 89        </rule>
 90        <rule pattern = "0b[01_]+">
 91            <token type = "LiteralNumberBin"/>
 92        </rule>
 93        <rule pattern = "(0|[1-9][0-9_]*)">
 94            <token type = "LiteralNumberInteger"/>
 95        </rule>
 96        <rule pattern = "'(\\['&quot;\\abfnrtv]|\\x[0-9a-fA-F]{2}|\\[0-7]{1,3}|\\u[0-9a-fA-F]{4}|\\U[0-9a-fA-F]{8}|[^\\])'" >
 97            <token type = "LiteralStringChar"/>
 98        </rule>
 99        <rule pattern = "(`)([^`]*)(`)" >
100            <token type = "LiteralString"/>
101        </rule>
102        <rule pattern = "&quot;(\\\\|\\&quot;|[^&quot;])*&quot;" >
103            <token type = "LiteralString"/>
104        </rule>
105        <rule pattern = "(&lt;&lt;=|&gt;&gt;=|&lt;&lt;|&gt;&gt;|&lt;=|&gt;=|&amp;=|&amp;|\+=|-=|\*=|/=|%=|\||\^|=|&amp;&amp;|\|\||--|-&gt;|=|==|!=|:=|:|::|\.\.\&lt;|\.\.=|[&lt;&gt;+\-*/%&amp;])" >
106            <token type = "Operator"/>
107        </rule>
108        <rule pattern="[{}()\[\],.;]">
109            <token type="Punctuation"/>
110        </rule>
111    </state>  
112  </rules>
113</lexer>