o
    Hëi¸ ã                   @   s¢  d Z ddlZddlZddlZddlmZ ddlmZ e dej	¡e dej	¡e d¡e d¡d	œZ
i d
e d¡“de d¡“de d¡“de d¡“de d¡“de d¡“de d¡“de d¡“de d¡“de d¡“de d¡“d e d!¡“d"e d#¡“d$e d%¡“d&e d'¡“d(e d)¡“d*e d+¡“e d,¡e d-¡e d.¡e d/¡e d0¡e d1¡e d2¡e d3¡e d4¡e d5¡e d6¡d7œ¥Ze d8¡e d9¡e d:¡d;œZe d<¡e d=¡e d>¡e d?¡d@œZi dAe dBej¡“dCe dD¡“dEe dF¡“dGe dH¡“dIe dJ¡“dKe dL¡“dMe dN¡“dOe dP¡“dQe dR¡“dSe dT¡“dUe dV¡“dWe dX¡“dYe dZ¡“d[e d\¡“d]e d^¡“d_e d`¡“dae db¡“e dc¡e dd¡deœ¥Zi e
¥dfdg„ e ¡ D ƒ¥dhdg„ e ¡ D ƒ¥didg„ e ¡ D ƒ¥djdg„ e ¡ D ƒ¥Zdkdl„ Zdmdn„ Zdodp„ Zdqdr„ Zdsdt„ Zdudv„ Zdwdx„ Zdydz„ Zd{d|„ Zd}d~„ Zdd€„ Zdd‚„ Zdƒd„„ Zd…d†„ Zd‡dˆ„ Z d‰dŠ„ Z!d‹dŒ„ Z"ddŽ„ Z#dS )u>   
æ ¸å¿ƒå¤„ç†æ¨¡å—ï¼šæä¾›æ–‡ä»¶å†…å®¹å¤„ç†çš„æ ¸å¿ƒåŠŸèƒ½
é    N)Úcustom_util)Úe_print_annotationz:[-\+]\s*\([^)]*\)\s*[^{]*\{([^{}]*(?:\{[^{}]*\}[^{}]*)*)\}z!\{([^{}]*(?:\{[^{}]*\}[^{}]*)*)\}ú^[a-zA-Z_][a-zA-Z0-9_]*$ú^\s*[-\+]\s*\()Úmethod_bodyÚblock_contentÚvariable_nameÚmethod_startÚbasic_typesz–(?:BOOL|NSInteger|NSUInteger|CGFloat|int|float|double|long|short|char|size_t|NSTimeInterval|CGPoint|CGSize|CGRect|NSRange|UIEdgeInsets)\s+(\w+)\s*[=;]Úpointer_typesz([A-Z]\w+)\s*\*\s*(\w+)\s*[=;]Úblock_paramz\^[^{]*\(\s*\w+\s+(\w+)\s*\)Ú	block_varz__block\s+\w+\s+(\w+)\s*=Úfor_loopz3for\s*\(\s*(?:NSInteger|NSUInteger|int)\s+(\w+)\s*=Úblock_internal_pointerz!\^[^{]*\(\s*\w+\s*\*\s*(\w+)\s*\)Úblock_internal_typez!\^[^{]*\(\s*[A-Z]\w+\s+(\w+)\s*\)Úpointer_no_assignz([A-Z]\w+)\s*\*\s*(\w+)\s*;Úpointer_method_callz ([A-Z]\w+)\s*\*\s*(\w+)\s*=\s*\[Úpointer_propertyz#([A-Z]\w+)\s*\*\s*(\w+)\s*=\s*\w+\.Úbasic_no_assignz“(?:BOOL|NSInteger|NSUInteger|CGFloat|int|float|double|long|short|char|size_t|NSTimeInterval|CGPoint|CGSize|CGRect|NSRange|UIEdgeInsets)\s+(\w+)\s*;Úcomplex_initz(\w+)\s*\*\s*(\w+)\s*=\s*\[\[Úerror_paramzerror:\s*&\s*(\w+)Úgeneric_pointerz%([A-Z]\w+)\s*<[^>]*>\s*\*\s*(\w+)\s*=Úcomplex_method_callz=(\w+)\s*\*\s*(\w+)\s*=\s*\[\w+\s+\w+[^;]*error:\s*&\w+[^;]*\]Úlong_type_methodz)([A-Z][a-zA-Z0-9_]{10,})\s+(\w+)\s*=\s*\[Úlong_type_generalz([A-Z]\w{10,})\s+(\w+)\s*=z([A-Z]\w+)\s+(\w+)\s*=\s*\[z<(?:unsigned|signed)\s+(?:int|long|short|char)\s+(\w+)\s*[=;]z!for\s*\(\s*NSUInteger\s+(\w+)\s*=z%for\s*\(\s*(\w+)\s+\*\s*(\w+)\s+in\s+z3\(void\s*\(\s*\^\s*\)\s*\([^)]*\*\s*(\w+)\s*\)\s*\)z1\(void\s*\(\s*\^\s*\)\s*\([^)]*\s+(\w+)\s*\)\s*\)z5\(\s*\w+\s*\(\s*\^\s*\)\s*\([^)]*\*\s*(\w+)\s*\)\s*\)z3\(\s*\w+\s*\(\s*\^\s*\)\s*\([^)]*\s+(\w+)\s*\)\s*\)z%\^[^{]*\{[^}]*?(\w+)\s*\*\s*(\w+)\s*=zT\^[^{]*\{[^}]*?(?:NSInteger|NSUInteger|CGFloat|BOOL|int|float|double|id)\s+(\w+)\s*=z (?:\^|\{)[^}]*?(\w+)\s+(\w+)\s*=)Úbasic_method_callÚunsigned_signedÚfor_nsuintegerÚfor_in_loopÚmethod_sig_void_pointerÚmethod_sig_void_typeÚmethod_sig_return_pointerÚmethod_sig_return_typeÚblock_var_pointerÚblock_var_basicÚblock_var_simplezstatic\s+\w+\s+(\w+)\s*[;=]z static\s+\w+\s*\*\s*(\w+)\s*[;=]z#static\s+const\s+\w+\s+(\w+)\s*[;=])ÚbasicÚpointerÚconst_basiczextern\s+\w+\s+(\w+)\s*[;=]z extern\s+\w+\s*\*\s*(\w+)\s*[;=]z)extern\s+const\s+\w+\s*\*?\s*(\w+)\s*[;=]z1extern\s+([A-Z]\w+)\s*<[^>]*>\s*\*\s*(\w+)\s*[;=])Úextern_basicÚextern_pointerÚextern_constÚextern_genericÚ	multilinez8#define\s+(\w+)(?:\([^)]*\))?\s+[^\\]*(?:\\\s*\n[^\\]*)*Úfunction_macroz3#define\s+([a-zA-Z_][a-zA-Z0-9_]*)\s*\([^)]*\)\s+.*Ústring_macroz.#define\s+([a-zA-Z_][a-zA-Z0-9_]*)\s+@?"[^"]*"Únumber_macrozF#define\s+([a-zA-Z_][a-zA-Z0-9_]*)\s+[-+]?\d+(?:\.\d+)?[fFlL]?(?:\s|$)Ú
paren_exprz.#define\s+([a-zA-Z_][a-zA-Z0-9_]*)\s+\([^)]+\)Úbit_operationz5#define\s+([a-zA-Z_][a-zA-Z0-9_]*)\s+\([^)]*<<[^)]*\)Úconditionalz.#define\s+([a-zA-Z_][a-zA-Z0-9_]*)\s+.*\?.*:.*Ú	type_castz4#define\s+([a-zA-Z_][a-zA-Z0-9_]*)\s+\(\([^)]+\).*\)Úfunction_callzD#define\s+([a-zA-Z_][a-zA-Z0-9_]*)\s+[a-zA-Z_][a-zA-Z0-9_]*\([^)]*\)Úcompound_exprz0#define\s+([a-zA-Z_][a-zA-Z0-9_]*)\s+.*[+\-*/].*Úarray_structz.#define\s+([a-zA-Z_][a-zA-Z0-9_]*)\s+\{[^}]*\}Úspecial_symbolz.#define\s+([a-zA-Z_][a-zA-Z0-9_]*)\s+[^\w\s].*Ú	attributez3#define\s+([a-zA-Z_][a-zA-Z0-9_]*)\s+__[a-zA-Z_]+.*Ú	stringifyz1#define\s+([a-zA-Z_][a-zA-Z0-9_]*)\s+#[a-zA-Z_].*Úconcatenatez+#define\s+([a-zA-Z_][a-zA-Z0-9_]*)\s+.*##.*Úmulti_identifierz<#define\s+([a-zA-Z_][a-zA-Z0-9_]*)\s+[a-zA-Z_][a-zA-Z0-9_.]*Úemptyz&#define\s+([a-zA-Z_][a-zA-Z0-9_]*)\s*$z)#define\s+([a-zA-Z_][a-zA-Z0-9_]*)\s+\S.*z+#define\s+([a-zA-Z_][a-zA-Z0-9_]*)(?:\s.*)?)Úbasic_valueÚgeneralc                 C   ó   i | ]
\}}d |› |“qS )Úlocal_© ©Ú.0ÚkÚvrB   rB   úB/data/storage/obfuscation/tool/ObjectiveC/oc_custom/custom_core.pyÚ
<dictcomp>k   ó    rH   c                 C   r@   )Ústatic_rB   rC   rB   rB   rG   rH   l   rI   c                 C   r@   )Úconst_rB   rC   rB   rB   rG   rH   m   rI   c                 C   r@   )Údefine_rB   rC   rB   rB   rG   rH   n   rI   c                 C   s$   t  | ¡} t  | ¡} |  dd¡} | S )uE   ç»Ÿä¸€çš„å†…å®¹æ¸…ç†å‡½æ•°ï¼šåŽ»æ³¨é‡Šã€åŽ»æ‰“å°ã€åŽ»ç©ºå­—ç¬¦ä¸²z@""Ú )r   Úsearch_annotation_and_deleteÚsearch_print_and_deleteÚreplace©ÚcontentrB   rB   rG   Úclean_contentq   s   

