U
    ÌZjû-  ã                   @   s„  zd dl ZW n ek
r(   d dlZY nX 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
�eedœdd„ƒZe
ed
�eedœdd„ƒZ e
ed
�eee dœdd„ƒZ!e
ed
�eedœdd„ƒZ"e
ed
�eedœdd„ƒZ#e
ed
�eedœdd„ƒZ$e
ed
�eedœdd„ƒZ%e
ed
�eedœdd„ƒZ&e
ed
�eedœdd„ƒZ'e
ed
�eedœdd„ƒZ(eedœd d!„Z)e
ed
�eedœd"d#„ƒZ*e
ed
�eedœd$d%„ƒZ+e
ed
�eedœd&d'„ƒZ,e
ed
�eedœd(d)„ƒZ-e
ed
�eedœd*d+„ƒZ.e
e/eƒd
�eed,œd-d.„ƒZ0e
ed
�eedœd/d0„ƒZ1dSe2e3ee d2œd3d4„Z4e
d5d
�eed6œd7d8„ƒZ5e2eee e2f d9œd:d;„Z6eed<œd=d>„Z7dTeeed@œdAdB„Z8eee dCœdDdE„Z9eee:dFœdGdH„Z;eeedFœdIdJ„Z<dKej=dLfee3eddMœdNdO„Z>dUe2ee?e3eee2eee eeddf dPœ
dQdR„Z@dS )Vé    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   sV   zt  | ¡}W n tk
r$   Y dS X d|kpTd|kpTd|kpTd|kpTd|kpTd|kS )NFz
WITH GRAVEz
WITH ACUTEzWITH CEDILLAzWITH DIAERESISzWITH CIRCUMFLEXz
WITH TILDE©ÚunicodedataÚnameÚ
ValueError©r   Údescription© r   ú[/var/www/html/TRUCKING_PROJECT/venv/lib/python3.8/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'   c                 C   s.   t | ƒ}t ¡ D ]\}}||k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_range7   s
    
r+   c                 C   s.   zt  | ¡}W n tk
r$   Y dS X d|kS )NFZLATINr   r   r   r   r   Úis_latinE   s
    r,   c                 C   s*   z|   d¡ W n tk
r$   Y dS X dS )NÚasciiFT)ÚencodeÚUnicodeEncodeError©r   r   r   r   Úis_asciiN   s
    r1   c                 C   s2   t  | ¡}d|krdS t| ƒ}|d kr*dS d|kS )NÚPTFÚPunctuation©r   Úcategoryr+   ©r   Úcharacter_categoryÚcharacter_ranger   r   r   Úis_punctuationW   s    
r9   c                 C   s:   t  | ¡}d|ksd|krdS t| ƒ}|d kr2dS d|kS )NÚSÚNTFZFormsr4   r6   r   r   r   Ú	is_symbolf   s    
r<   c                 C   s   t | ƒ}|d krdS d|kS )NFZ	Emoticons)r+   )r   r8   r   r   r   Úis_emoticonu   s    r=   c                 C   s&   |   ¡ s| dkrdS t | ¡}d|kS )N>   ú+ú<õ   ï½œú>ú;ú,TÚZ)Úisspacer   r5   ©r   r7   r   r   r   Úis_separator   s    
rG   c                 C   s   |   ¡ |  ¡ kS ©N)ÚislowerÚisupperr0   r   r   r   Úis_case_variable‰   s    rK   c                 C   s   t  | ¡}|dkS )NÚCo)r   r5   rF   r   r   r   Úis_private_use_onlyŽ   s    
rM   c                 C   s.   zt  | ¡}W n tk
r$   Y dS X d|kS )NFZCJKr   ©r   Zcharacter_namer   r   r   Úis_cjk”   s
    rO   c                 C   s.   zt  | ¡}W n tk
r$   Y dS X d|kS )NFZHIRAGANAr   rN   r   r   r   Úis_hiraganaž   s
    rP   c                 C   s.   zt  | ¡}W n tk
r$   Y dS X d|kS )NFZKATAKANAr   rN   r   r   r   Úis_katakana¨   s
    rQ   c                 C   s.   zt  | ¡}W n tk
r$   Y dS X d|kS )NFZHANGULr   rN   r   r   r   Ú	is_hangul²   s
    rR   c                 C   s.   zt  | ¡}W n tk
