7def camel_to_snake_case(camel_case_str):
11 for i, char
in enumerate(camel_case_str):
14 if current_word[-1].isdigit()
and not (len(current_word) > 1
and current_word[-2] ==
'D'):
16 snake_case_parts[-1] = snake_case_parts[-1] + current_word
18 snake_case_parts.append(current_word)
20 snake_case_parts.append(current_word)
21 current_word = char.lower()
26 if current_word[-1].isdigit()
and not (len(current_word) > 1
and current_word[-2] ==
'D'):
28 snake_case_parts[-1] = snake_case_parts[-1] + current_word
30 snake_case_parts.append(current_word)
32 snake_case_parts.append(current_word)
34 return '_'.join(snake_case_parts)
36def camel_to_snake_case(name):
38 name = re.sub(
r'^m([A-Z])',
r'\1', name)
39 return re.sub(
r'(?<!^)(?=[A-Z])',
'_', name).lower()
43 return re.match(
r'^(F|U|T|E|I)[A-Z]', name)
45def replace_camel_case_with_snake_case(text):
47 matched_str = match.group(0)
49 if is_excluded(matched_str):
51 return camel_to_snake_case(matched_str)
54 pattern =
r'\b[A-Z][a-zA-Z0-9]*\b|\bm[A-Z][a-zA-Z0-9]*\b'
57 for line
in text.splitlines():
59 if line.strip().startswith(
"*"):
60 result_lines.append(line)
62 result_lines.append(re.sub(pattern, replace, line))
64 return '\n'.join(result_lines)
68 return r"[^()]*?(?:\("*n+
r"[^()]*?"+
r"\)[^()]*?)*?"*n
70for root, dirs, files
in os.walk(
"./"):
71 for filename
in files:
72 namepath = os.path.join(root, filename)
73 if namepath.find(
".h") != -1
and namepath.find(
".html") == -1:
76 with open(namepath,
'r')
as file:
78 content = content.replace(
'FVector',
'Vec3')
79 content = content.replace(
'std::vector',
'UArray')
80 content = content.replace(
'std::unordered_map',
'UTable')
81 content = content.replace(
'std::map',
'UTable')
83 content = replace_camel_case_with_snake_case(content)
85 regex =
'^(\s*)((?:UFUNCTION|UCLASS|UPROPERTY|UENUM|GENERATED_BODY)\s*\('+paren_matcher(25)+
'\))'
86 content = re.sub(regex,
r'\1', content, flags=re.MULTILINE)
87 content = re.sub(
r'\bU[A-Z]\w+',
lambda x: x.group().replace(
"U",
""), content)
88 content = re.sub(
r'\bF[A-Z]\w+',
lambda x: x.group().replace(
"F",
""), content)
89 content = re.sub(
r'\bE[A-Z]\w+',
lambda x: x.group().replace(
"E",
""), content)
90 content = re.sub(
r'\bT[A-Z]\w+',
lambda x: x.group().replace(
"T",
""), content)
91 content = re.sub(
r'\bI[A-Z]\w+',
lambda x: x.group().replace(
"I",
""), content)
93 with open(namepath,
'w')
as file: