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>