U
    hb1                     @   s  d dl mZ ddlZddlZddlZddlmZmZ d dlm	Z	 dZ
dZed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eedddZeeedddZeedddZeedddZeeef edddZeeef eedd d!ZdBeeed#d$d%Zeedd&d'Zeedd(d)Zeddd*d+Z eeed,d-d.Z!dCeeeed/d0d1Z"eeee#f ddd2d3Z$eedd4d5Z%eeee#f edd6d7Z&dDeeeed9d:d;Z'dEeeee#f eeeeed<d=d>Z(dFeeee#f eeeed?d@dAZ)dS )G   )idnadata    N)UnionOptional)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-gzsn7o5u/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   )cpreturnc                 C   s0   t t| }|dkr,t t| s,td|S )Nr   z Unknown character in unicodedata)unicodedata	combiningchrname
ValueError)r   vr   r   r   _combining_class    s
    r   )r   scriptr   c                 C   s   t t| tj| S )N)r   ordr   scripts)r   r   r   r   r   
_is_script'   s    r   )sr   c                 C   s
   |  dS )Npunycode)encoder    r   r   r   	_punycode*   s    r$   c                 C   s
   d | S )NzU+{:04X})formatr#   r   r   r   _unot-   s    r&   )labelr   c                 C   s   t | dkrdS dS )N?   FTlenr'   r   r   r   valid_label_length1   s    r,   )r'   trailing_dotr   c                 C   s   t | |rdndkrdS dS )N      FTr)   )r'   r-   r   r   r   valid_string_length7   s    r0   F)r'   	check_ltrr   c           	      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rd}ntd
t| d}d }t | dD ]\}}t|}|r|dkrtd||dkrd}n|dkrd}|dkrJ|s|}n||krJtdq|dkr.td||dkr>d}q|dkrd}q|sZtddS )NFr    z1Unknown directionality in label {} at position {})RALANTr   )r3   r4   Lz=First codepoint in label {} must be directionality L, R or AL)
r3   r4   r5   ENESCSETONBNNSMzGInvalid direction for codepoint at position {} in a right-to-left label)r3   r4   r7   r5   r=   )r5   r7   z2Can not mix numeral types in a right-to-left label)r6   r7   r8   r9   r:   r;   r<   r=   zGInvalid direction for codepoint at position {} in a left-to-right label)r6   r7   z0Label ends with illegal codepoint directionality)	enumerater   bidirectionalr   r%   repr)	r'   r1   
bidi_labelidxr   	directionrtlvalid_endingnumber_typer   r   r   
check_bidi=   sP    






rG   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_combinerx   s    rJ   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
    rO   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    rR   )r'   posr   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} qqL|sdS d}t|d t| D ]B}tjt | | }|t dkrq|t d
t d	fkrd} qq|S |dkr,|dkr(tt | |d  tkr(dS dS dS d S )Ni   r   r   TFrN   Tr6   Dr3   i   )r   r   _virama_combining_classranger   joining_typesgetr*   )r'   rS   cp_valueokijoining_typer   r   r   valid_contextj   s<    

r^   )r'   rS   	exceptionr   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 rt| dkrt| |d  dS dS |d	ks|d
kr|dkrt| |d  dS dS |dkr| D ]6}|dkrqt|ds
t|ds
t|dr dS qdS d|  kr.dkrhn n6| D ],}dt |  krVdkr6n n dS q6dS d|  krdkrn n6| D ],}dt |  krdkrn n dS qdS dS )N   r   r   l   TFiu  Greeki  i  Hebrewi0  u   ・HiraganaKatakanaHani`  ii  i  i  )r   r*   r   )r'   rS   r_   rZ   r   r   r   r   valid_contexto   s@     (
" 
 
rg   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 rz,t| |st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 {} not allowed at position {} in {}r   z<Unknown codepoint adjacent to joiner {} at position {} in {}CONTEXTO-Codepoint {} not allowed at position {} in {}z-Codepoint {} at position {} of {} not allowed)
isinstancebytes	bytearraydecoder*   r   rR   rO   rJ   r>   r   r   r   codepoint_classesr^   r   r%   r&   r@   r   rg   r   rG   )r'   rS   r   rZ   r   r   r   check_label   s<    

  
    rq   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strrq   r$   _alabel_prefixr'   Zlabel_bytesr   r   r   alabel   s"    
rx   c                 C   s   t | ttfs@z| d}W qD tk
r<   t|  |  Y S X n| }| }|tr|t	td  }|srt
d|dd dkrt
dnt| |dS z|d} W n tk
r   t
dY nX t|  | S )Nrr   z5Malformed A-label, no Punycode eligible content foundrN   rM   z"A-label must not end with a hyphenr!   zInvalid A-label)rl   rm   rn   r"   rt   rq   lower
startswithrv   r*   r   ro   UnicodeErrorrw   r   r   r   rs     s,    


rs   T)domain
std3_rulestransitionalr   c                 C   s(  ddl m } d}t| D ] \}}t|}z||dk r:|nt||dfd  }|d }	d}
t|dkrp|d }
|	d	ks|	d
kr|r|	dkr|s|
dkr||7 }n@|
dk	r|	dks|	dkr|r|	d
kr|r||
7 }n|	dkrt W q tk
r   tdt	||d t
| Y qX qtd|S )zBRe-map the characters in the string according to UTS46 processing.r   )	uts46datar2      ZN   rK   VrU   3rH   Irk   rP   )r   r>   r   bisectbisect_leftr*   
IndexErrorr   r%   r&   r@   r   rQ   )r|   r}   r~   r   outputrS   char
code_pointuts46rowstatusreplacementr   r   r   uts46_remap4  sZ    


  r   )r    strictuts46r}   r~   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| |std| S )Nrr   F.r2   Empty domainrN   TEmpty label       .zDomain too long)rl   rm   rn   ro   r   split_unicode_dots_rer   rx   appendjoinr0   )	r    r   r   r}   r~   r-   resultlabelsr'   r   r   r   r"   T  s2    





r"   )r    r   r   r}   r   c                 C   s   zt | ttfr| d} W n tk
r8   tdY nX |rJt| |d} d}g }|sbt| }n
| d}|rz|dgkrtd|d s|d= d}|D ]$}t	|} | r|
|  qtd	q|r|
d d|S )
Nrr   zInvalid ASCII in A-labelFr   r2   r   rN   Tr   )rl   rm   rn   ro   UnicodeDecodeErrorr   r   r   r   rs   r   r   )r    r   r   r}   r-   r   r   r'   r   r   r   ro   r  s2    


ro   )F)F)TF)FFFF)FFF)*r2   r   r   r   retypingr   r   	intrangesr   rV   rv   compiler   r{   r   r   r   r   intr   ru   boolr   rm   r$   r&   r,   r0   rG   rJ   rO   rR   r^   rg   rn   rq   rx   rs   r   r"   ro   r   r   r   r   <module>   s<   
;+* $