Vernacular / convert.py
bhardwaj08sarthak's picture
Upload convert.py
93bbf17 verified
Raw
History Blame Contribute Delete
1.76 kB
#!/usr/bin/env python3
"""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()