U 'X~,@s>ddlmZddlZddlZddlZddlZddlmZdZdZ e 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 /core.pyrsrc@seZdZdZdS) IDNABidiErrorz= Exception when bidirectional requirements are not satisfied Nrr r r rrsrc@seZdZdZdS)InvalidCodepointz> Exception when a disallowed or unallocated codepoint is used Nrr r r rrsrc@seZdZdZdS)InvalidCodepointContextzE Exception when the codepoint is not valid in the context it is used Nrr r r rrsrcCstt|SN) unicodedataZ combiningunichr)cpr r r_combining_class$srcCstt|tj|Sr)rordrZscripts)rZscriptr r r _is_script'srcCs |dS)Npunycode)encodesr r r _punycode*srcCs d|S)Nz U+{0:04X})formatrr r r_unot-srcCst|dkrdSdS)N?FTlenlabelr r rvalid_label_length1s r%cCst||rdndkrdSdS)NFTr!)r$ trailing_dotr r rvalid_string_length8sr)Fc Csbd}t|dD]>\}}t|}|dkrFirst codepoint in label {0} must be directionality L, R or AL) r+r,r-ENESCSETONBNNSMzHInvalid direction for codepoint at position {0} in a right-to-left label)r+r,r/r-r5)r-r/z2Can not mix numeral types in a right-to-left label)r.r/r0r1r2r3r4r5zHInvalid direction for codepoint at position {0} in a left-to-right label)r.r/z0Label ends with illegal codepoint directionality) enumeraterZ bidirectionalrrrepr) r$Z check_ltrZ bidi_labelidxr directionZrtlZ valid_endingZ number_typer r r check_bidi?sR       r:cCs"t|dddkrtddS)NrMz0Label begins with an illegal combining characterT)rcategoryrr#r r rcheck_initial_combiner|sr=cCs<|dddkrtd|ddks0|ddkr8tdd S) Nz--z4Label has disallowed hyphens in 3rd and 4th positionr-z)Label must not start or end with a hyphenT)rr#r r rcheck_hyphen_oks rBcCstd||krtddS)NNFCz%Label must be in Normalization Form C)r normalizerr#r r r check_nfcsrEcCs4t||}|dkr|dkr8tt||dtkr8dSd}t|dddD]B}tjt||}|tdkrrqL|tdtd fkrLd}qqL|sdSd}t|dt|D]B}tjt||}|tdkrq|td td fkrd}qq|S|d kr,|dkr(tt||dtkr(dSdSdSdS) Ni rrTFrATr.Dr+i )rr_virama_combining_classrangerZ joining_typesgetr")r$poscp_valueokiZ joining_typer r rvalid_contextjs<     rOcCst||}|dkrdd|kr0t|dkr`nn,t||ddkr`t||ddkr`dSdS|dkr|t|dkrt|dkrt||ddSdS|d ks|d kr|dkrt||dd SdS|d kr|D]6}|d krqt|ds t|ds t|drdSqdSd|kr.dkrhnn6|D],}dt|krVdkr6nndSq6dSd|krdkrnn6|D],}dt|krdkrnndSqdSdS)NrrlTFiuZGreekiiZHebrewi0u・ZHiraganaZKatakanaZHani`iiii)rr"r)r$rKZ exceptionrLrr r rvalid_contextos>  ( "    rRcCst|ttfr|d}t|dkr,tdt|t|t|t |D]\}}t |}t |t j drpqLqLt |t j drt||stdt||dt|qLt |t j drt||std t||dt|qLtd t||dt|qLt|dS) Nzutf-8rz Empty LabelZPVALIDZCONTEXTJz-Joiner {0} not allowed at position {1} in {2}rZCONTEXTO0Codepoint {0} not allowed at position {1} in {2}z0Codepoint {0} at position {1} of {2} not allowed) isinstancebytes bytearraydecoder"rrErBr=r6rrrZcodepoint_classesrOrrrr7rRrr:)r$rKrrLr r r check_labels&       rXcCszP|d}z t|Wn"tk r:td|YnXt|sLtd|WStk rdYnX|srtdt|}t|t|}t |}t|std|S)Nasciiz$The label {0} is not a valid A-labelzLabel too longzNo Input) rulabelrrr%UnicodeEncodeErrorunicoderXr_alabel_prefixr#r r ralabels(  r^cCst|ttfs>z|d}Wn tk r<t||YSX|}|trb|t td}nt|| dS| d}t||S)NrYr) rTrUrVrr[rXlower startswithr]r"rWr#r r rrZs    rZTc Cs(ddlm}d}zt|D]\}}t|}||dkr8|nt||dfd}|d} t|dkrj|dnd} | d ks| d kr|r| d kr|r| dkr||7}q| dk r| d ks| d kr|s| d kr|r|| 7}q| d krtqtd|WStk r"t d t ||dt |YnXdS)zBRe-map the characters in the string according to UTS46 processing.r) uts46datar*Zrr>NVrG3r;IrCrS) rar6rbisectZ bisect_leftr" IndexErrorrrDrrrr7) Zdomain std3_rules transitionalraoutputrKcharZ code_pointZuts46rowZstatusZ replacementr r r uts46_remap3sV   rmc Cst|ttfr|d}|r(t|||}d}g}|r@|d}n t|}|r^|ds^|d=qJ|sjtd|ddkr|d=d}|D]}|t |q|r|d d |}t ||std |S) NrYF.r Empty domainrAr*T.zDomain too long) rTrUrVrWrmsplit_unicode_dots_rerappendr^joinr)) rstrictuts46rirjr(resultlabelsr$r r rrOs0         rcCst|ttfr|d}|r(t||d}d}g}|s@t|}n |d}|r^|ds^|d=qJ|sjtd|ds||d=d}|D]}|t |q|r|dd |S) NrYFrnrrorATr*) rTrUrVrWrmrsrrrrtrZru)rrvrwrir(rxryr$r r rrWls*      rW)F)F)TF)FFFF)FFF)(r*rrgrresysZ intrangesrrHr]compilers version_infostrr\chrr UnicodeErrorrrrrrrrrr%r)r:r=rBrErOrRrXr^rZrmrrWr r r rsB    = , )