3
ãde\$  ã               @   s,  y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 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œ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.„ƒZ/dNe0e1ee d0œd1d2„Z2e
d3d
�eed4œd5d6„ƒZ3e0eee e0f d7œd8d9„Z4eed:œd;d<„Z5dOeeed>œd?d@„Z6eee dAœdBdC„Z7eee8dDœdEdF„Z9eeedDœdGdH„Z:dIej;dJfee1eddKœdLdM„Z<dS )Pé    N)ÚIncrementalDecoder)Úaliases)Ú	lru_cache)Úfindall)Ú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   yt j| ƒ}W n tk
r"   dS X d|kpRd|kpRd|kpRd|kpRd|kpRd|kS )NFz
WITH GRAVEz
WITH ACUTEzWITH CEDILLAzWITH DIAERESISzWITH CIRCUMFLEXz
WITH TILDE)ÚunicodedataÚnameÚ
ValueError)r   Údescription© r   úO/var/www/agendate/envp3/lib/python3.6/site-packages/charset_normalizer/utils.pyÚis_accentuated   s    r   c             C   s.   t j| ƒ}|s| S |j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 | ƒ}x tjƒ D ]\}}||kr|S qW 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_range5   s
    r(   c             C   s,   yt j| ƒ}W n tk
r"   dS X d|kS )NFZLATIN)r   r   r   )r   r   r   r   r   Úis_latinC   s
    r)   c             C   s(   y| j dƒ W n tk
r"   dS X dS )NÚasciiFT)ÚencodeÚUnicodeEncodeError)r   r   r   r   Úis_asciiL   s
    r-   c             C   s2   t j| ƒ}d|krdS t| ƒ}|d kr*dS d|kS )NÚPTFZPunctuation)r   Úcategoryr(   )r   Úcharacter_categoryÚcharacter_ranger   r   r   Úis_punctuationT   s    
r2   c             C   s:   t j| ƒ}d|ksd|krdS t| ƒ}|d kr2dS d|kS )NÚSÚNTFZForms)r   r/   r(   )r   r0   r1   r   r   r   Ú	is_symbolc   s    
r5   c             C   s   t | ƒ}|d krdS d|kS )NFZ	Emoticons)r(   )r   r1   r   r   r   Úis_emoticonr   s    r6   c             C   s&   | j ƒ s| d	krdS tj| ƒ}d|kS )
Nõ   ï½œú+ú,ú;ú<ú>TÚZ>   r;   r8   r<   r:   r7   r9   )Úisspacer   r/   )r   r0   r   r   r   Úis_separator|   s    
r?   c             C   s   | j ƒ | jƒ kS )N)ÚislowerÚisupper)r   r   r   r   Úis_case_variable†   s    rB   c             C   s   t j| ƒ}|dkS )NÚCo)r   r/   )r   r0   r   r   r   Úis_private_use_only‹   s    
rD   c             C   s,   yt j| ƒ}W n tk
r"   dS X d|kS )NFÚCJK)r   r   r   )r   Úcharacter_namer   r   r   Úis_cjk‘   s
    rG   c             C   s,   yt j| ƒ}W n tk
r"   dS X d|kS )NFZHIRAGANA)r   r   r   )r   rF   r   r   r   Úis_hiragana›   s
    rH   c             C   s,   yt j| ƒ}W n tk
r"   dS X d|kS )NFZKATAKANA)r   r   r   )r   rF   r   r   r   Úis_katakana¥   s
    rI   c             C   s,   yt j| ƒ}W n tk
r"   dS X d|kS )NFZHANGUL)r   r   r   )r   rF   r   r   r   Ú	is_hangul¯   s
    rJ   c             C   s,   yt j| ƒ}W n tk
r"   dS X d|kS )NFZTHAI)r   r   r   )r   rF   r   r   r   Úis_thai¹   s
    rK   )r'   r   c                s   t ‡ fdd„tD ƒƒS )Nc             3   s   | ]}|ˆ kV  qd S )Nr   )Ú.0Úkeyword)r'   r   r   ú	<genexpr>Å   s    z-is_unicode_range_secondary.<locals>.<genexpr>)Úanyr   )r'   r   )r'   r   Úis_unicode_range_secondaryÃ   s    rP   é   )ÚsequenceÚsearch_zoner   c             C   s˜   t | tƒst‚t| ƒ}tt| dt||ƒ… jddd�ƒ}t|ƒdkrHdS xJ|D ]B}|jƒ j	ddƒ}x,t
