1<lexer>
2 <config>
3 <name>Kotlin</name>
4 <alias>kotlin</alias>
5 <filename>*.kt</filename>
6 <filename>*.kts</filename>
7 <mime_type>text/x-kotlin</mime_type>
8 <dot_all>true</dot_all>
9 </config>
10 <rules>
11 <state name="string">
12 <rule pattern="\\[tbnr'"\\\$]">
13 <token type="LiteralStringEscape"/>
14 </rule>
15 <rule pattern="\\u[0-9a-fA-F]{4}">
16 <token type="LiteralStringEscape"/>
17 </rule>
18 <rule pattern=""">
19 <token type="LiteralStringDouble"/>
20 <pop depth="1"/>
21 </rule>
22 <rule>
23 <include state="string-interpol"/>
24 </rule>
25 <rule pattern="[^\n\\"$]+">
26 <token type="LiteralStringDouble"/>
27 </rule>
28 <rule pattern="\$">
29 <token type="LiteralStringDouble"/>
30 </rule>
31 </state>
32 <state name="package">
33 <rule pattern="\S+">
34 <token type="NameNamespace"/>
35 <pop depth="1"/>
36 </rule>
37 </state>
38 <state name="class">
39 <rule pattern="\x60[^\x60]+?\x60">
40 <token type="NameClass"/>
41 <pop depth="1"/>
42 </rule>
43 <rule pattern="(?:[_\p{L}][\p{L}\p{N}]*|`@?[_\p{L}][\p{L}\p{N}]+`)">
44 <token type="NameClass"/>
45 <pop depth="1"/>
46 </rule>
47 </state>
48 <state name="property">
49 <rule pattern="\x60[^\x60]+?\x60">
50 <token type="NameProperty"/>
51 <pop depth="1"/>
52 </rule>
53 <rule pattern="(?:[_\p{L}][\p{L}\p{N}]*|`@?[_\p{L}][\p{L}\p{N}]+`)">
54 <token type="NameProperty"/>
55 <pop depth="1"/>
56 </rule>
57 </state>
58 <state name="string-interpol">
59 <rule pattern="\$(?:[_\p{L}][\p{L}\p{N}]*|`@?[_\p{L}][\p{L}\p{N}]+`)">
60 <token type="LiteralStringInterpol"/>
61 </rule>
62 <rule pattern="\${[^}\n]*}">
63 <token type="LiteralStringInterpol"/>
64 </rule>
65 </state>
66 <state name="generics-specification">
67 <rule pattern="<">
68 <token type="Punctuation"/>
69 <push state="generics-specification"/>
70 </rule>
71 <rule pattern=">">
72 <token type="Punctuation"/>
73 <pop depth="1"/>
74 </rule>
75 <rule pattern="[,:*?]">
76 <token type="Punctuation"/>
77 </rule>
78 <rule pattern="(in|out|reified)">
79 <token type="Keyword"/>
80 </rule>
81 <rule pattern="\x60[^\x60]+?\x60">
82 <token type="NameClass"/>
83 </rule>
84 <rule pattern="(?:[_\p{L}][\p{L}\p{N}]*|`@?[_\p{L}][\p{L}\p{N}]+`)">
85 <token type="NameClass"/>
86 </rule>
87 <rule pattern="\s+">
88 <token type="Text"/>
89 </rule>
90 </state>
91 <state name="root">
92 <rule pattern="^\s*\[.*?\]">
93 <token type="NameAttribute"/>
94 </rule>
95 <rule pattern="[^\S\n]+">
96 <token type="Text"/>
97 </rule>
98 <rule pattern="\\\n">
99 <token type="Text"/>
100 </rule>
101 <rule pattern="//[^\n]*\n?">
102 <token type="CommentSingle"/>
103 </rule>
104 <rule pattern="/[*].*?[*]/">
105 <token type="CommentMultiline"/>
106 </rule>
107 <rule pattern="\n">
108 <token type="Text"/>
109 </rule>
110 <rule pattern="!==|!in|!is|===">
111 <token type="Operator"/>
112 </rule>
113 <rule pattern="%=|&&|\*=|\+\+|\+=|--|-=|->|\.\.|\/=|::|<=|==|>=|!!|!=|\|\||\?[:.]">
114 <token type="Operator"/>
115 </rule>
116
117 <rule pattern="[{}]">
118 <token type="Punctuation"/>
119 </rule>
120 <rule pattern=""""">
121 <token type="LiteralString"/>
122 <push state="rawstring"/>
123 </rule>
124 <rule pattern=""">
125 <token type="LiteralStringDouble"/>
126 <push state="string"/>
127 </rule>
128 <rule pattern="(')(\\u[0-9a-fA-F]{4})(')">
129 <bygroups>
130 <token type="LiteralStringChar"/>
131 <token type="LiteralStringEscape"/>
132 <token type="LiteralStringChar"/>
133 </bygroups>
134 </rule>
135 <rule pattern="'\\.'|'[^\\]'">
136 <token type="LiteralStringChar"/>
137 </rule>
138 <rule pattern="0[xX][0-9a-fA-F]+(_+[0-9a-fA-F]+)*[uU]?L?">
139 <token type="LiteralNumberHex"/>
140 </rule>
141 <rule pattern="0[bB][01]+(_+[01]+)*[uU]?L?">
142 <token type="LiteralNumberBin"/>
143 </rule>
144 <rule pattern="[0-9]+(_+[0-9]+)*\.[0-9]+(_+[0-9]+)*([eE][+-]?[0-9]+(_+[0-9]+)*)?[fF]?|\.[0-9]+(_+[0-9]+)*([eE][+-]?[0-9]+(_+[0-9]+)*)?[fF]?|[0-9]+(_+[0-9]+)*[eE][+-]?[0-9]+(_+[0-9]+)*[fF]?|[0-9]+(_+[0-9]+)*[fF]">
145 <token type="LiteralNumberFloat"/>
146 </rule>
147 <rule pattern="[0-9]+(_+[0-9]+)*[uU]?L?">
148 <token type="LiteralNumberInteger"/>
149 </rule>
150 <rule pattern="[~!%^&*()+=|\[\]:;,.<>\/?-]">
151 <token type="Punctuation"/>
152 </rule>
153 <rule pattern="(companion)(\s+)(object)">
154 <bygroups>
155 <token type="Keyword"/>
156 <token type="Text"/>
157 <token type="Keyword"/>
158 </bygroups>
159 </rule>
160 <rule pattern="(class|interface|object)(\s+)">
161 <bygroups>
162 <token type="Keyword"/>
163 <token type="Text"/>
164 </bygroups>
165 <push state="class"/>
166 </rule>
167 <rule pattern="(package|import)(\s+)">
168 <bygroups>
169 <token type="Keyword"/>
170 <token type="Text"/>
171 </bygroups>
172 <push state="package"/>
173 </rule>
174 <rule pattern="(val|var)(\s+)">
175 <bygroups>
176 <token type="Keyword"/>
177 <token type="Text"/>
178 </bygroups>
179 <push state="property"/>
180 </rule>
181 <rule pattern="(fun)(\s+)">
182 <bygroups>
183 <token type="Keyword"/>
184 <token type="Text"/>
185 </bygroups>
186 <push state="function"/>
187 </rule>
188 <rule pattern="(abstract|actual|annotation|as|as\?|break|by|catch|class|companion|const|constructor|continue|crossinline|data|delegate|do|dynamic|else|enum|expect|external|false|field|file|final|finally|for|fun|get|if|import|in|infix|init|inline|inner|interface|internal|is|it|lateinit|noinline|null|object|open|operator|out|override|package|param|private|property|protected|public|receiver|reified|return|sealed|set|setparam|super|suspend|tailrec|this|throw|true|try|typealias|typeof|val|value|var|vararg|when|where|while)\b">
189 <token type="Keyword"/>
190 </rule>
191 <rule pattern="@(?:[_\p{L}][\p{L}\p{N}]*|`@?[_\p{L}][\p{L}\p{N}]+`)">
192 <token type="NameDecorator"/>
193 </rule>
194 <rule pattern="(?:\p{Lu}[_\p{L}]*)(?=\.)">
195 <token type="NameClass"/>
196 </rule>
197 <rule pattern="(?:[_\p{L}][\p{L}\p{N}]*|`@?[_\p{L}][\p{L}\p{N}]+`)">
198 <token type="Name"/>
199 </rule>
200 </state>
201 <state name="function">
202 <rule pattern="<">
203 <token type="Punctuation"/>
204 <push state="generics-specification"/>
205 </rule>
206 <rule pattern="\x60[^\x60]+?\x60">
207 <token type="NameFunction"/>
208 <pop depth="1"/>
209 </rule>
210 <rule pattern="(?:[_\p{L}][\p{L}\p{N}]*|`@?[_\p{L}][\p{L}\p{N}]+`)">
211 <token type="NameFunction"/>
212 <pop depth="1"/>
213 </rule>
214 <rule pattern="\s+">
215 <token type="Text"/>
216 </rule>
217 </state>
218 <state name="rawstring">
219 <rule pattern=""""">
220 <token type="LiteralString"/>
221 <pop depth="1"/>
222 </rule>
223 <rule pattern="(?:[^$"]+|\"{1,2}[^"])+">
224 <token type="LiteralString"/>
225 </rule>
226 <rule>
227 <include state="string-interpol"/>
228 </rule>
229 <rule pattern="\$">
230 <token type="LiteralString"/>
231 </rule>
232 </state>
233 </rules>
234</lexer>