o
    ÓèFhv.  ã                   @   sÂ  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mZmZmZmZmZ d dlmZ dd	lmZmZmZmZmZmZ eed
�dedefdd„ƒZeed
�dedefdd„ƒZeed
�dedee fdd„ƒZeed
�dedefdd„ƒZ eed
�dedefdd„ƒZ!eed
�dedefdd„ƒZ"eed
�dedefdd„ƒZ#eed
�dedefdd„ƒZ$eed
�dedefdd„ƒZ%eed
�dedefdd „ƒZ&eed
�dedefd!d"„ƒZ'eed
�dedefd#d$„ƒZ(eed
�dedefd%d&„ƒZ)eed
�dedefd'd(„ƒZ*eed
�dedefd)d*„ƒZ+eed
�dedefd+d,„ƒZ,ee-eƒd
�d-edefd.d/„ƒZ.eed
�dedefd0d1„ƒZ/d_d3e0d4e1dee fd5d6„Z2ed7d
�d8edefd9d:„ƒZ3d3e0deee e0f fd;d<„Z4d=edefd>d?„Z5d`dAedBedefdCdD„Z6dEedee fdFdG„Z7dHedIede8fdJdK„Z9dHedIedefdLdM„Z:dNej;dOfd8edPe1dQeddfdRdS„Z<	dadTe0dUedVe=dWe1dXedYedZe0d[ed\ee deeddf fd]d^„Z>dS )bé    N)ÚIncrementalDecoder)Úaliases)Ú	lru_cache)Úfindall)Ú	GeneratorÚListÚOptionalÚSetÚTupleÚUnion)ÚMultibyteIncrementalDecoderé   )ÚENCODING_MARKSÚIANA_SUPPORTED_SIMILARÚRE_POSSIBLE_ENCODING_INDICATIONÚUNICODE_RANGES_COMBINEDÚUNICODE_SECONDARY_RANGE_KEYWORDÚUTF8_MAXIMAL_ALLOCATION)ÚmaxsizeÚ	characterÚreturnc                 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   úQ/var/www/html/loop/nvenv/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(   c                 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_range3   s   ÿr.   c                 C   ó*   z
t  | ¡}W d|v S  ty   Y dS w )NFÚLATINr   r   r   r   r   Úis_latinA   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_punctuationJ   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_symbolY   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_emoticonh   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_separatorr   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`   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   rc   r   rc   r   Úis_unicode_range_secondaryÇ   s   rf   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   
ÿþüri   é    ÚsequenceÚsearch_zonec                 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   ú-Ú_)Ú
isinstanceÚbytesÚ	TypeErrorÚlenr   r   ÚminÚdecodeÚlowerÚreplacer   r*   )rk   rl   Ú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_moduleÚformatr   r   )r   r   r   r   Úis_multi_byte_encoding÷   s   
þö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.
    )Nó    )r   rs   rt   Ú
startswith)rk   Ú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   sL   |   ¡  dd¡} t ¡ D ]\}}| ||fv r|  S q|r$td | ¡ƒ‚| S )Nrq   rr   z Unable to retrieve IANA for '{}')ry   rz   r   r*   r   r�   )r˜   r™   r~   r   r   r   r   Ú	iana_name"  s   ÿrš   Údecoded_sequencec                 C   s4   t ƒ }| D ]}t|ƒ}|d u rq| |¡ qt|ƒS rL   )Úsetr.   ÚaddÚlist)r›   Úrangesr   r8   r   r   r   Ú
range_scan2  s   r    Úiana_name_aÚiana_name_bc           	      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‹   rn   ro   r   éÿ   r   éþ   )r�   r�   rŽ   r�   r   Úrangert   rx   )	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_similarX  s   
þr®   Úcharset_normalizerz)%(asctime)s | %(levelname)s | %(message)sÚlevelÚformat_stringc                 C   s:   t  | ¡}| |¡ t  ¡ }| t  |¡¡ | |¡ d S rL   )ÚloggingÚ	getLoggerÚsetLevelÚStreamHandlerÚsetFormatterÚ	FormatterÚ
addHandler)r   r°   r±   ÚloggerÚhandlerr   r   r   Úset_logging_handlerc  s
   

r»   Ú	sequencesr   ÚoffsetsÚ
chunk_sizeÚbom_or_sig_availableÚstrip_sig_or_bomÚsig_payloadÚis_multi_byte_decoderÚdecoded_payloadc	                 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é   rn   r™   ro   r   r!   é   éÿÿÿÿ)rv   rx   rw   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_chunksp  sD   €ü
þ
ÿÿÝrÌ   )rj   )TrL   )?r�   r²   r   Úcodecsr   Úencodings.aliasesr   Ú	functoolsr   Úrer   Útypingr   r   r   r	   r
   r   Ú_multibytecodecr   Úconstantr   r   r   r   r   r   ÚstrÚboolr   r(   r.   r1   r9   r>   rA   rK   rP   rT   rW   rY   r[   r]   r_   r`   rv   rf   ri   rt   r%   r€   r�   r–   r—   rš   r    Úfloatr­   r®   ÚINFOr»   r¥   rÌ   r   r   r   r   Ú<module>   s²      

									
 ýÿþý
ü÷ÿþýüûúùø	÷
ö