o
    ±ÍYaû1  ã                   @   sX  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 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dedefdd„Zdededefdd„Zdedefdd„Zdedefdd„Zdeeef defdd„Zdeeef d edefd!d"„ZdEded$edefd%d&„Zdedefd'd(„Zdedefd)d*„Zdeddfd+d,„Z ded-edefd.d/„Z!dEded-ed0edefd1d2„Z"deeee#f ddfd3d4„Z$dedefd5d6„Z%deeee#f defd7d8„Z&dFd:ed;ed<edefd=d>„Z'dGdeeee#f d?ed@ed;ed<edefdAdB„Z(dHdeeee#f d?ed@ed;edef
dCdD„Z)dS )Ié   )Úidnadataé    N)ÚUnionÚOptional)Úintranges_containé	   s   xn--u   [.ã€‚ï¼Žï½¡]c                   @   ó   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	      ó    r	   c                   @   r   )ÚIDNABidiErrorz= Exception when bidirectional requirements are not satisfied Nr
   r   r   r   r   r      r   r   c                   @   r   )ÚInvalidCodepointz> Exception when a disallowed or unallocated codepoint is used Nr
   r   r   r   r   r      r   r   c                   @   r   )ÚInvalidCodepointContextzE Exception when the codepoint is not valid in the context it is used Nr
   r   r   r   r   r      r   r   ÚcpÚreturnc                 C   s0   t  t| ƒ¡}|dkrt  t| ƒ¡stdƒ‚|S )Nr   z Unknown character in unicodedata)ÚunicodedataZ	combiningÚchrÚnameÚ
ValueError)r   Úvr   r   r   Ú_combining_class    s
   r   Úscriptc                 C   s   t t| ƒtj| ƒS )N)r   Úordr   Zscripts)r   r   r   r   r   Ú
_is_script'   s   r   Úsc                 C   s
   |   d¡S )NÚpunycode)Úencode©r    r   r   r   Ú	_punycode*   ó   
r$   c                 C   s
   d  | ¡S )NzU+{:04X})Úformatr#   r   r   r   Ú_unot-   r%   r'   Úlabelc                 C   s   t | ƒdkrdS dS )Né?   FT©Úlen©r(   r   r   r   Úvalid_label_length1   s   r-   Útrailing_dotc                 C   s   t | ƒ|rdndkrdS dS )Néþ   éý   FTr*   )r(   r.   r   r   r   Úvalid_string_length7   s   r1   FÚ	check_ltrc           	      C   sP  d}t | dƒD ]\}}t |¡}|dkrtd t| ƒ|¡ƒ‚|dv r$d}q|s+|s+dS t | d ¡}|dv r9d}n|d	kr@d}n	td
 t| ƒ¡ƒ‚d}d }t | dƒD ]M\}}t |¡}|r‡|dvrhtd |¡ƒ‚|dv rod}n|dkrud}|dv r†|s~|}qR||kr†tdƒ‚qR|dvr’td |¡ƒ‚|dv r™d}qR|dkrŸd}qR|s¦tdƒ‚dS )NFr   Ú z1Unknown directionality in label {} at position {})ÚRÚALÚANTr   )r4   r5   ÚLz=First codepoint in label {} must be directionality L, R or AL)
