U
    ʼb.                     @   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-cvwsg9ju/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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    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} 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   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 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)   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 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 {0} not allowed at position {1} in {2}r   z?Unknown codepoint adjacent to joiner {0} at position {1} in {2}CONTEXTO0Codepoint {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rt
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}zt| 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| |st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   

<	,
) 

