"""PPT/PPTX parser: convert to PDF, then reuse PdfParser.""" from __future__ import annotations from pathlib import Path from rag_cut.models import Block from rag_cut.parsers.base import BaseParser from rag_cut.parsers.office_to_pdf import convert_to_pdf from rag_cut.parsers.pdf_parser import PdfParser class PptParser(BaseParser): """Parse presentations by converting to PDF and delegating to PdfParser.""" def __init__(self) -> None: self._pdf_parser = PdfParser() def parse(self, path: Path, assets_dir: Path) -> list[Block]: assets_dir.mkdir(parents=True, exist_ok=True) pdf_dir = assets_dir / "_conversion" pdf_path = convert_to_pdf(path, pdf_dir) blocks = self._pdf_parser.parse(pdf_path, assets_dir) source_fmt = path.suffix.lower().lstrip(".") for block in blocks: block.meta.setdefault("source_format", source_fmt) if page := block.meta.get("page"): block.meta["slide"] = page return blocks