ñÕYfáã@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ƒ}xC|D];}t|ƒdkrG|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ú7/opt/alt/python35/lib64/python3.5/encodings/punycode.pyÚ segregate s    rcCs7d}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  rcCskt|ƒ}xX|d7}||kr)dS||}||krM|d|fS||kr|d7}qWdS)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]�}d}}t|ƒ}t||ƒ} | d||} xWt||||ƒ\}}|dkr�P| ||7} |j| dƒ|}d} qYW|}qW|S)z3.2 Insertion unsort codingrrrrrr)rrrr) r r ZoldcharÚresultZoldindexr rrrZcurlenÚdeltarrrÚinsertion_unsort0s$      rcCs6d|d|}|dkr"dS|dkr2dS|S)Né$rér)ÚjÚbiasrrrrÚTFs   r#s$abcdefghijklmnopqrstuvwxyz0123456789cCs�tƒ}d}xwt||ƒ}||krH|jt|ƒt|ƒS|jt|||d|ƒ||d|}|d7}qWdS)z(3.3 Generalized variable-length integersrrrN)rr#rÚdigitsr )ÚNr"rr!ÚtrrrÚgenerate_generalized_integerNs   !r'cCsr|r|d}n |d}|||7}d}x$|dkrW|d}|d7}q4W|d||d}|S)Ni¼ériÇé#ré&r)rÚfirstÚnumcharsZ divisionsr"rrrÚadapt[s   r-cCsrtƒ}d}xVt|ƒD]H\}}t||ƒ}|j|ƒt||dk||dƒ}qWt|ƒS)z3.4 Bias adaptationéHrr)rÚ enumerater'Úextendr-r )ZbaselenÚdeltasrr"ZpointsrÚsrrrÚgenerate_integersjs  $r3cCsLt|ƒ\}}t||ƒ}tt|ƒ|ƒ}|rH|d|S|S)Nó-)rrr3r)Útextr r r1rrrÚpunycode_encodeus  r6c Cs@d}d}d}x'yt||ƒ}Wn8tk rc|dkrQtdƒ‚|ddfSYnX|d7}d|ko…dknr—|d}nVd|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!rZdigitr&rrrÚdecode_generalized_numbers2          rBc Csd}d }d}d}xû|t|ƒkrt||||ƒ\}}|dkrX|S||d7}||t|ƒd7}|dkr²|dkr¦td|ƒ‚td ƒ}|t|ƒd}|d|…t|ƒ||d…}t||dkt|ƒƒ}|}qW|S) z3.2 Insertion unsort codingrrr.rNiÿÿr7zInvalid character U+%xú?r)rrBr>rÚchrr-) r r r@rrr"r?ZnewposrrrrÚinsertion_sort�s(     ( rEcCsÁt|tƒr|jdƒ}t|tƒr9t|ƒ}|jdƒ}|dkrrd}t|dƒjƒ}n?t|d|…d|ƒ}t||dd…dƒjƒ}t|||ƒS)NÚasciir4rÚr)Ú isinstancer ÚencodeÚ memoryviewr ÚrfindÚupperrE)r5r@rr r rrrÚpunycode_decode¶s  #rMc@s.eZdZddd„Zddd„ZdS)ÚCodecr7cCst|ƒ}|t|ƒfS)N)r6r)ÚselfÚinputr@rrrrrIÈs z Codec.encodecCs;|dkrtd|ƒ‚t||ƒ}|t|ƒfS)Nr7ÚreplaceÚignorezUnsupported error handling )r7rQrR)r>rMr)rOrPr@rrrrÚdecodeÌs z Codec.decodeN)Ú__name__Ú __module__Ú __qualname__rIrSrrrrrNÆs rNc@seZdZddd„ZdS)ÚIncrementalEncoderFcCs t|ƒS)N)r6)rOrPÚfinalrrrrIÓszIncrementalEncoder.encodeN)rTrUrVrIrrrrrWÒs rWc@seZdZddd„ZdS)ÚIncrementalDecoderFcCs2|jdkr"td|jƒ‚t||jƒS)Nr7rQrRzUnsupported error handling )r7rQrR)r@r>rM)rOrPrXrrrrS×szIncrementalDecoder.decodeN)rTrUrVrSrrrrrYÖs rYc@seZdZdS)Ú StreamWriterN)rTrUrVrrrrrZÜs rZc@seZdZdS)Ú StreamReaderN)rTrUrVrrrrr[ßs r[cCs@tjdddtƒjdtƒjdtdtdtdtƒS) NÚnameZpunycoderIrSÚincrementalencoderÚincrementaldecoderÚ streamwriterÚ streamreader) ÚcodecsÚ CodecInforNrIrSrWrYrZr[rrrrÚ getregentryäs   rc)Ú__doc__rarrrrr#r$r'r-r3r6rBrErMrNrWrYrZr[rcrrrrÚs(