r$   Y dS X d|kS )NFZTHAIr   rN   r   r   r   Úis_thai¼   s
    rS   )r*   r   c                    s   t ‡ fdd„tD ƒƒS )Nc                 3   s   | ]}|ˆ kV  qd S rH   r   )Ú.0Úkeyword©r*   r   r   Ú	<genexpr>È   s     z-is_unicode_range_secondary.<locals>.<genexpr>)Úanyr   rV   r   rV   r   Úis_unicode_range_secondaryÆ   s    rY   c                 C   s(   |   ¡ dko&|  ¡ dko&| dko&| dkS )NFúu   ï»¿)rE   Úisprintabler0   r   r   r   Úis_unprintableË   s    
ÿþür\   é   )Ú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.
    Nr-   Úignore©Úerrorsr   ú-Ú_)Ú
isinstanceÚbytesÚ	TypeErrorÚlenr   r   ÚminÚdecodeÚlowerÚreplacer   r)   )r^   r_   Zseq_lenÚresultsZspecified_encodingÚencoding_aliasÚencoding_ianar   r   r   Úany_specified_encodingÖ   s"    
þrp   é€   )r   r   c                 C   s    | dk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_leÚutf_8Ú	utf_32_beÚ	utf_16_beÚutf_32Úutf_16Ú	utf_8_sigÚ	utf_16_leÚutf_7úencodings.{})Ú
issubclassÚ	importlibÚimport_moduleÚformatr   r   )r   r   r   r   Úis_multi_byte_encodingö   s    
þör€   )r^   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   re   rf   Ú
startswith)r^   Úiana_encodingZmarksÚmarkr   r   r   Úidentify_sig_or_bom  s    

r…   )rƒ   r   c                 C   s   | dkS )N>   rv   rw   r   )rƒ   r   r   r   Úshould_strip_sig_or_bom  s    r†   T)Úcp_nameÚstrictr   c                 C   sL   |   ¡  dd¡} t ¡ D ]\}}| ||fkr|  S q|rHtd | ¡ƒ‚| S )Nrc   rd   z Unable to retrieve IANA for '{}')rk   rl   r   r)   r   r   )r‡   rˆ   rn   ro   r   r   r   Ú	iana_name!  s    
r‰   )Údecoded_sequencer   c                 C   s4   t ƒ }| D ] }t|ƒ}|d kr q
| |¡ q
t|ƒS rH   )Úsetr+   ÚaddÚlist)rŠ   Úrangesr   r8   r   r   r   Ú
range_scan1  s    r�   )Ú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        r{   r`   ra   r   éÿ   r   éþ   )r€   r}   r~   r   r   Úrangerf   rj   )	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 ko|t |  k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—   Zcharset_normalizerz)%(asctime)s | %(levelname)s | %(message)s)r   ÚlevelÚformat_stringr   c                 C   s:   t  | ¡}| |¡ t  ¡ }| t  |¡¡ | |¡ d S rH   )ÚloggingÚ	getLoggerÚsetLevelÚStreamHandlerÚsetFormatterÚ	FormatterÚ
addHandler)r   r˜   r™   ÚloggerÚhandlerr   r   r   Úset_logging_handlerc  s
    

r£   )
Ú	sequencesro   ÚoffsetsÚ
chunk_sizeÚbom_or_sig_availableÚstrip_sig_or_bomÚsig_payloadÚis_multi_byte_decoderÚdecoded_payloadr   c	                 c   s>  |r8|dkr8|D ]"}	||	|	| … }
|
s, q4|
V  q�n|D ]ü}	|	| }|t | ƒd krZq<| |	|	| … }|r~|dkr~|| }|j||rŒdndd�}
|�r2|	dk�r2| |	 dk�r2t|dƒ}|�r2|
d |… |k�r2t|	|	d	 d
ƒD ]L}| ||… }|�r|dk�r|| }|j|dd�}
|
d |… |krä �q2qä|
V  q<d S )NFé   r`   rˆ   ra   r   rq   r!   é   éÿÿÿÿ)rh   rj   ri   r”   )r¤   ro   r¥   r¦   r§   r¨   r©   rª   r«   r•   ÚchunkZ	chunk_endZcut_sequenceZchunk_partial_size_chkÚjr   r   r   Úcut_sequence_chunksq  s>    
þ
ÿþr±   )r]   )T)N)AZunicodedata2r   ÚImportErrorr}   rš   Úcodecsr   Zencodings.aliasesr   Ú	functoolsr   Úrer   Útypingr   r   r   r	   r
   r   Z_multibytecodecr   Zconstantr   r   r   r   r   r   ÚstrÚboolr   r'   r+   r,   r1   r9   r<   r=   rG   rK   rM   rO   rP   rQ   rR   rS   rh   rY   r\   rf   r%   rp   r€   r…   r†   r‰   r�   Úfloatr–   r—   ÚINFOr£   r”   r±   r   r   r   r   Ú<module>   sœ     

							
 ýü ÷ö