Mercurial > p > roundup > code
annotate roundup/rfc2822.py @ 2077:3e0961d6d44d
Added the "actor" property.
Metakit backend not done (still not confident I know how it's supposed
to work ;)
Currently it will come up as NULL in the RDBMS backends for older items.
The *dbm backends will look up the journal. I hope to remedy the former
before 0.7's release.
Fixed a bunch of migration issues in the rdbms backends while I was at it
(index changes for key prop changes) and simplified the class table update
code for RDBMSes that have "alter table" in their command set (ie. not
sqlite) ... migration from "version 1" to "version 2" still hasn't
actually been tested yet though.
| author | Richard Jones <richard@users.sourceforge.net> |
|---|---|
| date | Mon, 15 Mar 2004 05:50:20 +0000 |
| parents | be047db3dd3d |
| children | 443fce9e92ae |
| 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 |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
21 def base64_decode(s, convert_eols=None): |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
22 """Decode a raw base64 string. |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
23 |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
24 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
|
25 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
|
26 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
|
27 decoding a text attachment. |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
28 |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
29 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
|
30 base64 (like =?iso-8895-1?b?bmloISBuaWgh?=) -- please use the high |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
31 level email.Header class for that functionality. |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
32 |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
33 Taken from 'email' module |
|
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 if not s: |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
36 return s |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
37 |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
38 dec = a2b_base64(s) |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
39 if convert_eols: |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
40 return dec.replace(CRLF, convert_eols) |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
41 return dec |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
42 |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
43 def unquote_match(match): |
|
2005
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
1628
diff
changeset
|
44 """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
|
45 0xab. |
|
1383
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
46 |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
47 Taken from 'email' module |
|
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 s = match.group(0) |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
50 return chr(int(s[1:3], 16)) |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
51 |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
52 def qp_decode(s): |
|
2005
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
1628
diff
changeset
|
53 """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
|
54 |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
55 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
|
56 quoted-printable (like =?iso-8895-1?q?Hello_World?=) -- please use |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
57 the high level email.Header class for that functionality. |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
58 |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
59 Taken from 'email' module |
|
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 s = s.replace('_', ' ') |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
62 return re.sub(r'=\w{2}', unquote_match, s) |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
63 |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
64 def _decode_header(header): |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
65 """Decode a message header value without converting charset. |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
66 |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
67 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
|
68 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
|
69 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
|
70 set specified in the encoded string. |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
71 |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
72 Taken from 'email' module |
|
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 # If no encoding, just return the header |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
75 header = str(header) |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
76 if not ecre.search(header): |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
77 return [(header, None)] |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
78 |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
79 decoded = [] |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
80 dec = '' |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
81 for line in header.splitlines(): |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
82 # This line might not have an encoding in it |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
83 if not ecre.search(line): |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
84 decoded.append((line, None)) |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
85 continue |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
86 |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
87 parts = ecre.split(line) |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
88 while parts: |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
89 unenc = parts.pop(0) |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
90 if unenc: |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
91 if unenc.strip(): |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
92 decoded.append((unenc, None)) |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
93 if parts: |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
94 charset, encoding = [s.lower() for s in parts[0:2]] |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
95 encoded = parts[2] |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
96 dec = '' |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
97 if encoding == 'q': |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
98 dec = qp_decode(encoded) |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
99 elif encoding == 'b': |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
100 dec = base64_decode(encoded) |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
101 else: |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
102 dec = encoded |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
103 |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
104 if decoded and decoded[-1][1] == charset: |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
105 decoded[-1] = (decoded[-1][0] + dec, decoded[-1][1]) |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
106 else: |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
107 decoded.append((dec, charset)) |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
108 del parts[0:3] |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
109 return decoded |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
110 |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
111 def decode_header(hdr): |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
112 """ Decodes rfc2822 encoded header and return utf-8 encoded string |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
113 """ |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
114 if not hdr: |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
115 return None |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
116 outs = u"" |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
117 for section in _decode_header(hdr): |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
118 charset = unaliasCharset(section[1]) |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
119 outs += unicode(section[0], charset or 'iso-8859-1', 'replace') |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
120 return outs.encode('utf-8') |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
121 |
|
2034
be047db3dd3d
Eudora can't handle utf-8 headers. We love Eudora. [SF#900046]
Richard Jones <richard@users.sourceforge.net>
parents:
2005
diff
changeset
|
122 def encode_header(header, charset='utf-8'): |
|
1383
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
123 """ Will encode in quoted-printable encoding only if header |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
124 contains non latin characters |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
125 """ |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
126 |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
127 # Return empty headers unchanged |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
128 if not header: |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
129 return header |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
130 |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
131 # return plain header if it is not contains non-ascii characters |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
132 if hqre.match(header): |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
133 return header |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
134 |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
135 quoted = '' |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
136 #max_encoded = 76 - len(charset) - 7 |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
137 for c in header: |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
138 # Space may be represented as _ instead of =20 for readability |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
139 if c == ' ': |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
140 quoted += '_' |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
141 # These characters can be included verbatim |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
142 elif hqre.match(c): |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
143 quoted += c |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
144 # Otherwise, replace with hex value like =E2 |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
145 else: |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
146 quoted += "=%02X" % ord(c) |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
147 plain = 0 |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
148 |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
149 return '=?%s?q?%s?=' % (charset, quoted) |
|
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 def unaliasCharset(charset): |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
152 if charset: |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
153 return charset.lower().replace("windows-", 'cp') |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
154 #return charset_table.get(charset.lower(), charset) |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
155 return None |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
156 |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
157 def test(): |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
158 print encode_header("Contrary, Mary") |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
159 #print unaliasCharset('Windows-1251') |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
160 |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
161 if __name__ == '__main__': |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
162 test() |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
163 |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
164 # vim: et |
