3
]ð]Õ-  ã               @   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j
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-build-irfnccat/idna/idna/core.pyr      s   r   c               @   s   e Zd ZdZdS )ÚIDNABidiErrorz= Exception when bidirectional requirements are not satisfied N)r   r	   r
   r   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 N)r   r	   r
   r   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 N)r   r	   r
   r   r   r   r   r   r      s   r   c             C   s0   t jt| ƒƒ}|dkr,t j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
   | j dƒS )NÚpunycode)Úencode)Úsr   r   r   Ú	_punycode.   s    r    c             C   s
   dj | ƒS )Nz	U+{0:04X})Úformat)r   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éþ   éý   FT)r$   )r%   Útrailing_dotr   r   r   Úvalid_string_length<   s    r*   Fc       	      C   sn  d}xHt | dƒD ]:\}}tj|ƒ}|dkr>tdjt| ƒ|ƒƒ‚|dkrd}qW | r^| r^dS tj| d	 ƒ}|dkrzd}n |d
krˆd}ntdjt| ƒƒƒ‚d}d}x¸t | dƒD ]ª\}}tj|ƒ}|�r$|dkrÜtdj|ƒƒ‚|dk� rìd}n|dk� rúd}|dk�rX|�s|}n||k�rXtdƒ‚q®|dk�r<tdj|ƒƒ‚|dk�rLd}q®|dkr®d}q®W |�sjtdƒ‚dS )NFr   Ú z3Unknown directionality in label {0} at position {1}ÚRÚALÚANTr   ÚLz>First codepoint in label {0} must be directionality L, R or ALÚENÚESÚCSÚETÚONÚBNÚNSMzHInvalid direction for codepoint at position {0} in a right-to-left labelz2Can not mix numeral types in a right-to-left labelzHInvalid direction for codepoint at position {0} in a left-to-right labelz0Label ends with illegal codepoint directionality)r,   r-   r.   )r,   r-   )
r,   r-   r.   r0   r1   r2   r3   r4   r5   r6   )r,   r-   r0   r.   )r.   r0   )r/   r0   r1   r2   r3   r4   r5   r6   )r/   r0   )Ú	enumerater   Úbidirectionalr   r!   Úrepr)	r%   Ú	check_ltrÚ
bidi_labelÚidxr   Ú	directionÚrtlÚvalid_endingÚnumber_typer   r   r   Ú
check_bidiC   sP    








rA   c             C   s"   t j| 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    rD   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   ú-r   z)Label must not start or end with a hyphenTéÿÿÿÿ)r   )r%   r   r   r   Úcheck_hyphen_ok†   s
    rI   c             C   s   t j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    rL   c             C   s:  t | | ƒ}|dk� rü|dkr:tt | |d  ƒƒtkr:dS d}xTt|d ddƒD ]@}tjjt | | ƒƒ}|t dƒkrvqP|t dƒt dƒgkrPd}P qPW |sœdS d}xVt|d t| ƒƒD ]@}tjjt | | ƒƒ}|t dƒkrÚq´|t d	ƒt dƒgkr´d}P q´W |S |d
k�r2|dk�r.tt | |d  ƒƒtk�r.dS dS dS d S )Ni   r   r   TFÚTr/   ÚDr,   i   rH   rH   )r   r   Ú_virama_combining_classÚranger   Újoining_typesÚgetr$   )r%   ÚposÚcp_valueÚokÚiÚjoining_typer   r   r   Úvalid_contextj•   s<    


rX   c             C   sÄ  t | | ƒ}|dkrdd|  k o.t| ƒd k n  r`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x<| D ]4}|dkrêqÜt|dƒ�st|dƒ�st|dƒrÜdS qÜW dS d|  k�o,dkn  �rlx2| D ]*}dt |ƒ  k�oVdkn  �r:dS �q:W dS d|  k�o€dkn  �rÀx2| D ]*}dt |ƒ  k�oªdkn  �rŽdS �qŽW dS d S )Né·   r   r   él   TFiu  ÚGreekió  iô  ÚHebrewiû0  u   ãƒ»ÚHiraganaÚKatakanaÚHani`  ii  ið  iù  )r   r$   r   )r%   rS   Ú	exceptionrT   r   r   r   r   Úvalid_contextoÁ   s>     (

"
 

 
ra   c             C   sR  t | ttfƒr| jdƒ} t| ƒdkr,tdƒ‚t| ƒ t| ƒ t| ƒ � xþt	| ƒD ]ò\}}t
|ƒ}t|tjd ƒrtqPqPt|tjd ƒræy,t| |ƒs®tdjt|ƒ|d t| ƒƒƒ‚W n2 tk
râ   tdjt|ƒ|d t| ƒƒƒ‚Y nX qPt|tjd	 ƒ�r$t| |ƒ�sBtd
jt|ƒ|d t| ƒƒƒ‚qPtdjt|ƒ|d t| ƒƒƒ‚qPW t| ƒ 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}ÚCONTEXTOz0Codepoint {0} not allowed at position {1} in {2}z0Codepoint {0} at position {1} of {2} not allowed)Ú
isinstanceÚbytesÚ	bytearrayÚdecoder$   r   rL   rI   rD   r7   r   r   r   Úcodepoint_classesrX   r   r!   r"   r9   r   ra   r   rA   )r%   rS   r   rT   r   r   r   Úcheck_labelê   s0    

  "rj   c             C   s|   y&| j dƒ} t| ƒ t| ƒs$tdƒ‚| S  tk
