Mercurial > p > roundup > code
annotate roundup/rfc2822.py @ 3854:f4e8dc583256
Restored subject parser regexp to the string it was before the...
...implementation of customization of it, i.e., the version from
CVS revision 1.184 of mailgw.py.
This makes 'testFollowupTitleMatchMultiRe' work again.
| author | Erik Forsberg <forsberg@users.sourceforge.net> |
|---|---|
| date | Sat, 12 May 2007 16:14:54 +0000 |
| parents | 97f9fc0bc0ea |
| children |
| rev | line source |
|---|---|
|
2005
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
1628
diff
changeset
|
1 """Some rfc822 functions taken from the new (python2.3) "email" module. |
|
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
1628
diff
changeset
|
2 """ |
|
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
1628
diff
changeset
|
3 __docformat__ = 'restructuredtext' |
|
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
1628
diff
changeset
|
4 |
|
1383
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
5 import re |
|
1628
ea1afeb64b45
more pedantic rfc2822 header qp encoding
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
1439
diff
changeset
|
6 from string import letters, digits |
|
1383
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
7 from binascii import b2a_base64, a2b_base64 |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
8 |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
9 ecre = re.compile(r''' |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
10 =\? # literal =? |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
11 (?P<charset>[^?]*?) # non-greedy up to the next ? is the charset |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
12 \? # literal ? |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
13 (?P<encoding>[qb]) # either a "q" or a "b", case insensitive |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
14 \? # literal ? |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
15 (?P<encoded>.*?) # non-greedy up to the next ?= is the encoded string |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
16 \?= # literal ?= |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
17 ''', re.VERBOSE | re.IGNORECASE) |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
18 |
|
1628
ea1afeb64b45
more pedantic rfc2822 header qp encoding
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
1439
diff
changeset
|
19 hqre = re.compile(r'^[A-z0-9!"#$%%&\'()*+,-./:;<=>?@\[\]^_`{|}~ ]+$') |
|
1383
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
20 |
|
2273
c77483d2cda4
merge from maint-0-7
Richard Jones <richard@users.sourceforge.net>
parents:
2034
diff
changeset
|
21 CRLF = '\r\n' |
|
c77483d2cda4
merge from maint-0-7
Richard Jones <richard@users.sourceforge.net>
parents:
2034
diff
changeset
|
22 |
|
1383
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
23 def base64_decode(s, convert_eols=None): |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
24 """Decode a raw base64 string. |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
25 |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
26 If convert_eols is set to a string value, all canonical email linefeeds, |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
27 e.g. "\\r\\n", in the decoded text will be converted to the value of |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
28 convert_eols. os.linesep is a good choice for convert_eols if you are |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
29 decoding a text attachment. |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
30 |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
31 This function does not parse a full MIME header value encoded with |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
32 base64 (like =?iso-8895-1?b?bmloISBuaWgh?=) -- please use the high |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
33 level email.Header class for that functionality. |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
34 |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
35 Taken from 'email' module |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
36 """ |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
37 if not s: |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
38 return s |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
39 |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
40 dec = a2b_base64(s) |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
41 if convert_eols: |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
42 return dec.replace(CRLF, convert_eols) |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
43 return dec |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
44 |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
45 def unquote_match(match): |
|
2005
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
1628
diff
changeset
|
46 """Turn a match in the form ``=AB`` to the ASCII character with value |
|
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
1628
diff
changeset
|
47 0xab. |
|
1383
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
48 |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
49 Taken from 'email' module |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
50 """ |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
51 s = match.group(0) |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
52 return chr(int(s[1:3], 16)) |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
53 |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
54 def qp_decode(s): |
|
2005
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
1628
diff
changeset
|
55 """Decode a string encoded with RFC 2045 MIME header 'Q' encoding. |
|
1383
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
56 |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
57 This function does not parse a full MIME header value encoded with |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
58 quoted-printable (like =?iso-8895-1?q?Hello_World?=) -- please use |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
59 the high level email.Header class for that functionality. |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
60 |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
61 Taken from 'email' module |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
62 """ |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
63 s = s.replace('_', ' ') |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
64 return re.sub(r'=\w{2}', unquote_match, s) |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
65 |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
66 def _decode_header(header): |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
67 """Decode a message header value without converting charset. |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
68 |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
69 Returns a list of (decoded_string, charset) pairs containing each of the |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
70 decoded parts of the header. Charset is None for non-encoded parts of the |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
71 header, otherwise a lower-case string containing the name of the character |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
72 set specified in the encoded string. |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
73 |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
74 Taken from 'email' module |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
75 """ |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
76 # If no encoding, just return the header |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
77 header = str(header) |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
78 if not ecre.search(header): |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
79 return [(header, None)] |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
80 |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
81 decoded = [] |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
82 dec = '' |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
83 for line in header.splitlines(): |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
84 # This line might not have an encoding in it |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
85 if not ecre.search(line): |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
86 decoded.append((line, None)) |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
87 continue |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
88 |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
89 parts = ecre.split(line) |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
90 while parts: |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
91 unenc = parts.pop(0) |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
92 if unenc: |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
93 if unenc.strip(): |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
94 decoded.append((unenc, None)) |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
95 if parts: |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
96 charset, encoding = [s.lower() for s in parts[0:2]] |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
97 encoded = parts[2] |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
98 dec = '' |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
99 if encoding == 'q': |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
100 dec = qp_decode(encoded) |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
101 elif encoding == 'b': |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
102 dec = base64_decode(encoded) |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
103 else: |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
104 dec = encoded |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
105 |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
106 if decoded and decoded[-1][1] == charset: |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
107 decoded[-1] = (decoded[-1][0] + dec, decoded[-1][1]) |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
108 else: |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
109 decoded.append((dec, charset)) |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
110 del parts[0:3] |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
111 return decoded |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
112 |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
113 def decode_header(hdr): |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
114 """ Decodes rfc2822 encoded header and return utf-8 encoded string |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
115 """ |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
116 if not hdr: |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
117 return None |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
118 outs = u"" |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
119 for section in _decode_header(hdr): |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
120 charset = unaliasCharset(section[1]) |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
121 outs += unicode(section[0], charset or 'iso-8859-1', 'replace') |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
122 return outs.encode('utf-8') |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
123 |
|
2034
be047db3dd3d
Eudora can't handle utf-8 headers. We love Eudora. [SF#900046]
Richard Jones <richard@users.sourceforge.net>
parents:
2005
diff
changeset
|
124 def encode_header(header, charset='utf-8'): |
|
1383
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
125 """ Will encode in quoted-printable encoding only if header |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
126 contains non latin characters |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
127 """ |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
128 |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
129 # Return empty headers unchanged |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
130 if not header: |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
131 return header |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
132 |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
133 # return plain header if it is not contains non-ascii characters |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
134 if hqre.match(header): |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
135 return header |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
136 |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
137 quoted = '' |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
138 #max_encoded = 76 - len(charset) - 7 |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
139 for c in header: |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
140 # Space may be represented as _ instead of =20 for readability |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
141 if c == ' ': |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
142 quoted += '_' |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
143 # These characters can be included verbatim |
|
3639
97f9fc0bc0ea
Yet another rfc2822 encoding patch: '?' must be escaped.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3519
diff
changeset
|
144 elif hqre.match(c) and c not in '_=?': |
|
1383
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
145 quoted += c |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
146 # Otherwise, replace with hex value like =E2 |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
147 else: |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
148 quoted += "=%02X" % ord(c) |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
149 plain = 0 |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
150 |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
151 return '=?%s?q?%s?=' % (charset, quoted) |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
152 |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
153 def unaliasCharset(charset): |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
154 if charset: |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
155 return charset.lower().replace("windows-", 'cp') |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
156 #return charset_table.get(charset.lower(), charset) |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
157 return None |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
158 |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
159 def test(): |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
160 print encode_header("Contrary, Mary") |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
161 #print unaliasCharset('Windows-1251') |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
162 |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
163 if __name__ == '__main__': |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
164 test() |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
165 |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
166 # vim: et |
