from pathlib import Path from typing import Optional from docx import Document from .style_registry import StyleRegistry from .renderer import render_markdown_to_docx import logging logger = logging.getLogger(__name__) def process_document(input_dir: Path, output_dir: Path, style_config_path: Path, template_path: Optional[Path] = None, theme_name: Optional[str] = None): if theme_name: theme_path = Path("resources/themes") / f"{theme_name}.yaml" if theme_path.exists(): style_config_path = theme_path else: logger.warning(f"Тема {theme_name} не найдена, используем стандартный стиль") for doc_dir in input_dir.iterdir(): if not doc_dir.is_dir(): continue # Пропускаем папку images if doc_dir.name == "images": continue doc_name = doc_dir.name md_path = doc_dir / "document.md" images_dir = doc_dir / "images" if not md_path.exists(): logger.warning(f"Пропущено: {doc_name} — нет document.md") continue with open(md_path, encoding="utf-8") as f: md_content = f.read() if template_path and template_path.exists(): doc = Document(template_path) else: doc = Document() style_reg = StyleRegistry(style_config_path) style_reg.ensure_styles_in_doc(doc) render_markdown_to_docx(doc, md_content, images_dir, style_reg) output_path = output_dir / f"{doc_name}.docx" output_path.parent.mkdir(parents=True, exist_ok=True) doc.save(output_path) logger.info(f"Создан документ: {output_path}")