o 0¦iqã@s²dZgd¢ZdZdZdZdZz ddlmZmZWn e y%dZdZYnwd d „Z d d „Z ddd„Z ddd„Z ddd„Zddd„Zdd„Zdd„Zdd„ZedkrWeƒdSdS)zHConversions to/from quoted-printable transport encoding as per RFC 1521.)ÚencodeÚdecodeÚ encodestringÚ decodestringó=éLs0123456789ABCDEFóé)Úa2b_qpÚb2a_qpNcCsHt|tƒsJ‚|dvr |S|dkr|S|tkp#d|ko dkn 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. ó ó_ó ó~)Ú isinstanceÚbytesÚESCAPE)ÚcÚ quotetabsÚheader©rú-/opt/alt/python310/lib64/python3.10/quopri.pyÚ needsquotings "rcCsBt|tƒr t|ƒdks J‚t|ƒ}ttt|dt|dfƒS)zQuote a single character.éé)rrÚlenÚordrÚHEX©rrrrÚquote$s rFc Cs<tdur| ¡}t|||d�}| |¡dS|dfdd„}d} | ¡}|s'nig} d} |dd…dkr;|dd…}d} |D]"} t| fƒ} t| ||ƒrNt| ƒ} |rZ| d krZ|  d ¡q=|  | ¡q=|durh||ƒt  | ¡} t | ƒt kr�|| dt d…d d �| t dd…} t | ƒt kss| }q |durœ||| d �dSdS) 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.N©rró cSsn|r|dd…dvr| |dd…t|dd…ƒ|¡dS|dkr.| t|ƒ|¡dS| ||¡dS)Néÿÿÿÿr ó.)Úwriter)ÚsÚoutputÚlineEndrrrr#;s *zencode..writerrr!r r s= )r&) r Úreadr#ÚreadlinerrrÚappendÚ EMPTYSTRINGÚjoinrÚ MAXLINESIZE) Úinputr%rrÚdataÚodatar#ZprevlineÚlineZoutlineÚstrippedrZthislinerrrr,sF            üá!ÿrcCsFtdur t|||d�Sddlm}||ƒ}|ƒ}t||||ƒ| ¡S)Nrr©ÚBytesIO)r Úior3rÚgetvalue)r$rrr3ÚinfpÚoutfprrrrjs rc Cstdur| ¡}t||d�}| |¡dSd} | ¡}|snØdt|ƒ}}|dkr[||d|…dkr[d} |d}|dkrZ||d|…dvrZ|d}|dkrZ||d|…dvsHnd} ||krë|||d…} | dkrx|rx|d }|d}no| tkr…|| }|d}nb|d|kr�| s�d} n[|d|kr«||d|d …tkr«|t}|d }n<|d |krßt||d|d …ƒrßt||d |d …ƒrß|tt||d|d …ƒfƒ}|d }n|| }|d}||ksa| sö| |d¡d}q|�r| |¡dSdS) 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).N©rrrrr s r r éé) r r'r#r(rrÚishexrÚunhex) r-r%rr.r/Únewr0ÚiÚnÚpartialrrrrrusL   ÿ€ $<,óåÿrcCsDtdur t||d�Sddlm}||ƒ}|ƒ}t|||d�| ¡S)Nr8rr2)r r4r3rr5)r$rr3r6r7rrrr s  rcCsVt|tƒsJ‚d|kodknp*d|kodknp*d|ko(dkSS)zDReturn true if the byte ordinal 'c' is a hexadecimal digit in ASCII.ó0ó9óaófóAóF)rrrrrrr;¬sHr;cCs®d}|D]P}t|fƒ}d|krdkrnntdƒ}n.d|kr&dkr/nntdƒd}nd |kr9d krBnntd ƒd}nJd t|ƒƒ‚|d t|ƒ|}q|S)z.Get the integer value of a hexadecimal number.rrArBÚ0rCrDÚaé rErFFznon-hex digit r)rrÚrepr)r$Úbitsrr>rrrr<±s  r<c Cs°ddl}ddl}z| |jdd…d¡\}}Wn,|jyC}z|j|_t|ƒtdƒtdƒtdƒ| d¡WYd}~nd}~wwd}d}|D]\}}|d krTd }|d krZd }qJ|rl|rl|j|_td ƒ| d¡|sqd g}d} |D]W} | d kr€|jj } n&zt | dƒ} Wnt y¥}z|j  d| |f¡d} WYd}~qud}~wwz|r±t | |jj ƒnt| |jj |ƒW| d krÂ|  ¡qu| d krÌ|  ¡ww| rÖ| | ¡dSdS)NrrZtdz"usage: quopri [-t | -d] [file] ...z-t: quote tabsz-d: decode; default encoder9Fz-tTz-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) rNrOZoptsÚargsÚmsgZdecoZtabsÚorHÚstsÚfileÚfprrrÚmainÃsd€ú   €    €ý€€ÿ ÿÿraÚ__main__)F)FF)Ú__doc__Ú__all__rr,rr*Zbinasciir r Ú ImportErrorrrrrrrr;r<raÚ__name__rrrrÚs0 þ  > + . ÿ