a
    Bù’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   úF/home/httpd/docs/test/DocsMgr/lib/python3.9/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   Ú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    r0   F)r'   Ú	check_ltrr   c           	      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r€d}ntd
 t| ƒ¡ƒ‚d}d }t | dƒD ]¦\}}t |¡}|�r|dvrÒtd |¡ƒ‚|dv ràd}n|dkrìd}|dv �rJ|�s|}n||k�rJtdƒ‚q¤|dv�r.td |¡ƒ‚|dv �r>d}q¤|dkr¤d}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_bidiF   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_combinerŒ   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   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 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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   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 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ÚKatakanaÚHani`  ii  ið  iù  )r   r*   r   )r'   rS   r_   rZ   r   r   r   r   Úvalid_contextoË   s@     (
" 
 
rg   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 ƒràz,t| |ƒsªt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 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   sd   z(|   d¡}t|ƒ t|ƒs$tdƒ‚|W S  ty:   Y n0 t| ƒ tt| ƒ }t|ƒs`tdƒ‚|S )NÚasciizLabel too long)r"   Úulabelr,   r   ÚUnicodeEncodeErrorrq   Ú_alabel_prefixr$   ©r'   Úlabel_bytesr   r   r   Úalabel  s    
rx   c                 C   sØ   t | ttfƒs>z|  d¡}W qF ty:   t| ƒ |  Y S 0 nt| ƒ}| ¡ }| t¡r�|t	tƒd … }|stt
dƒ‚| d¡d dkr¢t
dƒ‚nt|ƒ | d¡S z| d¡} W n tyÊ   t
dƒ‚Y n0 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Ú
startswithru   r*   r   ro   ÚUnicodeErrorrv   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 r8|nt ||df¡d  }|d }	d}
t|ƒdkrn|d }
|	d	ks–|	d
kr‚|r–|	dkr |s |
du r ||7 }n@|
durÒ|	dksÈ|	dkr¼|rÈ|	d
krÒ|rÒ||
7 }n|	dkràtƒ ‚W q t�y   td t	|ƒ|d t
| ƒ¡ƒ‚Y q0 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_remapL  sT    $ÿþþýýý
ÿÿÿÿÿ

ÿr�   )r    ÚstrictÚuts46r}   r~   r   c           	      C   sê   t | tƒs4zt| dƒ} W n ty2   tdƒ‚Y n0 |rDt| ||ƒ} d}g }|r\|  d¡}n
t | ¡}|rt|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 )Nrr   zGshould pass a unicode string to the function rather than a byte string.FÚ.r2   úEmpty domainrN   TúEmpty labeló    ó   .zDomain too long)rl   ÚstrÚUnicodeDecodeErrorr   r�   ÚsplitÚ_unicode_dots_rerx   ÚappendÚjoinr0   )	r    r�   r‘   r}   r~   r-   ÚresultÚlabelsr'   r   r   r   r"   n  s8    





r"   )r    r�   r‘   r}   r   c                 C   sÐ   zt | tƒst| dƒ} W n ty2   tdƒ‚Y n0 |rDt| |dƒ} d}g }|s\t | ¡}n
|  d¡}|rt|dgkr|tdƒ‚|d sŽ|d= d}|D ]$}t|ƒ} | r®| | ¡ q’td	ƒ‚q’|rÆ| d¡ d 	|¡S )
Nrr   zInvalid ASCII in A-labelFr’   r2   r“   rN   Tr”   )
rl   r—   r˜   r   r�   rš   r™   rs   r›   rœ   )r    r�   r‘   r}   r-   r�   rž   r'   r   r   r   ro   •  s2    



ro   )F)F)TF)FFFF)FFF)*r†   Úrer   Útypingr   r   r2   r   Ú	intrangesr   rV   ru   Úcompilerš   r{   r   r   r   r   Úintr   r—   Úboolr   rm   r$   r&   r,   r0   rG   rJ   rO   rR   r^   rg   rn   rq   rx   rs   r�   r"   ro   r   r   r   r   Ú<module>   sd   
F,*'$    ûú)   üû