o
    üÞhŠ/  ã                   @  sŠ  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�didd„ƒZe
ed�djdd„ƒZe
ed�dkdd„ƒZe
ed�didd„ƒZe
ed�didd„ƒZe
ed�didd„ƒZe
ed�didd„ƒZe
ed�didd „ƒZ e
ed�did!d"„ƒZ!e
ed�did#d$„ƒZ"e
ed�did%d&„ƒZ#e
ed�did'd(„ƒZ$e
ed�did)d*„ƒZ%e
ed�did+d,„ƒZ&e
ed�did-d.„ƒZ'e
ed�did/d0„ƒZ(e
ed�did1d2„ƒZ)e
e*eƒd�dld4d5„ƒZ+e
ed�did6d7„ƒZ,dmdnd=d>„Z-e
d?d�dodAdB„ƒZ.dpdDdE„Z/dqdGdH„Z0drdsdLdM„Z1dtdQdR„Z2dudSdT„Z3dUej4dVfdvdZd[„Z5	dwdxdgdh„Z6dS )yé    )Ú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Ú	characterÚstrÚreturnÚboolc                 C  sd   zt  | ¡}W n
 ty   Y dS w d|v p1d|v p1d|v p1d|v p1d|v p1d|v p1d|v p1d	|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   úX/var/www/html/premium_crap/venv/lib/python3.10/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   Ú
decomposedÚcodesr   r   r   Úremove_accent-   s
   