rS   c               
   C   sâ   zRt j t j t j t¡¡dd¡} t| ddd)}tj| ¡ tj	d}|r:t
|tƒr:d|v r:|d W  d  ƒ W S W d  ƒ n1 sDw   Y  W g d
¢S W g d
¢S  typ } ztd	t|ƒ› ƒ W Y d}~g d
¢S d}~ww )u   
    èŽ·å–å±žæ€§å’Œæ–¹æ³•çš„æè¿°è¯åˆ—è¡¨
    è¿™äº›æè¿°è¯ç”¨äºŽæ¸…ç†å±žæ€§å£°æ˜Žå’Œæ–¹æ³•å£°æ˜Žä¸­çš„å¯ç”¨æ€§æ ‡æ³¨
    Úoc_functionza_yaml.yamlÚrzutf-8)Úencoding)ÚLoaderÚPropertyDescribeWordNu    è¯»å–æè¿°è¯åˆ—è¡¨æ—¶å‡ºé”™: )Ú__OSX_AVAILABLE_STARTINGÚ__OSX_AVAILABLE_BUT_DEPRECATEDÚNS_AVAILABLEÚNS_DEPRECATEDÚAPI_AVAILABLEÚAPI_UNAVAILABLEÚNS_SWIFT_NAMEÚ__TVOS_AVAILABLEÚ__WATCHOS_AVAILABLEÚNS_DESIGNATED_INITIALIZERÚNS_UNAVAILABLEÚDEPRECATED_ATTRIBUTEÚ__deprecatedÚ__attribute__ÚCF_RETURNS_RETAINEDÚCF_RETURNS_NOT_RETAINED)ÚosÚpathÚjoinÚdirnameÚ__file__ÚopenÚyamlÚloadÚreadÚ
FullLoaderÚ
isinstanceÚdictÚ	ExceptionÚprintÚstr)Ú	yaml_pathÚ	yaml_fileÚ	yaml_dataÚerB   rB   rG   Úget_describe_wordsy   s"    ý€ øü€ür|   c                 C   s@   t jdd| t jd} t jdd| t jd} t jdd| t jd} | S )u   ç§»é™¤å±žæ€§å£°æ˜Žéƒ¨åˆ†z@property\s*\([^)]*\)[^;]*;rM   ©Úflagsz@interface\s+\w+[^@]*?@endz@interface\s+\w+[^{@\n]*\n)ÚreÚsubÚ	MULTILINEÚDOTALLrQ   rB   rB   rG   Úremove_property_declaration‘   s   rƒ   c           #   	   C   sj  t | ƒ} tƒ }g }|  d¡D ]¡}d|v r«|}dd„ }g d¢}|D ]}|||ƒ}q"g d¢}|D ]	}	t |	d|¡}q0t dd	|¡ ¡ }| ¡  d
¡sP| ¡ d
 }d|v r~d|v r~| d¡}
