a
    Bù’iŠ/  ã                   @  sL  d dl mZ d dlZd dlZd dlZd dlmZ d dlmZ d dl	m
Z
 d dlmZ d dlmZ d dlmZ d	d
lmZmZmZmZmZmZmZ e
ed�dddœdd„ƒZe
ed�dddœdd„ƒZe
ed�dddœdd„ƒZe
ed�dddœdd„ƒZe
ed�dddœdd„ƒZe
ed�dddœdd„ƒZe
ed�dddœdd„ƒZe
ed�dddœdd„ƒZ e
ed�dddœd d!„ƒZ!e
ed�dddœd"d#„ƒZ"e
ed�dddœd$d%„ƒZ#e
ed�dddœd&d'„ƒZ$e
ed�dddœd(d)„ƒZ%e
ed�dddœd*d+„ƒZ&e
ed�dddœd,d-„ƒZ'e
ed�dddœd.d/„ƒZ(e
ed�dddœd0d1„ƒZ)e
e*eƒd�ddd2œd3d4„ƒZ+e
ed�dddœd5d6„ƒZ,d]d8d9dd:œd;d<„Z-e
d=d�ddd>œd?d@„ƒZ.d8dAdBœdCdD„Z/dddEœdFdG„Z0d^ddddIœdJdK„Z1dddLdMœdNdO„Z2ddddMœdPdQ„Z3dRej4dSfdd9ddTdUœdVdW„Z5d_d8ddXd9ddd8dddYdZœ
d[d\„Z6dS )`é    )ÚannotationsN)ÚIncrementalDecoder)Úaliases)Ú	lru_cache)Úfindall)Ú	Generator)ÚMultibyteIncrementalDecoderé   )ÚENCODING_MARKSÚIANA_SUPPORTED_SIMILARÚRE_POSSIBLE_ENCODING_INDICATIONÚUNICODE_RANGES_COMBINEDÚUNICODE_SECONDARY_RANGE_KEYWORDÚUTF8_MAXIMAL_ALLOCATIONÚCOMMON_CJK_CHARACTERS)ÚmaxsizeÚstrÚbool)Ú	characterÚreturnc                 C  sd   zt  | ¡}W n ty"   Y dS 0 d|v pbd|v pbd|v pbd|v pbd|v pbd|v pbd|v pbd	|v S )
NFz
WITH GRAVEz
WITH ACUTEzWITH CEDILLAzWITH DIAERESISzWITH CIRCUMFLEXz
WITH TILDEzWITH MACRONzWITH RING ABOVE©ÚunicodedataÚnameÚ
ValueError©r   Údescription© r   úU/home/httpd/docs/test/DocsMgr/lib/python3.9/site-packages/charset_normalizer/utils.pyÚis_accentuated   s&    ÿþýüûúør   c                 C  s.   t  | ¡}|s| S | d¡}tt|d dƒƒS )Nú r   é   )r   ÚdecompositionÚsplitÚchrÚint)r   Z
decomposedÚcodesr   r   r   Úremove_accent-   s
    

r&   z
str | Nonec                 C  s.   t | ƒ}t ¡ D ]\}}||v r|  S qdS )zK
    Retrieve the Unicode range official name from a single character.
    N)Úordr   Úitems)r   Zcharacter_ordÚ
range_nameZ	ord_ranger   r   r   Úunicode_range8   s
    
r*   c                 C  s,   zt  | ¡}W n ty"   Y dS 0 d|v S )NFZLATINr   r   r   r   r   Úis_latinF   s
    r+   c                 C  s2   t  | ¡}d|v rdS t| ƒ}|d u r*dS d|v S )NÚPTFÚPunctuation©r   Úcategoryr*   ©r   Úcharacter_categoryÚcharacter_ranger   r   r   Úis_punctuationO   s    
r3   c                 C  sB   t  | ¡}d|v sd|v rdS t| ƒ}|d u r2dS d|v o@|dkS )NÚSÚNTFZFormsZLor.   r0   r   r   r   Ú	is_symbol^   s    
r6   c                 C  s$   t | ƒ}|d u rdS d|v p"d|v S )NFZ	EmoticonsZPictographs)r*   )r   r2   r   r   r   Úis_emoticonm   s    r7   c                 C  s.   |   ¡ s| dv rdS t | ¡}d|v p,|dv S )N>   ú>u   ï½œú<ú+TÚZ>   ZPcZPoZPd)Úisspacer   r/   )r   r1   r   r   r   Úis_separatorw   s    
r=   c                 C  s   |   ¡ |  ¡ kS ©N)ÚislowerÚisupper©r   r   r   r   Úis_case_variable�   s    rB   c                 C  s,   zt  | ¡}W n ty"   Y dS 0 d|v S )NFÚCJKr   ©r   Zcharacter_namer   r   r   Úis_cjk†   s
    rE   c                 C  s,   zt  | ¡}W n ty"   Y dS 0 d|v S )NFZHIRAGANAr   rD   r   r   r   Úis_hiragana�   s
    rF   c                 C  s,   zt  | ¡}W n ty"   Y dS 0 d|v S )NFZKATAKANAr   rD   r   r   r   Úis_katakanaš   s
    rG   c                 C  s,   zt  | ¡}W n ty"   Y dS 0 d|v S )NFZHANGULr   rD   r   r   r   Ú	is_hangul¤   s
    rH   c                 C  s,   zt  | ¡}W n ty"   Y dS 0 d|v S )NFZTHAIr   rD   r   r   r   Úis_thai®   s
    rI   c                 C  s,   zt  | ¡}W n ty"   Y dS 0 d|v S )NFÚARABICr   rD   r   r   r   Ú	is_arabic¸   s
    rK   c                 C  s4   zt  | ¡}W n ty"   Y dS 0 d|v o2d|v S )NFrJ   zISOLATED FORMr   rD   r   r   r   Úis_arabic_isolated_formÂ   s
    rL   c                 C  s   | t vS r>   )r   rA   r   r   r   Úis_cjk_uncommonÌ   s    rM   )r)   r   c                   s   t ‡ fdd„tD ƒƒS )Nc                 3  s   | ]}|ˆ v V  qd S r>   r   )Ú.0Úkeyword©r)   r   r   Ú	<genexpr>Ó   ó    z-is_unicode_range_secondary.<locals>.<genexpr>)Úanyr   rP   r   rP   r   Úis_unicode_range_secondaryÑ   s    rT   c                 C  s(   |   ¡ du o&|  ¡ du o&| dko&| dkS )NFúu   ï»¿)r<   ÚisprintablerA   r   r   r   Úis_unprintableÖ   s    
ÿþürW   é    Úbytesr$   )ÚsequenceÚsearch_zoner   c                 C  s    t | tƒst‚t| ƒ}tt| dt||ƒ… jddd�ƒ}t|ƒdkrHdS |D ]N}| ¡  	dd¡}t
 ¡ D ]0\}}||kr„|    S ||krh|    S qhqLdS )zW
    Extract using ASCII-only decoder any specified encoding in the first n-bytes.
    NÚasciiÚignore©Úerrorsr   ú-Ú_)Ú
isinstancerY   Ú	TypeErrorÚlenr   r   ÚminÚdecodeÚlowerÚreplacer   r(   )rZ   r[   Zseq_lenÚresultsZspecified_encodingÚencoding_aliasÚencoding_ianar   r   r   Úany_specified_encodingá   s"    
þrl   é€   )r   r   c                 C  s    | dv pt t d| › �¡jtƒS )zQ
    Verify is a specific encoding is a multi byte one based on it IANA name
    >	   Úutf_7Z	utf_8_sigÚutf_32Úutf_16Ú	utf_16_leÚ	utf_32_beÚutf_8Ú	utf_16_beÚ	utf_32_leú
encodings.)Ú
issubclassÚ	importlibÚimport_moduler   r   )r   r   r   r   Úis_multi_byte_encoding  s    
þörz   ztuple[str | None, bytes])rZ   r   c                 C  sJ   t D ]@}t | }t|tƒr |g}|D ]}|  |¡r$||f    S q$qdS )z9
    Identify and extract SIG/BOM in given sequence.
    )NrR   )r
   rb   rY   Ú
startswith)rZ   Úiana_encodingZmarksÚmarkr   r   r   Úidentify_sig_or_bom  s    

r~   )r|   r   c                 C  s   | dvS )N>   rp   ro   r   )r|   r   r   r   Úshould_strip_sig_or_bom(  s    r   T)Úcp_nameÚstrictr   c                 C  sN   |   ¡  dd¡} t ¡ D ]\}}| ||fv r|  S q|rJtd| › d�ƒ‚| S )zIReturns the Python normalized encoding name (Not the IANA official name).r`   ra   zUnable to retrieve IANA for 'ú')rg   rh   r   r(   r   )r€   r�   rj   rk   r   r   r   Ú	iana_name,  s    
rƒ   Úfloat)Úiana_name_aÚiana_name_br   c           	      C  sŒ   t | ƒst |ƒrdS t d| › �¡j}t d|› �¡j}|dd�}|dd�}d}tdƒD ]*}t|gƒ}| |¡| |¡krX|d7 }qX|d S )	Ng        rv   r]   r^   r   éÿ   r	   éþ   )rz   rx   ry   r   ÚrangerY   rf   )	r…   r†   Z	decoder_aZ	decoder_bZid_aZid_bZcharacter_match_countÚiZto_be_decodedr   r   r   Úcp_similarity=  s    



