Skip to content

v1.0.0

Choose a tag to compare

@nilskruthoff nilskruthoff released this 17 Jul 21:16
· 8 commits to main since this release
1a11674

pptx-to-md v1.0.0

Version 1.0.0 introduces a new semantic parsing pipeline for PPTX and ODP
presentations. XML is now processed with event-driven pull parsers and mapped to
a shared document model before Markdown is generated.

This release significantly improves the preservation of presentation structure:
titles and headings are recognized, paragraph boundaries remain intact, mixed
list content is handled correctly, merged table cells are retained, images carry
alternative text, and multi-column slides can use a spatial reading order.

Highlights

  • Shared semantic model: Inspect presentations as metadata, slides, and
    positioned text, table, image, or unsupported-content blocks.
  • PPTX and ODP parity: Both formats now use the same semantic Markdown
    rendering path.
  • More accurate lists: Nested levels, ordered-list start values, inherited
    bullets, and explicit list removal are preserved.
  • Better tables: Standard tables use GFM Markdown; merged cells use HTML to
    preserve row and column spans.
  • Richer formatting: Added strikethrough, superscript, subscript, fields, and
    hard line breaks.
  • Better image output: Images use standard Markdown syntax, alternative text,
    and detected MIME types.
  • Configurable reading order: Choose spatial ordering or original source
    ordering per slide.
  • Actionable diagnostics: Missing resources and unsupported structures are
    reported without discarding the whole slide.

New structured API

Use PresentationContainer::parse_document() to access the semantic model:

let document = container.parse_document()?;

for slide in document.slides {
    println!("{} blocks", slide.blocks.len());
}

Use Slide::to_markdown(&MarkdownOptions) when the default Markdown behavior
needs to be customized.

Breaking Changes

  • Slide::convert_to_md() now returns a Result<String>:
// v0.5.x
let markdown = slide.convert_to_md().unwrap_or_default();

// v1.0.0
let markdown = slide.convert_to_md()?;
  • Applications that construct Slide, Formatting, or table-cell values with
    public struct literals must add the new fields. Prefer the supplied constructors,
    builders, or Default where possible.

  • Existing presentation containers, streaming iteration, parse_all(), and the
    PPTX-specific PptxContainer remain available. Slide::elements is retained as
    a transitional compatibility view, while new integrations should use
    Slide::blocks.

Known limitations

Charts and SmartArt currently expose fallback text and diagnostics rather than a
complete structured representation. Spatial ordering remains heuristic for
overlapping or unusually free-form layouts, and OCR is outside the scope of this
release.