o
    Í Ži(1  ã                   @  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   úbC:\Users\psant\Downloads\Anu Raj Backend\school\venv\Lib\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&   ú
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  ó*   z
t  | ¡}W d|v S  ty   Y dS w )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ÚPTFZPunctuation©r   Úcategoryr+   ©r   Úcharacter_categoryÚcharacter_ranger   r   r   Úis_punctuationO   s   
r4   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ÚNTFZFormsZLor/   r1   r   r   r   Ú	is_symbol^   s   
r7   c                 C  s$   t | ƒ}|d u r
dS d|v pd|v S )NFZ	EmoticonsZPictographs)r+   )r   r3   r   r   r   Úis_emoticonm   s   r8   c                 C  s.   |   ¡ s| dv r
dS t | ¡}d|v p|dv S )N>   ú+u   ï½œú>ú<TÚZ>   ZPoZPdZPc)Úisspacer   r0   )r   r2   r   r   r   Úis_separatorw   s   
r>   c                 C  s   |   ¡ |  ¡ kS ©N)ÚislowerÚisupper©r   r   r   r   Úis_case_variable�   s   rC   c                 C  r,   )NFÚCJKr   ©r   Zcharacter_namer   r   r   Úis_cjk†   ó   ýÿrF   c                 C  r,   )NFZHIRAGANAr   rE   r   r   r   Úis_hiragana�   rG   rH   c                 C  r,   )NFZKATAKANAr   rE   r   r   r   Úis_katakanaš   rG   rI   c                 C  r,   )NFZHANGULr   rE   r   r   r   Ú	is_hangul¤   rG   rJ   c                 C  r,   )NFZTHAIr   rE   r   r   r   Úis_thai®   rG   rK   c                 C  r,   )NFÚARABICr   rE   r   r   r   Ú	is_arabic¸   rG   rM   c                 C  s4   zt  | ¡}W n
 ty   Y dS w d|v od|v S )NFrL   zISOLATED FORMr   rE   r   r   r   Úis_arabic_isolated_formÂ   s   ÿrN   c                 C  s   | t vS r?   )r   rB   r   r   r   Úis_cjk_uncommonÌ   s   rO   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>Ó   s   € z-is_unicode_range_secondary.<locals>.<genexpr>)Úanyr   rR   r   rR   r   Úis_unicode_range_secondaryÑ   s   rU   c                 C  s(   |   ¡ du o|  ¡ du o| dko| dkS )NFúu   ï»¿)r=   ÚisprintablerB   r   r   r   Úis_unprintableÖ   s   
ÿþürX   é    Ú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   ú-Ú_)Ú
isinstancer[   Ú	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&   
þÿýrm   é€   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_32_beÚ	utf_16_beÚutf_8Z	utf_8_sigÚutf_32Ú	utf_32_leÚ	utf_16_leÚutf_7Úutf_16ú
encodings.N)Ú
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ó    N)r
   rc   r[   Ú
startswith)rZ   Úiana_encodingZmarksÚmarkr   r   r   Úidentify_sig_or_bom  s   

ÿÿr�   r   c                 C  s   | dvS )N>   rr   rv   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).ra   rb   zUnable to retrieve IANA for 'ú'N)rh   ri   r   r)   r   )rƒ   r„   rk   rl   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        rw   r^   r_   r   éÿ   r	   éþ   )r{   ry   rz   r   Úranger[   rg   )	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.
    N)r   )r‡   rˆ   r   r   r   Úis_cp_similarQ  s   
þr�   Zcharset_normalizerz)%(asctime)s | %(levelname)s | %(message)sÚlevelÚformat_stringÚNonec                 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œ   Ú	sequencesrl   Ú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Œ q�qi|
V  q d S )
NFé   r^   r„   r_   r   r    é   éÿÿÿÿ)re   rg   rf   rŒ   )r�   rl   rž   rŸ   r    r¡   r¢   r£   r¤   r�   ÚchunkZ	chunk_endZcut_sequenceZchunk_partial_size_chkÚjr   r   r   Úcut_sequence_chunksi  sF   €ü
þ
ÿþÿÝr«   )r   r   r   r   )r   r   r   r   )r   r   r   r'   )r*   r   r   r   )rY   )rZ   r[   r\   r$   r   r'   )r   r   r   r   )rZ   r[   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’   r?   )r�   r[   rl   r   rž   rŒ   rŸ   r$   r    r   r¡   r   r¢   r[   r£   r   r¤   r'   r   r¥   )7Ú
__future__r   ry   r“   r   Úcodecsr   Zencodings.aliasesr   Ú	functoolsr   Úrer   Útypingr   Z_multibytecodecr   Zconstantr
   r   r   r   r   r   r   r   r&   r+   r-   r4   r7   r8   r>   rC   rF   rH   rI   rJ   rK   rM   rN   rO   re   rU   rX   rm   r{   r�   r‚   r†   rŽ   r�   ÚINFOrœ   r«   r   r   r   r   Ú<module>   s~    $
									
 



ý÷