| 	d¡}|
|k ru|d|
… ||d d…  }nnd|v r~d|v sXd|v s†d|v r½t 
d|¡}|r | d¡}t dd|¡}| ||¡}t dd|¡}t dd|¡}t dd	|¡}t dd
|¡}nîd|v r| dd¡}t 
d|¡}|râ| d¡}t dd|¡}| ||¡}t dd|¡}t dd	|¡}t dd|¡}t dd|¡}t dd
|¡}n¥t 
d|¡}|r«| d¡}t dd|¡}|| |¡t|ƒ d…  ¡ }g d¢}d }|D ])}| |¡rZ|}|t|ƒd…  ¡ }|› d	|› d	| d
¡d! › d
}d"} nq2|s«| ¡ }t|ƒd#krˆ|d! }d	 |dd… ¡ d
¡d! }|› d	|› d	|› d
}n#t 
d$|¡}|r«| d¡}| d#¡ d
¡d! }|› d	|› d	|› d
}| |¡ qd |¡} g d%¢}i }|  d¡D ]K}d|v rd}|D ]}	t 
|	|¡}|rÞ| d¡} nqÌ|såqÁt 
d&|¡}t 
d'|¡}|rù| d¡nd}|r| d¡nd}||f||< qÁg }|D ]}	t |	| ¡} | d(d)„ | D ƒ¡ qt|ƒ}!t|!d*d+„ d,}"|"|fS )-u0   ä¸“é—¨ç”¨äºŽå¤„ç†å’Œæå–å±žæ€§å†…å®¹çš„å‡½æ•°Ú
z	@propertyc           	      S   sÜ   t  |¡› d}| }	 t  ||¡}|s	 |S | ¡ }| ¡ d }d}|d }|t|ƒk rS|dkrS|| dkr;|d7 }n
|| dkrE|d8 }|d7 }|t|ƒk rS|dks0|dkrd|d|… ||d…  }n	|d|… }	 |S q)u0   ç§»é™¤æŒ‡å®šå…³é”®å­—åŽé¢çš„å¹³è¡¡æ‹¬å·å†…å®¹z\s*\(Té   r   ú(ú)N)r   ÚescapeÚsearchÚstartÚendÚlen)	ÚtextÚkeywordÚpatternÚresultÚmatchrŠ   Úparen_startÚparen_countÚposrB   rB   rG   Úremove_balanced_parentheses®   s0   ê
ûåz=process_property_content.<locals>.remove_balanced_parentheses)
ÚAPI_DEPRECATEDÚAPI_DEPRECATED_WITH_REPLACEMENTr]   r^   r[   r\   r_   rf   rY   rZ   )zE\b(?:NS_DESIGNATED_INITIALIZER|NS_UNAVAILABLE|DEPRECATED_ATTRIBUTE)\bz@\b(?:__deprecated|CF_RETURNS_RETAINED|CF_RETURNS_NOT_RETAINED)\bz,\b(?:__TVOS_AVAILABLE|__WATCHOS_AVAILABLE)\brM   ú\s+ú ú;ú<ú>Nr…   ú^z(^z(@property\s*\([^)]*\))z
\(\s*\^\s*z(^ z\)\s*\(z)(z\s+;Ú*z * z
(\w+)\s+\*z\1 *z\(\s+r†   z\s+\)r‡   )ÚBOOLÚCGFloatÚ	NSIntegerÚ
NSUIntegerÚintÚfloatÚdoubleÚNSTimeIntervalFr   Té   z'([A-Z][a-zA-Z0-9]+)([a-z][a-zA-Z0-9_]*))z&@property\([^)]*\)[^*;]*\*\s*(\w+)\s*;z$@property\([^)]*\)\s+\w+\s+(\w+)\s*;z=@property\([^)]*\)[^(]*\(\s*\^\s*(\w+)\s*\)(?:\([^)]*\))?\s*;zsetter\s*=\s*(\w+)zgetter\s*=\s*(\w+)c                 S   s   g | ]}|r|‘qS rB   rB   ©rD   r‘   rB   rB   rG   Ú
<listcomp>y  s    z,process_property_content.<locals>.<listcomp>c                 S   ó   |   d¡| fS ©NÚ_©Ú
startswith©ÚxrB   rB   rG   Ú<lambda>  ó    z*process_property_content.<locals>.<lambda>©Úkey)rS   r|   Úsplitr   r€   ÚstripÚrstripÚendswithÚfindÚrfindr‰   ÚgrouprP   ÚindexrŒ   r®   rk   ÚappendÚfindallÚextendÚsetÚsorted)#rR   Úproperty_describe_wordsÚprocessed_linesÚlineÚoriginal_liner•   Úapi_keywordsrŽ   Úsimple_patternsr   rŠ   r‹   Úprop_decl_matchÚ	prop_declÚclean_prop_declÚ	remainingr
   Ú
found_typeÚ	type_nameÚ	type_partÚ	name_partÚpartsÚtype_name_matchÚproperty_patternsÚproperty_custom_accessorsÚ
prop_matchr‘   Úcustom_setterÚcustom_getterÚsetter_nameÚgetter_nameÚall_propertiesÚmatchesÚunique_propertiesÚsorted_propertiesrB   rB   rG   Úprocess_property_contentš   sÆ   
#

ù




 ù	



þ€rÝ   c                 C   sÆ   t | ƒ} d}t || tj¡}g }|D ]@}| ¡  d¡}|D ]4}| ¡ }|s&qt dd|¡}d}t ||¡}| |¡ |r=qddg}	|	D ]}
t |
|¡}| |¡ qCqqtt	|ƒƒ}t
|dd	„ d
}|S )u6   ä¸“é—¨ç”¨äºŽå¤„ç†å’Œæå–å®žä¾‹å˜é‡å†…å®¹çš„å‡½æ•°zB@interface\s+\w+\s*(?:\(\s*\w*\s*\))?\s*(?:<[^>]*>)?\s*\{([^}]*)\}r„   ú//.*$rM   z$(?:[\w*]+\s+)+([\w]+(?:_[\w]+)*)\s*;z\b([\w]+(?:_[\w]+)*)\s*;z([\w]+(?:_[\w]+)*)\s*,c                 S   rª   r«   r­   r¯   rB   rB   rG   r±   ¶  r²   z4process_instance_variables_content.<locals>.<lambda>r³   )rS   r   r¾   r‚   r¶   rµ   r€   r¿   ÚlistrÀ   rÁ   )rR   Úivar_block_patternÚblocksÚ	all_ivarsÚblockÚlinesrÄ   Útype_var_patternÚtype_var_matchesÚvar_patternsr   rÚ   Úunique_ivarsÚsorted_ivarsrB   rB   rG   Ú"process_instance_variables_contentƒ  s6   
þþå rê   c                 C   s*   g }t | ƒ} t| ƒ} | t| ƒ¡ t|ƒS )u:   ä¸“é—¨ç”¨äºŽå¤„ç†å’Œæå–æ–¹æ³•å†…å±€éƒ¨å˜é‡çš„å‡½æ•° )rS   rƒ   r¿   Ú_extract_local_variables_fastÚ_filter_and_sort_variables©rR   Úall_variablesrB   rB   rG   Úprocess_local_variables_contentº  s
   rï   c                 C   sF   t | ƒ} t| ƒ} g }| t| ƒ¡ | t| ƒ¡ | t| ƒ¡ t|ƒS )u   ä¼˜åŒ–åŽçš„å¸¸é‡æå–å‡½æ•°)rS   rƒ   r¿   Ú_extract_static_variables_fastÚ_extract_const_variables_fastÚextract_define_macrosrì   rí   rB   rB   rG   Úprocess_constants_contentÉ  s   ró   c                 C   sX   | sg S t t | ¡ƒ}g }td }d}|D ]}|r)t|ƒ|kr)| |¡r)| |¡ q|S )u<   å¿«é€Ÿè¿‡æ»¤å’ŒæŽ’åºå˜é‡ï¼ˆä½¿ç”¨é¢„ç¼–è¯‘æ¨¡å¼ä¼˜åŒ–ï¼‰r   r…   )rß   rt   ÚfromkeysÚ_COMPILED_PATTERNSrŒ   r‘   r½   )Ú	variablesÚunique_varsÚfiltered_varsÚvar_patternÚ
