™N
èu¦9c       s¡    d  Z    d Z  d Z  d Z  k Z k Z   e i d e i ƒ Z ! e i d e i ƒ Z	 " e i d e i e i
 Bƒ Z # e i d e i e i
 Bƒ Z $ e i d ƒ Z % e i d	 e i ƒ Z & e i d
 e i ƒ Z ' e i d e i ƒ Z ) d f  d „  ƒ  YZ B d f  d „  ƒ  YZ Y d „  Z f d „  Z u d d „ Z Ê d d „ Z Ü e i d ƒ Z Ý e i d ƒ Z ß d „  Z ÿ e i d ƒ Z d „  Z e i d e i ƒ Z e i d e i ƒ Z e i d ƒ Z d „  Z šd „  Z  ¬k! Z! ­e" d j p' e# e! i$ ƒ d j o e! i$ d d  j oR®k% Z% ¯d! Z& ±d Z' ²e% i% e! i$ d" d# ƒ \ Z( Z) ³e# e) ƒ d d" d$ f j o ´e& GHµe! i* d" ƒ n ¶d% d& f e( j d' d& f e( j j p# d( d& f e( j o d' d& f e( j o ¸e& GH¹e! i* d" ƒ n ºxÂ e( d ºrµ \ Z+ Z, »e+ d% j o ¼e  Z- n ½e+ d' j o ¾e Z- np ¿e+ d) j oB Ày Áe i. e, ƒ Z Wn" ÂÃe& GHÄe! i* d" ƒ n Xn Åe+ d( j o Æd" Z' n q9WÇe# e) ƒ d j o Èe! i/ e! i0 f Z1 nH Ée# e) ƒ d" j o Êe) d e! i0 f Z1 n Ìe) d e) d" f Z1 Íe' o Îe1 e' f Z1 n Ïe2 e- e1 ƒ n d* S(+   s¢  Mimification and unmimification of mail messages.

decode quoted-printable parts of a mail message or encode using
quoted-printable.

Usage:
	mimify(input, output)
	unmimify(input, output, decode_base64 = 0)
to encode and decode respectively.  Input and output may be the name
of a file or an open file object.  Only a readline() method is used
on the input file, only a write() method is used on the output file.
When using file names, the input and output file names may be the
same.

Interactive usage:
	mimify.py -e [infile [outfile]]
	mimify.py -d [infile [outfile]]
