#!/usr/bin/env python3 """Vite 빌드 결과를 독립 실행 가능한 BLOCK8 HTML로 묶는다.""" from html.parser import HTMLParser import base64 import json from pathlib import Path import re ROOT = Path(__file__).resolve().parents[1] DIST = ROOT / "dist" OUTPUT = ROOT / "public/BLOCK8_모델웹페이지.html" class AssetParser(HTMLParser): def __init__(self): super().__init__() self.script = None self.stylesheet = None def handle_starttag(self, tag, attrs): values = dict(attrs) if tag == "script" and values.get("src", "").startswith("/assets/"): self.script = values["src"].split("/assets/", 1)[1] if tag == "link" and values.get("rel") == "stylesheet" and values.get("href", "").startswith("/assets/"): self.stylesheet = values["href"].split("/assets/", 1)[1] def main(): index = (DIST / "index.html").read_text(encoding="utf-8") parser = AssetParser() parser.feed(index) if not parser.script or not parser.stylesheet: raise RuntimeError("빌드된 HTML에서 JavaScript/CSS 파일을 찾지 못했습니다. npm run build를 먼저 실행하세요.") js = (DIST / "assets" / parser.script).read_text(encoding="utf-8") css = (DIST / "assets" / parser.stylesheet).read_text(encoding="utf-8") image_map = {} for name in ("plan", "upper-plan", "longitudinal", "section-a", "section-b"): image = ROOT / "public/drawing-images" / f"BLOCK8_{name}.svg" image_map[name] = "data:image/svg+xml;base64," + base64.b64encode(image.read_bytes()).decode("ascii") # public 폴더 안의 자료 링크가 file:// 환경에서도 열리도록 상대 경로로 바꾼다. for path in ("analysis/", "drawings/", "BLOCK8_", "작업기록.txt"): js = js.replace(f"/{path}", f"./{path}") title = re.search(r"