min_lengthÚvarrB   rB   rG   rì   Û  s   ÿ
€rì   c                 C   sª  g }t jdd| t jd}t  dd|¡}| td  |¡¡ td  |¡}| dd„ |D ƒ¡ | td	  |¡¡ | td
  |¡¡ | td  |¡¡ | td  |¡¡ td  |¡}| dd„ |D ƒ¡ td  |¡}| dd„ |D ƒ¡ td  |¡}| dd„ |D ƒ¡ | td  |¡¡ td  |¡}| dd„ |D ƒ¡ | td  |¡¡ td  |¡}| dd„ |D ƒ¡ td  |¡}| dd„ |D ƒ¡ td  |¡}	| dd„ |	D ƒ¡ td  |¡}
| dd„ |
D ƒ¡ td  |¡}| d d„ |D ƒ¡ | td!  |¡¡ | td"  |¡¡ | td#  |¡¡ td$  |¡}| d%d„ |D ƒ¡ | td&  |¡¡ | td'  |¡¡ | td(  |¡¡ | td)  |¡¡ td*  |¡}| d+d„ |D ƒ¡ | td,  |¡¡ td-  |¡}| d.d„ |D ƒ¡ t  d/|¡}| |¡ g d0¢}|D ];}t  ||¡}|D ]/}t|tƒrÏt|ƒd1krÏ|d2 }|rÏ| 	¡ sÏ|d3  	¡ rÊt|ƒd4ksÏ| 
|¡ q¡q—|S )5u`   å¿«é€Ÿæå–å±€éƒ¨å˜é‡ï¼ˆæ”¹è¿›ç‰ˆï¼šç›´æŽ¥ä»Žæ•´ä¸ªå†…å®¹æå–ï¼Œä¸ä¾èµ–æ–¹æ³•ä½“æå–ï¼‰z^\s*static\s+[^;]+;rM   r}   zstatic\s+[^=;]+[=;][^;]*;Úlocal_basic_typesÚlocal_pointer_typesc                 S   ó    g | ]}t |ƒd kr|d ‘qS ©r§   r…   ©rŒ   r¨   rB   rB   rG   r©     ó     z1_extract_local_variables_fast.<locals>.<listcomp>Úlocal_block_paramÚlocal_block_internal_pointerÚlocal_block_internal_typeÚlocal_block_varÚlocal_pointer_no_assignc                 S   rþ   rÿ   r   r¨   rB   rB   rG   r©     r  Úlocal_pointer_method_callc                 S   rþ   rÿ   r   r¨   rB   rB   rG   r©     r  Úlocal_pointer_propertyc                 S   rþ   rÿ   r   r¨   rB   rB   rG   r©     r  Úlocal_basic_no_assignÚlocal_complex_initc                 S   rþ   rÿ   r   r¨   rB   rB   rG   r©     r  Úlocal_error_paramÚlocal_generic_pointerc                 S   rþ   rÿ   r   r¨   rB   rB   rG   r©   &  r  Úlocal_complex_method_callc                 S   rþ   rÿ   r   r¨   rB   rB   rG   r©   *  r  Úlocal_long_type_methodc                 S   rþ   rÿ   r   r¨   rB   rB   rG   r©   .  r  Úlocal_long_type_generalc                 S   rþ   rÿ   r   r¨   rB   rB   rG   r©   1  r  Úlocal_basic_method_callc                 S   rþ   rÿ   r   r¨   rB   rB   rG   r©   5  r  Úlocal_unsigned_signedÚlocal_for_loopÚlocal_for_nsuintegerÚlocal_for_in_loopc                 S   rþ   rÿ   r   r¨   rB   rB   rG   r©   @  r  Úlocal_method_sig_void_pointerÚlocal_method_sig_void_typeÚlocal_method_sig_return_pointerÚlocal_method_sig_return_typeÚlocal_block_var_pointerc                 S   rþ   rÿ   r   r¨   rB   rB   rG   r©   K  r  Úlocal_block_var_basicÚlocal_block_var_simplec                 S   rþ   rÿ   r   r¨   rB   rB   rG   r©   R  r  z(\^[^{]*\(\s*\w+\s*\*\s*_\w+\s+(\w+)\s*\))
z%([A-Z][a-zA-Z0-9_]*)\s*\*\s*(\w+)\s*=z%([A-Z][a-zA-Z0-9_]*)\s*\*\s*(\w+)\s*;z*([A-Z][a-zA-Z0-9_]*)\s*\*\s*(\w+)\s*=\s*\[z-([A-Z][a-zA-Z0-9_]*)\s*\*\s*(\w+)\s*=\s*\w+\.z/([A-Z][a-zA-Z0-9_]*)\s*<[^>]*>\s*\*\s*(\w+)\s*=z%([A-Z][a-zA-Z0-9_]*)\s+(\w+)\s*=\s*\[z,([A-Z][a-zA-Z0-9_]*)\s*\*\s*(\w+)\s*=\s*\[\[z2([A-Z][a-zA-Z0-9_]*)\s*\*\s*(\w+)\s*=\s*\[.*error:z,([A-Z][a-zA-Z0-9_]{8,})\s*\*?\s*(\w+)\s*[=;]zid\s*<[^>]*>\s*(\w+)\s*[=;]r§   éÿÿÿÿr   é   )r   r€   r   r¿   rõ   r¾   rs   ÚtuplerŒ   Úisupperr½   )rR   rö   Úfiltered_contentÚpointer_matchesÚmethod_matchesÚproperty_matchesÚinit_matchesÚgeneric_matchesÚcomplex_matchesÚlong_method_matchesÚlong_general_matchesÚbasic_method_matchesÚfor_in_matchesÚblock_pointer_matchesÚblock_simple_matchesÚblock_param_enhancedÚuniversal_patternsr   rÚ   r‘   Úvar_namerB   rB   rG   rë   ò  s|   
 ÿ
þ
€ù	rë   c                 C   s¸   g }|  td  | ¡¡ |  td  | ¡¡ |  td  | ¡¡ g d¢}|D ]3}t || ¡}|D ](}t|tƒrXt|ƒdkrX|d }|rX| ¡ sX|d  ¡ rSt|ƒdksX| |¡ q0q&|S )	u9   å¿«é€Ÿæå–é™æ€å˜é‡ï¼ˆä½¿ç”¨é¢„ç¼–è¯‘æ¨¡å¼ä¼˜åŒ–ï¼‰Ústatic_basicÚstatic_pointerÚstatic_const_basic)z1static\s+([A-Z][a-zA-Z0-9_]*)\s*\*\s*(\w+)\s*[;=]z9static\s+const\s+([A-Z][a-zA-Z0-9_]*)\s*\*\s*(\w+)\s*[;=]z9static\s+([A-Z][a-zA-Z0-9_]*)\s*\*\s*const\s+(\w+)\s*[;=]z,static\s+([A-Z][a-zA-Z0-9_]*)\s+(\w+)\s*[;=]z5static\s+([A-Z][a-zA-Z0-9_]{8,})\s*\*?\s*(\w+)\s*[;=]zstatic\s+\w+\s+(_\w+)\s*[;=]r§   r  r   r  )	r¿   rõ   r¾   r   rs   r  rŒ   r  r½   )rR   rö   Úuniversal_static_patternsr   rÚ   r‘   r/  rB   rB   rG   rð   ˆ  s(   ÿ
þ
€ù	rð   c                 C   s  g }|  td  | ¡¡ |  td  | ¡¡ |  td  | ¡¡ td  | ¡}|  dd„ |D ƒ¡ g d¢}|D ]P}t || ¡}|D ]E}t|tƒrjt|ƒdkrj|d	 }|ri| ¡ si|d
  ¡ rdt|ƒdksi| |¡ qAt|t	ƒr†|r†| ¡ s†|d
  ¡ rt|ƒdks†| |¡ qAq7|S )u9   å¿«é€Ÿæå–å¸¸é‡å˜é‡ï¼ˆä½¿ç”¨é¢„ç¼–è¯‘æ¨¡å¼ä¼˜åŒ–ï¼‰Úconst_extern_basicÚconst_extern_pointerÚconst_extern_constÚconst_extern_genericc                 S   rþ   rÿ   r   r¨   rB   rB   rG   r©   È  r  z1_extract_const_variables_fast.<locals>.<listcomp>)z9extern\s+([A-Z][a-zA-Z0-9_]*)\s*\*\s*const\s+(\w+)\s*[;=]z9extern\s+const\s+([A-Z][a-zA-Z0-9_]*)\s*\*\s*(\w+)\s*[;=]z,extern\s+([A-Z][a-zA-Z0-9_]*)\s+(\w+)\s*[;=]z5extern\s+([A-Z][a-zA-Z0-9_]{8,})\s*\*?\s*(\w+)\s*[;=]zNextern\s+(?:BOOL|NSInteger|NSUInteger|CGFloat|int|float|double)\s+(\w+)\s*[;=]r§   r  r   r  )
r¿   rõ   r¾   r   rs   r  rŒ   r  r½   rw   )rR   rö   r%  Úuniversal_extern_patternsr   rÚ   r‘   r/  rB   rB   rG   rñ   ¹  s>   ÿ
þ
€
ÿ
þ
€ôrñ   c                 C   sX   g }t d  | ¡}| |¡ g d¢}|D ]}t |  | ¡}|D ]	}|r(| |¡ qq|S )u	  
    ä¸“é—¨æå– #define å®å®šä¹‰çš„å‡½æ•°ï¼ˆä½¿ç”¨é¢„ç¼–è¯‘æ¨¡å¼ä¼˜åŒ–ï¼‰
    æ”¯æŒå¤æ‚å®å®šä¹‰åŒ¹é…ï¼ŒåŒ…æ‹¬å¤šè¡Œå®ã€å‡½æ•°å¼å®ã€æ¡ä»¶å®ç­‰

    Args:
        content (str): åŽŸå§‹æ–‡ä»¶å†…å®¹

    Returns:
        list: å®å®šä¹‰åç§°åˆ—è¡¨
    Údefine_multiline)Údefine_function_macroÚdefine_string_macroÚdefine_number_macroÚdefine_paren_exprÚdefine_bit_operationÚdefine_conditionalÚdefine_type_castÚdefine_function_callÚdefine_compound_exprÚdefine_array_structÚdefine_special_symbolÚdefine_attributeÚdefine_stringifyÚdefine_concatenateÚdefine_multi_identifierÚdefine_emptyÚdefine_basic_valueÚdefine_general)rõ   r¾   r¿   r½   )rR   Údefine_constantsÚmultiline_macrosÚdefine_pattern_keysÚpattern_keyrÚ   r‘   rB   rB   rG   rò   î  s   

€þrò   c                 C   s„  t | ƒ} tƒ }g }|  d¡}g }d}d}|D ]³}| ¡ }t d|¡rX|r)| |¡ |}	|D ]}
|
|	v r>|	 |
¡d  ¡ }	 nq-|	}|	 d¡sK|	 d¡rU| |¡ d}d}qd}q|rÄ| d¡sv| d¡sv| d	¡sv| d
¡svt d|¡sv|s½t d|¡s„|r„|d| 7 }t 	dd|¡ ¡ }| |¡ d}d}t d|¡r·|}	|D ]}
|
|	v r±|	 |
¡d  ¡ }	 nq |	}d}q| |¡ q|d| 7 }q| |¡ q|rÚt 	dd|¡ ¡ }| |¡ d 
|¡}g }| d¡D ]}| ¡ }t d|¡r÷| |¡ qædd„ }|D ]š}g }t d|¡}|r“| d¡ ¡ }t 	dd|¡ ¡ }|r“d|vr7| ¡ d }|r6||ƒr6| |¡ n\| d¡}t|dd… ƒD ]N\}}| ¡ }|dkrk|rZ| ¡ d nd}|ri||ƒri| |¡ qD| ¡ }|r‘|d }t 	dd|¡}|r‘||ƒr‘t|ƒdkr‘| |¡ qD| |¡ qþtt|ƒƒ}g }|D ]}t|ƒdkr¶||ƒr¶| |¡ q£|jdd„ d |S )u0   ä¸“é—¨ç”¨äºŽå¤„ç†å’Œæå–æ–¹æ³•å†…å®¹çš„å‡½æ•°r„   rM   Fr   r   rš   Ú{Tú@ú#r™   r˜   c                 S   s0   | sdS t  d| ¡sdS |  dd¡dkrdS dS )u!   æ£€æŸ¥æ˜¯å¦æ˜¯æœ‰æ•ˆçš„æ–¹æ³•åFr   r¬   rM   T)r   r‘   rP   )Úmethod_namerB   rB   rG   Ú_is_valid_method_name_inline|  s   z=process_methods_content.<locals>._is_valid_method_name_inlinez[-\+]\s*\([^)]*\)\s*(.+)r…   z[;{]\s*$ú:Nr  z[()]+c                 S   rª   ©NrÀ   r­   r¯   rB   rB   rG   r±   Á  r²   z)process_methods_content.<locals>.<lambda>r³   )rS   r|   rµ   r¶   r   r‘   r½   r¸   r®   r€   rk   r‰   r»   Ú	enumeraterŒ   r¿   rß   rÀ   Úsort)rR   Údescribe_wordsÚall_methodsrä   rÃ   Úcurrent_methodÚin_method_declarationrÄ   Ústripped_lineÚcleaned_lineÚwordÚprocessed_contentÚmethod_linesrT  Úmethod_lineÚmethod_partsÚsignature_matchÚ	signaturerS  rÐ   ÚiÚpartÚwordsÚpotential_method_nameÚunique_methodsÚfiltered_methodsÚmethodrB   rB   rG   Úprocess_methods_content  sÔ   

þ

ÿþý
üû
þ


€

€


€ÿ
€ÿ
€rm  c                    sŠ   t ˆƒ‰h d£‰h d£‰ ‡ fdd„‰dd„ ‰‡‡‡fdd„}‡‡‡fd	d
„}g }| |ƒ ¡ | |ƒ ¡ tt |¡ƒ}|jdd„ d |S )uI   æå–Cè¯­è¨€å‡½æ•°åçš„ä¼˜åŒ–ç‰ˆæœ¬ - æ”¯æŒå¤–éƒ¨å£°æ˜Žå’Œå¤šè¡Œå‡½æ•°>   ÚfreeÚNSLogÚfopenÚfreadÚfseekÚftellÚscanfÚcallocÚdladdrÚfcloseÚfwriteÚmallocÚmemcmpÚmemcpyÚmemsetÚprintfÚrewindÚstrcatÚstrcmpÚstrcpyÚstrlenÚdlerrorÚfprintfÚmemmoveÚreallocÚsprintfÚCFRetainÚsnprintfÚ	CFRelease>$   ÚNOÚdoÚifÚNilÚYESÚforÚnilÚNULLÚTRUEÚautoÚcaseÚelseÚenumÚgotoÚtrueÚFALSEÚbreakÚconstÚfalseÚunionÚwhileÚexternÚinlineÚreturnÚsignedÚsizeofÚstaticÚstructÚswitchÚdefaultÚtypedefÚcontinueÚregisterÚrestrictÚunsignedÚvolatilec                    sh   h d£}| o3t | ƒdko3t d| ¡o3| ˆ vo3| |vo3|  dd¡dko3|  ¡  p,t | ƒdko3t d| ¡ S )u"   æ£€æŸ¥æ˜¯å¦æ˜¯æœ‰æ•ˆçš„Cå‡½æ•°å>   ÚFÚaÚbÚcÚdr{   rf  ÚmÚnÚoÚur°   ÚyÚOFr£   ÚcharÚlongÚvoidrœ  r¤   ÚshortÚEXPORTÚEXTERNr¥   r   r¡  r¥  ÚZEXPORTÚZEXTERNr§   r   r¬   rM   é   z^[a-z]$)rŒ   r   r‘   rP   r  )ÚnameÚinvalid_names)Ú
C_KEYWORDSrB   rG   Úis_valid_c_function_nameÛ  s    
ÿ
þýüûúùz:process_c_method_content.<locals>.is_valid_c_function_namec                 S   s2   g d¢}|D ]	}t  |d| ¡} qt  dd| ¡ ¡ S )u   æ¸…ç†APIæ³¨è§£)úAPI_AVAILABLE\([^)]*\)zAPI_DEPRECATED\([^)]*\)zAPI_UNAVAILABLE\([^)]*\)rg   rh   úNS_AVAILABLE\([^)]*\)re   ú__attribute__\([^)]*\)rM   r˜   r™   )r   r€   r¶   )r   Úapi_patternsr   rB   rB   rG   Úclean_api_annotationsî  s   z7process_c_method_content.<locals>.clean_api_annotationsc                     s  g } ˆ ˆƒ}dd„ }||ƒ}d}t  ||t jt jB ¡}|  ‡fdd„|D ƒ¡ t  d|t jt jB ¡}|  ‡fdd„|D ƒ¡ d}d	|› d
d|› d
d|› d
d|› d
d|› d
dg}d|› dd|› dd|› dd|› dg}|D ]}	t  |	|t j¡}
|  ‡fdd„|
D ƒ¡ qt|D ]}	t  |	|t j¡}
|  ‡fdd„|
D ƒ¡ qg d¢}g d¢}|D ])}	t  |	|t j¡}
|
D ]}t|ƒdkrÖt|tƒrË|d n|}ˆ|ƒrÖ|  |¡ qºq®|D ]+}	t  |	|t j¡}
|
D ]}t|ƒdkrt|tƒrø|d n|}ˆ|ƒr|  |¡ qæqÚ| S )u$   ä½¿ç”¨æ­£åˆ™æ¨¡å¼æå–å‡½æ•°å®šä¹‰c                 S   sÊ   g }|   d¡}d}|t|ƒk r`|| }t d| ¡ ¡rQd}d}|t|ƒk rP|| }d|v r6d}|| d¡7 }|r?|| d¡8 }|d7 }|rJ|dkrJn|t|ƒk s%n	| |¡ |d7 }|t|ƒk sd |¡S )	Nr„   r   r   FrP  TÚ}r…   )rµ   rŒ   r   r‘   r¶   Úcountr½   rk   )r   r   rä   rf  rÄ   Úbrace_countÚmethod_startedÚcurrent_linerB   rB   rG   Úremove_objc_methods  s0   
ñ€
æ
zTprocess_c_method_content.<locals>.extract_from_patterns.<locals>.remove_objc_methodsz8ZEXTERN\s+\w+\s+ZEXPORT\s+(\w+)\s+OF\s*\(\([^)]*\)\)\s*;c                    s$   g | ]}ˆ |ƒrt |ƒd kr|‘qS )r§   r   r¨   ©rÆ  rB   rG   r©   4  s   $ zKprocess_c_method_content.<locals>.extract_from_patterns.<locals>.<listcomp>zþ(?:CG_EXTERN|CF_EXPORT|UIKIT_EXTERN|FOUNDATION_EXPORT|extern|static|inline)?\s*(?:const\s+)?(?:unsigned\s+)?(?:void|char|short|int|long|float|double|bool|BOOL|NSInteger|NSUInteger|CGFloat|[A-Z][a-zA-Z0-9_]*(?:Ref|Type)?)\s*\*{0,2}\s*(\w+)\s*\([^;]*\)\s*;c                    ó   g | ]}ˆ |ƒr|‘qS rB   rB   r¨   rÒ  rB   rG   r©   A  ó    zu(?:void|char|short|int|long|float|double|bool|BOOL|NSInteger|NSUInteger|CGFloat|CGPoint|CGSize|CGRect|NSTimeInterval)zF(?:CG_EXTERN|CF_EXPORT|UIKIT_EXTERN|FOUNDATION_EXPORT)\s+(?:const\s+)?z\s*\*{0,2}\s*(\w+)\s*\(z&static\s+(?:const\s+)?(?:unsigned\s+)?z&extern\s+(?:const\s+)?(?:unsigned\s+)?z&inline\s+(?:const\s+)?(?:unsigned\s+)?z((?:^|\n)\s*(?:const\s+)?(?:unsigned\s+)?z$typedef\s+\w+\s*\(\s*\*\s*(\w+)\s*\)z%(?:^|\s)(?:const\s+)?(?:unsigned\s+)?z#\s*\*{0,2}\s*(\w+)\s*\([^)]*\)\s*\{z.(?:^|\s)static\s+(?:const\s+)?(?:unsigned\s+)?z.(?:^|\s)extern\s+(?:const\s+)?(?:unsigned\s+)?z.(?:^|\s)inline\s+(?:const\s+)?(?:unsigned\s+)?c                    rÓ  rB   rB   r¨   rÒ  rB   rG   r©   k  rÔ  c                    rÓ  rB   rB   r¨   rÒ  rB   rG   r©   p  rÔ  )zq(?:CG_EXTERN|CF_EXPORT|UIKIT_EXTERN|FOUNDATION_EXPORT)\s+([A-Z][a-zA-Z0-9_]*(?:Ref|Type)?)\s*\*{0,2}\s*(\w+)\s*\(zAextern\s+([A-Z][a-zA-Z0-9_]*(?:Ref|Type)?)\s*\*{0,2}\s*(\w+)\s*\(zAstatic\s+([A-Z][a-zA-Z0-9_]*(?:Ref|Type)?)\s*\*{0,2}\s*(\w+)\s*\(zC(?:^|\n)\s*([A-Z][a-zA-Z0-9_]*(?:Ref|Type)?)\s*\*{0,2}\s*(\w+)\s*\()zL(?:^|\s)([A-Z][a-zA-Z0-9_]*(?:Ref|Type)?)\s*\*{0,2}\s*(\w+)\s*\([^)]*\)\s*\{zU(?:^|\s)static\s+([A-Z][a-zA-Z0-9_]*(?:Ref|Type)?)\s*\*{0,2}\s*(\w+)\s*\([^)]*\)\s*\{zU(?:^|\s)extern\s+([A-Z][a-zA-Z0-9_]*(?:Ref|Type)?)\s*\*{0,2}\s*(\w+)\s*\([^)]*\)\s*\{r§   r…   )	r   r¾   r‚   r   r¿   rŒ   rs   r  r½   )Ú	functionsÚcleaned_contentrÑ  Úzlib_patternÚzlib_matchesÚmultiline_functionsr
   ÚpatternsÚfunction_definition_patternsr   rÚ   Úcustom_type_patternsÚcustom_type_definition_patternsr‘   Ú	func_name)rË  rR   rÆ  rB   rG   Úextract_from_patterns  sj   #
ù	




ï



õ
€ü

€üz7process_c_method_content.<locals>.extract_from_patternsc                     sê   g } ˆ  d¡}d}d}|D ]e}| ¡ }t d|¡r*d}d|v r)| d¡| d¡ }q|rId|v s4d|v rH|| d¡| d¡ 7 }|dkrHd}d}q|sr| d¡srd	|vrrt d
|¡}|D ]}ˆ|ƒrq|ˆ vrqt|ƒdkrq|  |¡ q\q| S )uV   æå–ç‹¬ç«‹çš„å‡½æ•°è°ƒç”¨ï¼ˆé¿å…è¯¯åŒ¹é…ç‚¹è¯­æ³•å’ŒObjective-Cæ–¹æ³•å†…è°ƒç”¨ï¼‰r„   Fr   r   TrP  rÌ  z//Ú.z^\s*(\w+)\s*\([^)]*\)\s*;r§   )	rµ   r¶   r   r‘   rÍ  r®   r¾   rŒ   r½   )rÕ  rä   Úin_objc_methodrÎ  rÄ   Úline_strippedrÚ   r‘   )ÚSYSTEM_FUNCTIONSrR   rÆ  rB   rG   Úextract_function_calls   s6   