to encode and decode respectively.  Infile defaults to standard
input and outfile to standard output.
iÈ   s
   ISO-8859-1s   > s.   ^content-transfer-encoding:\s*quoted-printables$   ^content-transfer-encoding:\s*base64s0   ^content-type:.*multipart/.*boundary="?([^;"
]*)s:   ^(content-type:.*charset=")(us-ascii|iso-8859-[0-9]+)(".*)s   ^-*
s   =([0-9a-f][0-9a-f])s   =\?iso-8859-1\?q\?([^? 	
]+)\?=s   ^subject:\s+re: s   Filec      s&   ) d  Z  , . d „  Z 3 d „  Z RS(   s~   A simple fake file object that knows about limited
	   read-ahead and boundaries.
	   The only supported method is readline().c    s+   . / | |  _  0 | |  _ 1 t |  _ d  S(   N(   s   files   selfs   boundarys   Nones   peek(   s   selfs   files   boundarys*   /usr/lib/python1.5/site-packages/mimify.pys   __init__. s   c    sÁ   3 4 |  i t j	 o 5 d Sn 6 |  i i ƒ  } 7 | o 8 | Sn 9 |  i o` : | |  i d j o ; | |  _ < d Sn = | |  i d j o > | |  _ ? d Sn n @ | Sd  S(   Ns    s   
s   --
(   s   selfs   peeks   Nones   files   readlines   lines   boundary(   s   selfs   lines*   /usr/lib/python1.5/site-packages/mimify.pys   readline3 s   (   s   __doc__s   __init__s   readline(    s*   /usr/lib/python1.5/site-packages/mimify.pys   File) s   	s
   HeaderFilec      s   B C d „  Z  G d „  Z RS(   Nc    s   C D | |  _  E t |  _ d  S(   N(   s   files   selfs   Nones   peek(   s   selfs   files*   /usr/lib/python1.5/site-packages/mimify.pys   __init__C s   c    s  G H |  i t j	 o I |  i } J t |  _ n L |  i i ƒ  } M | o N | Sn O t i | ƒ o P | Sn Q xŒ Q d o R |  i i ƒ  |  _ S t |  i ƒ d j p% |  i d d j o |  i d d j o U | Sn V | |  i } W t |  _ q~ Wd  S(   Ni   i    s    s   	(	   s   selfs   peeks   Nones   lines   files   readlines   hes   matchs   len(   s   selfs   lines*   /usr/lib/python1.5/site-packages/mimify.pys   readlineG s    
A(   s   __init__s   readline(    s*   /usr/lib/python1.5/site-packages/mimify.pys
   HeaderFileB s   c    s»   Y Z [ d } \ d } ] xŠ ] d o ^ t i |  | ƒ } _ | t j o ` Pn a | |  | | i d ƒ !t t	 i
 | i d ƒ d ƒ ƒ } c | i d ƒ } q Wd | |  | Sd S(   s6   Decode a single line of quoted-printable text to 8bit.s    i    i   i   N(   s   newlines   poss	   mime_codes   searchs   lines   ress   Nones   starts   chrs   strings   atois   groups   end(   s   lines   newlines   poss   ress*   /usr/lib/python1.5/site-packages/mimify.pys   mime_decodeY s   		 
<c    sÙ   f g h d } i d } j x¨ j d o k t i |  | ƒ } l | t j o m Pn n | i d ƒ } p t	 i
 t	 i | d ƒ d ƒ } q | |  | | i d ƒ !t | ƒ } r | i d ƒ } q Ws | |  | Sd S(   s   Decode a header line to 8bit.s    i    i   s   _s    N(   s   newlines   poss	   mime_heads   searchs   lines   ress   Nones   groups   matchs   strings   joins   splits   starts   mime_decodes   end(   s   lines   newlines   poss   ress   matchs*   /usr/lib/python1.5/site-packages/mimify.pys   mime_decode_headerf s   		 
!'c    sr  u v w t  } x d } y d } z d } { |  i o |  i d  t j o | t } n
 ~ d }  t	 |  ƒ } ‚ xm‚ d obƒ | i ƒ  }	 „ |	 o … d Sn † | o |	 t | ƒ  | j o  ‡ |	 t | ƒ }	 ˆ | }
 n
 Š d }
 ‹ t |	 ƒ }	 Œ t i |	 ƒ o  d } Ž qv n  | o t i |	 ƒ o  d } ‘ qv n ’ | i |
 |	 ƒ “ | o t i |	 ƒ o • d } n – t i |	 ƒ } — | o ˜ d | i d ƒ } n ™ t i |	 ƒ o š Pn qv W› | o | p | o œ d } n Ÿ x`Ÿ d oU  |  i ƒ  }	 ¡ |	 o ¢ d Sn £ t i t d |	 ƒ }	 ¤ | o |	 t | ƒ  | j o  ¥ |	 t | ƒ }	 ¦ | }
 n
 ¨ d }
 « xË « | oÀ ¬ |	 | d j o. ­ | i |
 |	 ƒ ® t  } ¯ t  }	 ° Pn ± |	 | d	 j ob ² | i |
 |	 ƒ ³ t |  | ƒ } ´ t  | | | ƒ µ | i! }	 ¶ |	 o ¸ Pn ¹ q¥n » Pq¥W¼ |	 o | oŽ ½ xu ½ |	 d d
 j o_ ¾ |	 d  }	 ¿ |  i ƒ  } À | t t ƒ  t j o Á | t t ƒ } n Â |	 | }	 q‡WÃ t# |	 ƒ }	 n Ä |	 o | o |
 o Å k$ } Æ | i% |	 ƒ }	 n Ç |	 o È | i |
 |	 ƒ n qWd S(   s?   Convert a quoted-printable part of a MIME mail message to 8bit.i    i   s    i   Ns   --s   \1s   --
s   
s   =
(&   s   Nones	   multiparts   quoted_printables	   is_base64s   is_repls   ifiles   boundarys   QUOTEs   prefixs
   HeaderFiles   hfiles   readlines   lines   lens   prefs   mime_decode_headers   qps   matchs   decode_base64s	   base64_res   ofiles   writes   repls   mps   mp_ress   groups   hes   res   subs	   mime_heads   Files   nifiles   unmimify_parts   peeks   newlines   mime_decodes   base64s   decodestring(   s   ifiles   ofiles   decode_base64s	   multiparts   quoted_printables	   is_base64s   is_repls   prefixs   hfiles   lines   prefs   mp_ress   nifiles   newlines   base64s*   /usr/lib/python1.5/site-packages/mimify.pys   unmimify_partu s–   				!	 
!		
	

 
!	 
		
	 	
i    c 	   s&  Ê Ë Ì t  |  ƒ t  d ƒ j oŠ Í t |  ƒ } Î t  | ƒ t  d ƒ j o
 |  | j oN Ï k } Ð | i i |  ƒ \ } } Ñ | i
 |  | i i | d | ƒ ƒ n n
 Ó |  } Ô t  | ƒ t  d ƒ j o Õ t | d ƒ } n
 × | } Ø t | t ƒ } Ù t | | | ƒ Ú | i ƒ  d S(   s>   Convert quoted-printable parts of a MIME mail message to 8bit.s    s   ,s   wN(   s   types   infiles   opens   ifiles   outfiles   oss   paths   splits   ds   fs   renames   joins   ofiles   Files   Nones   nifiles   unmimify_parts   decode_base64s   flush(	   s   infiles   outfiles   decode_base64s   ifiles   oss   ds   fs   ofiles   nifiles*   /usr/lib/python1.5/site-packages/mimify.pys   unmimifyÊ s   )	.		s   [=-ÿ]s   [=?-ÿ]c    sÜ  ß á â | o ã t } n
 å t } æ d } ç d } è t |  ƒ d j o |  d  d j o) ê t i	 d t
 d ƒ ƒ } ë d } n ì x‹ ì d o€ í | i |  | ƒ } î | t j o ï Pn ð | |  | | i d ƒ !t i	 d t
 | i d ƒ ƒ ƒ } ò | i d ƒ } qŽ Wó | |  | }  õ d } ö x” ö t |  ƒ d j o} ÷ d	 } ø x; ø |  | d
 j p |  | d d
 j o ù | d } q^Wú | d } û | |  |  d } ü |  | }  q9Wý | |  Sd S(   sZ   Code a single line as quoted-printable.
	   If header is set, quote some extra characters.s    i    i   s   From s   =%02xs   Fi   iK   iI   s   =s   =
N(   s   headers   mime_header_chars   regs	   mime_chars   newlines   poss   lens   lines   strings   uppers   ords   searchs   ress   Nones   starts   groups   ends   i(   s   lines   headers   regs   newlines   poss   ress   is*   /usr/lib/python1.5/site-packages/mimify.pys   mime_encodeß s8   
			' 
=	 	 )s:   ([ 	(]|^)([-a-zA-Z0-9_+]*[-ÿ][-a-zA-Z0-9_+-ÿ]*)([ 	)]|
)c    sÒ   d } d } x¡ d o– t i |  | ƒ } | t j o Pn 	d | |  | | i d ƒ !| i d ƒ t	 t
 | i d ƒ d ƒ | i d ƒ f } | i d ƒ } q W| |  | Sd S(   s.   Code a single header line as quoted-printable.s    i    i   s   %s%s%s=?%s?Q?%s?=%si   i   N(   s   newlines   poss   mime_headers   searchs   lines   ress   Nones   starts   groups   CHARSETs   mime_encodes   end(   s   lines   newlines   poss   ress*   /usr/lib/python1.5/site-packages/mimify.pys   mime_encode_headers   		 
Ss   ^mime-version:s   ^content-transfer-encoding:s   [-ÿ]c    s0  d } } } t } d } } }	 g  }
 d } g  } d } t |  ƒ } xCd o8 | i ƒ  } !| o "Pn #| o t i | ƒ o $d } n %t i | ƒ o &d } n 't i | ƒ oM (d } )t i | ƒ o *d } n! +t i | ƒ o ,d } n n -t i | ƒ } .| o /d | i d ƒ } n 0t i | ƒ o 1| } 2Pn 3|
 i | ƒ qj W6xº6d o¯7|  i ƒ  } 8| o 9Pn :| oN ;| | d j o <| } =Pn >| | d j o ?| } @Pn n A| o B| i | ƒ Cq³n D| oŽ Exu E| d d j o_ F| d  } G|  i ƒ  } H| t t  ƒ  t  j o I| t t  ƒ } n J| | } qkWKt! | ƒ } n L| i | ƒ M|	 o( Nt i | ƒ o Od }	 } n n P| o' Qt | ƒ t" j o Rd } n n q³WUx?|
 d Ur2} V| o Wt# | ƒ } n Xt$ i | ƒ } Y| oy Z|	 oR \t& i' | i d ƒ ƒ d	 j o, ]d
 | i d ƒ t( | i d ƒ f } n n bd | i d d ƒ } n c| o t i | ƒ oP dd } e| o f| d } n) g| o h| d } n j| d } n k| i* | ƒ qyWl| p | o | oV m| i* d ƒ n| i* d ƒ o|	 o p| i* d t( ƒ n r| i* d ƒ n s| o | o t| i* d ƒ n u| i* | ƒ wxC | d wr6 } x| o yt+ | d ƒ } n z| i* | ƒ qcW{| i* | ƒ }| } ~xm~| ob| | d j on xd d oY ‚|  i ƒ  } ƒ| o „d Sn …| o †t+ | d ƒ } n ‡| i* | ƒ qãWn ˆ| | d j o^ ‰t, |  | ƒ } Št. | | d ƒ ‹| i/ } Œ| o ŽPn | i* | ƒ q¿n ’xd ’d oY “|  i ƒ  } ”| o •d Sn –| o —t+ | d ƒ } n ˜| i* | ƒ qÃWq¿Wd S(   s@   Convert an 8bit part of a MIME mail message to quoted-printable.i    s    i   s   --s   --
s   
i   s   =
s   us-asciis   %s%s%si   s   %sus-ascii%ss   Content-Transfer-Encoding: s   base64
s   quoted-printable
s   7bit
s   Mime-Version: 1.0
s   Content-Type: text/plain; s   charset="%s"
s   charset="us-ascii"
s,   Content-Transfer-Encoding: quoted-printable
N(0   s   has_ctes   is_qps	   is_base64s   Nones	   multiparts   must_quote_bodys   must_quote_headers   has_iso_charss   headers
   header_ends   messages   message_ends
   HeaderFiles   ifiles   hfiles   readlines   lines   iso_chars   searchs   mvs   matchs   is_mimes   ctes   qps	   base64_res   mps   mp_ress   groups   hes   appends   newlines   lens   QUOTEs   mime_decodes   MAXLENs   mime_encode_headers   chrsets
   chrset_ress   strings   lowers   CHARSETs   ofiles   writes   mime_encodes   Files   nifiles   mimify_parts   peek(   s   ifiles   ofiles   is_mimes   has_ctes   is_qps	   is_base64s	   multiparts   must_quote_bodys   must_quote_headers   has_iso_charss   headers
   header_ends   messages   message_ends   hfiles   lines   mp_ress   newlines
   chrset_ress   nifiles*   /usr/lib/python1.5/site-packages/mimify.pys   mimify_partsö   					 
	
	 

		


  	


"0	


 	
	 
 


 

c    s&  š›œt  |  ƒ t  d ƒ j oŠ t |  ƒ } žt  | ƒ t  d ƒ j o
 |  | j oN Ÿk }  | i i |  ƒ \ } } ¡| i
 |  | i i | d | ƒ ƒ n n
 £|  } ¤t  | ƒ t  d ƒ j o ¥t | d ƒ } n
 §| } ¨t | t ƒ } ©t | | d ƒ ª| i ƒ  d S(   s>   Convert 8bit parts of a MIME mail message to quoted-printable.s    s   ,s   wi    N(   s   types   infiles   opens   ifiles   outfiles   oss   paths   splits   ds   fs   renames   joins   ofiles   Files   Nones   nifiles   mimify_parts   flush(   s   infiles   outfiles   ifiles   oss   ds   fs   ofiles   nifiles*   /usr/lib/python1.5/site-packages/mimify.pys   mimifyšs   )	.		s   __main__s   mimifys/   Usage: mimify [-l len] -[ed] [infile [outfile]]i   s   l:edbi   s   -es    s   -ds   -bs   -lN(3   s   __doc__s   MAXLENs   CHARSETs   QUOTEs   res   strings   compiles   Is   qps	   base64_res   Ss   mps   chrsets   hes	   mime_codes	   mime_heads   repls   Files
   HeaderFiles   mime_decodes   mime_decode_headers   unmimify_parts   unmimifys	   mime_chars   mime_header_chars   mime_encodes   mime_headers   mime_encode_headers   mvs   ctes   iso_chars   mimify_parts   mimifys   syss   __name__s   lens   argvs   getopts   usages   decode_base64s   optss   argss   exits   os   as   encodes   atois   stdins   stdouts   encode_argss   apply(    s*   /usr/lib/python1.5/site-packages/mimify.pys   ? s|   			U ‡	:			"N 
