""" build.py -------- Markdown → JSON 的 build pipeline。 職責: 讀取 paths.json → 對每個任務呼叫 Test2ChMd._export_one → 輸出 JSON 與 app.py 完全解耦,可用兩種方式執行: A. 命令列(手動重建): python build.py # 使用預設 paths.json python build.py paths_ch15.json # 指定 config python build.py paths.json --force # 強制重建全部 B. 由 app.py import 並在啟動時呼叫: from build import build_if_needed build_if_needed(CONFIG_PATH, force=False) # 只重建有異動的任務 """ from __future__ import annotations import sys from pathlib import Path # Test2ChMd 放在同層或 layout/ 下,依實際位置選一種 from layout.converter.md_pipeline import build_from_config def build_if_needed( config_path: str | Path = "paths.json", *, force: bool = False, ) -> list[Path]: """ 執行 build pipeline。 config_path:paths.json 路徑(絕對或相對於 CWD) force:True → 強制重建全部任務;False → 只重建比 md 舊的 json """ return build_from_config(config_path, force=force) # --------------------------------------------------------------------------- # 命令列介面 # --------------------------------------------------------------------------- if __name__ == "__main__": import argparse parser = argparse.ArgumentParser( description="把 paths.json 中的 Markdown 轉換成 JSON" ) parser.add_argument( "config", nargs="?", default="paths.json", help="paths.json 的路徑(預設:./paths.json)", ) parser.add_argument( "--force", action="store_true", help="強制重建全部任務(忽略 up_to_date 設定)", ) args = parser.parse_args() outputs = build_if_needed(args.config, force=args.force) print(f"\n完成:共輸出 {len(outputs)} 個 JSON 檔案。")