diff --git a/Tools/scripts/reindent.py b/Tools/scripts/reindent.py --- a/Tools/scripts/reindent.py +++ b/Tools/scripts/reindent.py @@ -41,10 +41,11 @@ you'd prefer. You can always use the --n __version__ = "1" -import tokenize +import io import os import shutil import sys +import tokenize verbose = False recurse = False @@ -85,9 +86,16 @@ def main(): usage() return if not args: - r = Reindenter(sys.stdin) + content = sys.stdin.buffer.read() + raw = io.BytesIO(content) + buffer = io.BufferedReader(raw) + encoding, _ = tokenize.detect_encoding(buffer.readline) + buffer.seek(0) + text = io.TextIOWrapper(buffer, encoding) + + r = Reindenter(text) r.run() - r.write(sys.stdout) + r.write(sys.stdout.buffer, encoding) return for arg in args: check(arg) @@ -129,8 +137,8 @@ def check(file): shutil.copyfile(file, bak) if verbose: print("backed up", file, "to", bak) - with open(file, "w", encoding=encoding) as f: - r.write(f) + with open(file, "wb") as f: + r.write(f, encoding) if verbose: print("wrote new", file) return True @@ -248,8 +256,10 @@ class Reindenter: after.append(line[remove:]) return self.raw != self.after - def write(self, f): - f.writelines(self.after) + def write(self, f, encoding): + for line in self.after: + line = line.encode(encoding) + f.write(line) # Line-getter for tokenize. def getline(self):