€z8process_c_method_content.<locals>.extract_function_callsc                 S   rª   rV  r­   r¯   rB   rB   rG   r±   Ð  r²   z*process_c_method_content.<locals>.<lambda>r³   )rS   r¿   rß   rt   rô   rX  )rR   rß  rä  Úall_functionsÚunique_functionsrB   )rÅ  rã  rË  rR   rÆ  rG   Úprocess_c_method_contentÅ  s   	  *rç  c                    s†  t | ƒ} tƒ ‰g }‡fdd„‰ ‡ fdd„}d}t || tj¡}|D ]\}}}}ˆ | ¡ ƒ}|r4| |¡ ||ƒ}| |¡ q!g d¢}	|	D ]V\}
}t |
| tj¡}|D ]G}|dkrx|\}}}ˆ |ƒ}ˆ |ƒ}|rl| |¡ |rw||krw| |¡ n|dkr|\}}n|\}}ˆ |ƒ}|r| |¡ ||ƒ}| |¡ qRqDg }tƒ }|D ]}|rÀ||vrÀt	|ƒd	krÀt 
d
|¡rÀ| |¡ | |¡ q¢|S )u¥   
    ä¸“é—¨ç”¨äºŽå¤„ç†å’Œæå–æžšä¸¾å†…å®¹çš„å‡½æ•°ï¼ŒåŒ…æ‹¬æžšä¸¾ç±»åž‹åå’Œæ‰€æœ‰æžšä¸¾å€¼
    æ”¯æŒå¯ç”¨æ€§æ ‡æ³¨æ¸…ç†ï¼Œåœ¨ä¸€ä¸ªå‡½æ•°å†…å®Œæ•´å¤„ç†
    c                    sl   | s| S g d¢}|D ]	}t  |d| ¡} q
