a
    »ÏOcû-  ã                   @   s‚  zd dl ZW n ey&   d dlZY n0 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   sT   zt  | ¡}W n ty"   Y dS 0 d|v pRd|v pRd|v pRd|v pRd|v pRd|v S )NFz
WITH GRAVEz
WITH ACUTEzWITH CEDILLAzWITH DIAERESISzWITH CIRCUMFLEXz
WITH TILDE©ÚunicodedataÚnameÚ
ValueError©r   Údescription© r   úO/var/www/html/gsl.tools/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'   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   Zcharacter_ordÚ
range_nameZ	ord_ranger   r   r   Úunicode_range7   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_latinE   s
    r,   c                 C   s(   z|   d¡ W n ty"   Y dS 0 dS )NÚasciiFT)ÚencodeÚUnicodeEncodeError©r   r   r   r   Úis_asciiN   s
    r1   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_punctuationW   s    
r8   c                 C   s:   t  | ¡}d|v sd|v rdS t| ƒ}|d u r2dS d|v S )NÚSÚNTFZFormsr3   r5   r   r   r   Ú	is_symbolf   s    
r;   c                 C   s   t | ƒ}|d u rdS d|v S )NFZ	Emoticons)r+   )r   r7   r   r   r   Úis_emoticonu   s    r<   c                 C   s&   |   ¡ s| dv rdS t | ¡}d|v S )N>   ú;ú<u   ï½œú+ú,ú>TÚZ)Úisspacer   r4   ©r   r6   r   r   r   Úis_separator   s    
rE   c                 C   s   |   ¡ |  ¡ kS ©N)ÚislowerÚisupperr0   r   r   r   Úis_case_variable‰   s    rI   c                 C   s   t  | ¡}|dkS )NÚCo)r   r4   rD   r   r   r   Úis_private_use_onlyŽ   s    
rK   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
    rN   c                 C   s,   zt  | ¡}W n ty"   Y dS 0 d|v S )NFZHIRAGANAr   rM   r   r   r   Úis_hiraganaž   s
    rO   c                 C   s,   zt  | ¡}W n ty"   Y dS 0 d|v S )NFZKATAKANAr   rM   r   r   r   Úis_katakana¨   s
    rP   c                 C   s,   zt  | ¡}W n ty"   Y dS 0 d|v S )NFZHANGULr   rM   r   r   r   Ú	is_hangul²   s
    rQ   c                 C   s,   zt  | ¡}W n ty"   Y dS 0 d|v S )NFZTHAIr   rM   r   r   r   Úis_thai¼   s
    rR   )r*   r   c                    s   t ‡ fdd„tD ƒƒS )Nc                 3   s   | ]}|ˆ v V  qd S rF   r   )Ú.0Úkeyword©r*   r   r   Ú	<genexpr>È   ó    z-is_unicode_range_secondary.<locals>.<genexpr>)Úanyr   rU   r   rU   r   Úis_unicode_range_secondaryÆ   s    rY   c                 C   s(   |   ¡ du o&|  ¡ du o&| dko&| dkS )NFúu   ï»¿)rC   Ú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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Ú	utf_32_beÚutf_7Úutf_16Ú	utf_16_leÚ	utf_16_beÚutf_8Ú	utf_32_leZ	utf_8_sigú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.
    )NrW   )r   re   rf   Ú
startswith)r^   Úiana_encodingZmarksÚmarkr   r   r   Úidentify_sig_or_bom  s    

rƒ   )r�   r   c                 C   s   | dvS )N>   rr   ru   r   )r�   r   r   r   Úshould_strip_sig_or_bom  s    r„   T)Úcp_nameÚstrictr   c                 C   sL   |   ¡  dd¡} t ¡ D ]\}}| ||fv 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 u r q
| |¡ q
t|ƒS rF   )Úsetr+   ÚaddÚlist)rˆ   Úrangesr   r7   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        rz   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 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•   Zcharset_normalizerz)%(asctime)s | %(levelname)s | %(message)s)r   ÚlevelÚformat_stringr   c                 C   s:   t  | ¡}| |¡ t  ¡ }| t  |¡¡ | |¡ d S rF   )Ú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u r8|D ]"}	||	|	| … }
|
s, q4|
V  q�n|D ]ü}	|	| }|t | ƒd krZq<| |	|	| … }|r~|du r~|| }|j||rŒdndd�}
|�r2|	dk�r2| |	 dk�r2t|dƒ}|�r2|
d |… |v�r2t|	|	d	 d
ƒD ]L}| ||… }|�r|du �r|| }|j|dd�}
|
d |… |v 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   r8   r;   r<   rE   rI   rK   rN   rO   rP   rQ   rR   rh   rY   r\   rf   r%   rp   r   rƒ   r„   r‡   r�   Úfloatr”   r•   ÚINFOr¡   r’   r¯   r   r   r   r   Ú<module>   sœ     

							
 ýü ÷ö