A piece of text is a body: a TextHeaderAtom, then the characters, then formatting. A body is held in one of two places: in a shape’s client text box, or in the slide list, when the shape only holds an outline reference.
0x0F9FTextHeaderAtom the kind of textrequired0x0FA0TextCharsAtom UTF-16LE, or TextBytesAtom (0x0FA8) one byte a characteroptional0x0FA1StyleTextPropAtom paragraph and character runsoptional0x0FAATextSpecialInfoAtom, meta characters, bookmarks, linksoptional
TextHeaderAtom
Type 0x0F9F, recLen 4: a 32-bit textType. In a slide list its recInstance is
the index of the placeholder the text belongs to.
| Value | Kind |
|---|---|
| 0 | Title |
| 1 | Body |
| 2 | Notes |
| 4 | Other |
| 5 | Centre body |
| 6 | Centre title |
| 7 | Half body |
| 8 | Quarter body |
TextCharsAtom and TextBytesAtom
TextCharsAtom (0x0FA0) holds UTF-16LE, and TextBytesAtom (0x0FA8) one byte for each character, each being the low byte of a UTF-16 character. The text is not ended by a null. A body has one more paragraph break than the characters show: a final 0x0D that is not stored.
| Character | Meaning |
|---|---|
| 0x000D | End of paragraph. |
| 0x000B | A line break within a paragraph. |
Fields inside text, such as the slide number or the date, are marked by meta character records (for example SlideNumberMetaCharAtom, 0x0FD8), each giving a position in the text.
OutlineTextRefAtom
Type 0x0F9E, recLen 4: a signed 32-bit index into the TextHeaderAtoms that follow this slide’s SlidePersistAtom in the slide list. A shape uses it instead of holding its own text. Placeholders often do this, so their text appears in the outline.
StyleTextPropAtom
Type 0x0FA1. It holds the paragraph runs, then the character runs, for the text before it. The sum of the counts in each array equals the number of characters of the body, including the final paragraph break.
TextPFRun
| Size | Field | Meaning |
|---|---|---|
| 4 | count | How many characters this run covers. |
| 2 | indentLevel | The paragraph’s outline level, from 0. |
| variable | pf | A TextPFException. |
A TextPFException starts with a 32-bit mask. The fields that follow it are present only when their mask bits are set, in this order:
| Field | Size | Mask bits |
|---|---|---|
bulletFlags | 2 | 0–3 |
bulletChar | 2 | 7 |
bulletFontRef | 2 | 4 |
bulletSize | 2 | 6 |
bulletColor | 4 | 5 |
textAlignment | 2 | 11 |
lineSpacing | 2 | 12 |
spaceBefore | 2 | 13 |
spaceAfter | 2 | 14 |
leftMargin | 2 | 8 |
indent | 2 | 10 |
defaultTabSize | 2 | 15 |
tabStops | variable | 20 |
fontAlign | 2 | 16 |
wrapFlags | 2 | 17–19 |
textDirection | 2 | 21 |
In a TextPFRun the masks for leftMargin, indent, defaultTabSize and tabStops must be off.
TextCFRun
A character run is a 32-bit count and a TextCFException: a 32-bit mask, then
optional fields in this order.
| Field | Size | Holds |
|---|---|---|
fontStyle | 2 | Bold, italic, underline, shadow, emboss and so on. |
fontRef | 2 | An index into the font collection. |
oldEAFontRef | 2 | East Asian font. |
ansiFontRef | 2 | ANSI font. |
symbolFontRef | 2 | Symbol font. |
fontSize | 2 | The size in points, 1 to 4000. |
color | 4 | A ColorIndexStruct. |
position | 2 | Raised or lowered by a percentage of the line, −100 to 100. |
Master text styles
TextMasterStyleAtom (0x0FA3) in a master gives the default paragraph and character formatting for up to five levels of each text type. Placeholders inherit from it.
CString
Many records hold a short string as a CString (type 0x0FBA): recLen bytes of UTF-16LE, with recInstance saying which string it is. Names of slides, comments, fields and macros are held this way.