r‹   c                 C  s   | t v o|t |  v S )zŽ
    Determine if two code page are at least 80% similar. IANA_SUPPORTED_SIMILAR dict was generated using
    the function cp_similarity.
    )r   )r…   r†   r   r   r   Úis_cp_similarQ  s    
þrŒ   Zcharset_normalizerz)%(asctime)s | %(levelname)s | %(message)sÚNone)r   ÚlevelÚformat_stringr   c                 C  s:   t  | ¡}| |¡ t  ¡ }| t  |¡¡ | |¡ d S r>   )ÚloggingÚ	getLoggerÚsetLevelÚStreamHandlerÚsetFormatterÚ	FormatterÚ
addHandler)r   rŽ   r�   ÚloggerÚhandlerr   r   r   Úset_logging_handler\  s
    

r™   r‰   zGenerator[str, None, None])
Ú	sequencesrk   ÚoffsetsÚ
chunk_sizeÚbom_or_sig_availableÚstrip_sig_or_bomÚsig_payloadÚis_multi_byte_decoderÚdecoded_payloadr   c	                 c  s*  |r6|du r6|D ]"}	||	|	| … }
|
s, q4|
V  qnð|D ]ê}	|	| }|t | ƒd krXq:| |	|	| … }|r||du r||| }|j||rŠdndd�}
|�r|	dk�rt|dƒ}|�r|
d |… |v�rt|	|	d d	ƒD ]H}| ||… }|rø|du rø|| }|j|dd�}
|
d |… |v rÔ �qqÔ|
V  q:d S )
NFé   r]   r�   r^   r   r    é   éÿÿÿÿ)rd   rf   re   r‰   )rš   rk   r›   rœ   r�   rž   rŸ   r    r¡   rŠ   ÚchunkZ	chunk_endZcut_sequenceZchunk_partial_size_chkÚjr   r   r   Úcut_sequence_chunksi  s>    

þ
ÿþr§   )rX   )T)N)7Ú
__future__r   rx   r�   r   Úcodecsr   Zencodings.aliasesr   Ú	functoolsr   Úrer   Útypingr   Z_multibytecodecr   Zconstantr
   r   r   r   r   r   r   r   r&   r*   r+   r3   r6   r7   r=   rB   rE   rF   rG   rH   rI   rK   rL   rM   rd   rT   rW   rl   rz   r~   r   rƒ   r‹   rŒ   ÚINFOr™   r§   r   r   r   r   Ú<module>   s|   $
									
 ý ÷