mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2025-03-12 22:56:52 +01:00

Add a simple Python script that does a basic normalization on the game INI files and run it across all the files we have. This normalizes the sections, their order and comments, and the whitespace within them. It also removes the sections Video_Hardware, Gecko, and Wii, which should not be in the game INI files we ship by default.
113 lines
2.8 KiB
Python
113 lines
2.8 KiB
Python
|
|
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():
|
|
for name in glob.glob("??????.ini"):
|
|
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()
|