U
    âßŽi¾3  ã                   @   s  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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é    N)ÚOptionalÚUnioné   )Úidnadata)Úintranges_containé	   s   xn--u   [.ã€‚ï¼Žï½¡]c                   @   s   e Zd ZdZdS )Ú	IDNAErrorz5Base exception for all IDNA-encoding related problemsN©Ú__name__Ú
__module__Ú__qualname__Ú__doc__© r   r   úG/var/www/html/IITS/school/venv/lib/python3.8/site-packages/idna/core.pyr      s   r   c                   @   s   e Zd ZdZdS )ÚIDNABidiErrorz;Exception when bidirectional requirements are not satisfiedNr	   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 usedNr	   r   r   r   r   r      s   r   c                   @   s   e Zd ZdZdS )ÚInvalidCodepointContextzCException when the codepoint is not valid in the context it is usedNr	   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   Zscripts)r   r   r   r   r   Ú
_is_script.   s    r   )Úsr   c                 C   s
   |   d¡S )NÚpunycode)Úencode©r   r   r   r   Ú	_punycode2   s    r#   c                 C   s
   d  | ¡S )NzU+{:04X})Úformatr"   r   r   r   Ú_unot6   s    r%   )Úlabelr   c                 C   s   t | ƒdkrdS dS )Né?   FT©Úlen©r&   r   r   r   Úvalid_label_length:   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_length@   s    r/   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r€d}ntd
 t| ƒ¡ƒ‚d}d }t | dƒD ]¦\}}t |¡}|�r|dkrÒtd |¡ƒ‚|dkràd}n|dkrìd}|dk�rJ|�s|}n||k�rJtdƒ‚q¤|dk�r.td |¡ƒ‚|dk�r>d}q¤|dkr¤d}q¤|�sZtdƒ‚dS )NFr   Ú z1Unknown directionality in label {} at position {})ÚRÚALÚANTr   )r2   r3   ÚLz=First codepoint in label {} must be directionality L, R or AL)
r2   r3   r4   ÚENÚESÚCSÚETÚONÚBNÚNSMzGInvalid direction for codepoint at position {} in a right-to-left label)r2   r3   r6   r4   r<   )r4   r6   z2Can not mix numeral types in a right-to-left label)r5   r6   r7   r8   r9   r:   r;   r<   zGInvalid direction for codepoint at position {} in a left-to-right label)r5   r6   z0Label ends with illegal codepoint directionality)Ú	enumerater   Úbidirectionalr   r$   Úrepr)	r&   r0   Z
bidi_labelÚidxr   Ú	directionZrtlZvalid_endingZnumber_typer   r   r   Ú
check_bidiF   sP    






rB   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    rE   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
    rJ   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    rM   )r&   Úposr   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kr”d} qšqN qšqN|s¢dS d}t|d t| ƒƒD ]P}tj t | | ƒ¡}|t dƒkràq¸q¸|t d
ƒt d	ƒfk�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   TFrI   ÚTr5   ÚDr2   i   )r   r   Ú_virama_combining_classÚranger   Zjoining_typesÚgetr)   )r&   rN   Úcp_valueÚokÚiZjoining_typer   r   r   Úvalid_contextjŸ   s@    