ˆ D ]}|| v r*t  |¡d }t  |d| ¡} qt  dd| ¡} |  ¡ S )u!   æ¸…ç†æ–‡æœ¬ä¸­çš„å¯ç”¨æ€§æ ‡æ³¨)z!__OSX_AVAILABLE_STARTING\([^)]*\)zNS_ENUM_AVAILABLE\([^)]*\)rÈ  rÇ  re   rÉ  rM   z(?:\([^)]*\))?r˜   r™   )r   r€   rˆ   r¶   )r   rÚ  r   r_  Úword_pattern)rY  rB   rG   Úclean_annotationsâ  s   	€z0process_enums_content.<locals>.clean_annotationsc           
         sx  g }| s|S t jdd| t jd} t jdd| t jd} |  ¡ } ˆ | ƒ} t  dd| ¡} g }d}d}d}| D ]D}|dkr>|d	7 }n5|d
krG|d	8 }n,|dkrP|d	7 }n#|dkrY|d	8 }n|dkrs|dkrs|dkrs| ¡ rp| | ¡ ¡ d}q3||7 }q3| ¡ rƒ| | ¡ ¡ |D ]4}| ¡ }|sŽq…ˆ |ƒ}|s•q…t  d|t j¡}|r¹| d	¡ ¡ }	|	r¹t  d|	¡r¹t|	ƒdkr¹| |	¡ q…|S )u-   å†…è”å‡½æ•°ï¼šä»Žæžšä¸¾ä½“ä¸­æå–æžšä¸¾å€¼rÞ   rM   r}   z	/\*.*?\*/r˜   r™   r   r†   r…   r‡   ú[ú]ú,z^(\w+)(?:\s*=.*)?$r   )	r   r€   r   r‚   r¶   r½   r‘   r»   rŒ   )
Ú	enum_bodyÚenum_valuesrÐ   Úcurrent_partr“   Úbracket_countrº  rg  Úvalue_matchÚ
enum_value)ré  rB   rG   Úextract_enum_values_inlineÿ  s\   





