API reference / Common / Engine types / TextParagraphProperties
Interface: TextParagraphProperties
Paragraph-level properties (a:pPr / w:pPr) — the unified superset of CT_TextParagraphProperties and CT_PPrBase: the style reference and list level, alignment and direction, the indent and spacing families, tabs and numbering, docx's pagination group, borders and shading, the East-Asian layout flags, and the pptx a:defRPr character-cascade layer.
Representation. A sparse, key-sorted set, as [TextCharacterProperties] is: only the properties a paragraph specifies are held, each as a [TextParagraphProperty] value (Align(TextParagraphAlign::Center), IndentLeft(36.0)). An absent key means unspecified — inherit down the style / placeholder chain, which is the common case (a docx body paragraph typically specifies nothing at all, a pptx one only its @lvl). set / clear / overlay maintain the one-entry-per-[TextParagraphPropertyKey], sorted invariant, so equal property sets compare equal and lookup is a binary search. On the wire the properties are an array of specified properties — { "props": [{ "align": "center" }] } (each a tagged [TextParagraphProperty]) — deserialized back through set so the invariant holds.
Lengths are points, resolved at import — the old engine resolves pptx spcPct (percent of the first sized run's 1.2× leading) when loading, and this model keeps that contract; docx twips and the *Chars / *Lines character- and line-relative measures resolve the same way.
The paragraph mark's character properties are deliberately not here: they live on TextParagraph::end, so the CRDT merges them per character property. A style carries this type verbatim for its paragraph layer — docx's style-side CT_PPrGeneral is this same vocabulary minus rPr.
This is the text-paragraph-properties design doc's full 34-property union.
Properties
| Property | Description |
|---|---|
propsTextParagraphProperty[] | The specified properties, one per [TextParagraphPropertyKey], kept sorted by key. Private: set / clear maintain the sorted, one-per-key invariant that a plain == and the binary-search lookups depend on. |
propertiesChange?RevisionChange<TextParagraphProperties> | w:pPrChange — what these properties were before a revision. It sits beside them, so nothing that reads a property learns about it. The type has a slot CT_PPrBase doesn't, inside previous, which nothing fills. |
numberingRevisions?TextNumberingRevisions | w:numPr's records. The model splits w:numPr into Level and Numbering, and this is the bag that holds both. |