~pyreadline/pyreadline/trunk

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
# -*- coding: utf-8 -*-
#*****************************************************************************
#       Copyright (C) 2007  Jorgen Stenarson. <jorgen.stenarson@bostream.nu>
#
#  Distributed under the terms of the BSD License.  The full license is in
#  the file COPYING, distributed as part of this software.
#*****************************************************************************
import sys

try:
    pyreadline_codepage = sys.stdout.encoding
except AttributeError:        
    # This error occurs when pdb imports readline and doctest has replaced 
    # stdout with stdout collector. We will assume ascii codepage
    pyreadline_codepage = u"ascii"

if pyreadline_codepage is None:  
    pyreadline_codepage = u"ascii"

if sys.version_info < (2, 6):
    bytes = str

PY3 = (sys.version_info >= (3, 0))

def ensure_unicode(text):
    u"""helper to ensure that text passed to WriteConsoleW is unicode"""
    if isinstance(text, bytes):
        try:
            return text.decode(pyreadline_codepage, u"replace")
        except (LookupError, TypeError):
            return text.decode(u"ascii", u"replace")
    return text

def ensure_str(text):
    u"""Convert unicode to str using pyreadline_codepage"""
    if isinstance(text, unicode):
        try:
            return text.encode(pyreadline_codepage, u"replace")
        except (LookupError, TypeError):
            return text.encode(u"ascii", u"replace")
    return text

def biter(text):
    if PY3 and isinstance(text, bytes):
        return (s.to_bytes(1, 'big') for s in text)
    else:
        return iter(text)