1""" 2Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 3See https://llvm.org/LICENSE.txt for license information. 4SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 5 6Prepares language bindings for LLDB build process. Run with --help 7to see a description of the supported command line arguments. 8""" 9 10# Python modules: 11import io 12 13 14def _encoded_write(old_write, encoding): 15 def impl(s): 16 # If we were asked to write a `bytes` decode it as unicode before 17 # attempting to write. 18 if isinstance(s, bytes): 19 s = s.decode(encoding, "replace") 20 # Filter unreadable characters, Python 3 is stricter than python 2 about them. 21 import re 22 23 s = re.sub(r"[^\x00-\x7f]", r" ", s) 24 return old_write(s) 25 26 return impl 27 28 29""" 30Create a Text I/O file object that can be written to with either unicode strings 31or byte strings. 32""" 33 34 35def open( 36 file, encoding, mode="r", buffering=-1, errors=None, newline=None, closefd=True 37): 38 wrapped_file = io.open( 39 file, 40 mode=mode, 41 buffering=buffering, 42 encoding=encoding, 43 errors=errors, 44 newline=newline, 45 closefd=closefd, 46 ) 47 new_write = _encoded_write(getattr(wrapped_file, "write"), encoding) 48 setattr(wrapped_file, "write", new_write) 49 return wrapped_file 50