summaryrefslogtreecommitdiff
path: root/Tools/CleanFiles.py
diff options
context:
space:
mode:
Diffstat (limited to 'Tools/CleanFiles.py')
-rw-r--r--Tools/CleanFiles.py114
1 files changed, 114 insertions, 0 deletions
diff --git a/Tools/CleanFiles.py b/Tools/CleanFiles.py
new file mode 100644
index 0000000000..3ef6f5ace2
--- /dev/null
+++ b/Tools/CleanFiles.py
@@ -0,0 +1,114 @@
+
+import chardet
+import codecs
+import os
+import glob
+
+standard_sections = [
+ "Core",
+ "EmuState",
+ "OnLoad",
+ "OnFrame",
+ "ActionReplay",
+ "Video",
+ "Video_Settings",
+ "Video_Enhancements",
+ "Video_Hacks",
+ "Speedhacks",
+]
+
+standard_comments = {
+ "Core": "Values set here will override the main dolphin settings.",
+ "EmuState": "The Emulation State. 1 is worst, 5 is best, 0 is not set.",
+ "OnLoad": "Add memory patches to be loaded once on boot here.",
+ "OnFrame": "Add memory patches to be applied every frame here.",
+ "ActionReplay": "Add action replay cheats here.",
+ "Video": "",
+ "Video_Settings": "",
+ "Video_Enhancements": "",
+ "Video_Hacks": "",
+ "Speedhacks": "",
+}
+
+def normalize_comment(line):
+ line = line.strip().lstrip('#').lstrip()
+ if line:
+ return "# %s" % (line,)
+ else:
+ return ""
+
+def normalize_ini_file(in_, out):
+ sections = {}
+ current_section = None
+ toplevel_comment = ""
+ wants_comment = False
+
+ for line in in_:
+ line = line.strip()
+
+ # strip utf8 bom
+ line = line.lstrip(u'\ufeff')
+
+ if line.startswith('#'):
+ line = normalize_comment(line)
+ if current_section is None:
+ toplevel_comment += line
+ continue
+
+ if line.startswith('['):
+ end = line.find(']')
+ section_name = line[1:end]
+ if section_name not in standard_sections:
+ continue
+ current_section = []
+ sections[section_name] = current_section
+ wants_comment = False
+ continue
+
+ if current_section is None and line:
+ raise ValueError("invalid junk")
+
+ if current_section is None:
+ continue
+
+ if line.startswith('#') and not wants_comment:
+ continue
+
+ current_section.append(line)
+ if line:
+ wants_comment = True
+
+ out.write(toplevel_comment.strip() + "\n\n")
+
+ for section in standard_sections:
+ lines = '\n'.join(sections.get(section, "")).strip()
+ comments = standard_comments[section]
+
+ if not lines and not comments:
+ continue
+
+ out.write("[%s]\n" % (section,))
+ if comments:
+ out.write("# %s\n" % (comments,))
+ if lines:
+ out.write(lines)
+ out.write('\n')
+ out.write('\n')
+
+def main():
+ base_path = os.path.dirname(__file__)
+ pattern = os.path.join(base_path, "../Data/User/GameConfig/??????.ini")
+ for name in glob.glob(pattern):
+ in__name = name
+ out_name = name + '.new'
+
+ in_str = open(in__name, 'r').read()
+ encoding = chardet.detect(in_str)
+
+ in_ = codecs.open(in__name, 'r', encoding['encoding'])
+ out = codecs.open(out_name, 'w', 'utf8')
+ normalize_ini_file(in_, out)
+ os.rename(out_name, in__name)
+
+if __name__ == "__main__":
+ main()