rW   )r&   rN   Ú	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 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| D ]6}|dkrèqÚt|dƒ�s
t|dƒ�s
t|dƒrÚ dS qÚdS d|  k�r.dk�rhn n6| D ],}dt |ƒ  k�rVdk�r6n n dS �q6dS d|  k�r€dk�rºn n6| D ],}dt |ƒ  k�r¨dk�rˆn n dS �qˆdS dS )Né·   r   r   él   TFiu  ÚGreekió  iô  ÚHebrewiû0  u   ãƒ»ÚHiraganaÚKatakanaZHani`  ii  ið  iù  )r   r)   r   )r&   rN   rX   rT   r   r   r   r   Úvalid_contextoË   s@     (
" 
 
r_   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 ƒrâz,t| |ƒsªt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 LabelZPVALIDZCONTEXTJz*Joiner {} not allowed at position {} in {}r   z<Unknown codepoint adjacent to joiner {} at position {} in {}ZCONTEXTOú-Codepoint {} not allowed at position {} in {}z-Codepoint {} at position {} of {} not allowed)Ú
isinstanceÚbytesÚ	bytearrayÚdecoder)   r   rM   rJ   rE   r=   r   r   r   Zcodepoint_classesrW   r   r$   r%   r?   r   r_   r   rB   )r&   rN   r   rT   r   r   r   Úcheck_labelõ   sD    

ÿ  ÿÿÿÿre   c                 C   sf   z(|   d¡}t|ƒ t|ƒs$tdƒ‚|W S  tk
r<   Y nX t| ƒ tt| ƒ }t|ƒsbtdƒ‚|S )NÚasciizLabel too long)r!   Úulabelr+   r   ÚUnicodeEncodeErrorre   Ú_alabel_prefixr#   ©r&   Zlabel_bytesr   r   r   Úalabel  s    
rk   c                 C   sÜ   t | ttfƒs@z|  d¡}W qH tk
r<   t| ƒ |  Y S X nt| ƒ}| ¡ }| t¡r’|t	tƒd … }|svt
dƒ‚| d¡d dkr¤t
dƒ‚nt|ƒ | d¡S z| d¡} W n tk
rÎ   t
dƒ‚Y nX t| ƒ | S )Nrf   z5Malformed A-label, no Punycode eligible content foundrI   rH   z"A-label must not end with a hyphenr    zInvalid A-label)ra   rb   rc   r!   rh   re   ÚlowerÚ
startswithri   r)   r   rd   ÚUnicodeErrorrj   r   r   r   rg   /  s,    


rg   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râtƒ ‚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   )Ú	uts46datar1   é   ÚZNé   rF   ÚVrP   Ú3rC   ÚIr`   rK   )rr   r=   r   ÚbisectÚbisect_leftr)   Ú
IndexErrorr   r$   r%   r?   r   rL   )ro   rp   rq   rr   ÚoutputrN   ÚcharZ
code_pointZuts46rowÚstatusÚreplacementr   r   r   Úuts46_remapL  sT    $ÿþþýýý
ÿÿÿÿÿ

ÿr€   )r   ÚstrictÚuts46rp   rq   r   c           	      C   sì   t | tƒs6zt| dƒ} W n tk
r4   tdƒ‚Y nX |rFt| ||ƒ} d}g }|r^|  d¡}n
t | ¡}|rv|dgkr~tdƒ‚|d dkr”|d= d}|D ]$}t|ƒ} | r´| | ¡ q˜td	ƒ‚q˜|rÌ| d
¡ d 	|¡} t
| |ƒsètdƒ‚| S )Nrf   zGshould pass a unicode string to the function rather than a byte string.FÚ.r1   úEmpty domainrI   TúEmpty labeló    ó   .zDomain too long)ra   ÚstrÚUnicodeDecodeErrorr   r€   ÚsplitÚ_unicode_dots_rerk   ÚappendÚjoinr/   )	r   r�   r‚   rp   rq   r,   ÚresultÚlabelsr&   r   r   r   r!   n  s8    





r!   )r   r�   r‚   rp   r   c                 C   sÒ   zt | tƒst| dƒ} W n tk
r4   tdƒ‚Y nX |rFt| |dƒ} d}g }|s^t | ¡}n
|  d¡}|rv|dgkr~tdƒ‚|d s�|d= d}|D ]$}t|ƒ} | r°| | ¡ q”td	ƒ‚q”|rÈ| d¡ d 	|¡S )
Nrf   zInvalid ASCII in A-labelFrƒ   r1   r„   rI   Tr…   )
ra   rˆ   r‰   r   r€   r‹   rŠ   rg   rŒ   r�   )r   r�   r‚   rp   r,   rŽ   r�   r&   r   r   r   rd   •  s2    



rd   )F)F)TF)FFFF)FFF)*ry   Úrer   Útypingr   r   r1   r   Ú	intrangesr   rQ   ri   Úcompiler‹   rn   r   r   r   r   Úintr   rˆ   Úboolr   rb   r#   r%   r+   r/   rB   rE   rJ   rM   rW   r_   rc   re   rk   rg   r€   r!   rd   r   r   r   r   Ú<module>   sd   
F,*'$    ûú)   üû