r4   r5   r6   ÚENÚESÚCSÚETÚONÚBNÚNSMzGInvalid direction for codepoint at position {} in a right-to-left label)r4   r5   r8   r6   r>   )r6   r8   z2Can not mix numeral types in a right-to-left label)r7   r8   r9   r:   r;   r<   r=   r>   zGInvalid direction for codepoint at position {} in a left-to-right label)r7   r8   z0Label ends with illegal codepoint directionality)Ú	enumerater   Zbidirectionalr   r&   Úrepr)	r(   r2   Z
bidi_labelÚidxr   Z	directionZrtlZvalid_endingZnumber_typer   r   r   Ú
check_bidi=   sV   
€
€€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_combinerx   s   rE   c                 C   s<   | dd… dkrt dƒ‚| d dks| d dkrt 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   Úposc                 C   s,  t | | ƒ}|dkr||dkrtt | |d  ƒƒtkrdS d}t|d ddƒD ]!}tj t | | ƒ¡}|t dƒkr9q&|t dƒt d	ƒfv rGd} nq&|sLdS d}t|d t| ƒƒD ]"}tj t | | ƒ¡}|t dƒkrjqW|t d
ƒt d	ƒfv ryd} |S qW|S |dkr”|dkr’tt | |d  ƒƒtkr’dS dS dS )Ni   r   r   TFrI   ÚTr7   ÚDr4   i   )r   r   Ú_virama_combining_classÚranger   Zjoining_typesÚgetr+   )r(   rN   Úcp_valueÚokÚiZjoining_typer   r   r   Úvalid_contextj‹   sB   þýrW   Ú	exceptionc                 C   s¤  t | | ƒ}|dkr3d|  k rt| ƒd k r1n dS t | |d  ƒdkr1t | |d  ƒdkr1dS dS |dkrP|t| ƒd k rNt| ƒdkrNt| |d  dƒS dS |d	ksX|d
krg|dkret| |d  dƒS dS |dkr‰| D ]}|dkrtqmt|dƒsƒt|dƒsƒt|dƒr† dS qmdS d|  kr“dkr¬n n| D ]}dt |ƒ  kr§dkr© dS  q—q—dS d|  kr¶dkrÐn dS | D ]}dt |ƒ  krËdkrÍ dS  q»q»dS dS )Né·   r   r   él   TFiu  ZGreekió  iô  ZHebrewiû0  u   ãƒ»ZHiraganaZKatakanaZHani`  ii  ið  iù  )r   r+   r   )r(   rN   rX   rT   r   r   r   r   Úvalid_contexto¶   sJ   (þÿÿûÿr[   c                 C   s<  t | ttfƒr|  d¡} t| ƒdkrtdƒ‚t| ƒ t| ƒ t| ƒ t	| ƒD ]q\}}t
|ƒ}t|tjd ƒr7q&t|tjd ƒrlzt| |ƒsTtd t|ƒ|d t| ƒ¡ƒ‚W q& tyk   td t|ƒ|d t| ƒ¡ƒ‚w t|tjd	 ƒr‰t| |ƒsˆtd
 t|ƒ|d t| ƒ¡ƒ‚q&td t|ƒ|d t| ƒ¡ƒ‚t| ƒ 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à   s:   

ÿÿÿÿ
ÿra   c                 C   s|   z|   d¡}t|ƒ t|ƒstdƒ‚|W S  ty   Y nw | s$tdƒ‚t| ƒ} t| ƒ t| ƒ}t| }t|ƒs<tdƒ‚|S )NÚasciizLabel too longzNo Input)	r"   Úulabelr-   r	   ÚUnicodeEncodeErrorÚstrra   r$   Ú_alabel_prefix©r(   Zlabel_bytesr   r   r   Úalabelÿ   s$   
ÿrh   c                 C   sÎ   t | ttfƒsz|  d¡}W n ty   t| ƒ |  Y S w | }| ¡ }| t¡rE|t	tƒd … }|s7t
dƒ‚| d¡d dkrDt
dƒ‚n	t|ƒ | d¡S z| d¡} W n ty`   t
dƒ‚w t| ƒ | S )Nrb   z5Malformed A-label, no Punycode eligible content foundrI   rH   z"A-label must not end with a hyphenr!   zInvalid A-label)r]   r^   r_   r"   rd   ra   ÚlowerÚ
startswithrf   r+   r	   r`   ÚUnicodeErrorrg   r   r   r   rc     s2   þ
ÿ
ÿrc   TÚdomainÚ
std3_rulesÚtransitionalc                 C   s  ddl m } d}t| ƒD ]{\}}t|ƒ}z]||dk r|n	t ||df¡d  }|d }	d}
t|ƒdkr7|d }
|	d	ksK|	d
krA|rK|	dkrP|sP|
du rP||7 }n |
duri|	dksd|	dkr^|rd|	d
kri|ri||
7 }n|	dkrptƒ ‚W q ty‡   td t	|ƒ|d t
| ƒ¡ƒ‚w t d|¡S )zBRe-map the characters in the string according to UTS46 processing.r   )Ú	uts46datar3   é   ÚZNé   rF   ÚVrP   Ú3rC   ÚIr\   rK   )ro   r?   r   ÚbisectZbisect_leftr+   Ú
IndexErrorr   r&   r'   r@   r   rL   )rl   rm   rn   ro   ÚoutputrN   ÚcharZ
code_pointZuts46rowÚstatusZreplacementr   r   r   Úuts46_remap4  sZ   ÿÿÿþþþ
ÿÿþþ
€ÿÿÿr{   ÚstrictÚuts46c           	      C   sÌ   t | ttfƒr|  d¡} |rt| ||ƒ} d}g }|r |  d¡}nt | ¡}|r,|dgkr0tdƒ‚|d dkr;|d= d}|D ]}t|ƒ} | rK| 	| ¡ q=tdƒ‚|rV| 	d	¡ d
 
|¡} t| |ƒsdtdƒ‚| S )Nrb   FÚ.r3   úEmpty domainrI   TúEmpty labeló    ó   .zDomain too long)r]   r^   r_   r`   r{   ÚsplitÚ_unicode_dots_rer	   rh   ÚappendÚjoinr1   )	r    r|   r}   rm   rn   r.   ÚresultÚlabelsr(   r   r   r   r"   T  s2   




r"   c                 C   sÎ   zt | ttfƒr|  d¡} W n ty   tdƒ‚w |r"t| |dƒ} d}g }|s.t | ¡}n|  d¡}|r:|dgkr>tdƒ‚|d sG|d= d}|D ]}t	|ƒ} | rW| 
| ¡ qItd	ƒ‚|rb| 
d¡ d |¡S )
Nrb   zInvalid ASCII in A-labelFr~   r3   r   rI   Tr€   )r]   r^   r_   r`   ÚUnicodeDecodeErrorr	   r{   r„   rƒ   rc   r…   r†   )r    r|   r}   rm   r.   r‡   rˆ   r(   r   r   r   r`   r  s6   
€ÿ


r`   )F)TF)FFFF)FFF)*r3   r   rv   r   ÚreÚtypingr   r   Z	intrangesr   rQ   rf   Úcompiler„   rk   r	   r   r   r   Úintr   re   Úboolr   r^   r$   r'   r-   r1   rB   rE   rJ   rM   rW   r[   r_   ra   rh   rc   r{   r"   r`   r   r   r   r   Ú<module>   s>    
;+*. .