�
|�e�Y � �� � d Z ddlZddlmZmZmZmZmZmZm Z m
Z
ddlmZm
Z
mZmZmZmZmZmZmZ ddlmZmZ g d�Zd� Z G d� d ee� � Z G d
� d ee� � Z G d� d
e� Z G d� de� Zy)z�
pygments.lexers.objective
~~~~~~~~~~~~~~~~~~~~~~~~~
Lexers for Objective-C family languages.
:copyright: Copyright 2006-2023 by the Pygments team, see AUTHORS.
:license: BSD, see LICENSE for details.
� N)�
RegexLexer�include�bygroups�using�this�words�inherit�default) �Text�Keyword�Name�String�Operator�Number�Punctuation�Literal�Comment)�CLexer�CppLexer)�ObjectiveCLexer�ObjectiveCppLexer�
LogosLexer�
SwiftLexerc �~ � ��� t j d� �t j d� � G ��� fd�d� � }|S )z^
Generate a subclass of baselexer that accepts the Objective-C syntax
extensions.
z @(?:end|implementation|protocol)z<\[\s*[a-zA-Z_]\w*\s+(?:[a-zA-Z_]\w*\s*\]|(?:[a-zA-Z_]\w*)?:)c � �� e Zd ZdZdedfdefdej fdej fdej fdej fd ej fd
ej fdedfd
edfdedf edd�� e
f edd�� e
j fdej fdej fde
j fdej fd ee
e� dfd ee
e� dfdefegd eej* eej* ee� dfd eej* eej* � d!fd" eej* eej, ee� dfd# eej* eej, � d!fd$ eej* ee� dfd%ej* d!fgd& eej* e� d'fd( eej* e� d!fg ed)� ed*� d+efd,ed-fd.ed!fgd/ eee ee� eej4 � d0feg ed)� d1efd2efd3 e ee� eej6 � fd4ej4 fd+ed!fd,ed5f ed!� gd6ed7fd8ed!f ed9� gd6ed-fd8ed!f ed9� gd:ed;fd<ed!f ed9� gd:ed-fd<ed!f ed9� gd.ed!f ed9� gd=�Z� �fd>�ZdA�fd?� Zy@)B�-objective.<locals>.GeneratedObjectiveCVariantzU
Implements Objective-C syntax on top of an existing C family lexer.
�@"�stringz @(YES|NO)z3@'(\\.|\\[0-7]{1,3}|\\x[a-fA-F0-9]{1,2}|[^\\\'\n])'z&@(\d+\.\d*|\.\d+|\d+)[eE][+-]?\d+[lL]?z@(\d+\.\d*|\.\d+|\d+[fF])[fF]?z@0x[0-9a-fA-F]+[Ll]?z
@0[0-7]+[Ll]?z @\d+[Ll]?z@\(�literal_numberz@\[�
literal_arrayz@\{�literal_dictionary)*z @selectorz@privatez
@protectedz@publicz@encodez
@synchronizedz@tryz@throwz@catchz@finallyz@endz @propertyz@synthesize�__bridge�__bridge_transfer�__autoreleasing�__block�__weak�__strong�weak�strong�copy�retain�assign�unsafe_unretained�atomic� nonatomic�readonly� readwrite�setter�getter�typeof�in�out�inout�release�classz@dynamicz @optionalz @requiredz@autoreleasepoolz@import�\b��suffix) �id�instancetype�Class�IMP�SEL�BOOL�IBOutlet�IBAction�unicharz@(true|false|YES|NO)\nz(YES|NO|nil|self|super)\bz3(Boolean|UInt8|SInt8|UInt16|SInt16|UInt32|SInt32)\bz(TRUE|FALSE)\bz!(@interface|@implementation)(\s+))�#pop�oc_classnamez(@class|@protocol)(\s+))rF �oc_forward_classname�@z7([a-zA-Z$_][\w$]*)(\s*:\s*)([a-zA-Z$_][\w$]*)?(\s*)(\{))rF �oc_ivars�.([a-zA-Z$_][\w$]*)(\s*:\s*)([a-zA-Z$_][\w$]*)?rF z6([a-zA-Z$_][\w$]*)(\s*)(\([a-zA-Z$_][\w$]*\))(\s*)(\{)z-([a-zA-Z$_][\w$]*)(\s*)(\([a-zA-Z$_][\w$]*\))z([a-zA-Z$_][\w$]*)(\s*)(\{)�([a-zA-Z$_][\w$]*)z([a-zA-Z$_][\w$]*)(\s*,\s*)rH z([a-zA-Z$_][\w$]*)(\s*;?)�
whitespace�
statements�;z\{�#pushz\}z/^([-+])(\s*)(\(.*?\))?(\s*)([a-zA-Z$_][\w$]*:?)�method�,z\.\.\.z (\(.*?\))(\s*)([a-zA-Z$_][\w$]*)z[a-zA-Z$_][\w$]*:�function�\(�literal_number_inner�\)� statementz\[�literal_array_innerz\])rN rG rH rJ �rootrQ r rU r rX r! c � �� �j | � ryd| v ryt j d| � ry�j | � ryy)N� �?r g�������?z@[0-9]+gffffff�?r )�search�re)�text�_oc_keywords�_oc_messages ���;/usr/lib/python3/dist-packages/pygments/lexers/objective.py�analyse_textz:objective.<locals>.GeneratedObjectiveCVariant.analyse_text� sC �� ��"�"�4�(���������9�d�+���#�#�D�)��� c 3 �� �K � ddl m}m}m} � j | ||� D ]M \ }}}|t
u s|t
j u r&||v s||v s||v rt
j j }|||f�� �O y �w�Nr )�COCOA_INTERFACES�COCOA_PROTOCOLS�COCOA_PRIMITIVES) �pygments.lexers._cocoa_builtinsrf rg rh �get_tokens_unprocessedr
r? �Builtin�Pseudo)
�selfr^ �stackrf rg rh �index�token�value� baselexers
�ra rj zDobjective.<locals>.GeneratedObjectiveCVariant.get_tokens_unprocessed� s �� �� �
2�
2� �4�4�T�4��G�
*�#��u�e��D�=�E�T�Z�Z�$7�� 0�0�E�_�4L��#3�3� $��� 3� 3���U�E�)�)�
*�s �A/A2N))rY ) �__name__�
__module__�__qualname__�__doc__r r �Char�Float�Hex�Oct�Integerr r r �Typer
rk r r r r r? �Labelr r r �Function�Variabler
�tokensrb rj )r_ r` rr s ���ra �GeneratedObjectiveCVariantr * s� �� � � ���)��v�&�G����U�:�F�L�L�I�2�F�L�L�A�(�&�*�*�5�!�6�:�:�.��v�~�~�.���"2�3���/�2���"6�7�� @� IN�O� � � � ;�CH�J����� +�D�L�L�9�-�t�|�|�<�G����V�"�D�L�L�1�5�x���7N�)�+�+�X�g�t�-D�1�3� �{�#��K&�R L��$�*�*�d�D�J�J��k�J�%�'� C��$�*�*�d�D�J�J�7��A� K��$�*�*�d�D�J�J��k�J�%�'� B��$�*�*�d�D�J�J�7��A� 0��$�*�*�d�K�8�:N�P�&��
�
�F�;�!�& |