3
el2                 @   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j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   M/var/www/html/StaffProfile/staffvenv/lib/python3.6/site-packages/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   )cpreturnc             C   s0   t jt| }|dkr,t j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
   | j dS )Npunycode)encode)r   r   r   r   	_punycode*   s    r"   c             C   s
   dj | S )NzU+{:04X})format)r   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      FT)r'   )r%   r)   r   r   r   valid_string_length7   s    r,   F)r%   	check_ltrr   c       	      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rd}ntdjt| d}d }xt | dD ]\}}tj|}|r$|dkrtdj||dk rd}n|dk rd}|dkrX|s|}n||krXtdq|dkr<tdj||dkrLd}q|dkrd}qW |sjtddS )NFr    z1Unknown directionality in label {} at position {}RALANTr   Lz=First codepoint in label {} must be directionality L, R or ALENESCSETONBNNSMzGInvalid direction for codepoint at position {} in a right-to-left labelz2Can not mix numeral types in a right-to-left labelzGInvalid direction for codepoint at position {} in a left-to-right labelz0Label ends with illegal codepoint directionality)r/   r0   r1   )r/   r0   )
r/   r0   r1   r3   r4   r5   r6   r7   r8   r9   )r/   r0   r3   r1   )r1   r3   )r2   r3   r4   r5   r6   r7   r8   r9   )r2   r3   )	enumerater   bidirectionalr   r#   repr)	r%   r-   
bidi_labelidxr   	directionrtlvalid_endingnumber_typer   r   r   
check_bidi=   sP    








rC   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_combinerx   s    rF   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
    rK   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    rN   )r%   posr   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 |sdS d}xVt|d t| D ]@}tjjt | | }|t dkrq|t d	t dgkrd}P qW |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Tr2   Dr/   i   rJ   rJ   )r   r   _virama_combining_classranger   joining_typesgetr'   )r%   rO   cp_valueokijoining_typer   r   r   valid_contextj   s<    


rZ   )r%   rO   	exceptionr   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 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x<| D ]4}|dkrqt|dst|dst|drdS qW 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odkn  rx2| D ]*}dt |  kodkn  rdS qW dS dS )N   r   r   l   TFiu  Greeki  i  Hebrewi0  u   ・HiraganaKatakanaHani`  ii  i  i  )r   r'   r   )r%   rO   r[   rV   r   r   r   r   valid_contexto   s@     (

"
 

 
rc   c             C   sR  t | ttfr| jd} t| dkr,tdt|  t|  t|   xt	| D ]\}}t
|}t|tjd rtqPqPt|tjd ry,t| |st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 {} not allowed at position {} in {}r   z<Unknown codepoint adjacent to joiner {} at position {} in {}CONTEXTOz-Codepoint {} not allowed at position {} in {}z-Codepoint {} at position {} of {} not allowed)
isinstancebytes	bytearraydecoder'   r   rN   rK   rF   r:   r   r   r   codepoint_classesrZ   r   r#   r$   r<   r   rc   r   rC   )r%   rO   r   rV   r   r   r   check_label   s0    

  "rl   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strrl   r"   _alabel_prefix)r%   label_bytesr   r   r   alabel   s"    
rs   c             C   s   t | ttfs<y| jd}W q@ tk
r8   t|  | S X n| }|j }|jtr|t	td  }|snt
d|jdd dkrt
dnt| |jdS y|jd} W n tk
r   t
dY nX t|  | S )	Nrm   z5Malformed A-label, no Punycode eligible content foundr   rI   z"A-label must not end with a hyphenr    zInvalid A-labelrJ   )rg   rh   ri   r!   ro   rl   lower
startswithrq   r'   r   rj   UnicodeError)r%   rr   r   r   r   rn     s,    


rn   T)domain
std3_rulestransitionalr   c             C   s4  ddl m } d}xt| D ]\}}t|}y||dk r>|ntj||dfd  }|d }	d}
t|dkrt|d }
|	d	ks|	d
kr| s|	dkr| r|
dkr||7 }nB|
dk	r|	dks|	dkr| s|	d
kr|r||
7 }n|	dkrt W q tk
r"   tdjt	||d t
| Y qX qW tjd|S )zBRe-map the characters in the string according to UTS46 processing.r   )	uts46datar.      ZN   rG   VrQ   3rD   Iz-Codepoint {} not allowed at position {} in {}rL   )rz   r:   r   bisectbisect_leftr'   
IndexErrorr   r#   r$   r<   r   rM   )rw   rx   ry   rz   outputrO   char
code_pointuts46rowstatusreplacementr   r   r   uts46_remap4  s4    


"r   )r   strictuts46rx   ry   r   c       	      C   s   t | ts6yt| d} W n tk
r4   tdY nX |rFt| ||} d}g }|r^| jd}n
tj| }| sx|dgkrtd|d dkr|d= d}x,|D ]$}t|} | r|j|  qtd	qW |r|jd
 dj	|} t
| |std| S )Nrm   zGshould pass a unicode string to the function rather than a byte string.F.r.   zEmpty domainr   TzEmpty label       .zDomain too longrJ   rJ   )rg   rp   UnicodeDecodeErrorr   r   split_unicode_dots_rers   appendjoinr,   )	r   r   r   rx   ry   r)   resultlabelsr%   r   r   r   r!   T  s8    





r!   )r   r   r   rx   r   c             C   s   yt | tst| d} W n tk
r4   tdY nX |rFt| |d} d}g }|s^tj| }n
| jd}| sx|dgkrtd|d
 s|d= d}x,|D ]$}t|} | r|j|  qtd	qW |r|jd dj	|S )Nrm   zInvalid ASCII in A-labelFr   r.   zEmpty domainr   TzEmpty labelrJ   rJ   )
rg   rp   r   r   r   r   r   rn   r   r   )r   r   r   rx   r)   r   r   r%   r   r   r   rj   u  s2    



rj   )F)F)TF)FFFF)FFF)*r.   r   r   r   retypingr   r   	intrangesr   rR   rq   compiler   rv   r   r   r   r   intr   rp   boolr   rh   r"   r$   r(   r,   rC   rF   rK   rN   rZ   rc   ri   rl   rs   rn   r   r!   rj   r   r   r   r   <module>   s<   
;+* $!