rename_types.py 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. #!/usr/bin/env python3
  2. #
  3. # This script renames symbols in the specified paths
  4. import argparse
  5. import os
  6. import pathlib
  7. import re
  8. import sys
  9. def main():
  10. if len(args.args) < 1:
  11. print("Usage: %s files_or_directories ..." % sys.argv[0])
  12. exit(1)
  13. replacements = {
  14. "SDL_bool": "bool",
  15. "SDL_TRUE": "true",
  16. "SDL_FALSE": "false",
  17. }
  18. entries = args.args[0:]
  19. regex = create_regex_from_replacements(replacements)
  20. for entry in entries:
  21. path = pathlib.Path(entry)
  22. if not path.exists():
  23. print("%s doesn't exist, skipping" % entry)
  24. continue
  25. replace_symbols_in_path(path, regex, replacements)
  26. def create_regex_from_replacements(replacements):
  27. return re.compile(r"\b(%s)\b" % "|".join(map(re.escape, replacements.keys())))
  28. def replace_symbols_in_file(file, regex, replacements):
  29. try:
  30. with file.open("r", encoding="UTF-8", newline="") as rfp:
  31. original = rfp.read()
  32. contents = regex.sub(lambda mo: replacements[mo.string[mo.start():mo.end()]], original)
  33. if contents != original:
  34. with file.open("w", encoding="UTF-8", newline="") as wfp:
  35. wfp.write(contents)
  36. except UnicodeDecodeError:
  37. print("%s is not text, skipping" % file)
  38. except Exception as err:
  39. print("%s" % err)
  40. def replace_symbols_in_dir(path, regex, replacements):
  41. for entry in path.glob("*"):
  42. if entry.is_dir():
  43. replace_symbols_in_dir(entry, regex, replacements)
  44. else:
  45. print("Processing %s" % entry)
  46. replace_symbols_in_file(entry, regex, replacements)
  47. def replace_symbols_in_path(path, regex, replacements):
  48. if path.is_dir():
  49. replace_symbols_in_dir(path, regex, replacements)
  50. else:
  51. replace_symbols_in_file(path, regex, replacements)
  52. if __name__ == "__main__":
  53. parser = argparse.ArgumentParser(fromfile_prefix_chars='@')
  54. parser.add_argument("args", nargs="*")
  55. args = parser.parse_args()
  56. try:
  57. main()
  58. except Exception as e:
  59. print(e)
  60. exit(-1)
  61. exit(0)