Repository navigation
v1.0.0
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 aResult<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, orDefaultwhere possible. -
Existing presentation containers, streaming iteration,
parse_all(), and the
PPTX-specificPptxContainerremain available.Slide::elementsis 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.