1 # -*- coding: UTF-8 -*-
2 # vim: expandtab sw=4 ts=4 sts=4:
7 __author__
= 'Michal Čihař'
8 __email__
= 'michal@cihar.com'
10 Copyright (c) 2003 - 2007 Michal Čihař
12 This program is free software; you can redistribute it and/or modify it
13 under the terms of the GNU General Public License version 2 as published by
14 the Free Software Foundation.
16 This program is distributed in the hope that it will be useful, but WITHOUT
17 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
18 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
21 You should have received a copy of the GNU General Public License along with
22 this program; if not, write to the Free Software Foundation, Inc.,
23 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
27 def modified_base64(s
):
28 s_utf7
= s
.encode('utf-7')
29 return s_utf7
[1:-1].replace('/', ',')
31 def modified_unbase64(s
):
32 s_utf7
= '+' + s
.replace(',', '/') + '-'
33 return unicode(s_utf7
, 'utf-7')
39 if ord(c
) in (range(0x20, 0x26) + range(0x27, 0x7f)):
41 r
.extend(['&', modified_base64(''.join(_in
)), '-'])
46 r
.extend(['&', modified_base64(''.join(_in
)), '-'])
52 r
.extend(['&', modified_base64(''.join(_in
)), '-'])
53 return (''.join(r
), len(s
))
59 if c
== '&' and not decode
:
61 elif c
== '-' and decode
:
65 r
.append(modified_unbase64(''.join(decode
[1:])))
72 r
.append(modified_unbase64(''.join(decode
[1:])))
73 return (u
''.join(r
), len(s
))
75 class StreamReader(codecs
.StreamReader
):
76 def decode(self
, s
, errors
='strict'):
79 class StreamWriter(codecs
.StreamWriter
):
80 def decode(self
, s
, errors
='strict'):
83 def imap4_utf_7(name
):
84 if name
== 'imap4-utf-7':
85 return (encoder
, decoder
, StreamReader
, StreamWriter
)
87 codecs
.register(imap4_utf_7
)