# -*- coding: utf-8 -*- from dotenv import load_dotenv load_dotenv() """ 9_md_to_html_publisher.py 기능: - 생성된 report_draft.md 파일을 읽어 최종 report.html을 생성합니다. - 마크다운을 HTML로 변환하며, 지정된 스타일시트(Word/HWP 스타일)를 적용합니다. - 목차(TOC) 자동 생성 및 링크 기능을 포함합니다. """ import os import re import json from pathlib import Path from datetime import datetime from typing import List, Dict, Any, Tuple def log(msg: str): print(f"[{datetime.now().strftime('%H:%M:%S')}] {msg}") class MarkdownToHtmlConverter: def __init__(self): pass def convert(self, md_content: str) -> str: """단순 마크다운 -> HTML 변환 (정규식 기반)""" html = md_content # 헤더 html = re.sub(r'^#### (.*)$', r'

\1

', html, flags=re.MULTILINE) html = re.sub(r'^### (.*)$', r'

\1

', html, flags=re.MULTILINE) html = re.sub(r'^## (.*)$', r'

\1

', html, flags=re.MULTILINE) html = re.sub(r'^# (.*)$', r'

\1

', html, flags=re.MULTILINE) # 강조 html = re.sub(r'\*\*(.*?)\*\*', r'\1', html) # 리스트 html = re.sub(r'^\s*-\s+(.*)$', r'
  • \1
  • ', html, flags=re.MULTILINE) # 줄바꿈 html = html.replace('\n', '
    \n') return html def get_html_template(title: str, content: str) -> str: """최종 HTML 템플릿 적용""" return f""" {title}
    {content}
    """ def main(input_dir, output_dir): global OUTPUT_ROOT, GEN_DIR OUTPUT_ROOT = Path(output_dir) GEN_DIR = OUTPUT_ROOT / "generated" md_path = GEN_DIR / "report_draft.md" out_path = GEN_DIR / "report.html" if not md_path.exists(): log(f"대상 파일 없음: {md_path}") return log("HTML 변환 작업 시작...") md_content = md_path.read_text(encoding="utf-8") # 제목 추출 title_match = re.search(r'^# (.*)$', md_content, re.MULTILINE) title = title_match.group(1) if title_match else "보고서" converter = MarkdownToHtmlConverter() html_body = converter.convert(md_content) final_html = get_html_template(title, html_body) out_path.write_text(final_html, encoding="utf-8") log(f"최종 HTML 생성 완료: {out_path}") if __name__ == "__main__": main()