U
    žV_¯.  ã                   @   s>  d dl mZ ddlZddlZddlZddlZd dlmZ dZdZ	e 
d¡Zejd dkr`eZeZG d	d
„ d
eƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zd7dd„Zd d!„ Zd"d#„ Zd$d%„ Zd&d'„ Z d8d(d)„Z!d*d+„ Z"d,d-„ Z#d.d/„ Z$d9d1d2„Z%d:d3d4„Z&d;d5d6„Z'dS )<é   )Úidnadataé    N)Úintranges_containé	   s   xn--u   [.ã€‚ï¼Žï½¡]é   c                   @   s   e Zd ZdZdS )Ú	IDNAErrorz7 Base exception for all IDNA-encoding related problems N©Ú__name__Ú
__module__Ú__qualname__Ú__doc__© r   r   ú-/tmp/pip-unpacked-wheel-i1rno93r/idna/core.pyr      s   r   c                   @   s   e Zd ZdZdS )ÚIDNABidiErrorz= Exception when bidirectional requirements are not satisfied Nr   r   r   r   r   r      s   r   c                   @   s   e Zd ZdZdS )ÚInvalidCodepointz> Exception when a disallowed or unallocated codepoint is used Nr   r   r   r   r   r      s   r   c                   @   s   e Zd ZdZdS )ÚInvalidCodepointContextzE Exception when the codepoint is not valid in the context it is used Nr   r   r   r   r   r      s   r   c                 C   s0   t  t| ƒ¡}|dkr,t  t| ƒ¡s,tdƒ‚|S )Nr   z Unknown character in unicodedata)ÚunicodedataÚ	combiningÚunichrÚnameÚ
ValueError)ÚcpÚvr   r   r   Ú_combining_class$   s
    r   c                 C   s   t t| ƒtj| ƒS )N)r   Úordr   Úscripts)r   Úscriptr   r   r   Ú
_is_script+   s    r   c                 C   s
   |   d¡S )NÚpunycode)Úencode©Úsr   r   r   Ú	_punycode.   s    r"   c                 C   s
   d  | ¡S )Nz	U+{0:04X})Úformatr    r   r   r   Ú_unot1   s    r$   c                 C   s   t | ƒdkrdS dS )Né?   FT©Úlen©Úlabelr   r   r   Úvalid_label_length5   s    r*   c                 C   s   t | ƒ|rdndkrdS dS )Néþ   éý   FTr&   )r)   Útrailing_dotr   r   r   Úvalid_string_length<   s    r.   Fc           	      C   s^  d}t | dƒD ]:\}}t |¡}|dkr<td t| ƒ|¡ƒ‚|dkrd}q|sV|sVdS t | d ¡}|dkrrd}n |d	kr€d}ntd
 t| ƒ¡ƒ‚d}d}t | dƒD ]¦\}}t |¡}|�r|dkrÒtd |¡ƒ‚|dkràd}n|dkrìd}|dk�rJ|�s|}n||k�rJtdƒ‚q¤|dk�r.td |¡ƒ‚|dk�r>d}q¤|dkr¤d}q¤|�sZtdƒ‚dS )NFr   Ú z3Unknown directionality in label {0} at position {1})ÚRÚALÚANTr   )r0   r1   ÚLz>First codepoint in label {0} must be directionality L, R or AL)
r0   r1   r2   ÚENÚESÚCSÚETÚONÚBNÚNSMzHInvalid direction for codepoint at position {0} in a right-to-left label)r0   r1   r4   r2   r:   )r2   r4   z2Can not mix numeral types in a right-to-left label)r3   r4   r5   r6   r7   r8   r9   r:   zHInvalid direction for codepoint at position {0} in a left-to-right label)r3   r4   z0Label ends with illegal codepoint directionality)Ú	enumerater   Úbidirectionalr   r#   Úrepr)	r)   Ú	check_ltrÚ
bidi_labelÚidxr   Ú	directionÚrtlÚvalid_endingÚnumber_typer   r   r   Ú
check_bidiC   sP    






rE   c                 C   s"   t  | d ¡d dkrtdƒ‚dS )Nr   ÚMz0Label begins with an illegal combining characterT)r   Úcategoryr   r(   r   r   r   Úcheck_initial_combiner   s    rH   c                 C   s<   | dd… dkrt dƒ‚| d dks0| d dkr8t dƒ‚d	S )
Né   é   z--z4Label has disallowed hyphens in 3rd and 4th positionr   ú-éÿÿÿÿz)Label must not start or end with a hyphenT)r   r(   r   r   r   Úcheck_hyphen_ok†   s
    rM   c                 C   s   t  d| ¡| krtdƒ‚d S )NÚNFCz%Label must be in Normalization Form C)r   Ú	normalizer   r(   r   r   r   Ú	check_nfc�   s    rP   c                 C   s4  t | | ƒ}|dkrö|dkr8tt | |d  ƒƒtkr8dS d}t|d ddƒD ]B}tj t | | ƒ¡}|t dƒkrrqL|t dƒt d	ƒfkrLd} q�qL|s˜dS d}t|d t| ƒƒD ]B}tj t | | ƒ¡}|t dƒkrÔq®|t d
ƒt d	ƒfkr®d} qòq®|S |dk�r,|dk�r(tt | |d  ƒƒtk�r(dS dS dS d S )Ni   r   r   TFrL   ÚTr3   ÚDr0   i   )r   r   Ú_virama_combining_classÚranger   Újoining_typesÚgetr'   )r)   ÚposÚcp_valueÚokÚiÚjoining_typer   r   r   Úvalid_contextj•   s<    

r\   c                 C   s¾  t | | ƒ}|dkrdd|  k r0t| ƒd k r`n n,t | |d  ƒdkr`t | |d  ƒdkr`dS dS |dkrž|t| ƒd k ršt| ƒdkršt| |d  dƒS dS |d	ks®|d
krÌ|dkrÈt| |d  dƒS dS |dk�r| D ]6}|dkrèqÚt|dƒ�s
t|dƒ�s
t|dƒrÚ dS qÚdS d|  k�r.dk�rhn n6| D ],}dt |ƒ  k�rVdk�r6n n dS �q6dS d|  k�r€dk�rºn n6| D ],}dt |ƒ  k�r¨dk�rˆn n dS �qˆdS d S )Né·   r   r   él   TFiu  ÚGreekió  iô  ÚHebrewiû0  u   ãƒ»ÚHiraganaÚKatakanaÚHani`  ii  ið  iù  )r   r'   r   )r)   rW   Ú	exceptionrX   r   r   r   r   Úvalid_contextoÁ   s>     (
" 
 
re   c                 C   sL  t | ttfƒr|  d¡} t| ƒdkr,tdƒ‚t| ƒ t| ƒ t| ƒ t	| ƒD ]ò\}}t
|ƒ}t|tjd ƒrpqLqLt|tjd ƒrâz,t| |ƒsªtd t|ƒ|d t| ƒ¡ƒ‚W n2 tk
rÞ   td t|ƒ|d t| ƒ¡ƒ‚Y nX qLt|tjd	 ƒ�r t| |ƒ�s>td
 t|ƒ|d t| ƒ¡ƒ‚qLtd t|ƒ|d t| ƒ¡ƒ‚qLt| ƒ d S )Nzutf-8r   zEmpty LabelÚPVALIDÚCONTEXTJz-Joiner {0} not allowed at position {1} in {2}r   z?Unknown codepoint adjacent to joiner {0} at position {1} in {2}ÚCONTEXTOú0Codepoint {0} not allowed at position {1} in {2}z0Codepoint {0} at position {1} of {2} not allowed)Ú
isinstanceÚbytesÚ	bytearrayÚdecoder'   r   rP   rM   rH   r;   r   r   r   Úcodepoint_classesr\   r   r#   r$   r=   r   re   r   rE   )r)   rW   r   rX   r   r   r   Úcheck_labelê   s<    

  ÿ
  ÿ  ro   c                 C   s~   z(|   d¡} t| ƒ t| ƒs$tdƒ‚| W S  tk
r<   Y nX | sJtdƒ‚t| ƒ} t| ƒ t| ƒ} t|  } t| ƒsztdƒ‚| S )NÚasciizLabel too longzNo Input)	r   Úulabelr*   r   ÚUnicodeEncodeErrorÚunicodero   r"   Ú_alabel_prefixr(   r   r   r   Úalabel
  s"    
ru   c                 C   s°   t | ttfƒs>z|  d¡} W n  tk
r<   t| ƒ |  Y S X |  ¡ } |  t¡rˆ| t	tƒd … } | slt
dƒ‚|  d¡d dkršt
dƒ‚nt| ƒ |  d¡S |  d¡} t| ƒ | S )Nrp   z5Malformed A-label, no Punycode eligible content foundrL   rK   z"A-label must not end with a hyphenr   )rj   rk   rl   r   rr   ro   ÚlowerÚ
startswithrt   r'   r   rm   r(   r   r   r   rq   #  s$    




rq   Tc              
   C   s(  ddl m } d}zÞt| ƒD ]Æ\}}t|ƒ}||dk r8|nt ||df¡d  }|d }	t|ƒdkrj|d nd}
|	d	ks–|	d
kr‚|r–|	dkr |s |
dkr ||7 }q|
dk	rÒ|	dksÈ|	dkr¼|rÈ|	d
krÒ|rÒ||
7 }q|	dkrtƒ ‚qt d|¡W S  tk
�r"   t	d 
t|ƒ|d t| ƒ¡ƒ‚Y nX dS )zBRe-map the characters in the string according to UTS46 processing.r   )Ú	uts46datar/   é   ÚZr   rI   NÚVrR   Ú3rF   ÚIrN   ri   )rx   r;   r   ÚbisectÚbisect_leftr'   Ú
IndexErrorr   rO   r   r#   r$   r=   )ÚdomainÚ
std3_rulesÚtransitionalrx   ÚoutputrW   ÚcharÚ
code_pointÚuts46rowÚstatusÚreplacementr   r   r   Úuts46_remap<  sV    ÿÿÿþþþ
ÿÿþþ
  ÿÿrŠ   c           	      C   sÎ   t | ttfƒr|  d¡} |r(t| ||ƒ} d}g }|r@|  d¡}n
t | ¡}|rX|dgkr`tdƒ‚|d dkrv|d= d}|D ]$}t|ƒ} | r–| 	| ¡ qztdƒ‚qz|r®| 	d	¡ d
 