ÿ
€z9process_enums_content.<locals>.extract_enum_values_inlinezftypedef\s+(NS_ENUM|NS_OPTIONS)\s*\(\s*([^,]+),\s*(\w+)\s*\)\s*\{([^{}]*(?:\{[^{}]*\}[^{}]*)*)\}[^;]*;?))zHtypedef\s+enum\s+(\w+)\s*\{([^{}]*(?:\{[^{}]*\}[^{}]*)*)\}\s*(\w+)[^;]*;Únamed_typedef)z@typedef\s+enum\s*\{([^{}]*(?:\{[^{}]*\}[^{}]*)*)\}\s*(\w+)[^;]*;Úanonymous_typedef)zJtypedef\s+enum\s*:\s*\w+\s*\{([^{}]*(?:\{[^{}]*\}[^{}]*)*)\}\s*(\w+)[^;]*;Ú
typed_enum)z7enum\s+(\w+)\s*\{([^{}]*(?:\{[^{}]*\}[^{}]*)*)\}[^;]*;?Úsimple_enumrô  r÷  r…   r   )rS   r|   r   r¾   r‚   r¶   r½   r¿   rÀ   rŒ   r‘   Úadd)rR   Ú	all_enumsró  Úns_enum_patternÚns_enum_matchesr¬   Ú	enum_namerí  rî  Úc_enum_patternsr   Úpattern_typerÚ   r‘   Ú
enum_name1Ú
enum_name2Úunique_enumsÚ
seen_enumsrB   )ré  rY  rG   Úprocess_enums_contentÔ  s^   G



