From c83b653f1fb87f5ca2df5b66422b62697f93713f Mon Sep 17 00:00:00 2001 From: alexveley Date: Sat, 25 Apr 2026 17:26:12 -0400 Subject: [PATCH] Add script to generate ConfigLib persist format from Ham modconfig. --- tools/gen_configlib_persist.py | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 tools/gen_configlib_persist.py diff --git a/tools/gen_configlib_persist.py b/tools/gen_configlib_persist.py new file mode 100644 index 0000000..b041b20 --- /dev/null +++ b/tools/gen_configlib_persist.py @@ -0,0 +1,34 @@ +"""Convert Ham-style modconfig (array of {name, value, description}) to ConfigLib on-disk format.""" +import pathlib +import re + +SRC = pathlib.Path(__file__).resolve().parents[1] / "1765064717/data/scripts/modconfig/HamGalaxySettings-1765064717.lua" +OUT = pathlib.Path(__file__).resolve().parents[1] / "tools/HamGalaxySettings-1765064717-persist.lua" + +# value may be number, bool, or double-quoted string (possibly containing commas) +_value = r'(?:"(?:\\.|[^"])*"|true|false|[0-9.+-]+(?:e[+-]?[0-9]+)?)' +pat = re.compile( + rf'\{{\s*name\s*=\s*"([^"]+)"\s*,\s*value\s*=\s*({_value})\s*,\s*description\s*=\s*"((?:\\.|[^"])*)"\s*\}}', + re.DOTALL, +) + + +def main() -> None: + src = SRC.read_text(encoding="utf-8") + rows = [] + for m in pat.finditer(src): + name, val, desc = m.group(1), m.group(2).strip(), m.group(3).replace('\\"', '"') + rows.append((name, val, desc)) + if not rows: + raise SystemExit("no rows parsed") + lines = ["return {", ""] + for i, (name, val, desc) in enumerate(rows, 1): + d = desc.replace('"', '\\"') + lines.append(f' {name} = {{ value = {val}, description = "{d}", sorting = {i} }},') + lines.append("}") + OUT.write_text("\n".join(lines) + "\n", encoding="utf-8") + print(f"wrote {OUT} ({len(rows)} rows)") + + +if __name__ == "__main__": + main()