diff --git a/compat.py b/compat.py index 7338c479fbc..e1bc0ed6736 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 + diff --git a/editor/SCsub b/editor/SCsub index 11cdb471a8f..e44b4e4bb24 100644 --- a/editor/SCsub +++ b/editor/SCsub @@ -4,18 +4,8 @@ Import('env') env.editor_sources = [] import os -from compat import encode_utf8, byte_to_str, open_utf8 +from compat import encode_utf8, byte_to_str, open_utf8, escape_string -def escape_string(s, encoding='ascii'): - if isinstance(s, unicode): - s = s.encode(encoding) - result = '' - for c in s: - if not (32 <= ord(c) < 127) or c in ('\\', '"'): - result += '\\%03o' % ord(c) - else: - result += c - return result def make_certs_header(target, source, env): diff --git a/modules/mono/mono_reg_utils.py b/modules/mono/mono_reg_utils.py index 6f1620ff49d..e9988625f52 100644 --- a/modules/mono/mono_reg_utils.py +++ b/modules/mono/mono_reg_utils.py @@ -1,7 +1,11 @@ import os if os.name == 'nt': - import _winreg as winreg + import sys + if sys.version_info < (3,): + import _winreg as winreg + else: + import winreg def _reg_open_key(key, subkey):