committed

ZDS 0007: The PPTX Reader

Category Format Record
Intended Status Committed
Created 2026-08-06
Last Updated 2026-08-08
Authors Zen Contributors <team@insan.ai>
Discussion Mapping, omissions, and round-trip expectations for the PPTX reader

Abstract

The format record for zenfmt_pptx (ai.insan.zenfmt.pptx). A slide deck is a spatial, animated medium; this projection keeps its readable content — titles, body text, bullet structure, tables, hyperlinks, image references, and speaker notes — and drops its geometry. Of every format zenfmt reads, a presentation loses the most, and the reader says so with an unconditional warning rather than letting clean-looking output imply fidelity.

Mapping

SourceTree resultFacets
p:sldIdLstSlides in presentation order, resolved through the presentation relationships.The zero-based slide index is the surface_index of every layout facet on that slide.
Title placeholders (type="title", "ctrTitle")heading, level 2, one per slide with a title.LayoutFacet (surface slide) from the shape’s a:xfrm, EMU top-left, attached to the heading.
Other text bodiesparagraph per a:p; empty paragraphs vanish.LayoutFacet from the shape’s a:xfrm, attached to the shape’s first emitted block; shapes without a:xfrm attach none.
a:pPr bullets (lvl, buChar, buAutoNum, buNone)Nested list/list_item structure: an explicit bullet or a level above zero enters a list at lvl + 1; buAutoNum makes the target level ordered; buNone (and level zero without an explicit bullet) stays a paragraph. Level jumps open intervening levels as empty items, mirroring the DOCX numbering machine.none.
a:tbl in a p:graphicFrametable: a:tblGrid counts the columns, firstRow="1" on a:tblPr routes the first row into table_head, everything else lands in table_body. gridSpan/rowSpan carry through the cell payload; hMerge/vMerge continuation cells fold into their origin with one pptx.merged-cells note per table.LayoutFacet from the graphic frame’s p:xfrm, attached to the table.
a:hlinkClick in a:rPrlink, resolved through the slide relationships. Only external targets (a URL scheme) become links; a jump to another slide has no Markdown counterpart and degrades to plain text.none.
a:rPr with b="1", i="1"strong, emphasis; identical consecutive runs share one styled span.none.
p:picimage in its own paragraph: the source is the a:blip embed target resolved through the slide relationships, the description comes from p:cNvPr descr (falling back to name). A picture with neither source nor description is skipped.The picture’s archive bytes register in the resource store under the part name, MIME by extension; past the media limits, one pptx.media-limit note and the rest keep path references.
a:brhard_break.none.
Speaker notesThe slide’s notes part, appended after the slide as a container with class notes, read with the same machinery and its own relationships.none: notes shapes attach no layout.

Deliberate omissions

One report carries the projection’s headline: pptx.presentation-projection, a warning emitted for every conversion, naming what is absent — positioning, animation, transitions, charts, SmartArt, and embedded media. Individual constructs inside that scope are not separately counted; the medium itself is the omission.

CodeWhat it covers
pptx.presentation-projectionThe unconditional geometry warning above.
pptx.merged-cellsMerged table cells flattened to their top-left origin, one note per affected table.

Bullet inheritance from slide layouts and masters is not resolved: a paragraph whose bullet exists only in the master’s list style converts as a paragraph unless it carries a level or an explicit bullet of its own. Resolving the full layout/master inheritance chain is the natural next amendment here.

Round-trip expectations

None, emphatically: this is a text extraction. Nothing about a Markdown-to-PPTX trip is promised or implied, and no preservation namespace is written.

Security

The shared archive limits and DTD-free XML parsing apply unchanged. Slide-relative relationship targets are normalized so .. segments cannot address outside the package namespace.

References

  • ZDS 0002, Reading the Office Formats.
  • ECMA-376 Part 1, PresentationML and DrawingML.