‡Æ
çMö9c       s­    d  Z    d Z  d Z  d Z  d k Z d 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 A d f  d „  ƒ  YZ X d „  Z e d „  Z t 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  «d k! Z! ¬e" d  j p' e# e! i$ ƒ d j o e! i$ d d! j oU­d 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 qE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   > Ns.   ^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 2 d „  Z RS(   sx   A simple fake file object that knows about limited read-ahead and
	boundaries.  The only supported method is readline().c    s+   - . | |  _  / | |  _ 0 t |  _ d  S(   N(   s   files   selfs   boundarys   Nones   peek(   s   selfs   files   boundarys#   /mit/python/lib/python2.0/mimify.pys   __init__- s   c    sÁ   2 3 |  i t j	 o 4 d Sn 5 |  i i ƒ  } 6 | o 7 | Sn 8 |  i o` 9 | |  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#   /mit/python/lib/python2.0/mimify.pys   readline2 s   (   s   __doc__s   __init__s   readline(    s#   /mit/python/lib/python2.0/mimify.pys   File) s   	s
   HeaderFilec      s   A B d „  Z  F d „  Z RS(   Nc    s   B C | |  _  D t |  _ d  S(   N(   s   files   selfs   Nones   peek(   s   selfs   files#   /mit/python/lib/python2.0/mimify.pys   __init__B s   c    s  F G |  i t j	 o H |  i } I t |  _ n K |  i i ƒ  } L | o M | Sn N t i | ƒ o O | Sn P xŒ P d o Q |  i i ƒ  |  _ R t |  i ƒ d j p% |  i d d j o |  i d d j o T | Sn U | |  i } V t |  _ q~ Wd  S(   Ni   i    s    s   	(	   s   selfs   peeks   Nones   lines   files   readlines   hes   matchs   len(   s   selfs   lines#   /mit/python/lib/python2.0/mimify.pys   readlineF s    
A(   s   __init__s   readline(    s#   /mit/python/lib/python2.0/mimify.pys
   HeaderFileA s   c    s»   X Y Z d } [ d } \ xŠ \ d o ] t i |  | ƒ } ^ | t j o _ Pn ` | |  | | i d ƒ !t t	 i
 | i d ƒ d ƒ ƒ } b | i d ƒ } q Wc | |  | 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#   /mit/python/lib/python2.0/mimify.pys   mime_decodeX s   		 
<c    sÙ   e f g d } h d } i x¨ i d o j t i |  | ƒ } k | t j o l Pn m | i d ƒ } o t	 i
 t	 i | d ƒ d ƒ } p | |  | | i d ƒ !t | ƒ } q | i d ƒ } q Wr | |  | 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#   /mit/python/lib/python2.0/mimify.pys   mime_decode_headere s   		 
!'c    su  t u v t  } w d } x d } y d } z |  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 ž xcž d oXŸ |  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" Ä d 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#   /mit/python/lib/python2.0/mimify.pys   unmimify_partt s–   				!	 
!		
	

 
!	 
		
	 
i    c 	   s)  É Ê Ë t  |  ƒ t  d ƒ j o Ì t |  ƒ } Í t  | ƒ t  d ƒ j o
 |  | j oQ Î d 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    Ns   ,s   w(   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#   /mit/python/lib/python2.0/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(   sW   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#   /mit/python/lib/python2.0/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#   /mit/python/lib/python2.0/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 /t i | ƒ o 0| } 1Pn 2|
 i | ƒ qj W5xº5d o¯6|  i ƒ  } 7| o 8Pn 9| oN :| | d j o ;| } <Pn =| | d j o >| } ?Pn n @| o A| i | ƒ Bq³n C| oŽ Dxu D| d d j o_ E| d  } F|  i ƒ  } G| t t  ƒ  t  j o H| t t  ƒ } n I| | } qkWJt! | ƒ } n K| i | ƒ L|	 o( Mt i | ƒ o Nd }	 } n n O| o' Pt | ƒ t" j o Qd } n n q³WTx?|
 d Tr2} U| o Vt# | ƒ } n Wt$ i | ƒ } X| oy Y|	 oR [t& i' | i d ƒ ƒ d	 j o, \d
 | i d ƒ t( | i d ƒ f } n n ad | i d d ƒ } n b| o t i | ƒ oP cd } d| o e| d } n) f| o g| d } n i| d } n j| i* | ƒ qyWk| p | o | oV l| i* d ƒ m| i* d ƒ n|	 o o| i* d t( ƒ n q| i* d ƒ n r| o | o s| i* d ƒ n t| i* | ƒ vxC | d vr6 } w| o xt+ | d ƒ } n y| i* | ƒ qcWz| 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#   /mit/python/lib/python2.0/mimify.pys   mimify_partsö   					 
	
	 

		


  	


"0	


 	
	 
 


 

c    s)  ™š›t  |  ƒ t  d ƒ j o œt |  ƒ } t  | ƒ t  d ƒ j o
 |  | j oQ žd 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    Ns   ,s   wi    (   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#   /mit/python/lib/python2.0/mimify.pys   mimify™s   ).		s   __main__s   mimifys/   Usage: mimify [-l len] -[ed] [infile [outfile]]i   s   l:edbi   s   -es    s   -ds   -bs   -l(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#   /mit/python/lib/python2.0/mimify.pys   ? s|   			U ‡:		"N 
