1<lexer>
  2  <config>
  3    <name>Ceylon</name>
  4    <alias>ceylon</alias>
  5    <filename>*.ceylon</filename>
  6    <mime_type>text/x-ceylon</mime_type>
  7    <dot_all>true</dot_all>
  8  </config>
  9  <rules>
 10    <state name="class">
 11      <rule pattern="[A-Za-z_]\w*">
 12        <token type="NameClass"/>
 13        <pop depth="1"/>
 14      </rule>
 15    </state>
 16    <state name="import">
 17      <rule pattern="[a-z][\w.]*">
 18        <token type="NameNamespace"/>
 19        <pop depth="1"/>
 20      </rule>
 21    </state>
 22    <state name="comment">
 23      <rule pattern="[^*/]">
 24        <token type="CommentMultiline"/>
 25      </rule>
 26      <rule pattern="/\*">
 27        <token type="CommentMultiline"/>
 28        <push/>
 29      </rule>
 30      <rule pattern="\*/">
 31        <token type="CommentMultiline"/>
 32        <pop depth="1"/>
 33      </rule>
 34      <rule pattern="[*/]">
 35        <token type="CommentMultiline"/>
 36      </rule>
 37    </state>
 38    <state name="root">
 39      <rule pattern="^(\s*(?:[a-zA-Z_][\w.\[\]]*\s+)+?)([a-zA-Z_]\w*)(\s*)(\()">
 40        <bygroups>
 41          <usingself state="root"/>
 42          <token type="NameFunction"/>
 43          <token type="Text"/>
 44          <token type="Operator"/>
 45        </bygroups>
 46      </rule>
 47      <rule pattern="[^\S\n]+">
 48        <token type="Text"/>
 49      </rule>
 50      <rule pattern="//.*?\n">
 51        <token type="CommentSingle"/>
 52      </rule>
 53      <rule pattern="/\*">
 54        <token type="CommentMultiline"/>
 55        <push state="comment"/>
 56      </rule>
 57      <rule pattern="(shared|abstract|formal|default|actual|variable|deprecated|small|late|literal|doc|by|see|throws|optional|license|tagged|final|native|annotation|sealed)\b">
 58        <token type="NameDecorator"/>
 59      </rule>
 60      <rule pattern="(break|case|catch|continue|else|finally|for|in|if|return|switch|this|throw|try|while|is|exists|dynamic|nonempty|then|outer|assert|let)\b">
 61        <token type="Keyword"/>
 62      </rule>
 63      <rule pattern="(abstracts|extends|satisfies|super|given|of|out|assign)\b">
 64        <token type="KeywordDeclaration"/>
 65      </rule>
 66      <rule pattern="(function|value|void|new)\b">
 67        <token type="KeywordType"/>
 68      </rule>
 69      <rule pattern="(assembly|module|package)(\s+)">
 70        <bygroups>
 71          <token type="KeywordNamespace"/>
 72          <token type="Text"/>
 73        </bygroups>
 74      </rule>
 75      <rule pattern="(true|false|null)\b">
 76        <token type="KeywordConstant"/>
 77      </rule>
 78      <rule pattern="(class|interface|object|alias)(\s+)">
 79        <bygroups>
 80          <token type="KeywordDeclaration"/>
 81          <token type="Text"/>
 82        </bygroups>
 83        <push state="class"/>
 84      </rule>
 85      <rule pattern="(import)(\s+)">
 86        <bygroups>
 87          <token type="KeywordNamespace"/>
 88          <token type="Text"/>
 89        </bygroups>
 90        <push state="import"/>
 91      </rule>
 92      <rule pattern=""(\\\\|\\"|[^"])*"">
 93        <token type="LiteralString"/>
 94      </rule>
 95      <rule pattern="'\\.'|'[^\\]'|'\\\{#[0-9a-fA-F]{4}\}'">
 96        <token type="LiteralStringChar"/>
 97      </rule>
 98      <rule pattern="".*``.*``.*"">
 99        <token type="LiteralStringInterpol"/>
100      </rule>
101      <rule pattern="(\.)([a-z_]\w*)">
102        <bygroups>
103          <token type="Operator"/>
104          <token type="NameAttribute"/>
105        </bygroups>
106      </rule>
107      <rule pattern="[a-zA-Z_]\w*:">
108        <token type="NameLabel"/>
109      </rule>
110      <rule pattern="[a-zA-Z_]\w*">
111        <token type="Name"/>
112      </rule>
113      <rule pattern="[~^*!%&\[\](){}<>|+=:;,./?-]">
114        <token type="Operator"/>
115      </rule>
116      <rule pattern="\d{1,3}(_\d{3})+\.\d{1,3}(_\d{3})+[kMGTPmunpf]?">
117        <token type="LiteralNumberFloat"/>
118      </rule>
119      <rule pattern="\d{1,3}(_\d{3})+\.[0-9]+([eE][+-]?[0-9]+)?[kMGTPmunpf]?">
120        <token type="LiteralNumberFloat"/>
121      </rule>
122      <rule pattern="[0-9][0-9]*\.\d{1,3}(_\d{3})+[kMGTPmunpf]?">
123        <token type="LiteralNumberFloat"/>
124      </rule>
125      <rule pattern="[0-9][0-9]*\.[0-9]+([eE][+-]?[0-9]+)?[kMGTPmunpf]?">
126        <token type="LiteralNumberFloat"/>
127      </rule>
128      <rule pattern="#([0-9a-fA-F]{4})(_[0-9a-fA-F]{4})+">
129        <token type="LiteralNumberHex"/>
130      </rule>
131      <rule pattern="#[0-9a-fA-F]+">
132        <token type="LiteralNumberHex"/>
133      </rule>
134      <rule pattern="\$([01]{4})(_[01]{4})+">
135        <token type="LiteralNumberBin"/>
136      </rule>
137      <rule pattern="\$[01]+">
138        <token type="LiteralNumberBin"/>
139      </rule>
140      <rule pattern="\d{1,3}(_\d{3})+[kMGTP]?">
141        <token type="LiteralNumberInteger"/>
142      </rule>
143      <rule pattern="[0-9]+[kMGTP]?">
144        <token type="LiteralNumberInteger"/>
145      </rule>
146      <rule pattern="\n">
147        <token type="Text"/>
148      </rule>
149    </state>
150  </rules>
151</lexer>