diff options
Diffstat (limited to 'Lib/fontTools/misc/py23.py')
-rw-r--r-- | Lib/fontTools/misc/py23.py | 83 |
1 files changed, 83 insertions, 0 deletions
diff --git a/Lib/fontTools/misc/py23.py b/Lib/fontTools/misc/py23.py new file mode 100644 index 00000000..90217a33 --- /dev/null +++ b/Lib/fontTools/misc/py23.py @@ -0,0 +1,83 @@ +"""Python 2/3 compat layer.""" + +from __future__ import print_function, division, absolute_import + +try: + basestring +except NameError: + basestring = str + +try: + unicode +except NameError: + unicode = str + +try: + unichr + bytechr = chr + byteord = ord +except: + unichr = chr + def bytechr(n): + return bytes([n]) + def byteord(c): + return c if isinstance(c, int) else ord(c) + +try: + from StringIO import StringIO +except ImportError: + from io import BytesIO as StringIO + +def strjoin(iterable): + return ''.join(iterable) +if str == bytes: + class Tag(str): + def tobytes(self): + if isinstance(self, bytes): + return self + else: + return self.encode('latin1') + + def tostr(s, encoding='ascii'): + if not isinstance(s, str): + return s.encode(encoding) + else: + return s + tobytes = tostr + + bytesjoin = strjoin +else: + class Tag(str): + + @staticmethod + def transcode(blob): + if not isinstance(blob, str): + blob = blob.decode('latin-1') + return blob + + def __new__(self, content): + return str.__new__(self, self.transcode(content)) + def __ne__(self, other): + return not self.__eq__(other) + def __eq__(self, other): + return str.__eq__(self, self.transcode(other)) + + def __hash__(self): + return str.__hash__(self) + + def tobytes(self): + return self.encode('latin-1') + + def tostr(s, encoding='ascii'): + if not isinstance(s, str): + return s.decode(encoding) + else: + return s + def tobytes(s, encoding='ascii'): + if not isinstance(s, bytes): + return s.encode(encoding) + else: + return s + + def bytesjoin(iterable): + return b''.join(tobytes(item) for item in iterable) |