|¡} t| |ƒsÊtdƒ‚| S )Nrp   FÚ.r/   úEmpty domainrL   TúEmpty labeló    ó   .zDomain too long)rj   rk   rl   rm   rŠ   ÚsplitÚ_unicode_dots_rer   ru   ÚappendÚjoinr.   )	r!   ÚstrictÚuts46r‚   rƒ   r-   ÚresultÚlabelsr)   r   r   r   r   X  s2    





r   c                 C   s´   t | ttfƒr|  d¡} |r(t| |dƒ} d}g }|s@t | ¡}n
|  d¡}|rX|dgkr`tdƒ‚|d sr|d= d}|D ]$}t|ƒ} | r’| 	| ¡ qvtdƒ‚qv|rª| 	d¡ d 
|¡S )	Nrp   Fr‹   r/   rŒ   rL   Tr�   )rj   rk   rl   rm   rŠ   r‘   r�   r   rq   r’   r“   )r!   r”   r•   r‚   r-   r–   r—   r)   r   r   r   rm   w  s,    



rm   )F)F)TF)FFFF)FFF)(r/   r   r~   r   ÚreÚsysÚ	intrangesr   rS   rt   Úcompiler‘   Úversion_infoÚstrrs   Úchrr   ÚUnicodeErrorr   r   r   r   r   r   r"   r$   r*   r.   rE   rH   rM   rP   r\   re   ro   ru   rq   rŠ   r   rm   r   r   r   r   Ú<module>   sB   

<	,
) 

