[Python-checkins] CVS: python/dist/src/Lib quopri.py,1.15,1.16

Martin v. L?wis loewis@users.sourceforge.net
2001年9月30日 13:32:12 -0700


Update of /cvsroot/python/python/dist/src/Lib
In directory usw-pr-cvs1:/tmp/cvs-serv10858/Lib
Modified Files:
	quopri.py 
Log Message:
Patch #462190, patch #464070: Support quoted printable in the binascii module.
Decode and encode underscores for header style encoding. Fixes bug #463996.
Index: quopri.py
===================================================================
RCS file: /cvsroot/python/python/dist/src/Lib/quopri.py,v
retrieving revision 1.15
retrieving revision 1.16
diff -C2 -d -r1.15 -r1.16
*** quopri.py	2001年09月04日 19:14:14	1.15
--- quopri.py	2001年09月30日 20:32:10	1.16
***************
*** 12,18 ****
 EMPTYSTRING = ''
 
 
 
! def needsquoting(c, quotetabs):
 """Decide whether a particular character needs to be quoted.
 
--- 12,23 ----
 EMPTYSTRING = ''
 
+ try:
+ from binascii import a2b_qp, b2a_qp
+ except:
+ a2b_qp = None
+ b2a_qp = None
 
 
! def needsquoting(c, quotetabs, header):
 """Decide whether a particular character needs to be quoted.
 
***************
*** 23,26 ****
--- 28,34 ----
 if c in ' \t':
 return quotetabs
+ # if header, we have to escape _ because _ is used to escape space
+ if c == '_': 
+ return header
 return c == ESCAPE or not (' ' <= c <= '~')
 
***************
*** 32,36 ****
 
 
! def encode(input, output, quotetabs):
 """Read 'input', apply quoted-printable encoding, and write to 'output'.
 
--- 40,44 ----
 
 
! def encode(input, output, quotetabs, header = 0):
 """Read 'input', apply quoted-printable encoding, and write to 'output'.
 
***************
*** 39,43 ****
--- 47,60 ----
 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.
 """
+ 
+ if b2a_qp is not None:
+ data = input.read()
+ odata = b2a_qp(data, quotetabs = quotetabs, header = header)
+ output.write(odata)
+ return
+ 
 def write(s, output=output, lineEnd='\n'):
 # RFC 1521 requires that the line ending in a space or tab must have
***************
*** 61,67 ****
 # Calculate the un-length-limited encoded line
 for c in line:
! if needsquoting(c, quotetabs):
 c = quote(c)
! outline.append(c)
 # First, write out the previous line
 if prevline is not None:
--- 78,87 ----
 # Calculate the un-length-limited encoded line
 for c in line:
! if needsquoting(c, quotetabs, header):
 c = quote(c)
! if header and c == ' ':
! outline.append('_')
! else:
! outline.append(c)
 # First, write out the previous line
 if prevline is not None:
***************
*** 81,97 ****
 write(prevline, lineEnd=stripped)
 
! def encodestring(s, quotetabs=0):
 from cStringIO import StringIO
 infp = StringIO(s)
 outfp = StringIO()
! encode(infp, outfp, quotetabs)
 return outfp.getvalue()
 
 
 
! def decode(input, output):
 """Read 'input', apply quoted-printable decoding, and write to 'output'.
 
! 'input' and 'output' are files with readline() and write() methods."""
 new = ''
 while 1:
--- 101,126 ----
 write(prevline, lineEnd=stripped)
 
! def encodestring(s, quotetabs = 0, header = 0):
! if b2a_qp is not None:
! return b2a_qp(s, quotetabs = quotetabs, header = header)
 from cStringIO import StringIO
 infp = StringIO(s)
 outfp = StringIO()
! encode(infp, outfp, quotetabs, header)
 return outfp.getvalue()
 
 
 
! def decode(input, output, header = 0):
 """Read 'input', apply quoted-printable decoding, and write to 'output'.
+ 'input' and 'output' are files with readline() and write() methods.
+ If 'header' is true, decode underscore as space (per RFC 1522)."""
 
! if a2b_qp is not None:
! data = input.read()
! odata = a2b_qp(data, header = header)
! output.write(odata)
! return
! 
 new = ''
 while 1:
***************
*** 108,112 ****
 while i < n:
 c = line[i]
! if c != ESCAPE:
 new = new + c; i = i+1
 elif i+1 == n and not partial:
--- 137,143 ----
 while i < n:
 c = line[i]
! if c == '_' and header:
! new = new + ' '; i = i+1
! elif c != ESCAPE:
 new = new + c; i = i+1
 elif i+1 == n and not partial:
***************
*** 124,132 ****
 output.write(new)
 
! def decodestring(s):
 from cStringIO import StringIO
 infp = StringIO(s)
 outfp = StringIO()
! decode(infp, outfp)
 return outfp.getvalue()
 
--- 155,165 ----
 output.write(new)
 
! def decodestring(s, header = 0):
! if a2b_qp is not None:
! return a2b_qp(s, header = header)
 from cStringIO import StringIO
 infp = StringIO(s)
 outfp = StringIO()
! decode(infp, outfp, header = header)
 return outfp.getvalue()
 

AltStyle によって変換されたページ (->オリジナル) /