jƒ D ] \}}||kr€|S ||krl|S qlW qNW d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&   )rR   rS   Zseq_lenÚresultsZspecified_encodingÚencoding_aliasÚencoding_ianar   r   r   Úany_specified_encodingÈ   s     

rc   é€   )r   r   c          
   C   s    | dkpt tjd
j| ƒƒjtƒS )zQ
    Verify is a specific encoding is a multi byte one based on it IANA name
    Úutf_8Ú	utf_8_sigÚutf_16Ú	utf_16_beÚ	utf_16_leÚutf_32Ú	utf_32_leÚ	utf_32_beÚutf_7zencodings.{}>	   rj   ri   rh   rm   re   rk   rf   rl   rg   )Ú
issubclassÚ	importlibÚimport_moduleÚformatr   r   )r   r   r   r   Úis_multi_byte_encodingå   s            rr   )rR   r   c             C   sJ   xDt D ]<}t | }t|tƒr"|g}x|D ]}| j|ƒr(||fS q(W qW dS )z9
    Identify and extract SIG/BOM in given sequence.
    Nó    )Nrs   )r   rX   rY   Ú
startswith)rR   Úiana_encodingZmarksÚmarkr   r   r   Úidentify_sig_or_bomú   s    



rw   )ru   r   c             C   s   | dkS )Nrg   rj   >   rj   rg   r   )ru   r   r   r   Úshould_strip_sig_or_bom  s    rx   T)Úcp_nameÚstrictr   c             C   sL   | j ƒ jddƒ} x$tjƒ D ]\}}| ||gkr|S qW |rHtdj| ƒƒ‚| S )NrV   rW   z Unable to retrieve IANA for '{}')r^   r_   r   r&   r   rq   )ry   rz   ra   rb   r   r   r   Ú	iana_name  s    r{   )Údecoded_sequencer   c             C   s8   t ƒ }x(| D ] }t|ƒ}|d kr"q|j|ƒ qW t|ƒS )N)Úsetr(   ÚaddÚlist)r|   Úrangesr   r1   r   r   r   Ú
range_scan  s    
r�   )Úiana_name_aÚiana_name_br   c       	      C   s�   t | ƒst |ƒrdS tjdj| ƒƒj}tjdj|ƒƒj}|dd�}|dd�}d}x6tdƒD ]*}t|gƒ}|j|ƒ|j|ƒkrZ|d7 }qZW |d S )	Ng        zencodings.{}rT   )rU   r   éÿ   r   éþ   )rr   ro   rp   rq   r   ÚrangerY   r]   )	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_similar@  s    r‰   Zcharset_normalizerz)%(asctime)s | %(levelname)s | %(message)s)r   ÚlevelÚformat_stringr   c             C   s:   t j| ƒ}|j|ƒ t jƒ }|jt j|ƒƒ |j|ƒ d S )N)ÚloggingÚ	getLoggerÚsetLevelÚStreamHandlerÚsetFormatterÚ	FormatterÚ
addHandler)r   rŠ   r‹   ÚloggerÚhandlerr   r   r   Úset_logging_handlerK  s
    

r•   )rQ   )T)=Zunicodedata2r   ÚImportErrorro   rŒ   Úcodecsr   Zencodings.aliasesr   Ú	functoolsr   Úrer   Útypingr   r   r   r	   r
   Z_multibytecodecr   Zconstantr   r   r   r   r   r   ÚstrÚboolr   r$   r(   r)   r-   r2   r5   r6   r?   rB   rD   rG   rH   rI   rJ   rK   r[   rP   rY   r"   rc   rr   rw   rx   r{   r�   Úfloatrˆ   r‰   ÚINFOr•   r   r   r   r   Ú<module>   sr    

							
