a
    gXf/                     @   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   +/usr/lib/python3/dist-packages/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)unicodedataZ	combiningunichrname
ValueError)cpvr   r   r   _combining_class$   s
    r   c                 C   s   t t| tj| S )N)r   ordr   Zscripts)r   Z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v rd}q|sV|sVdS t| d }|dv rrd}n |d	krd}ntd
t| d}d}t | dD ]\}}t|}|r|dvrtd||dv rd}n|dkrd}|dv rJ|s|}n||krJtdq|dvr.td||dv r>d}q|dkrd}q|sZtddS )NFr    z3Unknown directionality in label {0} at position {1})RALANTr   )r-   r.   Lz>First codepoint in label {0} must be directionality L, R or AL)
r-   r.   r/   ENESCSETONBNNSMzHInvalid direction for codepoint at position {0} in a right-to-left label)r-   r.   r1   r/   r7   )r/   r1   z2Can not mix numeral types in a right-to-left label)r0   r1   r2   r3   r4   r5   r6   r7   zHInvalid direction for codepoint at position {0} in a left-to-right label)r0   r1   z0Label ends with illegal codepoint directionality)	enumerater   Zbidirectionalr   r    repr)	r&   Z	check_ltrZ
bidi_labelidxr   	directionZrtlZvalid_endingZnumber_typer   r   r   
check_bidiC   sP    






r<   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    r?   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
    rD   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    rG   c                 C   sL  t | | }|dkr|dkr:tt | |d  tkr:dS d}t|d ddD ]J}tjt | | }|t dkrvqNqN|t dt d	fv rd} qqN qqN|sdS d}t|d t| D ]P}tjt | | }|t dkrqq|t d
t d	fv rd} q
q q
q|S |dkrD|dkr@tt | |d  tkr@dS dS dS d S )Ni   r   r   TFrC   Tr0   Dr-   i   )r   r   _virama_combining_classranger   Zjoining_typesgetr$   )r&   poscp_valueokiZjoining_typer   r   r   valid_contextj   s@    


rQ   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  ZGreeki  i  ZHebrewi0  u   ・ZHiraganaZKatakanaZHani`  ii  i  i  )r   r$   r   )r&   rM   Z	exceptionrN   r   r   r   r   valid_contexto   s>     (
" 
 
rT   c                 C   sJ  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 n0 ty   tdt||d t| Y n0 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 LabelZPVALIDZCONTEXTJz-Joiner {0} not allowed at position {1} in {2}r   z?Unknown codepoint adjacent to joiner {0} at position {1} in {2}ZCONTEXTO0Codepoint {0} not allowed at position {1} in {2}z0Codepoint {0} at position {1} of {2} not allowed)
isinstancebytes	bytearraydecoder$   r   rG   rD   r?   r8   r   r   r   Zcodepoint_classesrQ   r   r    r!   r9   r   rT   r   r<   )r&   rM   r   rN   r   r   r   check_label   s4    


  rZ   c                 C   s|   z(|  d} t|  t| s$td| W S  ty:   Y n0 | sHtdt| } t|  t| } t|  } t| sxtd| S )NasciizLabel too longzNo Input)	r   ulabelr'   r   UnicodeEncodeErrorunicoderZ   r   _alabel_prefixr%   r   r   r   alabel  s"    
r`   c                 C   s   t | ttfs<z| d} W n ty:   t|  |  Y S 0 |  } | tr| t	td  } | sjt
d| dd dkrt
dnt|  | dS | d} t|  | S )Nr[   z5Malformed A-label, no Punycode eligible content foundrC   rB   z"A-label must not end with a hyphenr   )rV   rW   rX   r   r]   rZ   lower
startswithr_   r$   r   rY   r%   r   r   r   r\   '  s$    




r\   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u r||7 }q|
dur|	dks|	dkr|r|	d
kr|r||
7 }q|	dkrt qtd|W S  ty    t	d
t||d t| Y n0 dS )zBRe-map the characters in the string according to UTS46 processing.r   )	uts46datar,      Zr   r@   NVrI   3r=   IrE   rU   )rc   r8   r   bisectZbisect_leftr$   
IndexErrorr   rF   r   r    r!   r9   )Zdomain
std3_rulestransitionalrc   outputrM   charZ
code_pointZuts46rowZstatusZreplacementr   r   r   uts46_remap@  sR    

ro   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 )Nr[   F.r,   Empty domainrC   TEmpty label       .zDomain too long)rV   rW   rX   rY   ro   split_unicode_dots_rer   r`   appendjoinr+   )	r   strictuts46rk   rl   r*   resultlabelsr&   r   r   r   r   \  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 )	Nr[   Frp   r,   rq   rC   Trr   )rV   rW   rX   rY   ro   rv   ru   r   r\   rw   rx   )r   ry   rz   rk   r*   r{   r|   r&   r   r   r   rY   {  s,    



rY   )F)F)TF)FFFF)FFF)(r,   r   ri   r   resysZ	intrangesr   rJ   r_   compilerv   version_infostrr^   chrr   UnicodeErrorr   r   r   r   r   r   r   r!   r'   r+   r<   r?   rD   rG   rQ   rT   rZ   r`   r\   ro   r   rY   r   r   r   r   <module>   sB   

<	0
) 

