3 \áã@sÚdZddlZdd„Zdd„Zdd„Zd d „Zd d „Zd Zdd„Zdd„Z dd„Z dd„Z dd„Z dd„Z dd„ZGdd„dejƒZGdd„dejƒZGd d!„d!ejƒZGd"d#„d#eejƒZGd$d%„d%eejƒZd&d'„ZdS)(uY Codec for the Punicode encoding, as specified in RFC 3492 Written by Martin v. Löwis. éNcCsTtƒ}tƒ}x2|D]*}t|ƒdkr2|jt|ƒƒq|j|ƒqWt|ƒ}t|ƒ|fS)z 3.1 Basic code point segregationé€)Ú bytearrayÚsetÚordÚappendÚaddÚsortedÚbytes)ÚstrÚbaseÚextendedÚc©rú*/usr/lib64/python3.6/encodings/punycode.pyÚ segregate s  rcCs*d}x |D]}t|ƒ|kr |d7}q W|S)z@Return the length of str, considering only characters below max.ré)r)r ÚmaxÚresr rrrÚ selective_lens    rcCsRt|ƒ}xD|d7}||krdS||}||kr:|d|fS||kr |d7}q WdS)aReturn a pair (index, pos), indicating the next occurrence of char in str. index is the position of the character considering only ordinals up to and including char, and pos is the position in the full string. index/pos is the starting position in the full string.rNéÿÿÿÿr)rr)Úlen)r ÚcharÚindexÚposÚlr rrrÚselective_finds rc Cs�d}g}d}x~|D]v}d}}t|ƒ}t||ƒ} | d||} xBt||||ƒ\}}|dkr^P| ||7} |j| dƒ|}d} qBW|}qW|S)z3.2 Insertion unsort codingrrrrrr)rrrr) r r ZoldcharÚresultZoldindexr rrrZcurlenÚdeltarrrÚinsertion_unsort0s$   rcCs,d|d|}|dkrdS|dkr(dS|S)Né$rér)ÚjÚbiasrrrrÚTFs r#s$abcdefghijklmnopqrstuvwxyz0123456789cCsrtƒ}d}xbt||ƒ}||kr4|jt|ƒt|ƒS|jt|||d|ƒ||d|}|d7}q WdS)z(3.3 Generalized variable-length integersrrrN)rr#rÚdigitsr )ÚNr"rr!ÚtrrrÚgenerate_generalized_integerNs r'cCs\|r|d}n|d}|||7}d}x|dkrB|d}|d7}q(W|d||d}|S)Ni¼ériÇé#ré&r)rÚfirstÚnumcharsZ divisionsr"rrrÚadapt[s    r-cCsTtƒ}d}x@t|ƒD]4\}}t||ƒ}|j|ƒt||dk||dƒ}qWt|ƒS)z3.4 Bias adaptationéHrr)rÚ enumerater'Úextendr-r )ZbaselenÚdeltasrr"ZpointsrÚsrrrÚgenerate_integersjs  r3cCs8t|ƒ\}}t||ƒ}tt|ƒ|ƒ}|r4|d|S|S)Nó-)rrr3r)Útextr r r1rrrÚpunycode_encodeus    r6c Csüd}d}d}xêyt||ƒ}Wn,tk rJ|dkr>tdƒ‚|ddfSX|d7}d|kofdknrv|d}nDd|koˆd knr˜|d }n"|dkr²td ||ƒ‚n|dfSt||ƒ} |||7}|| krà||fS|d | }|d7}qWdS) z(3.3 Generalized variable-length integersrrÚstrictzincomplete punicode stringNéAéZé0é9éz Invalid extended code point '%s'r)rÚ IndexErrorÚ UnicodeErrorr#) r Úextposr"ÚerrorsrÚwr!rÚdigitr&rrrÚdecode_generalized_numbers2     rCc CsÐd}d }d}d}xº|t|ƒkrÊt||||ƒ\}}|dkr<|S||d7}||t|ƒd7}|dkr€|dkrxtd|ƒ‚td ƒ}|t|ƒd}|d|…t|ƒ||d…}t||dkt|ƒƒ}|}qW|S) z3.2 Insertion unsort codingrrr.rNiÿÿr7zInvalid character U+%xú?r)rrCr>rÚchrr-) r r r@rrr"r?ZnewposrrrrÚinsertion_sort�s(    rFcCs†t|tƒr|jdƒ}t|tƒr&t|ƒ}|jdƒ}|dkrLd}t|dƒjƒ}n.t|d|…d|ƒ}t||dd…dƒjƒ}t|||ƒS)NÚasciir4rÚr)Ú isinstancer ÚencodeÚ memoryviewr ÚrfindÚupperrF)r5r@rr r rrrÚpunycode_decode¶s    rNc@s eZdZddd„Zddd„ZdS) ÚCodecr7cCst|ƒ}|t|ƒfS)N)r6r)ÚselfÚinputr@rrrrrJÈsz Codec.encodecCs*|dkrtd|ƒ‚t||ƒ}|t|ƒfS)Nr7ÚreplaceÚignorezUnsupported error handling )r7rRrS)r>rNr)rPrQr@rrrrÚdecodeÌs  z Codec.decodeN)r7)r7)Ú__name__Ú __module__Ú __qualname__rJrTrrrrrOÆs rOc@seZdZddd„ZdS)ÚIncrementalEncoderFcCst|ƒS)N)r6)rPrQÚfinalrrrrJÓszIncrementalEncoder.encodeN)F)rUrVrWrJrrrrrXÒsrXc@seZdZddd„ZdS)ÚIncrementalDecoderFcCs$|jdkrtd|jƒ‚t||jƒS)Nr7rRrSzUnsupported error handling )r7rRrS)r@r>rN)rPrQrYrrrrT×s zIncrementalDecoder.decodeN)F)rUrVrWrTrrrrrZÖsrZc@s eZdZdS)Ú StreamWriterN)rUrVrWrrrrr[Üsr[c@s eZdZdS)Ú StreamReaderN)rUrVrWrrrrr\ßsr\c Cs tjdtƒjtƒjttttd�S)NZpunycode)ÚnamerJrTÚincrementalencoderÚincrementaldecoderÚ streamwriterÚ streamreader) ÚcodecsÚ CodecInforOrJrTrXrZr[r\rrrrÚ getregentryäsrd)Ú__doc__rbrrrrr#r$r'r-r3r6rCrFrNrOrXrZr[r\rdrrrrÚs(