€

ê
ÿ

€r  c                 C   st   t | ƒ} g }g d¢}|D ]}t || tj¡}| |¡ qg }t|ƒD ]}|r7t|ƒdkr7t d|¡r7| |¡ q"|S )u0   ä¸“é—¨ç”¨äºŽå¤„ç†å’Œæå–ä»£ç†å†…å®¹çš„å‡½æ•°)z@protocol\s+(\w+)\s*<[^>]*>z@protocol\s+(\w+)\s*;z@protocol\s+(\w+)\s*\nz@protocol\s+(\w+)\s*$r§   r   )	rS   r   r¾   r   r¿   rÀ   rŒ   r‘   r½   )rR   Úall_delegatesÚprotocol_patternsr   rÚ   Úunique_delegatesÚdelegate_namerB   rB   rG   Úprocess_delegates_content‰  s   
ÿ
€r  c           
      C   sè   t | ƒ} g }g d¢}|D ]}t || ¡}| |¡ qg d¢}|D ]}t || ¡}| |¡ q g d¢}|D ]}t || ¡}| |¡ q4g d¢}|D ]}t || ¡}| |¡ qHg }t|ƒD ]}	|	rqt|	ƒdkrqt d|	¡rq| |	¡ q\|S )u/   ä¸“é—¨ç”¨äºŽå¤„ç†å’Œæå–Blockå†…å®¹çš„å‡½æ•°)z4typedef\s+\w+\s*\(\s*\^\s*(\w+)\s*\)\s*\([^)]*\)\s*;z9typedef\s+\w+\s*\*\s*\(\s*\^\s*(\w+)\s*\)\s*\([^)]*\)\s*;z3typedef\s+id\s*\(\s*\^\s*(\w+)\s*\)\s*\([^)]*\)\s*;z5typedef\s+BOOL\s*\(\s*\^\s*(\w+)\s*\)\s*\([^)]*\)\s*;)zB@property\s*\([^)]*\)\s*\w+\s*\(\s*\^\s*(\w+)\s*\)\s*\([^)]*\)\s*;zG@property\s*\([^)]*\)\s*\w+\s*\*\s*\(\s*\^\s*(\w+)\s*\)\s*\([^)]*\)\s*;zA@property\s*\([^)]*\)\s*id\s*\(\s*\^\s*(\w+)\s*\)\s*\([^)]*\)\s*;zC@property\s*\([^)]*\)\s*BOOL\s*\(\s*\^\s*(\w+)\s*\)\s*\([^)]*\)\s*;)z0:\s*\w+\s*\(\s*\^\s*\)\s*\(\s*[^)]*\s*\)\s*(\w+)z5:\s*\w+\s*\*\s*\(\s*\^\s*\)\s*\(\s*[^)]*\s*\)\s*(\w+)z/:\s*id\s*\(\s*\^\s*\)\s*\(\s*[^)]*\s*\)\s*(\w+)z1:\s*BOOL\s*\(\s*\^\s*\)\s*\(\s*[^)]*\s*\)\s*(\w+))z*\w+\s*\(\s*\^\s*(\w+)\s*\)\s*\([^)]*\)\s*=z/\w+\s*\*\s*\(\s*\^\s*(\w+)\s*\)\s*\([^)]*\)\s*=z)id\s*\(\s*\^\s*(\w+)\s*\)\s*\([^)]*\)\s*=z+BOOL\s*\(\s*\^\s*(\w+)\s*\)\s*\([^)]*\)\s*=r…   r   )rS   r   r¾   r¿   rÀ   rŒ   r‘   r½   )
rR   Ú
all_blocksÚtypedef_block_patternsr   rÚ   Úproperty_block_patternsÚmethod_block_patternsÚvariable_block_patternsÚunique_blocksÚ
block_namerB   rB   rG   Úprocess_blocks_content¦  s6   
ÿ
€r  c                 C   s8   t | ƒ} g }g d¢}|D ]}t || ¡}| |¡ q|S )u'   ä¸“é—¨ç”¨äºŽå¤„ç†å’Œæå–ç±»åå‡½æ•°)z@interface\s+(\w+)\s*z@interface\s+(\w+)\s*<[^>]*>zd@interface\s+(\w+)\s*$@interface\s+(\w+)\s*:\s*(\w+)\s*$@interface\s+(\w+)\s*:\s*(\w+)\s*<[^>]*>\s*$)rS   r   r¾   r¿   )rR   Úall_class_namesÚinterface_patternsr   rÚ   rB   rB   rG   Úprocess_class_name_contentî  s   r  )$Ú__doc__ri   r   ro   ÚObjectiveC.oc_customr   ÚObjectiveC.oc_functionr   Úcompiler‚   Ú_BASIC_PATTERNSÚ_LOCAL_PATTERNSÚ_STATIC_PATTERNSÚ_CONST_PATTERNSr   Ú_DEFINE_PATTERNSÚitemsrõ   rS   r|   rƒ   rÝ   rê   rï   ró   rì   rë   rð   rñ   rò   rm  rç  r  r  r  r  rB   rB   rB   rG   Ú<module>   s   ü
ÿ
þ
ý
ü
û
ø
	÷
ô
ó
ò
ñ
ð
ï
î
ë
ê
éØ-ýû	ÿ
þ
ý
ü
û
ú
ù
ø
	÷

ö
õ
ô
ó
ò
ñ
ð
ïíÿþýüû	 j7 15/ )   6H