¯ÕYfaã @sýdZddddgZdZdZdZdZyd d lmZmZWne k rjd Zd ZYnXd d „Z dd„Z ddd„Z dddd„Z ddd„Zddd„Zdd„Zdd„Zdd„Zedkrùeƒd S)zHConversions to/from quoted-printable transport encoding as per RFC 1521.ÚencodeÚdecodeÚ encodestringÚ decodestringó=éLs0123456789ABCDEFóé)Úa2b_qpÚb2a_qpNcCs\t|tƒst‚|dkr%|S|dkr5|S|tkp[d|koXdkn S)zìDecide whether a particular byte ordinal needs to be quoted. The 'quotetabs' flag indicates whether embedded tabs and spaces should be quoted. Note that line-ending tabs and spaces are always encoded, as per RFC 1521. s ó_ó ó~)Ú isinstanceÚbytesÚAssertionErrorÚESCAPE)ÚcÚ quotetabsÚheader©rú+/opt/alt/python35/lib64/python3.5/quopri.pyÚ needsquotings   rcCsWt|tƒr!t|ƒdks't‚t|ƒ}ttt|dt|dfƒS)zQuote a single character.éé)rrÚlenrÚordrÚHEX)rrrrÚquote$s' rFc Cs®tdk rA|jƒ}t|d|d|ƒ}|j|ƒdS|ddd„}d}x2|jƒ}|soPg} d} |d d…dkr§|dd…}d} xj|D]b} t| fƒ} t| ||ƒrát| ƒ} |r| d kr| jd ƒq®| j| ƒq®W|dk r*||ƒtj | ƒ} xHt | ƒt krƒ|| dt d…d d ƒ| t dd…} q<W| }q\W|dk rª||d | ƒdS)avRead 'input', apply quoted-printable encoding, and write to 'output'. 'input' and 'output' are binary file objects. The 'quotetabs' flag indicates whether embedded tabs and spaces should be quoted. Note that line-ending tabs and spaces are always encoded, as per RFC 1521. The 'header' flag indicates whether we are encoding spaces as _ as per RFC 1522.Nrrs cSs‰|rN|dd…dkrN|j|dd…t|dd…ƒ|ƒn7|dkrt|jt|ƒ|ƒn|j||ƒdS)Nrs ó.éÿÿÿÿrr)Úwriter)ÚsÚoutputÚlineEndrrrr ;s 2 zencode..writerrr r r#s= rr) r Úreadr ÚreadlinerrrÚappendÚ EMPTYSTRINGÚjoinrÚ MAXLINESIZE) Úinputr"rrÚdataÚodatar ZprevlineÚlineZoutlineZstrippedrZthislinerrrr,s@           cCsdtdk r"t|d|d|ƒSddlm}||ƒ}|ƒ}t||||ƒ|jƒS)Nrrr)ÚBytesIO)r Úior.rÚgetvalue)r!rrr.ÚinfpÚoutfprrrrjs   c Cs‰tdk r;|jƒ}t|d|ƒ}|j|ƒdSd}x.|jƒ}|sWPdt|ƒ}}|dkrÚ||d|…dkrÚd} |d}x=|dkrÖ||d|…dkrÖ|d}q£Wnd} xn||krP|||d…} | dkr,|r,|d }|d}qã| tkrO|| }|d}qã|d|krp| rpd} Pqã|d|krµ||d|d …tkrµ|t}|d }qã|d |kr9t||d|d …ƒr9t||d |d …ƒr9|tt||d|d …ƒfƒ}|d }qã|| }|d}qãW| sD|j|dƒd}qDW|r…|j|ƒdS) z»Read 'input', apply quoted-printable decoding, and write to 'output'. 'input' and 'output' are binary file objects. If 'header' is true, decode underscore as space (per RFC 1522).Nrrrrs s r r éé) r r$r r%rrÚishexrÚunhex) r*r"rr+r,Únewr-ÚiÚnÚpartialrrrrrusR    & )   . L+   cCs^tdk rt|d|ƒSddlm}||ƒ}|ƒ}t||d|ƒ|jƒS)Nrr)r.)r r/r.rr0)r!rr.r1r2rrrr s   cCset|tƒst‚d|ko,dknpdd|koHdknpdd|kobdkSS)zDReturn true if the byte ordinal 'c' is a hexadecimal digit in ASCII.ó0ó9óaófóAóF)rrr)rrrrr5¬sr5cCsçd}xÚ|D]Ò}t|fƒ}d|ko9dknrMtdƒ}nzd|koddknr|tdƒd}nKd |ko“d knr«td ƒd}nd sÇtd t|ƒƒ‚|d t|ƒ|}q W|S)z.Get the integer value of a hexadecimal number.rr;r<Ú0r=r>Úaé r?r@Fznon-hex digit r)rrrÚrepr)r!Úbitsrr8rrrr6±s r6c (Cs)ddl}ddl}y)|j|jdd…dƒ\}}Wni|jk r¬}zF|j|_t|ƒtdƒtdƒtdƒ|jdƒWYdd}~XnXd}d}x8|D]0\}}|dkrÞd}|d krÀd}qÀW|r#|r#|j|_td ƒ|jdƒ|s2d g}d} x×|D]Ï} | d kr`|jj } n^yt | d ƒ} WnHt k r½}z(|jj d | |fƒd} w?WYdd}~XnXz6|rÝt | |jj ƒnt| |jj |ƒWd| d kr | jƒXq?W| r%|j| ƒdS)NrrZtdz"usage: quopri [-t | -d] [file] ...z-t: quote tabsz-d: decode; default encoder3z-tz-dz -t and -d are mutually exclusiveú-Úrbz%s: can't open (%s) )ÚsysÚgetoptÚargvÚerrorÚstderrÚstdoutÚprintÚexitÚstdinÚbufferÚopenÚOSErrorr rrÚclose) rHrIZoptsÚargsÚmsgZdecoZtabsÚorBÚstsÚfileÚfprrrÚmainÃsT  )                r[Ú__main__)Ú__doc__Ú__all__rr)rr'Zbinasciir r Ú ImportErrorrrrrrrr5r6r[Ú__name__rrrrÚs*    > +   .