forked from TheSuperHackers/GeneralsGameCode
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathrefactor_delete_instance.py
More file actions
93 lines (76 loc) · 3.13 KB
/
refactor_delete_instance.py
File metadata and controls
93 lines (76 loc) · 3.13 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
# Created with python 3.11.4
import glob
import os
def modifyLine(line: str) -> str:
if 'friend_deleteInstance()' in line:
return line
deleteInstanceBegin = line.find('deleteInstance()')
deleteInstanceEnd = deleteInstanceBegin + len('deleteInstance()')
if deleteInstanceBegin >= 0:
i = deleteInstanceBegin
# Skip MemoryPoolObject::deleteInstance()
if i >= 2 and line[i-2:i] == '::':
return line
# Skip void deleteInstance()
if i >= 5 and line[i-5:i] == 'void ':
return line
# Skip void friend_deleteInstance()
if i >= 5 and line[i-5:i] == 'void ':
return line
# Walk back to object end
i -= 1
while i >= 0:
ch = line[i]
if ch != '>' and ch != '-' and not ch.isspace():
break
i -= 1
objectEnd = i + 1
# Walk back to object begin
while i >= 0:
ch = line[i]
if ch.isspace() or ch == '{' or ch == '}':
break
i -= 1
objectBegin = i + 1
objectName = line[objectBegin:objectEnd]
if objectName:
lineCopy = line[:objectBegin]
lineCopy += f'MemoryPoolObject::deleteInstance({objectName})'
lineCopy += line[deleteInstanceEnd:]
return lineCopy
else:
lineCopy = line[:deleteInstanceBegin]
lineCopy += 'MemoryPoolObject::deleteInstance(this)'
lineCopy += line[deleteInstanceEnd:]
return lineCopy
return line
def main():
current_dir = os.path.dirname(os.path.abspath(__file__))
root_dir = os.path.join(current_dir, "..", "..")
root_dir = os.path.normpath(root_dir)
core_dir = os.path.join(root_dir, "Core")
generals_dir = os.path.join(root_dir, "Generals")
generalsmd_dir = os.path.join(root_dir, "GeneralsMD")
fileNames = []
fileNames.extend(glob.glob(os.path.join(core_dir, '**', '*.h'), recursive=True))
fileNames.extend(glob.glob(os.path.join(core_dir, '**', '*.cpp'), recursive=True))
fileNames.extend(glob.glob(os.path.join(core_dir, '**', '*.inl'), recursive=True))
fileNames.extend(glob.glob(os.path.join(generals_dir, '**', '*.h'), recursive=True))
fileNames.extend(glob.glob(os.path.join(generals_dir, '**', '*.cpp'), recursive=True))
fileNames.extend(glob.glob(os.path.join(generals_dir, '**', '*.inl'), recursive=True))
fileNames.extend(glob.glob(os.path.join(generalsmd_dir, '**', '*.h'), recursive=True))
fileNames.extend(glob.glob(os.path.join(generalsmd_dir, '**', '*.cpp'), recursive=True))
fileNames.extend(glob.glob(os.path.join(generalsmd_dir, '**', '*.inl'), recursive=True))
for fileName in fileNames:
with open(fileName, 'r', encoding="cp1252") as file:
try:
lines = file.readlines()
except UnicodeDecodeError:
continue # Not good.
with open(fileName, 'w', encoding="cp1252") as file:
for line in lines:
line = modifyLine(line)
file.write(line)
return
if __name__ == "__main__":
main()