r:   Y nX | sHtdƒ‚t| ƒ} t| ƒ t| ƒ} t|  } t| ƒsxtdƒ‚| S )NÚasciizLabel too longzNo Input)	r   Úulabelr&   r   ÚUnicodeEncodeErrorÚunicoderj   r    Ú_alabel_prefix)r%   r   r   r   Úalabel
  s"    
rp   c             C   s†   t | ttfƒs:y| jdƒ} W n tk
r8   t| ƒ | S X | jƒ } | jtƒr^| t	tƒd … } nt| ƒ | j
dƒS | j
dƒ} t| ƒ | S )Nrk   r   )re   rf   rg   r   rm   rj   ÚlowerÚ
startswithro   r$   rh   )r%   r   r   r   rl   #  s    


rl   Tc             C   s0  ddl m } d}yæxØt| ƒD ]Ì\}}t|ƒ}||dk r:|ntj||dfƒd  }|d }	t|ƒdkrl|d nd}
|	d	ksœ|	d
kr†| sœ|	dkr¦| r¦|
dkr¦||7 }q|
dk	rÚ|	dksÐ|	dkrÄ| sÐ|	d
krÚ|rÚ||
7 }q|	dkrtƒ ‚qW tjd|ƒS  tk
�r*   t	dj
t|ƒ|d t| ƒƒƒ‚Y nX dS )zBRe-map the characters in the string according to UTS46 processing.r   )Ú	uts46datar+   é   ÚZr   rE   NÚVrN   Ú3rB   ÚIrJ   z0Codepoint {0} not allowed at position {1} in {2})rs   r7   r   ÚbisectÚbisect_leftr$   Ú
IndexErrorr   rK   r   r!   r"   r9   )ÚdomainÚ
std3_rulesÚtransitionalrs   ÚoutputrS   ÚcharÚ
code_pointÚuts46rowÚstatusÚreplacementr   r   r   Úuts46_remap8  s0    


r…   c       	      C   sÔ   t | ttfƒr| jdƒ} |r(t| ||ƒ} d}g }|r@| jdƒ}n
tj| ƒ}| sZ|dgkrbtdƒ‚|d dkrx|d= d}x,|D ]$}t|ƒ} | rš|j	| ƒ q~tdƒ‚q~W |r´|j	d	ƒ d
j
|ƒ} t| |ƒsÐtdƒ‚| S )Nrk   FÚ.r+   zEmpty domainr   TzEmpty labeló    ó   .zDomain too longrH   rH   )re   rf   rg   rh   r…   ÚsplitÚ_unicode_dots_rer   rp   ÚappendÚjoinr*   )	r   ÚstrictÚuts46r}   r~   r)   ÚresultÚlabelsr%   r   r   r   r   T  s2    





r   c             C   sº   t | ttfƒr| jdƒ} |r(t| |dƒ} d}g }|s@tj| ƒ}n
| jdƒ}| sZ|dgkrbtdƒ‚|d	 st|d
= d}x,|D ]$}t|ƒ} | r–|j	| ƒ qztdƒ‚qzW |r°|j	dƒ dj
|ƒS )Nrk   Fr†   r+   zEmpty domainr   TzEmpty labelrH   rH   )re   rf   rg   rh   r…   rŠ   r‰   r   rl   r‹   rŒ   )r   r�   rŽ   r}   r)   r�   r�   r%   r   r   r   rh   s  s,    



rh   )F)F)TF)FFFF)FFF)(r+   r   ry   r   ÚreÚsysÚ	intrangesr   rO   ro   ÚcompilerŠ   Úversion_infoÚstrrn   Úchrr   ÚUnicodeErrorr   r   r   r   r   r   r    r"   r&   r*   rA   rD   rI   rL   rX   ra   rj   rp   rl   r…   r   rh   r   r   r   r   Ú<module>   sB   

<	,
) 

