diff options
Diffstat (limited to 'compat.py')
-rw-r--r-- | compat.py | 33 |
1 files changed, 33 insertions, 0 deletions
@@ -12,8 +12,21 @@ if sys.version_info < (3,): return cStringIO.StringIO() def encode_utf8(x): return x + def decode_utf8(x): + return x def iteritems(d): return d.iteritems() + def escape_string(s): + if isinstance(s, unicode): + s = s.encode('ascii') + result = '' + for c in s: + if not (32 <= ord(c) < 127) or c in ('\\', '"'): + result += '\\%03o' % ord(c) + else: + result += c + return result + else: def isbasestring(s): return isinstance(s, (str, bytes)) @@ -27,5 +40,25 @@ else: import codecs def encode_utf8(x): return codecs.utf_8_encode(x)[0] + def decode_utf8(x): + return codecs.utf_8_decode(x)[0] def iteritems(d): return iter(d.items()) + def charcode_to_c_escapes(c): + rev_result = [] + while c >= 256: + c, low = (c // 256, c % 256) + rev_result.append('\\%03o' % low) + rev_result.append('\\%03o' % c) + return ''.join(reversed(rev_result)) + def escape_string(s): + result = '' + if isinstance(s, str): + s = s.encode('utf-8') + for c in s: + if not(32 <= c < 127) or c in (ord('\\'), ord('"')): + result += charcode_to_c_escapes(c) + else: + result += chr(c) + return result + |