r'   ú
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   Úcharacter_ordÚ
range_nameÚ	ord_ranger   r   r   Úunicode_range8   s   ÿr.   c                 C  ó*   z
t  | ¡}W d|v S  ty   Y dS w )NFÚLATINr   r   r   r   r   Úis_latinF   s   þÿr1   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   
r9   c                 C  sB   t  | ¡}d|v sd|v rdS t| ƒ}|d u rdS d|v o |dkS )NÚSÚNTFÚFormsÚLor4   r6   r   r   r   Ú	is_symbol^   s   
r>   c                 C  s$   t | ƒ}|d u r
dS d|v pd|v S )NFÚ	EmoticonsÚPictographs)r.   )r   r8   r   r   r   Úis_emoticonm   s   rA   c                 C  s.   |   ¡ s| dv r
dS t | ¡}d|v p|dv S )N>   õ   ï½œú+ú<ú>TÚZ>   ÚPcÚPdÚPo)Úisspacer   r5   )r   r7   r   r   r   Úis_separatorw   s   
rK   c                 C  s   |   ¡ |  ¡ kS ©N)ÚislowerÚisupper©r   r   r   r   Úis_case_variable�   s   rP   c                 C  r/   )NFÚCJKr   ©r   Úcharacter_namer   r   r   Úis_cjk†   ó   ýÿrT   c                 C  r/   )NFÚHIRAGANAr   rR   r   r   r   Úis_hiragana�   rU   rW   c                 C  r/   )NFÚKATAKANAr   rR   r   r   r   Úis_katakanaš   rU   rY   c                 C  r/   )NFÚHANGULr   rR   r   r   r   Ú	is_hangul¤   rU   r[   c                 C  r/   )NFÚTHAIr   rR   r   r   r   Úis_thai®   rU   r]   c                 C  r/   )NFÚARABICr   rR   r   r   r   Ú	is_arabic¸   rU   r_   c                 C  s4   zt  | ¡}W n
 ty   Y dS w d|v od|v S )NFr^   zISOLATED FORMr   rR   r   r   r   Úis_arabic_isolated_formÂ   s   ÿr`   c                 C  s   | t vS rL   )r   rO   r   r   r   Úis_cjk_uncommonÌ   s   ra   r,   c                   s   t ‡ fdd„tD ƒƒS )Nc                 3  s   � | ]}|ˆ v V  qd S rL   r   )Ú.0Úkeyword©r,   r   r   Ú	<genexpr>Ó   s   € z-is_unicode_range_secondary.<locals>.<genexpr>)Úanyr   rd   r   rd   r   Úis_unicode_range_secondaryÑ   s   rg   c                 C  s(   |   ¡ du o|  ¡ du o| dko| dkS )NFúu   ï»¿)rJ   ÚisprintablerO   r   r   r   Úis_unprintableÖ   s   
ÿþürj   é    ÚsequenceÚbytesÚsearch_zoner$   c                 C  s    t | tƒst‚t| ƒ}tt| dt||ƒ… jddd�ƒ}t|ƒdkr$dS |D ]'}| ¡  	dd¡}t
 ¡ D ]\}}||krB|    S ||krL|    S q4q&dS )zW
    Extract using ASCII-only decoder any specified encoding in the first n-bytes.
    NÚasciiÚignore©Úerrorsr   ú-Ú_)Ú
isinstancerm   Ú	TypeErrorÚlenr   r   ÚminÚdecodeÚlowerÚreplacer   r*   )rl   rn   Úseq_lenÚresultsÚspecified_encodingÚencoding_aliasÚencoding_ianar   r   r   Úany_specified_encodingá   s&   
þÿý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_7Úutf_8Úutf_16Úutf_32Ú	utf_16_beÚ	utf_16_leÚ	utf_32_beÚ	utf_32_leÚ	utf_8_sigú
encodings.)Ú
issubclassÚ	importlibÚimport_moduler   r   )r   r   r   r   Úis_multi_byte_encoding  s   
þör�   útuple[str | None, bytes]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.
    )Nó    )r
   ru   rm   Ú
startswith)rl   Úiana_encodingÚmarksÚmarkr   r   r   Úidentify_sig_or_bom  s   

ÿÿr—   r”   c                 C  s   | dvS )N>   r…   r†   r   )r”   r   r   r   Úshould_strip_sig_or_bom(  s   r˜   TÚcp_nameÚstrictc                 C  sN   |   ¡  dd¡} t ¡ D ]\}}| ||fv r|  S q|r%td| › d�ƒ‚| S )zIReturns the Python normalized encoding name (Not the IANA official name).rs   rt   zUnable to retrieve IANA for 'ú')rz   r{   r   r*   r   )r™   rš   r   r€   r   r   r   Ú	iana_name,  s   ÿrœ   Úiana_name_aÚiana_name_bÚfloatc           	      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rA|d7 }q,|d S )	Ng        rŒ   rp   rq   r   éÿ   r	   éþ   )r�   rŽ   r�   r   Úrangerm   ry   )	r�   rž   Ú	decoder_aÚ	decoder_bÚid_aÚid_bÚcharacter_match_countÚiÚ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«   Úcharset_normalizerz)%(asctime)s | %(levelname)s | %(message)sÚlevelÚformat_stringÚNonec                 C  s:   t  | ¡}| |¡ t  ¡ }| t  |¡¡ | |¡ d S rL   )ÚloggingÚ	getLoggerÚsetLevelÚStreamHandlerÚsetFormatterÚ	FormatterÚ
addHandler)r   r­   r®   ÚloggerÚhandlerr   r   r   Úset_logging_handler\  s
   

r¹   Ú	sequencesr€   Úoffsetsr¢   Ú
chunk_sizeÚbom_or_sig_availableÚstrip_sig_or_bomÚsig_payloadÚis_multi_byte_decoderÚdecoded_payloadúGenerator[str, None, None]c	                 c  s&  � |r|du r|D ]}	||	|	| … }
|
s d S |
V  q	d S |D ]p}	|	| }|t | ƒd kr/q | |	|	| … }|rA|du rA|| }|j||rHdndd�}
|r�|	dkr�t|dƒ}|r�|
d |… |vr�t|	|	d d	ƒD ]#}| ||… }|r{|du r{|| }|j|dd�}
|
d |… |v rŒ nqi|
V  q d S )
NFé   rp   rš   rq   r   r    é   éÿÿÿÿ)rw   ry   rx   r¢   )rº   r€   r»   r¼   r½   r¾   r¿   rÀ   rÁ   r¨   ÚchunkÚ	chunk_endÚcut_sequenceÚchunk_partial_size_chkÚjr   r   r   Úcut_sequence_chunksi  sD   €ü
þ
ÿÿÝrË   )r   r   r   r   )r   r   r   r   )r   r   r   r(   )r,   r   r   r   )rk   )rl   rm   rn   r$   r   r(   )r   r   r   r   )rl   rm   r   r‘   )r”   r   r   r   )T)r™   r   rš   r   r   r   )r�   r   rž   r   r   rŸ   )r�   r   rž   r   r   r   )r   r   r­   r$   r®   r   r   r¯   rL   )rº   rm   r€   r   r»   r¢   r¼   r$   r½   r   r¾   r   r¿   rm   rÀ   r   rÁ   r(   r   rÂ   )7Ú
__future__r   rŽ   r°   r   Úcodecsr   Úencodings.aliasesr   Ú	functoolsr   Úrer   Útypingr   Ú_multibytecodecr   Úconstantr
   r   r   r   r   r   r   r   r'   r.   r1   r9   r>   rA   rK   rP   rT   rW   rY   r[   r]   r_   r`   ra   rw   rg   rj   r�   r�   r—   r˜   rœ   rª   r«   ÚINFOr¹   rË   r   r   r   r   Ú<module>   s~    $
									
 



ý÷