2013-08-11 15:32:03 +00:00
|
|
|
|
|
|
|
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():
|
2013-08-11 15:58:32 +00:00
|
|
|
base_path = os.path.dirname(__file__)
|
|
|
|
pattern = os.path.join(base_path, "../Data/User/GameConfig/??????.ini")
|
|
|
|
for name in glob.glob(pattern):
|
2013-08-11 15:32:03 +00:00
|
|
|
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()
|