...
1<lexer>
2 <config>
3 <name>Objective-C</name>
4 <alias>objective-c</alias>
5 <alias>objectivec</alias>
6 <alias>obj-c</alias>
7 <alias>objc</alias>
8 <filename>*.m</filename>
9 <filename>*.h</filename>
10 <mime_type>text/x-objective-c</mime_type>
11 </config>
12 <rules>
13 <state name="macro">
14 <rule pattern="(include)(\s*(?:/[*].*?[*]/\s*)?)([^\n]+)">
15 <bygroups>
16 <token type="CommentPreproc"/>
17 <token type="Text"/>
18 <token type="CommentPreprocFile"/>
19 </bygroups>
20 </rule>
21 <rule pattern="[^/\n]+">
22 <token type="CommentPreproc"/>
23 </rule>
24 <rule pattern="/[*](.|\n)*?[*]/">
25 <token type="CommentMultiline"/>
26 </rule>
27 <rule pattern="//.*?\n">
28 <token type="CommentSingle"/>
29 <pop depth="1"/>
30 </rule>
31 <rule pattern="/">
32 <token type="CommentPreproc"/>
33 </rule>
34 <rule pattern="(?<=\\)\n">
35 <token type="CommentPreproc"/>
36 </rule>
37 <rule pattern="\n">
38 <token type="CommentPreproc"/>
39 <pop depth="1"/>
40 </rule>
41 </state>
42 <state name="literal_number">
43 <rule pattern="\(">
44 <token type="Punctuation"/>
45 <push state="literal_number_inner"/>
46 </rule>
47 <rule pattern="\)">
48 <token type="Literal"/>
49 <pop depth="1"/>
50 </rule>
51 <rule>
52 <include state="statement"/>
53 </rule>
54 </state>
55 <state name="if0">
56 <rule pattern="^\s*#if.*?(?<!\\)\n">
57 <token type="CommentPreproc"/>
58 <push/>
59 </rule>
60 <rule pattern="^\s*#el(?:se|if).*\n">
61 <token type="CommentPreproc"/>
62 <pop depth="1"/>
63 </rule>
64 <rule pattern="^\s*#endif.*?(?<!\\)\n">
65 <token type="CommentPreproc"/>
66 <pop depth="1"/>
67 </rule>
68 <rule pattern=".*?\n">
69 <token type="Comment"/>
70 </rule>
71 </state>
72 <state name="root">
73 <rule pattern="^([-+])(\s*)(\(.*?\))?(\s*)([a-zA-Z$_][\w$]*:?)">
74 <bygroups>
75 <token type="Punctuation"/>
76 <token type="Text"/>
77 <usingself state="root"/>
78 <token type="Text"/>
79 <token type="NameFunction"/>
80 </bygroups>
81 <push state="method"/>
82 </rule>
83 <rule>
84 <include state="whitespace"/>
85 </rule>
86 <rule pattern="((?:[\w*\s])+?(?:\s|[*]))([a-zA-Z_]\w*)(\s*\([^;]*?\))([^;{]*)(\{)">
87 <bygroups>
88 <usingself state="root"/>
89 <token type="NameFunction"/>
90 <usingself state="root"/>
91 <usingself state="root"/>
92 <token type="Punctuation"/>
93 </bygroups>
94 <push state="function"/>
95 </rule>
96 <rule pattern="((?:[\w*\s])+?(?:\s|[*]))([a-zA-Z_]\w*)(\s*\([^;]*?\))([^;]*)(;)">
97 <bygroups>
98 <usingself state="root"/>
99 <token type="NameFunction"/>
100 <usingself state="root"/>
101 <usingself state="root"/>
102 <token type="Punctuation"/>
103 </bygroups>
104 </rule>
105 <rule>
106 <push state="statement"/>
107 </rule>
108 </state>
109 <state name="statements">
110 <rule pattern="@"">
111 <token type="LiteralString"/>
112 <push state="string"/>
113 </rule>
114 <rule pattern="@(YES|NO)">
115 <token type="LiteralNumber"/>
116 </rule>
117 <rule pattern="@'(\\.|\\[0-7]{1,3}|\\x[a-fA-F0-9]{1,2}|[^\\\'\n])'">
118 <token type="LiteralStringChar"/>
119 </rule>
120 <rule pattern="@(\d+\.\d*|\.\d+|\d+)[eE][+-]?\d+[lL]?">
121 <token type="LiteralNumberFloat"/>
122 </rule>
123 <rule pattern="@(\d+\.\d*|\.\d+|\d+[fF])[fF]?">
124 <token type="LiteralNumberFloat"/>
125 </rule>
126 <rule pattern="@0x[0-9a-fA-F]+[Ll]?">
127 <token type="LiteralNumberHex"/>
128 </rule>
129 <rule pattern="@0[0-7]+[Ll]?">
130 <token type="LiteralNumberOct"/>
131 </rule>
132 <rule pattern="@\d+[Ll]?">
133 <token type="LiteralNumberInteger"/>
134 </rule>
135 <rule pattern="@\(">
136 <token type="Literal"/>
137 <push state="literal_number"/>
138 </rule>
139 <rule pattern="@\[">
140 <token type="Literal"/>
141 <push state="literal_array"/>
142 </rule>
143 <rule pattern="@\{">
144 <token type="Literal"/>
145 <push state="literal_dictionary"/>
146 </rule>
147 <rule pattern="(unsafe_unretained|__bridge_transfer|@autoreleasepool|__autoreleasing|@synchronized|@synthesize|@protected|@selector|@required|@optional|readwrite|@property|nonatomic|@finally|__bridge|@dynamic|__strong|readonly|@private|__block|@public|@encode|release|assign|retain|atomic|@throw|@catch|__weak|setter|getter|typeof|strong|inout|class|@try|@end|weak|copy|out|in)\b">
148 <token type="Keyword"/>
149 </rule>
150 <rule pattern="(instancetype|IBOutlet|IBAction|unichar|Class|BOOL|IMP|SEL|id)\b">
151 <token type="KeywordType"/>
152 </rule>
153 <rule pattern="@(true|false|YES|NO)\n">
154 <token type="NameBuiltin"/>
155 </rule>
156 <rule pattern="(YES|NO|nil|self|super)\b">
157 <token type="NameBuiltin"/>
158 </rule>
159 <rule pattern="(Boolean|UInt8|SInt8|UInt16|SInt16|UInt32|SInt32)\b">
160 <token type="KeywordType"/>
161 </rule>
162 <rule pattern="(TRUE|FALSE)\b">
163 <token type="NameBuiltin"/>
164 </rule>
165 <rule pattern="(@interface|@implementation)(\s+)">
166 <bygroups>
167 <token type="Keyword"/>
168 <token type="Text"/>
169 </bygroups>
170 <push state="#pop" state="oc_classname"/>
171 </rule>
172 <rule pattern="(@class|@protocol)(\s+)">
173 <bygroups>
174 <token type="Keyword"/>
175 <token type="Text"/>
176 </bygroups>
177 <push state="#pop" state="oc_forward_classname"/>
178 </rule>
179 <rule pattern="@">
180 <token type="Punctuation"/>
181 </rule>
182 <rule pattern="(L?)(")">
183 <bygroups>
184 <token type="LiteralStringAffix"/>
185 <token type="LiteralString"/>
186 </bygroups>
187 <push state="string"/>
188 </rule>
189 <rule pattern="(L?)(')(\\.|\\[0-7]{1,3}|\\x[a-fA-F0-9]{1,2}|[^\\\'\n])(')">
190 <bygroups>
191 <token type="LiteralStringAffix"/>
192 <token type="LiteralStringChar"/>
193 <token type="LiteralStringChar"/>
194 <token type="LiteralStringChar"/>
195 </bygroups>
196 </rule>
197 <rule pattern="(\d+\.\d*|\.\d+|\d+)[eE][+-]?\d+[LlUu]*">
198 <token type="LiteralNumberFloat"/>
199 </rule>
200 <rule pattern="(\d+\.\d*|\.\d+|\d+[fF])[fF]?">
201 <token type="LiteralNumberFloat"/>
202 </rule>
203 <rule pattern="0x[0-9a-fA-F]+[LlUu]*">
204 <token type="LiteralNumberHex"/>
205 </rule>
206 <rule pattern="0[0-7]+[LlUu]*">
207 <token type="LiteralNumberOct"/>
208 </rule>
209 <rule pattern="\d+[LlUu]*">
210 <token type="LiteralNumberInteger"/>
211 </rule>
212 <rule pattern="\*/">
213 <token type="Error"/>
214 </rule>
215 <rule pattern="[~!%^&*+=|?:<>/-]">
216 <token type="Operator"/>
217 </rule>
218 <rule pattern="[()\[\],.]">
219 <token type="Punctuation"/>
220 </rule>
221 <rule pattern="(restricted|volatile|continue|register|default|typedef|struct|extern|switch|sizeof|static|return|union|while|const|break|goto|enum|else|case|auto|for|asm|if|do)\b">
222 <token type="Keyword"/>
223 </rule>
224 <rule pattern="(bool|int|long|float|short|double|char|unsigned|signed|void)\b">
225 <token type="KeywordType"/>
226 </rule>
227 <rule pattern="(typename|__inline|restrict|_inline|thread|inline|naked)\b">
228 <token type="KeywordReserved"/>
229 </rule>
230 <rule pattern="(__m(128i|128d|128|64))\b">
231 <token type="KeywordReserved"/>
232 </rule>
233 <rule pattern="__(forceinline|identifier|unaligned|declspec|fastcall|finally|stdcall|wchar_t|assume|except|int32|cdecl|int16|leave|based|raise|int64|noop|int8|w64|try|asm)\b">
234 <token type="KeywordReserved"/>
235 </rule>
236 <rule pattern="(true|false|NULL)\b">
237 <token type="NameBuiltin"/>
238 </rule>
239 <rule pattern="([a-zA-Z_]\w*)(\s*)(:)(?!:)">
240 <bygroups>
241 <token type="NameLabel"/>
242 <token type="Text"/>
243 <token type="Punctuation"/>
244 </bygroups>
245 </rule>
246 <rule pattern="[a-zA-Z_]\w*">
247 <token type="Name"/>
248 </rule>
249 </state>
250 <state name="method">
251 <rule>
252 <include state="whitespace"/>
253 </rule>
254 <rule pattern=",">
255 <token type="Punctuation"/>
256 </rule>
257 <rule pattern="\.\.\.">
258 <token type="Punctuation"/>
259 </rule>
260 <rule pattern="(\(.*?\))(\s*)([a-zA-Z$_][\w$]*)">
261 <bygroups>
262 <usingself state="root"/>
263 <token type="Text"/>
264 <token type="NameVariable"/>
265 </bygroups>
266 </rule>
267 <rule pattern="[a-zA-Z$_][\w$]*:">
268 <token type="NameFunction"/>
269 </rule>
270 <rule pattern=";">
271 <token type="Punctuation"/>
272 <pop depth="1"/>
273 </rule>
274 <rule pattern="\{">
275 <token type="Punctuation"/>
276 <push state="function"/>
277 </rule>
278 <rule>
279 <pop depth="1"/>
280 </rule>
281 </state>
282 <state name="literal_array">
283 <rule pattern="\[">
284 <token type="Punctuation"/>
285 <push state="literal_array_inner"/>
286 </rule>
287 <rule pattern="\]">
288 <token type="Literal"/>
289 <pop depth="1"/>
290 </rule>
291 <rule>
292 <include state="statement"/>
293 </rule>
294 </state>
295 <state name="oc_classname">
296 <rule pattern="([a-zA-Z$_][\w$]*)(\s*:\s*)([a-zA-Z$_][\w$]*)?(\s*)(\{)">
297 <bygroups>
298 <token type="NameClass"/>
299 <token type="Text"/>
300 <token type="NameClass"/>
301 <token type="Text"/>
302 <token type="Punctuation"/>
303 </bygroups>
304 <push state="#pop" state="oc_ivars"/>
305 </rule>
306 <rule pattern="([a-zA-Z$_][\w$]*)(\s*:\s*)([a-zA-Z$_][\w$]*)?">
307 <bygroups>
308 <token type="NameClass"/>
309 <token type="Text"/>
310 <token type="NameClass"/>
311 </bygroups>
312 <pop depth="1"/>
313 </rule>
314 <rule pattern="([a-zA-Z$_][\w$]*)(\s*)(\([a-zA-Z$_][\w$]*\))(\s*)(\{)">
315 <bygroups>
316 <token type="NameClass"/>
317 <token type="Text"/>
318 <token type="NameLabel"/>
319 <token type="Text"/>
320 <token type="Punctuation"/>
321 </bygroups>
322 <push state="#pop" state="oc_ivars"/>
323 </rule>
324 <rule pattern="([a-zA-Z$_][\w$]*)(\s*)(\([a-zA-Z$_][\w$]*\))">
325 <bygroups>
326 <token type="NameClass"/>
327 <token type="Text"/>
328 <token type="NameLabel"/>
329 </bygroups>
330 <pop depth="1"/>
331 </rule>
332 <rule pattern="([a-zA-Z$_][\w$]*)(\s*)(\{)">
333 <bygroups>
334 <token type="NameClass"/>
335 <token type="Text"/>
336 <token type="Punctuation"/>
337 </bygroups>
338 <push state="#pop" state="oc_ivars"/>
339 </rule>
340 <rule pattern="([a-zA-Z$_][\w$]*)">
341 <token type="NameClass"/>
342 <pop depth="1"/>
343 </rule>
344 </state>
345 <state name="function">
346 <rule>
347 <include state="whitespace"/>
348 </rule>
349 <rule>
350 <include state="statements"/>
351 </rule>
352 <rule pattern=";">
353 <token type="Punctuation"/>
354 </rule>
355 <rule pattern="\{">
356 <token type="Punctuation"/>
357 <push/>
358 </rule>
359 <rule pattern="\}">
360 <token type="Punctuation"/>
361 <pop depth="1"/>
362 </rule>
363 </state>
364 <state name="whitespace">
365 <rule pattern="^#if\s+0">
366 <token type="CommentPreproc"/>
367 <push state="if0"/>
368 </rule>
369 <rule pattern="^#">
370 <token type="CommentPreproc"/>
371 <push state="macro"/>
372 </rule>
373 <rule pattern="^(\s*(?:/[*].*?[*]/\s*)?)(#if\s+0)">
374 <bygroups>
375 <usingself state="root"/>
376 <token type="CommentPreproc"/>
377 </bygroups>
378 <push state="if0"/>
379 </rule>
380 <rule pattern="^(\s*(?:/[*].*?[*]/\s*)?)(#)">
381 <bygroups>
382 <usingself state="root"/>
383 <token type="CommentPreproc"/>
384 </bygroups>
385 <push state="macro"/>
386 </rule>
387 <rule pattern="\n">
388 <token type="Text"/>
389 </rule>
390 <rule pattern="\s+">
391 <token type="Text"/>
392 </rule>
393 <rule pattern="\\\n">
394 <token type="Text"/>
395 </rule>
396 <rule pattern="//(\n|[\w\W]*?[^\\]\n)">
397 <token type="CommentSingle"/>
398 </rule>
399 <rule pattern="/(\\\n)?[*][\w\W]*?[*](\\\n)?/">
400 <token type="CommentMultiline"/>
401 </rule>
402 <rule pattern="/(\\\n)?[*][\w\W]*">
403 <token type="CommentMultiline"/>
404 </rule>
405 </state>
406 <state name="literal_number_inner">
407 <rule pattern="\(">
408 <token type="Punctuation"/>
409 <push/>
410 </rule>
411 <rule pattern="\)">
412 <token type="Punctuation"/>
413 <pop depth="1"/>
414 </rule>
415 <rule>
416 <include state="statement"/>
417 </rule>
418 </state>
419 <state name="statement">
420 <rule>
421 <include state="whitespace"/>
422 </rule>
423 <rule>
424 <include state="statements"/>
425 </rule>
426 <rule pattern="[{}]">
427 <token type="Punctuation"/>
428 </rule>
429 <rule pattern=";">
430 <token type="Punctuation"/>
431 <pop depth="1"/>
432 </rule>
433 </state>
434 <state name="oc_forward_classname">
435 <rule pattern="([a-zA-Z$_][\w$]*)(\s*,\s*)">
436 <bygroups>
437 <token type="NameClass"/>
438 <token type="Text"/>
439 </bygroups>
440 <push state="oc_forward_classname"/>
441 </rule>
442 <rule pattern="([a-zA-Z$_][\w$]*)(\s*;?)">
443 <bygroups>
444 <token type="NameClass"/>
445 <token type="Text"/>
446 </bygroups>
447 <pop depth="1"/>
448 </rule>
449 </state>
450 <state name="literal_array_inner">
451 <rule pattern="\[">
452 <token type="Punctuation"/>
453 <push/>
454 </rule>
455 <rule pattern="\]">
456 <token type="Punctuation"/>
457 <pop depth="1"/>
458 </rule>
459 <rule>
460 <include state="statement"/>
461 </rule>
462 </state>
463 <state name="literal_dictionary">
464 <rule pattern="\}">
465 <token type="Literal"/>
466 <pop depth="1"/>
467 </rule>
468 <rule>
469 <include state="statement"/>
470 </rule>
471 </state>
472 <state name="oc_ivars">
473 <rule>
474 <include state="whitespace"/>
475 </rule>
476 <rule>
477 <include state="statements"/>
478 </rule>
479 <rule pattern=";">
480 <token type="Punctuation"/>
481 </rule>
482 <rule pattern="\{">
483 <token type="Punctuation"/>
484 <push/>
485 </rule>
486 <rule pattern="\}">
487 <token type="Punctuation"/>
488 <pop depth="1"/>
489 </rule>
490 </state>
491 <state name="string">
492 <rule pattern=""">
493 <token type="LiteralString"/>
494 <pop depth="1"/>
495 </rule>
496 <rule pattern="\\([\\abfnrtv"\']|x[a-fA-F0-9]{2,4}|u[a-fA-F0-9]{4}|U[a-fA-F0-9]{8}|[0-7]{1,3})">
497 <token type="LiteralStringEscape"/>
498 </rule>
499 <rule pattern="[^\\"\n]+">
500 <token type="LiteralString"/>
501 </rule>
502 <rule pattern="\\\n">
503 <token type="LiteralString"/>
504 </rule>
505 <rule pattern="\\">
506 <token type="LiteralString"/>
507 </rule>
508 </state>
509 </rules>
510</lexer>
View as plain text