From 727a381fc902cd93d23b3624359bad38d49539d0 Mon Sep 17 00:00:00 2001 From: Matthias Hoelzl Date: Wed, 4 Oct 2017 23:21:32 +0200 Subject: Fix Python 3 build - Take care of the differences in handling unicode characters in `escape_string` (formerly in `editor/SCsub`, now in `compat.py)`. - Conditionally include `_winreg` or `winreg` in the Mono editor module. --- compat.py | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) (limited to 'compat.py') diff --git a/compat.py b/compat.py index 7338c479f..e1bc0ed67 100644 --- a/compat.py +++ b/compat.py @@ -14,6 +14,17 @@ if sys.version_info < (3,): 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)) @@ -29,3 +40,21 @@ else: return codecs.utf_8_encode(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 + -- cgit v1.2.3-70-g09d2