import mistune from .style_registry import StyleRegistry from ..handlers import get_handler import logging logger = logging.getLogger(__name__) log_handlers = set() def render_markdown_to_docx(doc, md_content: str, images_dir, style_reg: StyleRegistry): # Включаем плагины: таблицы, переносы строк markdown = mistune.create_markdown(renderer=None, plugins=['table']) ast = markdown(md_content) def walk(node): if isinstance(node, list): for item in node: walk(item) elif isinstance(node, dict): node_type = node["type"] # Игнорируем вспомогательные узлы без логирования if node_type in ("text", "blank_line", "table_head", "table_body", "table_row", "table_cell"): if node.get("children"): for child in node["children"]: walk(child) return if node_type not in log_handlers: logger.debug(f"Обрабатываем узел: {node_type}") handler = get_handler(node_type) if handler: if node_type not in log_handlers: logger.debug(f" → найден обработчик для {node_type}") handler(node, doc, images_dir, style_reg) elif node_type not in log_handlers: logger.warning(f" → нет обработчика для {node_type}") log_handlers.add(node_type) if node.get("children"): for child in node["children"]: walk(child) walk(ast)