objective-c.xml

  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="(?&lt;=\\)\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.*?(?&lt;!\\)\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.*?(?&lt;!\\)\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="@&#34;">
111        <token type="LiteralString"/>
112        <push state="string"/>
113      </rule>
114      <rule pattern="@(YES|NO)">
115        <token type="LiteralNumber"/>
116      </rule>
117      <rule pattern="@&#39;(\\.|\\[0-7]{1,3}|\\x[a-fA-F0-9]{1,2}|[^\\\&#39;\n])&#39;">
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?)(&#34;)">
183        <bygroups>
184          <token type="LiteralStringAffix"/>
185          <token type="LiteralString"/>
186        </bygroups>
187        <push state="string"/>
188      </rule>
189      <rule pattern="(L?)(&#39;)(\\.|\\[0-7]{1,3}|\\x[a-fA-F0-9]{1,2}|[^\\\&#39;\n])(&#39;)">
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="[~!%^&amp;*+=|?:&lt;&gt;/-]">
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="&#34;">
493        <token type="LiteralString"/>
494        <pop depth="1"/>
495      </rule>
496      <rule pattern="\\([\\abfnrtv&#34;\&#39;]|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="[^\\&#34;\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>