3 fY~,@s>ddlmZddlZddlZddlZddlZddlmZdZdZ ej dZ ej ddkr`e ZeZGd d d eZGd d d eZGd ddeZGdddeZddZddZddZddZddZddZd7ddZd d!Zd"d#Zd$d%Zd&d'Z d8d(d)Z!d*d+Z"d,d-Z#d.d/Z$d9d1d2Z%d:d3d4Z&d;d5d6Z'dS)<)idnadataN)intranges_contain sxn--u [.。.。]c@seZdZdZdS) IDNAErrorz7 Base exception for all IDNA-encoding related problems N)__name__ __module__ __qualname____doc__r r :/Users/olari/OneDrive/sandbox/awsBlog2/lambda/idna/core.pyrsrc@seZdZdZdS) IDNABidiErrorz= Exception when bidirectional requirements are not satisfied N)rr r r r r r r rsrc@seZdZdZdS)InvalidCodepointz> Exception when a disallowed or unallocated codepoint is used N)rr r r r r r r rsrc@seZdZdZdS)InvalidCodepointContextzE Exception when the codepoint is not valid in the context it is used N)rr r r r r r r rsrcCstjt|S)N) unicodedataZ combiningunichr)cpr r r _combining_class$srcCstt|tj|S)N)rordrscripts)rscriptr r r _is_script'srcCs |jdS)Npunycode)encode)sr r r _punycode*srcCs dj|S)Nz U+{0:04X})format)rr r r _unot-srcCst|dkrdSdS)N?FT)len)labelr r r valid_label_length1s r"cCst||rdndkrdSdS)NFT)r )r! trailing_dotr r r valid_string_length8sr&Fc Cspd}xJt|dD]<\}}tj|}|dkr>tdjt|||dkrd}PqW| r`| r`dStj|d }|dkr|d}n |d krd}ntd jt|d}d}xt|dD]\}}tj|}|r&|dkrtdj||dkrd}n|dkrd}|dkrZ|s|}n||krZtdq|dkr>tdj||dkrNd}q|dkrd}qW|sltddS)NFrz3Unknown directionality in label {0} at position {1}RALANTrLz>First codepoint in label {0} must be directionality L, R or ALENESCSETONBNNSMzHInvalid direction for codepoint at position {0} in a right-to-left labelz2Can not mix numeral types in a right-to-left labelzHInvalid direction for codepoint at position {0} in a left-to-right labelz0Label ends with illegal codepoint directionality)r(r)r*)r(r)) r(r)r*r,r-r.r/r0r1r2)r(r)r,r*)r*r,)r+r,r-r.r/r0r1r2)r+r,) enumeraterZ bidirectionalrrrepr) r!Z check_ltrZ bidi_labelidxr directionZrtlZ valid_endingZ number_typer r r check_bidi?sR          r7cCs"tj|dddkrtddS)NrMz0Label begins with an illegal combining characterT)rcategoryr)r!r r r check_initial_combiner|sr:cCs<|dddkrtd|ddks0|d dkr8tdd S) Nz--z4Label has disallowed hyphens in 3rd and 4th positionr-rz)Label must not start or end with a hyphenT)r)r!r r r check_hyphen_oks r?cCstjd||krtddS)NNFCz%Label must be in Normalization Form C)r normalizer)r!r r r check_nfcsrBcCs:t||}|dkr|dkr:tt||dtkr:dSd}xTt|dd d D]@}tjjt||}|tdkrvqP|tdtdgkrPd}PqPW|sdSd}xVt|dt|D]@}tjjt||}|tdkrq|td tdgkrd}PqW|S|d kr2|dkr.tt||dtkr.dSdSdSdS) Ni rrTFTr+Dr(i r>r>)rr_virama_combining_classrangerZ joining_typesgetr )r!poscp_valueokiZ joining_typer r r valid_contextjs<      rLcCst||}|dkrdd|ko.t|dknr`t||ddkr`t||ddkr`dSdS|dkr|t|dkrt|dkrt||ddSdS|d ks|d kr|dkrt||dd SdS|d krx<|D]4}|d krqt|ds t|ds t|drdSqWdSd|ko,dknrlx2|D]*}dt|koVdknr:dSq:WdSd|kodknrx2|D]*}dt|kodknrdSqWdSdS)NrrlTFiuGreekiiHebrewi0u・ZHiraganaZKatakanaZHani`iiii)rr r)r!rH exceptionrIrr r r valid_contextos>  (  "      rRcCst|ttfr|jd}t|dkr,tdt|t|t|xt |D]\}}t |}t |t j drrqNqNt |t j drt||stdjt||dt|qNt |t j drt||std jt||dt|qNtd jt||dt|qNWt|dS) Nzutf-8rz Empty LabelZPVALIDZCONTEXTJz-Joiner {0} not allowed at position {1} in {2}rZCONTEXTOz0Codepoint {0} not allowed at position {1} in {2}z0Codepoint {0} at position {1} of {2} not allowed) isinstancebytes bytearraydecoder rrBr?r:r3rrrZcodepoint_classesrLrrrr4rRrr7)r!rHrrIr r r check_labels&      "rWcCsyN|jd}y t|Wn"tk r:tdj|YnXt|sLtd|Stk rbYnX|sptdt|}t|t|}t |}t|std|S)Nasciiz$The label {0} is not a valid A-labelzLabel too longzNo Input) rulabelrrr"UnicodeEncodeErrorunicoderWr_alabel_prefix)r!r r r alabels(  r]c Cst|ttfs:y|jd}Wntk r8t||SX|j}|jtr^|t td}nt||j dS|j d}t||S)NrXr) rSrTrUrrZrWlower startswithr\r rV)r!r r r rYs   rYTc Cs,ddlm}d}yxt|D]\}}t|}||dkr:|ntj||dfd}|d} t|dkrl|dnd} | d ks| d kr| s| d kr|r| dkr||7}q| dk r| d ks| d kr|s| d kr|r|| 7}q| d krtqWtjd|Stk r&t dj t ||dt |YnXdS)zBRe-map the characters in the string according to UTS46 processing.r) uts46datar'Zrr;NVrD3r8Ir@z0Codepoint {0} not allowed at position {1} in {2}) r`r3rbisect bisect_leftr IndexErrorrrArrrr4) domain std3_rules transitionalr`outputrHcharZ code_pointZuts46rowstatusZ replacementr r r uts46_remap3s0       roc Cst|ttfr|jd}|r(t|||}d}g}|r@|jd}n tj|}x|rb|d rb|d=qLW|sptd|d dkr|d =d}x|D]}|jt |qW|r|jd d j |}t ||std |S)NrXF.rz Empty domainrr'T.zDomain too longr>r>) rSrTrUrVrosplit_unicode_dots_rerappendr]joinr&) rstrictuts46rjrkr%resultlabelsr!r r r rOs0          rcCst|ttfr|jd}|r(t||d}d}g}|s@tj|}n |jd}x|rb|d rb|d=qLW|sptd|d s|d =d}x|D]}|jt |qW|r|jddj |S) NrXFrprz Empty domainrTr'r>r>) rSrTrUrVrortrsrrurYrv)rrwrxrjr%ryrzr!r r r rVls*       rV)F)F)TF)FFFF)FFF)(r'rrfrresysZ intrangesrrEr\compilert version_infostrr[chrr UnicodeErrorrrrrrrrrr"r&r7r:r?rBrLrRrWr]rYrorrVr r r r sB    = , )