| |
| """Convert the Riverstone English/ language pack to JSON. |
| |
| Usage: |
| python convert.py # English/ -> English_JSON/ |
| python convert.py SRC DST # custom source / destination dirs |
| """ |
|
|
| import json |
| import sys |
| from pathlib import Path |
|
|
| from converter.utils import is_skippable, toSafeEntityName |
| from converter.docs import readLocalDoc |
| from converter.sheets import readLocalSheet |
|
|
|
|
| def _file_path_key(rel: Path) -> str: |
| """Compute the normalised path key used by splitMarkers / avoidTransformMarkers.""" |
| parts = [toSafeEntityName(p) for p in rel.with_suffix("").parts] |
| return "/".join(parts) |
|
|
|
|
| def main() -> None: |
| base = Path(__file__).resolve().parent |
| src_dir = Path(sys.argv[1]) if len(sys.argv) > 1 else base / "English" |
| dst_dir = Path(sys.argv[2]) if len(sys.argv) > 2 else base / "English_JSON" |
|
|
| n_docx = n_xlsx = n_skipped = 0 |
|
|
| for path in sorted(src_dir.rglob("*")): |
| if not path.is_file(): |
| continue |
| ext = path.suffix.lower() |
| if path.name.startswith("~$") or ext not in (".docx", ".xlsx"): |
| continue |
| if is_skippable(path.name): |
| n_skipped += 1 |
| continue |
|
|
| rel = path.relative_to(src_dir) |
| file_path = _file_path_key(rel) |
|
|
| if ext == ".docx": |
| data = readLocalDoc(path, file_path) |
| n_docx += 1 |
| else: |
| data = readLocalSheet(path, file_path) |
| n_xlsx += 1 |
|
|
| out_path = dst_dir / rel.with_suffix(".json") |
| out_path.parent.mkdir(parents=True, exist_ok=True) |
| out_path.write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8") |
|
|
| total = n_docx + n_xlsx |
| print(f"Converted {n_docx} docx + {n_xlsx} xlsx = {total} files ({n_skipped} skipped)") |
| print(f"Output: {dst_dir}") |
|
|
|
|
| if __name__ == "__main__": |
| main() |
|
|