99 lines
3.5 KiB
Python
99 lines
3.5 KiB
Python
from __future__ import annotations
|
|
|
|
import argparse
|
|
from pathlib import Path
|
|
|
|
from docx_ops_lib import (
|
|
apply_patch_document,
|
|
create_docx_document,
|
|
export_outline_artifacts,
|
|
index_document,
|
|
query_nodes,
|
|
read_json,
|
|
render_docx,
|
|
write_json,
|
|
)
|
|
from outline_check import check_outline
|
|
|
|
|
|
def main() -> None:
|
|
parser = argparse.ArgumentParser()
|
|
subparsers = parser.add_subparsers(dest="command", required=True)
|
|
|
|
index_parser = subparsers.add_parser("index")
|
|
index_parser.add_argument("--docx", required=True)
|
|
index_parser.add_argument("--out", required=True)
|
|
|
|
query_parser = subparsers.add_parser("query")
|
|
query_parser.add_argument("--docx", required=True)
|
|
query_parser.add_argument("--query-file", required=True)
|
|
query_parser.add_argument("--out", required=True)
|
|
|
|
create_parser = subparsers.add_parser("create")
|
|
create_parser.add_argument("--spec-file", required=True)
|
|
create_parser.add_argument("--report", required=True)
|
|
|
|
check_parser = subparsers.add_parser("outline-check")
|
|
check_parser.add_argument("--outline-file", required=True)
|
|
check_parser.add_argument("--report", required=True)
|
|
|
|
export_parser = subparsers.add_parser("outline-export")
|
|
export_parser.add_argument("--spec-file", required=True)
|
|
export_parser.add_argument("--report", required=True)
|
|
|
|
patch_parser = subparsers.add_parser("patch")
|
|
patch_parser.add_argument("--patch-file", required=True)
|
|
patch_parser.add_argument("--report", required=True)
|
|
patch_parser.add_argument("--render-check", action="store_true")
|
|
patch_parser.add_argument("--render-dir")
|
|
|
|
render_parser = subparsers.add_parser("render")
|
|
render_parser.add_argument("--docx", required=True)
|
|
render_parser.add_argument("--out-dir", required=True)
|
|
render_parser.add_argument("--report")
|
|
|
|
args = parser.parse_args()
|
|
|
|
if args.command == "index":
|
|
write_json(Path(args.out).resolve(), index_document(Path(args.docx).resolve()))
|
|
return
|
|
|
|
if args.command == "query":
|
|
index_data = index_document(Path(args.docx).resolve())
|
|
query_data = read_json(Path(args.query_file).resolve())
|
|
write_json(Path(args.out).resolve(), query_nodes(index_data, query_data))
|
|
return
|
|
|
|
if args.command == "create":
|
|
spec_data = read_json(Path(args.spec_file).resolve())
|
|
write_json(Path(args.report).resolve(), create_docx_document(spec_data))
|
|
return
|
|
|
|
if args.command == "outline-check":
|
|
outline_data = read_json(Path(args.outline_file).resolve())
|
|
write_json(Path(args.report).resolve(), check_outline(outline_data))
|
|
return
|
|
|
|
if args.command == "outline-export":
|
|
export_data = read_json(Path(args.spec_file).resolve())
|
|
write_json(Path(args.report).resolve(), export_outline_artifacts(export_data))
|
|
return
|
|
|
|
if args.command == "patch":
|
|
patch_data = read_json(Path(args.patch_file).resolve())
|
|
report = apply_patch_document(patch_data)
|
|
if args.render_check:
|
|
output_docx = Path(report["output_docx"]).resolve()
|
|
render_dir = Path(args.render_dir).resolve() if args.render_dir else output_docx.parent / f"{output_docx.stem}_render"
|
|
report["render"] = render_docx(output_docx, render_dir)
|
|
write_json(Path(args.report).resolve(), report)
|
|
return
|
|
|
|
report = render_docx(Path(args.docx).resolve(), Path(args.out_dir).resolve())
|
|
if args.report:
|
|
write_json(Path(args.report).resolve(), report)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|