Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Introduction

docboss is a DOCX and DOC engine written from scratch in safe Rust against the specifications: ECMA-376 for Office Open XML WordprocessingML, and Microsoft's [MS-DOC], [MS-CFB], [MS-OLEPS], [MS-ODRAW] and [MS-OFFCRYPTO] for the Word 97-2003 binary format, its compound-file container and encryption. It has no C dependencies and no bindings to another engine: the ZIP container, the XML tokenizer, the compound-file reader, the font parsers, the layout engine and the rasterizer are its own. One core sits behind every surface: the docboss command-line tool, an interactive terminal explorer (docboss tui), a set of Rust library crates, and a native Python extension.

One model for two formats

A .docx file is a ZIP package of XML parts; a .doc file is a compound file holding a binary stream of text, a piece table and formatting records. Both readers produce the same document model (docboss-model): sections with their page setup, paragraphs and tables, runs with their properties, a style sheet that resolves effective formatting, list definitions that produce the document's own labels, footnotes, endnotes, comments, headers, footers, fields, bookmarks and media. Everything after reading (text, Markdown, HTML, JSON, layout, rendering, DOCX writing) works on that model, so it behaves the same for both formats. The format is detected from the leading bytes, never from the file name.

Leniency

Real-world files are damaged: truncated downloads, archivers that write a bad central directory, converters that break FAT chains or leave dangling relationships. docboss reads them anyway:

  • A ZIP with a missing or broken central directory is read from its local headers; a damaged deflate stream keeps what inflated before the damage.
  • A compound file with a looping or truncated sector chain is followed as far as it goes.
  • XML that is not well formed still yields balanced elements.

Leniency never hides what it cost. Every approximated or dropped item is a Diagnostic on the document: docboss diagnostics lists them, and the libraries expose them as a value. An empty list means the reader took the file as written.

Scope

docboss reads, lays out, renders and writes word-processing documents. It does not edit a document in place and does not run macros. The limitations page lists what is missing, and the conformance ledger records the status of every clause of the standards it reads.

Installation

Python

pip install docboss

Wheels are abi3 builds for CPython 3.12 and later, so one wheel covers every later Python version. No Rust toolchain is needed to install one.

Command-line tool

cargo install docboss-cli

This builds the docboss binary from crates.io with a stable Rust toolchain. From a checkout, make install does the same for the working tree.

Rust crates

Add the crates you need:

cargo add docboss-core docboss-output docboss-layout docboss-render docboss-write
cargo add docboss-aio --features http   # async and remote reads

docboss-core re-exports the document model, so most programs start from docboss_core::open.

Fonts for rendering

Rendering uses the fonts installed on the machine: the macOS, Linux and Windows font directories, LibreOffice's bundled fonts, and any directory named in DOCBOSS_FONT_PATH (:-separated). Fonts embedded in a DOCX are used first. When a document names a font that is not installed, a metric-compatible substitute is used where one exists (Carlito for Calibri, Caladea for Cambria, Liberation Sans or Arimo for Arial and Helvetica, Liberation Serif or Tinos for Times New Roman, Liberation Mono or Cousine for Courier New), so line breaks and page counts stay close to Word's. docboss fonts report.docx shows what each font resolved to.

Coding agents

docboss skill install writes a skill document into ./.claude/skills/docboss, or into ~/.claude/skills/docboss with --global, so coding agents know the CLI and the Python API. docboss skill print writes it to stdout.

Quickstart

One taste of each surface. report.docx and legacy.doc stand in for any Word documents of yours; Installation covers getting the binary, the wheel and the crates.

CLI

docboss info   report.docx                   # format, metadata, page setup, page count, counts
docboss text   report.docx                   # plain text with list labels
docboss text   legacy.doc                    # Word 97-2003 files read the same way
docboss md     report.docx                   # GitHub-flavored Markdown
docboss render report.docx --page 1 -o page.png --scale 2
docboss images report.docx -o images         # the document's pictures, as stored
docboss convert legacy.doc -o legacy.docx    # DOC to a fresh DOCX
docboss create md notes.md -o notes.docx     # Markdown composed into a DOCX

render prints each file it wrote; images writes into the directory it is given and creates it when missing. Page numbers are 1-based on the command line.

Python

from pathlib import Path

import docboss

doc = docboss.Document("report.docx")
print(doc.format, doc.page_count(), "pages")

text = doc.extract_text()           # one line per paragraph, list labels included
markdown = doc.extract_markdown()   # headings, lists, tables, footnotes, links

Path("page.png").write_bytes(doc.render(0, scale=2.0))

for image in doc.images():
    print(image.name, image.content_type, len(image.data))

legacy = docboss.Document("legacy.doc")
Path("legacy.docx").write_bytes(legacy.to_docx())

docx = docboss.md.to_docx(Path("notes.md").read_text())

Document also opens from memory (Document(data=raw_bytes)), pages index 0-based with negative indexes from the end, and render returns PNG bytes unless format= says otherwise.

Rust

With docboss-core, docboss-output, docboss-layout and docboss-render added:

use docboss_output::{to_markdown, MarkdownOptions};

fn main() -> Result<(), Box<dyn std::error::Error>> {
    let doc = docboss_core::open("report.docx")?;
    println!("{}", to_markdown(&doc, &MarkdownOptions::default()));

    let layout = docboss_layout::layout_document(&doc);
    docboss_render::render_page(&layout, 0, 2.0)?.save("page.png")?;
    Ok(())
}

Extracting text

docboss text report.docx
docboss text report.docx --headers-footers --comments
docboss text legacy.doc --no-labels -o legacy.txt

Plain text has one line per paragraph. List paragraphs start with the label the document's numbering gives them (1., a), •), computed from the list definitions, their start values and overrides, the way Word numbers them. Table rows become one line each with tab-separated cells. Footnote and endnote references become [1] and [i], and the notes' text follows the main text; --no-notes leaves both out. --headers-footers writes each section's headers before it and its footers after it, and --comments marks comment anchors [c1] and appends the comments with their authors.

What is left out, as ECMA-376 and [MS-DOC] define it: hidden text (vanish), deleted revisions (inserted ones are kept), and field instructions; a field contributes its cached result, so a table of contents or a PAGE field reads as the file shows it. Text boxes are part of the text, written after the paragraph that anchors them.

import docboss

doc = docboss.Document("report.docx")
text = doc.extract_text(headers_footers=True, notes=True, comments=False, list_labels=True)

Many files at once

import docboss

texts = docboss.extract_texts(["report.docx", "legacy.doc"], threads=8)
lenient = docboss.extract_texts(["report.docx", "not-a-document.txt"], strict=False)
print(lenient[1])   # None: that file failed, the others still came back

extract_texts reads every file on a Rust thread pool in one call, without the GIL, and returns the texts in input order. With strict=True (the default) the first failure raises DocbossError; with strict=False a failed file gives None. It is the fastest way to feed a pipeline.

Blocks

For retrieval pipelines, the block view keeps each paragraph's role:

docboss json report.docx --blocks
import docboss

for block in docboss.Document("report.docx").blocks():
    print(block.kind, block.heading_level, block.list_label, block.text)

kind is paragraph, heading, list_item or table; headings come from outline levels and heading styles, list items carry their level and label. Empty paragraphs are left out.

Markdown, HTML and JSON

Markdown

docboss md report.docx
docboss md report.docx --images images -o report.md   # export images and link them
docboss md report.docx --embed-images                 # data: URIs instead
docboss md report.docx --title --page-breaks

The Markdown is GitHub-flavored:

  • Headings come from the paragraph's outline level or a Heading N or Title style.
  • Bold, italic and strikethrough spans are merged across adjacent runs, with whitespace kept outside the markers. A paragraph set entirely in a monospace font, or in a code style, becomes a fenced code block.
  • Lists nest by numbering level; bullets become -, numbered items 1..
  • Tables become pipe tables; merged cells, nested tables and multi-paragraph cells are flattened with <br>.
  • Footnotes and endnotes become [^1] references with definitions at the end; hyperlinks and HYPERLINK fields become links.
  • Images become ![description](name); --images DIR writes the files and links them there.
import docboss

doc = docboss.Document("report.docx")
markdown = doc.extract_markdown(images="reference", image_prefix="images/")
inline = doc.extract_markdown(images="embed")
bare = doc.extract_markdown(images="omit", title=True, page_breaks=True)

HTML

docboss html report.docx --standalone -o report.html
docboss html report.docx --images images -o fragment.html

HTML output is semantic: h1 to h6, p, strong, em, u, s, sup, sub, ul and ol with start attributes, tables with colspan and rowspan from merged cells, links, images and a footnotes section. Without --standalone it is a body fragment. Images are embedded as data: URIs unless --images exports them.

import docboss

html = docboss.Document("report.docx").extract_html(standalone=True)

JSON

docboss json report.docx            # the whole document model
docboss json report.docx --blocks   # one object per block
docboss q report.docx '.sections | length'
docboss q report.docx --blocks -r '.[] | select(.kind == "heading") | .text'

docboss q runs a jq program (through jaq) over the same JSON, so the model can be queried without writing code. In Python, Document.to_json(pretty=True) returns the model as a string.

Rendering pages

docboss render report.docx --page 1 -o page.png            # one page, 72 dpi
docboss render report.docx --scale 2 -o 'page-%d.png'      # every page at 144 dpi
docboss render report.docx --page 1 -o page.jpg --jpeg-quality 85
docboss render legacy.doc -o 'legacy-%d.ppm'

The -o extension picks the format: .png, .ppm, .bmp or .jpg/.jpeg. %d in the path is replaced by the page number; without --page every page is rendered, laid out once and painted on all cores. --scale is pixels per point, so 1.0 is 72 dpi and 2.0 is 144 dpi.

What layout does

docboss lays a document out the way Word does rather than the way a browser would:

  • Paragraph and run properties are resolved through document defaults, the style chain, table styles, list levels and direct formatting.
  • Lines break at Unicode line-break opportunities with soft hyphens honored, and are aligned or justified; line spacing follows the paragraph's rule (auto, exact, at least) with Word's extra leading on single spacing.
  • Tab stops, leaders and default tabs; list labels with their hanging indents.
  • Keep with next, keep lines together, widow and orphan control, page breaks before.
  • Tables: grid widths, merged cells in both directions, cell margins, borders and shading, rows split across pages, header rows repeated on each page.
  • Sections with their own page size, margins and columns; headers and footers for first, even and default pages, with PAGE and NUMPAGES fields in the section's number format.
  • Footnotes at the bottom of the page they are referenced on; inline and floating images.

Fonts come from the machine and from the document; see Installation for where docboss looks and which substitutes it uses. docboss fonts report.docx prints each font the document names and the face it resolved to.

Python

from pathlib import Path

import docboss

doc = docboss.Document("report.docx")
print(doc.page_count(), "pages")
Path("first.png").write_bytes(doc.render(0, scale=2.0))
Path("last.jpg").write_bytes(doc.render(-1, format="jpeg", jpeg_quality=85))
for index, png in enumerate(doc.render_pages(scale=1.5)):
    Path(f"page-{index + 1}.png").write_bytes(png)

render_pages renders every page (or the indexes given in pages=) in parallel and returns the encoded images in page order. Layout is computed once per document and cached, so rendering pages one by one costs no second layout.

Rust

use docboss_render::Format;

fn main() -> Result<(), Box<dyn std::error::Error>> {
    let doc = docboss_core::open("report.docx")?;
    let layout = docboss_layout::layout_document(&doc);
    for (index, page) in docboss_render::render_pages(&layout, 2.0).into_iter().enumerate() {
        std::fs::write(format!("page-{}.png", index + 1), page?.encode(Format::Png)?)?;
    }
    Ok(())
}

docboss_layout::layout takes an explicit FontDatabase when several documents should share one; layout_document builds one for the document, including its embedded fonts. Each laid-out page holds positioned glyph runs, rectangles, lines and images in points, so a program can inspect geometry without rasterizing.

What is not drawn

Text boxes, shapes with their preset and custom geometry, groups, canvases, gradient fills, SmartArt (from its saved drawing), charts (from their cached values), Office Math, WMF and EMF pictures and page borders are drawn, and body text wraps around floating images, text frames and floating tables (square, tight, through and top and bottom); text in table cells, text frames, headers and footers does not wrap around the floats there. Picture and pattern fills and shape effects are not drawn, 3-D, radar, stock, surface, bubble and bar-of-pie charts show an empty frame, and TIFF pictures draw a placeholder rectangle; docboss diagnostics report.docx --layout reports them and everything else layout approximated.

Extracting images

docboss images report.docx -o images
docboss images legacy.doc -o images

images writes every picture the document carries at its stored size and in its stored format (PNG, JPEG, GIF, BMP, EMF, WMF, TIFF), named after its part (image1.png). DOC pictures come from the Data stream and the OfficeArt BLIP store; DIB pictures are written as BMP, and identical DOC pictures are stored once.

from pathlib import Path

import docboss

for image in docboss.Document("report.docx").images():
    Path(image.file_name).write_bytes(image.data)
    print(image.name, image.content_type)

name is the part name inside the package (word/media/image1.png), file_name its last segment, and content_type is detected from the bytes. The Markdown and HTML writers reference or embed the same images (see Markdown, HTML and JSON).

Writing DOCX

docboss writes WordprocessingML packages from its document model. Output is deterministic: the same input produces identical bytes, ZIP entries carry a fixed timestamp, and dates appear only when the metadata states them.

Converting

docboss convert legacy.doc -o legacy.docx      # DOC to DOCX
docboss convert report.docx -o fresh.docx      # a fresh package from the model
docboss convert legacy.doc -o legacy.md        # or .html, .txt, .json by extension
import docboss

docboss.Document("legacy.doc").save_docx("legacy.docx")
data = docboss.Document("report.docx").to_docx()

A converted file carries what the model holds: text, styles, lists, tables, sections with headers and footers, notes, comments, fields, bookmarks, revisions and images. Embedded fonts and the theme part are not written.

Markdown to DOCX

docboss create md notes.md -o notes.docx --size a4 --title "Notes"
import docboss

docx = docboss.md.to_docx("# Notes\n\n- one\n- two\n\n| a | b |\n|---|---|\n| 1 | 2 |\n")

CommonMark and GFM map onto Word's built-in vocabulary: headings to Heading1 through Heading6, emphasis, strong and strikethrough to run properties, inline code and code blocks to monospace styles, links to hyperlinks, ordered, bullet, nested and task lists to numbering definitions, tables to tables with a header row, block quotes to the Quote style, thematic breaks to a bottom border, footnotes to footnotes. Relative image paths are read from the Markdown file's directory on the CLI, and from images_dir= in Python; without it an image becomes its alt text.

Composing from Rust

use docboss_write::{DocumentBuilder, ListKind, Para, TableBuilder};

let mut doc = DocumentBuilder::new();
doc.title("Q3 Report").heading(1, "Summary");
doc.paragraph(Para::new().text("Revenue grew ").bold("12%").text("."));
doc.items(ListKind::Bullet, &["North", "South"]);
let width = doc.text_width();
doc.block(TableBuilder::new(2, width).header(&["Region", "Growth"]).row(&["North", "14%"]));
let bytes = doc.to_bytes()?;
assert!(bytes.starts_with(b"PK"));
Ok::<(), docboss_write::Error>(())

DocumentBuilder covers metadata, page size and margins, styles, headings, paragraphs, lists, tables, images, footnotes, headers, footers and sections; docboss_write::to_bytes and save serialize any docboss_model::Document, and docboss_write::markdown::to_docx is the Markdown path.

Encrypted documents

Every read command takes --password, and Document takes password=:

docboss text locked.docx --password secret
docboss convert locked.docx --password secret -o unlocked.docx
import docboss

doc = docboss.Document("locked.docx", password="secret")
print(doc.extract_text())

What opens:

  • DOCX protected with a password to open is an OLE compound file holding EncryptionInfo and EncryptedPackage streams ([MS-OFFCRYPTO]). docboss decrypts Agile encryption (AES-128 or AES-256 in CBC mode, SHA-1 or SHA-512 key derivation with the spin count, the data-integrity HMAC checked) and Standard encryption (AES-128 in ECB mode, SHA-1), then reads the package like any other. Word 2007 to 2013 and LibreOffice files open.
  • DOC with RC4 or RC4 CryptoAPI encryption ([MS-DOC] with the [MS-OFFCRYPTO] key derivations), or with XOR obfuscation (the password verifier and XOR array of [MS-OFFCRYPTO] method 2; the password is tried in the document's code page and by the low byte of each character, as the specification asks).

A wrong password is an error that says so; a tampered Agile package fails its integrity check. Password-protected Word 6 and Word 95 files are refused with an error.

convert writes the decrypted document as a plain, unencrypted DOCX; there is no way to write an encrypted one yet.

Remote documents over HTTP

Every read command accepts an http(s):// URL:

docboss text https://example.com/report.docx
docboss info https://example.com/legacy.doc

The file is not downloaded whole. For a DOCX, docboss fetches the end of the file to find the ZIP central directory, then only the entries the reader needs: content types, relationships, document.xml, styles, numbering, notes and comments. Images are fetched only when a command needs them. For a DOC, it fetches the compound-file header, the FAT and directory sectors, and then only the sectors of the Word streams. Requests are coalesced and cached, so no byte is fetched twice; a server that ignores Range costs one full download. On a terminal, a line of coverage shows which parts of the file were fetched.

On Apache POI's saut_page.docx (2.96 MB, mostly images), extracting the text fetched 17.9 KB in 3 requests; a DOC reads its Data stream too, so it saves less.

Rust

docboss-aio with the http feature:

use docboss_aio::{AsyncDocument, ReadOptions};
use docboss_output::{to_text, TextOptions};

async fn run() -> docboss_aio::Result<()> {
let remote = AsyncDocument::open_url("https://example.com/report.docx").await?;
let doc = remote.read(&ReadOptions::default()).await?;
println!("{}", to_text(&doc, &TextOptions::default()));
println!("{} of {} bytes in {} requests", remote.bytes_fetched(), remote.len(), remote.requests().len());
Ok(()) }

ReadOptions { media: true, .. } fetches images too; otherwise AsyncDocument::load_media fetches them later. AsyncDocument::open and from_bytes give the same interface over local files and memory, and from_backend over any byte source that implements Backend.

Python

import asyncio

import docboss

async def main() -> None:
    doc = await docboss.AsyncDocument.open_url("https://example.com/report.docx")
    print(doc.format, doc.part_names()[:3])
    text = await doc.extract_text()
    markdown = await doc.extract_markdown(images="omit")
    styles = await doc.part("word/styles.xml")
    print(doc.bytes_fetched, "bytes in", len(doc.requests), "requests")

asyncio.run(main())

AsyncDocument.open(path), from_bytes(data) and open_url(url) are coroutines and take password=. The extraction methods mirror Document's and are awaitable: extract_text, extract_markdown, extract_html, to_json, blocks, images, and part(name) for one ZIP entry or stream. bytes_fetched and requests report what was read so far, and await doc.document() returns a synchronous Document for rendering, DOCX writing and the rest of its API; images are fetched when a call needs them.

Exploring document internals

Containers

docboss parts report.docx                        # ZIP entries with stored and unpacked sizes
docboss parts legacy.doc                         # compound-file streams
docboss xml report.docx word/styles.xml          # one XML part, indented (--raw as stored)
docboss hex legacy.doc WordDocument --length 64  # hexdump of a part
docboss hex legacy.doc SummaryInformation        # control characters in names are optional

Compound-file stream names that start with a control character print as \x05SummaryInformation and can be addressed that way, without the prefix, or case-insensitively.

The model

docboss json report.docx | head
docboss q report.docx '.styles.styles | map(.id)'
docboss fonts report.docx
docboss diagnostics report.docx
docboss diagnostics report.docx --layout

diagnostics lists everything the reader approximated or dropped, with the part or stream it came from; --layout adds what layout approximated, such as fonts that fell back or pictures drawn as placeholders.

The terminal explorer

docboss tui report.docx

The explorer has a tree of the document (sections, paragraphs, tables and runs, plus headers and footers, notes, comments, styles, numbering, media, fonts, the container and diagnostics), an inspector with each node's direct and resolved properties and its style chain, an XML view of the selected part, a Markdown view, a page preview drawn with half-block characters, and a hex pane.

KeysAction
j k h l, arrowsmove, collapse, expand
Entertoggle a node, or open a part's XML
g G PgUp PgDnjump
Tabcycle focus
i x m pinspector, XML, Markdown, page preview
[ ]previous and next page
/ n Nsearch the whole document, next and previous match
ycopy menu: text, inspector, a matching docboss command, hexdump
< >resize the tree
?help
q, Esc, Ctrl-Cquit

It needs an interactive terminal and exits with an error otherwise.

docboss CLI reference

Generated from docboss --help and each command's --help. Every command that reads a document detects DOCX or DOC from the bytes and accepts --password; where the help says so, it also takes an http(s):// URL, read with range requests. Errors go to stderr prefixed docboss:; document and I/O errors exit 1, usage errors and invalid jq programs exit 2.

DOCX and DOC parsing, extraction, rendering and conversion

Usage: docboss <COMMAND>

Commands:
  info         Format, metadata, page setup, page count and content counts
  text         Extract plain text
  md           Convert to GitHub-flavored Markdown
  html         Convert to semantic HTML; images are embedded unless --images is given
  json         Dump the document model as JSON
  q            Run a jq program over the JSON form of the document
  render       Lay out and render pages to PNG, PPM, BMP or JPEG (picked by the -o extension)
  images       Export the document's images at their stored size and format
  parts        List the ZIP entries or compound file streams of the container
  hex          Hexdump the whole file or one part of it
  xml          Print an XML part of a DOCX, indented
  convert      Convert to a fresh DOCX, or to .md, .html, .txt or .json, by the -o extension
  create       Create a new DOCX
  fonts        The fonts the document names and the faces they resolve to here
  diagnostics  Everything the lenient reader approximated or dropped
  skill        Install or print the skill document for coding agents
  tui          Explore the document interactively in the terminal
  help         Print this message or the help of the given subcommand(s)

Options:
  -h, --help     Print help
  -V, --version  Print version

docboss info

Format, metadata, page setup, page count and content counts

Usage: docboss info [OPTIONS] <FILE>

Arguments:
  <FILE>  Path or http(s):// URL of the .docx or .doc file; the format is detected from its bytes. A URL is read with range requests

Options:
      --password <PASSWORD>  Password for an encrypted DOC or DOCX
  -h, --help                 Print help

docboss text

Extract plain text

Usage: docboss text [OPTIONS] <FILE>

Arguments:
  <FILE>  Path or http(s):// URL of the .docx or .doc file; the format is detected from its bytes. A URL is read with range requests

Options:
      --password <PASSWORD>  Password for an encrypted DOC or DOCX
      --headers-footers      Include each section's headers and footers
      --no-notes             Leave out footnotes and endnotes
      --comments             Include comments
      --no-labels            Leave list labels (1., a), bullets) out
  -o, --out <OUT>            Write to a file instead of stdout
  -h, --help                 Print help

docboss md

Convert to GitHub-flavored Markdown

Usage: docboss md [OPTIONS] <FILE>

Arguments:
  <FILE>  Path or http(s):// URL of the .docx or .doc file; the format is detected from its bytes. A URL is read with range requests

Options:
      --password <PASSWORD>  Password for an encrypted DOC or DOCX
      --headers-footers      Include each section's headers and footers
      --no-notes             Leave out footnotes and endnotes
      --comments             Include comments
      --images <IMAGES>      Export images into this directory and link them from the Markdown
      --embed-images         Embed images as data: URIs
      --title                Start with the metadata title as a level-one heading
      --page-breaks          Write page breaks as thematic breaks (---)
  -o, --out <OUT>            Write to a file instead of stdout
  -h, --help                 Print help

docboss html

Convert to semantic HTML; images are embedded unless --images is given

Usage: docboss html [OPTIONS] <FILE>

Arguments:
  <FILE>  Path or http(s):// URL of the .docx or .doc file; the format is detected from its bytes. A URL is read with range requests

Options:
      --password <PASSWORD>  Password for an encrypted DOC or DOCX
      --headers-footers      Include each section's headers and footers
      --no-notes             Leave out footnotes and endnotes
      --comments             Include comments
      --standalone           Write a whole HTML document instead of a body fragment
      --images <IMAGES>      Export images into this directory and link them instead of embedding
  -o, --out <OUT>            Write to a file instead of stdout
  -h, --help                 Print help

docboss json

Dump the document model as JSON

Usage: docboss json [OPTIONS] <FILE>

Arguments:
  <FILE>  Path or http(s):// URL of the .docx or .doc file; the format is detected from its bytes. A URL is read with range requests

Options:
      --password <PASSWORD>  Password for an encrypted DOC or DOCX
      --blocks               The compact per-block view: type, style, heading level, list label, text
      --compact              One line instead of indented output
  -o, --out <OUT>            Write to a file instead of stdout
  -h, --help                 Print help

docboss q

Run a jq program over the JSON form of the document

Usage: docboss q [OPTIONS] <FILE> <PROGRAM>

Arguments:
  <FILE>     Path or http(s):// URL of the .docx or .doc file; the format is detected from its bytes. A URL is read with range requests
  <PROGRAM>  The jq program, e.g. '.metadata.title' or '.sections[].blocks | length'

Options:
      --password <PASSWORD>  Password for an encrypted DOC or DOCX
  -r, --raw                  Print strings without quotes
      --blocks               Query the compact per-block view instead of the full model
  -h, --help                 Print help

docboss render

Lay out and render pages to PNG, PPM, BMP or JPEG (picked by the -o extension)

Usage: docboss render [OPTIONS] <FILE>

Arguments:
  <FILE>  Path or http(s):// URL of the .docx or .doc file; the format is detected from its bytes. A URL is read with range requests

Options:
      --password <PASSWORD>          Password for an encrypted DOC or DOCX
      --page <PAGE>                  Page number (1-based); every page when omitted
      --scale <SCALE>                Pixels per point: 1.0 is 72 dpi [default: 1]
  -o, --out <OUT>                    Output path; %d is replaced by the page number [default: page-%d.png]
      --jpeg-quality <JPEG_QUALITY>  JPEG quality, 1 to 100
  -h, --help                         Print help

docboss images

Export the document's images at their stored size and format

Usage: docboss images [OPTIONS] <FILE>

Arguments:
  <FILE>  Path or http(s):// URL of the .docx or .doc file; the format is detected from its bytes. A URL is read with range requests

Options:
      --password <PASSWORD>  Password for an encrypted DOC or DOCX
  -o, --out <OUT>            Output directory [default: .]
  -h, --help                 Print help

docboss parts

List the ZIP entries or compound file streams of the container

Usage: docboss parts <FILE>

Arguments:
  <FILE>  Path to the .docx or .doc file

Options:
  -h, --help  Print help

docboss hex

Hexdump the whole file or one part of it

Usage: docboss hex [OPTIONS] <FILE> [PART]

Arguments:
  <FILE>  Path to the .docx or .doc file
  [PART]  A ZIP entry (word/document.xml) or compound file stream (1Table)

Options:
      --offset <OFFSET>  First byte to dump [default: 0]
      --length <LENGTH>  Number of bytes to dump; to the end when omitted
      --width <WIDTH>    Bytes per row [default: 16]
  -h, --help             Print help

docboss xml

Print an XML part of a DOCX, indented

Usage: docboss xml [OPTIONS] <FILE> [PART]

Arguments:
  <FILE>  Path to the .docx file
  [PART]  The part, e.g. word/document.xml [default: word/document.xml]

Options:
      --raw   Print the part as stored, without re-indenting
  -h, --help  Print help

docboss convert

Convert to a fresh DOCX, or to .md, .html, .txt or .json, by the -o extension

Usage: docboss convert [OPTIONS] --out <OUT> <FILE>

Arguments:
  <FILE>  Path or http(s):// URL of the .docx or .doc file; the format is detected from its bytes. A URL is read with range requests

Options:
      --password <PASSWORD>  Password for an encrypted DOC or DOCX
  -o, --out <OUT>            Output path
  -h, --help                 Print help

docboss create md

Compose CommonMark + GFM Markdown into a DOCX

Usage: docboss create md [OPTIONS] --out <OUT> <FILE>

Arguments:
  <FILE>  The Markdown file; relative image paths resolve against its directory

Options:
  -o, --out <OUT>      Output DOCX path
      --size <SIZE>    Page size [default: letter] [possible values: letter, a4]
      --title <TITLE>  Document title; the first heading's text by default
  -h, --help           Print help

docboss fonts

The fonts the document names and the faces they resolve to here

Usage: docboss fonts [OPTIONS] <FILE>

Arguments:
  <FILE>  Path or http(s):// URL of the .docx or .doc file; the format is detected from its bytes. A URL is read with range requests

Options:
      --password <PASSWORD>  Password for an encrypted DOC or DOCX
  -h, --help                 Print help

docboss diagnostics

Everything the lenient reader approximated or dropped

Usage: docboss diagnostics [OPTIONS] <FILE>

Arguments:
  <FILE>  Path or http(s):// URL of the .docx or .doc file; the format is detected from its bytes. A URL is read with range requests

Options:
      --password <PASSWORD>  Password for an encrypted DOC or DOCX
      --layout               Also lay the document out and report what layout approximated
  -h, --help                 Print help

docboss tui

Explore the document interactively in the terminal

Usage: docboss tui [OPTIONS] <FILE>

Arguments:
  <FILE>  Path or http(s):// URL of the .docx or .doc file; the format is detected from its bytes. A URL is read with range requests

Options:
      --password <PASSWORD>  Password for an encrypted DOC or DOCX
  -h, --help                 Print help

docboss skill install

Install the skill for coding agents: into ./.claude/skills/docboss (this project), or with --global into ~/.claude/skills/docboss

Usage: docboss skill install [OPTIONS]

Options:
  -g, --global  Install into ~/.claude/skills instead of ./.claude/skills
  -h, --help    Print help

docboss skill print

Print the skill document to stdout

Usage: docboss skill print

Options:
  -h, --help  Print help

Python API reference

import docboss exposes the classes and functions below; docboss.md holds the Markdown-to-DOCX function. Type stubs ship with the package (_docboss.pyi, py.typed).

docboss.Document

Document(path=None, *, data=None, password=None)

Opens a DOCX or DOC file from a path, or from data (bytes, bytearray or memoryview); exactly one of the two must be given, otherwise TypeError. The format is detected from the bytes. password opens an encrypted DOCX or DOC. Bad input, a missing or wrong password, and unsupported formats raise DocbossError. Documents are immutable and can be used from any thread; heavy calls release the GIL.

MemberReturns
format"docx" or "doc"
metadataMetadata: title, subject, creator, keywords, description, last_modified_by, revision, created, modified, category, application, company, pages, words, characters (each None when absent)
diagnosticslist[Diagnostic]: severity ("approximated" or "dropped"), location, message
fontslist[FontInfo]: name, alt_name, family, pitch, embedded
styleslist[StyleInfo]: id, name, kind ("paragraph", "character", "table", "numbering"), based_on, is_default
extract_text(*, list_labels=True, headers_footers=False, notes=True, comments=False)str
extract_markdown(*, title=False, page_breaks=False, images="reference", image_prefix="", headers_footers=False, notes=True, comments=False)str
extract_html(*, standalone=False, images="embed", image_prefix="", headers_footers=False, notes=True, comments=False)str
to_json(*, pretty=False)the document model as a JSON string
blocks()list[Block]: kind ("paragraph", "heading", "list_item", "table"), section, style, heading_level, list_level, list_label, text
images()list[Image]: name, file_name, content_type, data
page_count()the number of pages after layout
render(page=0, *, scale=1.0, format="png", jpeg_quality=90)encoded image bytes; page is 0-based, negative counts from the end; format is "png", "ppm", "bmp" or "jpeg"
render_pages(pages=None, *, scale=1.0, format="png", jpeg_quality=90)list[bytes] in page order, rendered in parallel; None renders every page
to_docx()a fresh DOCX as bytes
save_docx(path)writes that DOCX

images in the Markdown and HTML methods is "reference" (link to image_prefix plus the image's file name), "embed" (data: URIs) or "omit".

Layout runs once per document and is cached; documents without embedded fonts share one font database for the process.

docboss.AsyncDocument

The asynchronous reader, over files, bytes or http(s):// URLs, fetching only the byte ranges each call needs.

Member
await AsyncDocument.open(path, *, password=None)a local file
await AsyncDocument.from_bytes(data, *, password=None)a buffer
await AsyncDocument.open_url(url, *, password=None)an http(s) URL, read with range requests
format"docx", "doc" or "unknown"
bytes_fetched, requestsbytes read so far, and each (offset, length) request
part_names()the ZIP entries or compound-file streams
await part(name)one entry or stream as bytes
await extract_text(...), await extract_markdown(...), await extract_html(...)as on Document
await to_json(*, pretty=False), await blocks(), await images()as on Document
await document()the synchronous Document, for rendering and DOCX writing

Functions

Function
docboss.detect(data)"docx", "doc", "encrypted_docx", "rtf" or "unknown" from the bytes
docboss.extract_texts(paths, threads=None, strict=True)the text of every file, read on a Rust thread pool in one call; with strict=False a failed file gives None instead of raising
docboss.md.to_docx(markdown, images_dir=None, title=None)CommonMark + GFM composed into DOCX bytes; relative image paths are read under images_dir

Exceptions

docboss.DocbossError (a subclass of Exception) is raised for every document, password and I/O error.

Rust crate reference

The crates split docboss by concern. Most programs need docboss-core to open a document and one of the consumers after it.

CrateEntry points
docboss-coreopen(path), read(bytes), open_with/read_with(&Options { password }), detect(bytes) -> Format; re-exports the whole model
docboss-modelDocument and its parts; Styles::resolve_paragraph and resolve_run for effective formatting; Numbering::counter() for list labels; plain_text
docboss-outputto_text/write_text with TextOptions, to_markdown/write_markdown with MarkdownOptions, to_html/write_html with HtmlOptions, blocks_view, and with the serde feature to_json and blocks_json
docboss-layoutlayout_document(&Document) -> Layout, layout(&Document, &Arc<FontDatabase>), layout_with_options, fonts_for; Layout { pages, fonts, media, diagnostics } with positioned items in points
docboss-renderrender_page(&Layout, index, scale) -> Pixmap, render_pages (all cores), Renderer; Pixmap::encode(Format) and save; Format::{Png, Ppm, Bmp, Jpeg { quality }}
docboss-writeto_bytes(&Document), save, DocumentBuilder, Para, TableBuilder, markdown::to_docx
docboss-aioAsyncDocument::{open, from_bytes, open_url, open_url_with, from_backend}, read(&ReadOptions), load_media, part, part_names, bytes_fetched, requests; the http feature adds HttpBackend
docboss-docxread(bytes), read_with(bytes, Options): the WordprocessingML reader
docboss-docread(bytes), read_with_password, is_doc: the Word binary reader
docboss-zipArchive (reader), write (deterministic writer), crc32
docboss-xmlthe pull tokenizer used by the DOCX reader
docboss-cfbCompoundFile and property sets
docboss-cryptdecrypt(bytes, password) for encrypted DOCX
docboss-fontFont, FontDatabase with system discovery and substitution
docboss-metafileplay(bytes) -> Picture for WMF and EMF, text(&Picture), bitmap::{decode, decode_bmp, encode_bmp}
docboss-mtefread(stream) -> Option<Math>: the equation of an Equation Editor 3 object's Equation Native stream

Errors are thiserror enums per crate; docboss_core::Error wraps the readers' errors and adds Encrypted and Unsupported. No library function panics on input bytes: damaged input yields an error or a document with diagnostics.

use docboss_output::{to_html, HtmlOptions};

fn main() -> Result<(), Box<dyn std::error::Error>> {
    let options = docboss_core::Options { password: Some("secret".into()) };
    let doc = docboss_core::open_with("locked.docx", &options)?;
    for diagnostic in &doc.diagnostics {
        eprintln!("{:?} {}: {}", diagnostic.severity, diagnostic.location, diagnostic.message);
    }
    let html = to_html(&doc, &HtmlOptions { standalone: true, ..HtmlOptions::default() });
    std::fs::write("locked.html", html)?;
    Ok(())
}

Limitations

The reader reports what it could not read: docboss diagnostics lists every approximated or dropped item. The conformance ledger has a row for every clause of the standards docboss reads, with a note on what is missing. The largest gaps:

Reading

  • DOCX: w:altChunk content is skipped and reported. ActiveX controls and custom XML data binding are not read as content. Ruby text is ignored. Only the compatibilityMode compatibility setting is read.
  • DOC: password-protected Word 6 and 95 files are refused. Word 6 and 95 files are read with their formatting, sections, headers, footers, tables, pictures and numbered paragraphs (ANLD), but their comments, endnotes and drawing objects, whose Word 6 records differ from Word 97's, and the equations of their Equation Editor objects are left out and reported; Word 2 files are read as text only. A Word 97 compound file whose directory is lost gives its text only (a Word 6 or 95 one is read in full). Freeforms and WordArt shapes are reported as dropped.
  • DOCX and DOC: Equation Editor 3 objects keep their preview picture and give their equation as text and LaTeX; MathType's MTEF 4 and 5 are not read, and the object is reported.
  • RTF is detected and refused. Flat OPC XML is not read: it is refused as an unknown format.

Layout and rendering

  • Shaping covers Arabic, Hebrew and combining marks; Indic, Thai and other scripts that reorder or stack glyphs are not shaped, cursive attachment (GPOS type 3) is not applied, and Latin text gets no discretionary ligatures. Right-to-left sections (w:bidi in w:sectPr: column order, gutter side) and vertical sections (tbRl) lay out left to right.
  • No column balancing. Text wraps around floating images, text frames and floating tables in the body. Text in a table cell or text frame does not wrap around a float anchored there (the row grows to hold the float, which is drawn over the text); floats in headers and footers do not push body text aside; a table beside a float is not narrowed; text wraps around a turned drawing as if it were not turned. docboss diagnostics --layout reports each of these.
  • Shapes draw solid and gradient fills; picture and pattern fills and effects (shadows, glow, 3-D) are not drawn. SmartArt without its saved drawing shows an empty frame; 3-D, radar, stock, surface, bubble and bar-of-pie charts show an empty frame too. Office Math stretches delimiters by scaling the glyph rather than with the font's variants.
  • Conditional formatting from table styles is not applied.
  • CFF2 fonts are refused; TIFF pictures draw a placeholder. WMF and EMF pictures are played (EMF+ records are skipped in favour of the EMF ones); their text is not extracted.
  • Tracked changes render as the final text, without revision marks.

Writing

  • Embedded fonts are not written (the font table lists names only), and no theme part is written.
  • Raw HTML in Markdown is dropped, except <br>.
  • Encrypted output is not supported.

Conformance

docboss keeps a ledger of the specifications it implements in ledger/Ledger/Catalogue/, one row per clause with the status docboss claims: implemented, incomplete, not implemented or out of scope. The specifications are ECMA-376 Parts 1 to 3 (5th edition), [MS-DOC], [MS-CFB], [MS-OLEPS], [MS-OSHARED], [MS-ODRAW], [MS-WMF], [MS-EMF] and PKWARE's APPNOTE.TXT; ledger/Ledger/Scope.lean names the clauses of each that must have a row.

The ledger is checked by Lean 4 on every push (make ledger-gate). Six theorems in ledger/Ledger/Gate.lean establish that every row sits in its own specification's file and names one of its chapters, that rows are unique, that every required clause has a row speaking to it, that every implemented row is cited by both implementation code and a test in the source tree, that every incomplete row is cited by implementation code and explains what is missing, that every other row explains itself, and that no citation names a clause its specification does not have. They are decided by Lean's compiled evaluator (native_decide), so they trust the Lean compiler as well as its kernel; the theorems of the reference implementations in ledger/Ledger/Reference/, whose vectors the Rust tests replay, are checked by the kernel alone. Citation counts below are the number of source comments naming the clause or a sub-clause of it, in implementation code and in tests.

This page is generated by make ledger-report. Edit the ledger, not the page.

SpecificationImplementedIncompleteNot implementedOut of scope
ECMA-376 Part 11307822074
ECMA-376 Part 2156340
ECMA-376 Part 34051
[MS-DOC]963133211
[MS-CFB]10012
[MS-OLEPS]95260
[MS-OSHARED]0130
[MS-ODRAW]0320
[MS-WMF]1800
[MS-EMF]21120
APPNOTE1367424

ECMA-376 Part 1: Fundamentals and Markup Language Reference (5th edition, 2016)

11 WordprocessingML

ClauseFeatureStatusCode citationsTest citationsNote
11.3Part Summaryincomplete119The main document, styles, numbering, settings, font table, header, footer, footnote, endnote and comment parts are read; the glossary document and web settings parts are not, and alternative format import parts are reported as dropped.
11.3.1Alternative Format Import Partnot implemented00Alternative format import parts (w:altChunk targets) are not imported; each is reported as dropped (see 17.17.2).
11.3.2Comments Partimplemented11The comments part is read into Document::comments (test structure.rs notes_and_comments).
11.3.3Document Settings Partimplemented11The settings part is read for the default tab stop and even/odd headers (test structure.rs columns_footers_and_even_odd_settings).
11.3.4Endnotes Partimplemented11The endnotes part is read into Document::endnotes (test structure.rs notes_and_comments).
11.3.5Font Table Partincomplete20The font table part is read with its embedded fonts (parts.rs fonts); no DOCX test checks the entries.
11.3.6Footer Partimplemented11Footer parts related to the main document are read and referenced by section properties (test structure.rs columns_footers_and_even_odd_settings).
11.3.7Footnotes Partimplemented11The footnotes part is read into Document::footnotes, separators skipped (test structure.rs notes_and_comments).
11.3.8Glossary Document Partout of scope00The glossary document holds building blocks, not document content; it is not read.
11.3.9Header Partimplemented11Header parts related to the main document are read and referenced by section properties (test structure.rs sections_split_at_paragraph_section_properties).
11.3.10Main Document Partimplemented11The main document part is found through the package's officeDocument relationship, falling back to word/document.xml with a diagnostic (lib.rs main_part, tests structure.rs part_names_compare_case_insensitively and bare_package_falls_back_to_the_default_part_name).
11.3.11Numbering Definitions Partimplemented11The numbering part is read into Document::numbering (test structure.rs numbering_definitions).
11.3.12Style Definitions Partimplemented11The styles part is read into Document::styles (test structure.rs styles_and_defaults).
11.3.13Web Settings Partout of scope00Web settings affect HTML saving only; the part is not read.

15 Shared

ClauseFeatureStatusCode citationsTest citationsNote
15.2Part Summaryincomplete42Image, font and file property parts are read, and embedded OLE objects for their Equation Editor equations; audio, video, other embedded objects and packages, custom XML, signatures, thumbnails and printer settings are not.
15.2.1Additional Characteristics Partnot implemented00Additional characteristics parts are not read.
15.2.2Audio Partnot implemented00Audio parts are not read.
15.2.3Bibliography Partnot implemented00Bibliography parts are not read; citations keep their field results.
15.2.4Content Partnot implemented00Content parts (w14 ink and similar) are not read.
15.2.5Custom XML Data Storage Partnot implemented00Custom XML data storage parts are not read; data-bound content controls keep their cached text.
15.2.6Custom XML Data Storage Properties Partnot implemented00Custom XML data storage properties parts are not read.
15.2.7Digital Signature Origin Partout of scope00Digital signatures are not read or verified; reading content does not depend on them.
15.2.8Digital Signature XML Signature Partout of scope00Digital signatures are not read or verified; reading content does not depend on them.
15.2.9Embedded Control Persistence Partout of scope00ActiveX control persistence is not read: controls are not document text.
15.2.10Embedded Object Partincomplete10An embedded OLE object with an Equation ProgID is read for the MTEF equation of its Equation Native stream (story.rs equation, tests fixtures.rs equation_editor_objects_give_their_equation, aio range.rs equations_read_without_media); other embedded objects are not read, and their preview image is, through w:object and v:imagedata.
15.2.11Embedded Package Partnot implemented00Embedded packages (such as spreadsheets) are not read; their preview image is.
15.2.12File Propertiesimplemented11Core and extended file properties are read into Document::metadata (parts.rs properties, test structure.rs document_properties).
15.2.13Font Partincomplete10Embedded font parts are loaded and deobfuscated through the font table's relationships (parts.rs fonts); no test builds a package with one.
15.2.14Image Partimplemented11Image parts referenced by drawings are loaded into Document::media with their MIME type sniffed from the bytes (lib.rs load_media, test structure.rs drawings_and_media).
15.2.15Printer Settings Partout of scope00Printer settings do not affect text or layout; the part is not read.
15.2.16Thumbnail Partnot implemented00The package thumbnail is not read.
15.2.17Video Partnot implemented00Video parts are not read.

17 WordprocessingML Reference Material

ClauseFeatureStatusCode citationsTest citationsNote
17.1Table of Contentsout of scope00Table of contents fields are read like any other field (see 17.16); the clause describes their use.
17.2Main Document Storyincomplete53The document and its body are read; the page background is not.
17.2.1background (Document Background)not implemented00w:background is not read; pages render on white.
17.2.2body (Document Body)implemented31The body's block content is read into sections split at paragraph section properties (story.rs body, test structure.rs sections_split_at_paragraph_section_properties).
17.2.3document (Document)implemented11The main part's w:document root is read and its body becomes the main story (lib.rs parse_story, test structure.rs paragraphs_runs_and_breaks).
17.3Paragraphs and Rich Formattingincomplete3835Paragraphs, runs and run content are read with most of their properties; the sub-clause rows say what is missing.
17.3.1Paragraphsincomplete1615Justification, indentation, spacing, keep and widow controls, page break before, contextual spacing, numbering, outline level, tabs, borders, shading, bidi and frame properties are read (props.rs paragraph_properties); text direction, hyphenation suppression and East Asian typography settings are not.
17.3.2Runincomplete1212Bold, italic, underline, strike, double strike, caps, small caps, hidden, fonts (theme fonts resolved), size, color, highlight, shading, vertical alignment, spacing, position, language, right-to-left and the complex script bold, italic, size and formatting flag (bCs, iCs, szCs, cs) are read (props.rs run_properties); emphasis marks, text effects, run borders, fit text and East Asian layout are not.
17.3.3Run Contentincomplete66Text, tabs, breaks, carriage returns, hyphens, symbols, field characters and codes, note and comment references and marks, DrawingML and VML pictures are read (story.rs run_content), diagrams from their saved drawing and data model text (story/diagram.rs, test structure.rs diagrams_draw_their_saved_drawing), charts from their cached values (story/chart.rs, test structure.rs charts_read_their_cached_values), and Office Math zones as math trees (story/math.rs, test structure.rs office_math_reads_into_trees); ruby is ignored, positional tabs read as plain tabs, and embedded object data other than Equation Editor equations is not read.
17.3.4Border Properties (CT_Border)implemented11A border's style, width, spacing and color are read; styles other than single, thick, double, dotted and dashed read as BorderStyle::Other (props.rs border, test structure.rs table_row_and_cell_properties).
17.3.5Shading Properties (CT_Shd)incomplete11The fill color is read, or the pattern color for a solid pattern; other patterns reduce to their fill (props.rs shading).
17.4Tablesincomplete5541Tables, grids and row and cell properties and floating table positions are read; conditional formatting, cell spacing, property exceptions, diagonal borders and row grid offsets are not.
17.4.1bidiVisual (Visually Right to Left Table)implemented22bidiVisual is read (props.rs table_properties, test structure.rs complex_script_runs_and_right_to_left_tables) and lays the cells out from the right with their left and right borders and margins swapped, the indent from the right margin and the alignment reversed (table.rs, test layout.rs visually_right_to_left_tables_start_at_the_right).
17.4.2bottom (Table Cell Bottom Margin Exception)not implemented00Cell margin exceptions live in tblPrEx, which is not read.
17.4.3bottom (Table Cell Bottom Border)implemented11A cell's bottom border is read (props.rs or story.rs, test structure.rs table_row_and_cell_properties).
17.4.4bottom (Table Bottom Border)incomplete10Read by the same code as the other border sides (props.rs borders); no test covers this side.
17.4.5bottom (Table Cell Bottom Margin Default)incomplete10Read by the same code as the other default cell margins (props.rs margins); no test covers this side.
17.4.6cantSplit (Table Row Cannot Break Across Pages)implemented11cantSplit is read into TableRowProperties::cant_split (props.rs or story.rs, test structure.rs table_row_and_cell_properties).
17.4.7cnfStyle (Table Row Conditional Formatting)not implemented00Conditional formatting (cnfStyle) is not read; table styles' conditional formats are not applied.
17.4.8cnfStyle (Table Cell Conditional Formatting)not implemented00Conditional formatting (cnfStyle) is not read; table styles' conditional formats are not applied.
17.4.9divId (Associated HTML div ID)not implemented00HTML div ids do not affect content; not read.
17.4.10end (Table Cell Trailing Margin Exception)not implemented00Cell margin exceptions live in tblPrEx, which is not read.
17.4.11end (Table Cell Trailing Margin Default)incomplete10Read by the same code as the other default cell margins (props.rs margins); no test covers this side.
17.4.12end (Table Cell Trailing Edge Border)incomplete10Read by the same code as the other border sides (props.rs borders); no test covers this side.
17.4.13end (Table Trailing Edge Border)incomplete10Read by the same code as the other border sides (props.rs borders); no test covers this side.
17.4.14gridAfter (Grid Columns After Last Cell)not implemented00gridAfter is not read; rows are laid out from their cells alone.
17.4.15gridBefore (Grid Columns Before First Cell)not implemented00gridBefore is not read; rows are laid out from their cells alone.
17.4.16gridCol (Grid Column Definition)implemented11gridCol widths form Table::grid (props.rs or story.rs, test structure.rs tables).
17.4.17gridSpan (Grid Columns Spanned by Current Table Cell)implemented11gridSpan is read, clamped to 1 to 64 (props.rs or story.rs, test structure.rs tables).
17.4.18header (Header Cell Reference)not implemented00Accessibility header cell references are not read.
17.4.19headers (Header Cells Associated With Table Cell)not implemented00Accessibility header cell references are not read.
17.4.20hidden (Hidden Table Row Marker)not implemented00Hidden row marks are not read.
17.4.21hideMark (Ignore End Of Cell Marker In Row Height Calculation)not implemented00hideMark is not read.
17.4.22insideH (Table Inside Horizontal Edges Border)incomplete10Read by the same code as the other border sides (props.rs borders); no test covers this side.
17.4.23insideH (Table Cell Inside Horizontal Edges Border)incomplete10Read by the same code as the other border sides (props.rs borders); no test covers this side.
17.4.24insideV (Table Inside Vertical Edges Border)incomplete10Read by the same code as the other border sides (props.rs borders); no test covers this side.
17.4.25insideV (Table Cell Inside Vertical Edges Border)incomplete10Read by the same code as the other border sides (props.rs borders); no test covers this side.
17.4.26jc (Table Alignment Exception)not implemented00Row-level property exceptions (tblPrEx) are not read.
17.4.27jc (Table Row Alignment)not implemented00Row alignment (trPr jc) is not read.
17.4.28jc (Table Alignment)implemented21Table jc is read into TableProperties::justification (props.rs or story.rs, test structure.rs table_row_and_cell_properties).
17.4.29noWrap (Don't Wrap Cell Content)not implemented00noWrap is not read.
17.4.30shd (Table Shading Exception)not implemented00Row-level property exceptions (tblPrEx) are not read.
17.4.31shd (Table Shading)implemented11Table shading is read into TableProperties::shading (props.rs or story.rs, test structure.rs table_row_and_cell_properties).
17.4.32shd (Table Cell Shading)implemented11Cell shading is read into TableCellProperties::shading (props.rs or story.rs, test structure.rs table_row_and_cell_properties).
17.4.33start (Table Cell Leading Edge Border)incomplete10Read by the same code as the other border sides (props.rs borders); no test covers this side.
17.4.34start (Table Cell Leading Margin Default)implemented11The leading default cell margin is read (props.rs or story.rs, test structure.rs table_row_and_cell_properties).
17.4.35start (Table Cell Leading Margin Exception)not implemented00Cell margin exceptions live in tblPrEx, which is not read.
17.4.36start (Table Leading Edge Border)incomplete10Read by the same code as the other border sides (props.rs borders); no test covers this side.
17.4.37tbl (Table)implemented11w:tbl is read into a Table block, nested tables included (props.rs or story.rs, test structure.rs tables).
17.4.38tblBorders (Table Borders)implemented21tblBorders is read, each side and the inside edges (props.rs or story.rs, test structure.rs table_row_and_cell_properties).
17.4.39tblBorders (Table Borders Exceptions)not implemented00Row-level property exceptions (tblPrEx) are not read.
17.4.40tblCaption (Table Caption)not implemented00The table caption is not read.
17.4.41tblCellMar (Table Cell Margin Exceptions)not implemented00Row-level property exceptions (tblPrEx) are not read.
17.4.42tblCellMar (Table Cell Margin Defaults)implemented11tblCellMar default margins are read (props.rs or story.rs, test structure.rs table_row_and_cell_properties).
17.4.43tblCellSpacing (Table Row Cell Spacing)not implemented00Cell spacing is not read; cells touch.
17.4.44tblCellSpacing (Table Cell Spacing Exception)not implemented00Row-level property exceptions (tblPrEx) are not read.
17.4.45tblCellSpacing (Table Cell Spacing Default)not implemented00Cell spacing is not read; cells touch.
17.4.46tblDescription (Table Description)not implemented00The table description is not read.
17.4.47tblGrid (Previous Table Grid)not implemented00Tracked table grid changes are not read.
17.4.48tblGrid (Table Grid)implemented12tblGrid is read into Table::grid (props.rs or story.rs, test structure.rs tables).
17.4.49tblHeader (Repeat Table Row on Every New Page)implemented11tblHeader marks repeated header rows (props.rs or story.rs, test structure.rs tables).
17.4.50tblInd (Table Indent from Leading Margin)implemented11tblInd is read when given in twips (props.rs or story.rs, test structure.rs table_row_and_cell_properties).
17.4.51tblInd (Table Indent from Leading Margin Exception)not implemented00Row-level property exceptions (tblPrEx) are not read.
17.4.52tblLayout (Table Layout)implemented11tblLayout fixed is read into TableProperties::fixed_layout (props.rs or story.rs, test structure.rs table_row_and_cell_properties).
17.4.53tblLayout (Table Layout Exception)not implemented00Row-level property exceptions (tblPrEx) are not read.
17.4.54tblLook (Table Style Conditional Formatting Settings Exception)not implemented00tblLook is not read; table style conditional formats are not applied.
17.4.55tblLook (Table Style Conditional Formatting Settings)not implemented00tblLook is not read; table style conditional formats are not applied.
17.4.56tblOverlap (Floating Table Allows Other Tables to Overlap)not implemented00tblOverlap is not read; floating tables are placed as floats whatever it says.
17.4.57tblpPr (Floating Table Positioning)implemented32tblpPr is read (props.rs table_float, test fixtures.rs wrapping_frames_and_floating_tables_are_read) with LibreOffice's defaults for missing anchors; layout places the table as a float text wraps around, and a table taller than the text area flows with the text and is reported (flow.rs table_float, test layout.rs floating_tables_sit_at_their_position).
17.4.58tblPr (Previous Table Properties)not implemented00Tracked table property changes are not read.
17.4.59tblPr (Table Properties)incomplete11Style, width, alignment, indent, borders, shading, default cell margins, layout, bidiVisual and tblpPr are read (props.rs table_properties); tblLook, tblCellSpacing, tblOverlap, tblCaption and tblDescription are not.
17.4.60tblPrEx (Table-Level Property Exceptions)not implemented00Row-level property exceptions (tblPrEx) are not read.
17.4.61tblPrEx (Previous Table-Level Property Exceptions)not implemented00Tracked table property changes are not read.
17.4.62tblStyle (Referenced Table Style)implemented11tblStyle is read into TableProperties::style_id (props.rs or story.rs, test structure.rs table_row_and_cell_properties).
17.4.63tblW (Preferred Table Width)implemented11tblW is read in twips or fiftieths of a percent; auto and nil give no width (props.rs or story.rs, test structure.rs tables).
17.4.64tblW (Preferred Table Width Exception)not implemented00Row-level property exceptions (tblPrEx) are not read.
17.4.65tc (Table Cell)implemented11w:tc is read with its properties and block content (props.rs or story.rs, test structure.rs tables).
17.4.66tcBorders (Table Cell Borders)implemented22tcBorders is read, each side and the inside edges (props.rs or story.rs, test structure.rs table_row_and_cell_properties); the border above a row, and the last row's bottom border, count in the row's height as LibreOffice lays Word tables out (table.rs drawn_width, test layout.rs table_borders_take_row_height_and_old_tables_outdent).
17.4.67tcFitText (Fit Text Within Cell)not implemented00tcFitText is not read.
17.4.68tcMar (Single Table Cell Margins)implemented11tcMar cell margins are read (props.rs or story.rs, test structure.rs table_row_and_cell_properties).
17.4.69tcPr (Table Cell Properties)incomplete11Width, grid span, vertical merge, borders, shading, vertical alignment and margins are read (props.rs cell_properties); noWrap, textDirection, tcFitText, hideMark, cnfStyle and horizontal merge are not.
17.4.70tcPr (Previous Table Cell Properties)not implemented00Tracked cell property changes are not read.
17.4.71tcW (Preferred Table Cell Width)implemented11tcW is read when given in twips (props.rs or story.rs, test structure.rs table_row_and_cell_properties).
17.4.72textDirection (Table Cell Text Flow Direction)implemented22btLr and tbRl (and the strict lr and rl) cells lay their text out along the row height, wrapping at a stated row height or else growing the row to the longest line, and turn it into the cell at paint time; tbLrV and lrV run across (props.rs text_direction, table.rs CellPlan::turn; tests structure.rs vertical_text_directions, layout.rs turned_cells_rotate_their_text).
17.4.73tl2br (Table Cell Top Left to Bottom Right Diagonal Border)not implemented00Diagonal cell borders are not read.
17.4.74top (Table Cell Top Border)incomplete10Read by the same code as the other border sides (props.rs borders); no test covers this side.
17.4.75top (Table Cell Top Margin Default)incomplete10Read by the same code as the other default cell margins (props.rs margins); no test covers this side.
17.4.76top (Table Top Border)implemented11The table's top border is read (props.rs or story.rs, test structure.rs table_row_and_cell_properties).
17.4.77top (Table Cell Top Margin Exception)not implemented00Cell margin exceptions live in tblPrEx, which is not read.
17.4.78tr (Table Row)implemented11w:tr is read with its properties and cells (props.rs or story.rs, test structure.rs tables).
17.4.79tr2bl (Table Cell Top Right to Bottom Left Diagonal Border)not implemented00Diagonal cell borders are not read.
17.4.80trHeight (Table Row Height)implemented11trHeight is read with hRule exact or at least (props.rs or story.rs, test structure.rs table_row_and_cell_properties).
17.4.81trPr (Table Row Properties)incomplete11Height, repeated header rows and cantSplit are read (props.rs row_properties); gridBefore, gridAfter, wBefore, wAfter, jc, hidden, cnfStyle and tblCellSpacing are not.
17.4.82trPr (Previous Table Row Properties)not implemented00Tracked row property changes are not read.
17.4.83vAlign (Table Cell Vertical Alignment)implemented11vAlign is read as top, center or bottom (props.rs or story.rs, test structure.rs table_row_and_cell_properties).
17.4.84vMerge (Vertically Merged Cell)implemented12vMerge restart and continue are read (props.rs or story.rs, test structure.rs tables).
17.4.85wAfter (Preferred Width After Table Row)not implemented00wAfter is not read.
17.4.86wBefore (Preferred Width Before Table Row)not implemented00wBefore is not read.
17.4.87Table Measurement (CT_TblWidth)not implemented00No reader code cites CT_TblWidth itself; widths are read in twips and percent as the tblW, tcW and tblInd rows say.
17.5Custom Markupincomplete21The content of structured document tags, smart tags and custom XML elements is read in place; their properties and data bindings are not.
17.5.1Custom XML and Smart Tagsincomplete10Custom XML and smart tag elements are unwrapped and their content read (story.rs inline); their names and attributes are dropped.
17.5.2Structured Document Tagsincomplete11sdtContent is read in place at block, row, cell and run level (test structure.rs markup_compatibility_and_content_controls); sdtPr (placeholders, data binding, control types) is not read.
17.6Sectionsincomplete1821Page size, margins, columns, section type, the page number start and header and footer references are read; page borders, line numbering, document grid, text direction, vertical alignment and paper source are not.
17.6.1bidi (Right to Left Section Layout)not implemented00Right-to-left section layout is not read.
17.6.2bottom (Bottom Border)implemented12The bottom page border is read with the other sides of w:pgBorders and drawn around each page it shows on (props.rs section_properties, flow.rs page_border_lines; tests structure.rs page_borders, layout.rs page_borders_sit_at_their_offsets); w:shadow casts a black shadow as wide as the border to the right and below, the right and bottom lines moved in by that width as LibreOffice draws it (test layout.rs page_border_shadows_and_art_borders), and art borders are left out and reported, as LibreOffice leaves them out.
17.6.3col (Single Column Definition)implemented12Explicit column widths and spacing are read when equalWidth is off (props.rs section_properties, test structure.rs columns_footers_and_even_odd_settings).
17.6.4cols (Column Definitions)implemented11Column count, spacing, separator and equal width are read (props.rs section_properties, test structure.rs sections_split_at_paragraph_section_properties).
17.6.5docGrid (Document Grid)not implemented00The document grid is not read; lines are spaced by paragraph properties alone.
17.6.6formProt (Only Allow Editing of Form Fields)out of scope00Form editing restrictions do not affect reading.
17.6.7left (Left Border)implemented11The left page border is read with the other sides of w:pgBorders and drawn around each page it shows on (props.rs section_properties, flow.rs page_border_lines; tests structure.rs page_borders, layout.rs page_borders_sit_at_their_offsets); w:shadow casts a black shadow as wide as the border to the right and below, the right and bottom lines moved in by that width as LibreOffice draws it (test layout.rs page_border_shadows_and_art_borders), and art borders are left out and reported, as LibreOffice leaves them out.
17.6.8lnNumType (Line Numbering Settings)not implemented00Line numbering is not read or drawn.
17.6.9paperSrc (Paper Source Information)out of scope00Paper trays do not affect text or layout.
17.6.10pgBorders (Page Borders)implemented33The four sides, offsetFrom, display and zOrder are read (props.rs section_properties) and written back (write props.rs page_borders); layout draws each side through the border line code, from the page edge or outside the text area as LibreOffice places them, on the pages display names, under or over the page content (tests structure.rs page_borders, layout.rs page_borders_sit_at_their_offsets, package.rs page_borders_follow_the_margins).
17.6.11pgMar (Page Margins)implemented11All seven page margins are read, defaulting to one inch and half-inch header and footer (props.rs section_properties, test structure.rs sections_split_at_paragraph_section_properties).
17.6.12pgNumType (Page Numbering Settings)incomplete22Only the start value is read; the number format and chapter numbering are not.
17.6.13pgSz (Page Size)implemented11Width, height and orientation are read; the paper code is not (props.rs section_properties, test structure.rs sections_split_at_paragraph_section_properties).
17.6.14printerSettings (Reference to Printer Settings Data)out of scope00Printer settings do not affect text or layout.
17.6.15right (Right Border)implemented12The right page border is read with the other sides of w:pgBorders and drawn around each page it shows on (props.rs section_properties, flow.rs page_border_lines; tests structure.rs page_borders, layout.rs page_borders_sit_at_their_offsets); w:shadow casts a black shadow as wide as the border to the right and below, the right and bottom lines moved in by that width as LibreOffice draws it (test layout.rs page_border_shadows_and_art_borders), and art borders are left out and reported, as LibreOffice leaves them out.
17.6.16rtlGutter (Gutter on Right Side of Page)not implemented00rtlGutter is not read; the gutter is on the left.
17.6.17sectPr (Document Final Section Properties)implemented22A paragraph's sectPr ends a section and the body's describes the last one (props.rs section_properties, test structure.rs sections_split_at_paragraph_section_properties).
17.6.18sectPr (Section Properties)incomplete11Page size and margins, page borders, columns, type, page numbering start, the first-page switch and header and footer references are read (props.rs section_properties); the other children are not, as the rows of 17.6 say.
17.6.19sectPr (Previous Section Properties)not implemented00Tracked section property changes are not read.
17.6.20textDirection (Text Flow Direction)not implemented00Section text direction is not read; text runs horizontally. The corpus's vertical sections hold Japanese text, which a turned page would lay on its side.
17.6.21top (Top Border)implemented11The top page border is read with the other sides of w:pgBorders and drawn around each page it shows on (props.rs section_properties, flow.rs page_border_lines; tests structure.rs page_borders, layout.rs page_borders_sit_at_their_offsets); w:shadow casts a black shadow as wide as the border to the right and below, the right and bottom lines moved in by that width as LibreOffice draws it (test layout.rs page_border_shadows_and_art_borders), and art borders are left out and reported, as LibreOffice leaves them out.
17.6.22type (Section Type)implemented11nextPage, continuous, evenPage, oddPage and nextColumn are read (props.rs section_properties, test structure.rs sections_split_at_paragraph_section_properties).
17.6.23vAlign (Vertical Text Alignment on Page)not implemented00Vertical alignment of text on the page is not read; text starts at the top margin.
17.7Stylesincomplete1310Paragraph, character, table and numbering styles, based-on inheritance, document defaults and toggle properties are read and resolved; latent styles are ignored, and table styles neither take part in property resolution nor apply their conditional formats.
17.7.1Style Inheritanceimplemented11Styles::chain walks basedOn to the root, cutting cycles and chains longer than 32 (crates/docboss-model/src/style.rs, tests structure.rs styles_and_defaults and resolution.rs based_on_chain_resolves_root_first).
17.7.2Style Hierarchyincomplete34Styles::resolve_paragraph and resolve_run layer document defaults, the paragraph style chain, the list level, the character style chain and direct formatting; table styles are not in the hierarchy.
17.7.3Toggle Propertiesincomplete11Toggle properties set by both the paragraph and the character style chains cancel out (crates/docboss-model/src/style.rs, test resolution.rs toggle_properties_cancel_across_style_kinds); table style toggles are not included.
17.7.4General Style Propertiesimplemented22Style type, id, name, basedOn, next, default and the pPr, rPr and tblPr of each style are read (parts.rs styles; DOC styles.rs from the STSH), tests structure.rs styles_and_defaults and read.rs character_and_paragraph_formatting.
17.7.5Document Defaultsimplemented11docDefaults rPrDefault and pPrDefault become Styles::default_run and default_paragraph (test structure.rs styles_and_defaults).
17.7.6Table Stylesincomplete10Table styles are read with their table properties; their conditional formats (tblStylePr) are not applied and they do not take part in run or paragraph resolution.
17.7.7Numbering Stylesincomplete10Numbering styles are read, and abstract definitions linked through numStyleLink take the levels of the style's definition (parts.rs resolve_style_links); no test covers it.
17.7.8Paragraph Stylesimplemented11Paragraph styles are read and resolved with their run properties, heading levels coming from outlineLvl or the style name (test structure.rs styles_and_defaults).
17.7.9Run (Character) Stylesincomplete10Character styles are read and resolved by Styles::resolve_run; no DOCX test reads one.
17.8Fontsincomplete41Font table entries and embedded fonts are read; font substitution follows docboss-font's own table, not the file's panose1 and sig data.
17.8.1Font Embeddingimplemented11Embedded fonts are deobfuscated by XORing their first 32 bytes with the reversed fontKey GUID (parts.rs deobfuscate, unit test deobfuscation_uses_the_reversed_guid).
17.8.2Font Substitutionnot implemented00The file's substitution data (panose1, sig) is not read; docboss-font substitutes by name and FontEntry::family.
17.8.3Elementsincomplete30w:font name, altName, family, pitch and the four embed elements are read (parts.rs fonts); charset, panose1 and sig are not, and no DOCX test reads a font table.
17.9Numberingincomplete2318Abstract definitions, instances, overrides and levels are read and labels counted in document order; picture bullets and the level suffix are not read, and lvlRestart is not applied.
17.9.1abstractNum (Abstract Numbering Definition)implemented11abstractNum definitions are read with their levels (parts.rs numbering, test structure.rs numbering_definitions).
17.9.2abstractNumId (Abstract Numbering Definition Reference)implemented11abstractNumId links an instance to its definition (parts.rs numbering, test structure.rs numbering_definitions).
17.9.3ilvl (Numbering Level Reference)implemented11The paragraph's ilvl selects the list level, clamped to 0 to 8 (parts.rs numbering, test structure.rs numbering_definitions).
17.9.4isLgl (Display All Levels Using Arabic Numerals)incomplete10isLgl is read and NumberingCounter shows every level as decimal; no test covers it.
17.9.5lvl (Numbering Level Override Definition)incomplete10Override levels replace the abstract level in Numbering::level; no test covers it.
17.9.6lvl (Numbering Level Definition)implemented11Level start, format, text, justification, restart, legal numbering and properties are read (parts.rs numbering, test structure.rs numbering_definitions).
17.9.7lvlJc (Justification)incomplete10lvlJc is read into Level::justification; no test covers it.
17.9.8lvlOverride (Numbering Level Definition Override)implemented11lvlOverride start overrides and replacement levels are read (parts.rs numbering, test structure.rs numbering_definitions).
17.9.9lvlPicBulletId (Picture Numbering Symbol Definition Reference)not implemented00Picture bullets are not read; such levels show their lvlText.
17.9.10lvlRestart (Restart Numbering Level Symbol)incomplete10lvlRestart is read into Level::restart_after, but NumberingCounter restarts a level whenever a shallower one advances and ignores the value.
17.9.11lvlText (Numbering Level Text)implemented12lvlText templates such as %1.%2) are filled by NumberingCounter; Symbol-font bullets map to Unicode (parts.rs numbering, test structure.rs numbering_definitions).
17.9.12multiLevelType (Abstract Numbering Definition Type)out of scope00multiLevelType is informational and does not change labels.
17.9.13name (Abstract Numbering Definition Name)out of scope00Definition names are informational and do not change labels.
17.9.14nsid (Abstract Numbering Definition Identifier)out of scope00nsid identifies definitions when merging documents; it does not change labels.
17.9.15num (Numbering Definition Instance)implemented12num instances are read with their overrides (parts.rs numbering, test structure.rs numbering_definitions).
17.9.16numbering (Numbering Definitions)implemented11The numbering part's definitions and instances are read (parts.rs numbering, test structure.rs numbering_definitions).
17.9.17numFmt (Numbering Format)implemented11numFmt is read into NumberFormat (see 17.18.59) (parts.rs numbering, test structure.rs numbering_definitions).
17.9.18numId (Numbering Definition Instance Reference)implemented11The paragraph's numId selects the instance; 0 removes numbering (parts.rs numbering, test structure.rs numbering_definitions).
17.9.19numIdMacAtCleanup (Last Reviewed Abstract Numbering Definition)out of scope00numIdMacAtCleanup is editing state and does not change labels.
17.9.20numPicBullet (Picture Numbering Symbol Definition)not implemented00Picture bullets are not read; such levels show their lvlText.
17.9.21numStyleLink (Numbering Style Reference)incomplete10Definitions linked through numStyleLink take the levels of the numbering style's definition (parts.rs resolve_style_links); no test covers it.
17.9.22pPr (Numbering Level Associated Paragraph Properties)incomplete10Level paragraph properties are read and applied by Styles::resolve_paragraph; no test covers it.
17.9.23pStyle (Paragraph Style's Associated Numbering Level)incomplete10Output reads a paragraph's list membership from its resolved properties, so a style's numPr counts (crates/docboss-output/src/walk.rs); the level's pStyle element itself is not read.
17.9.24rPr (Numbering Symbol Run Properties)incomplete10Level run properties are read into Level::run; no test covers it.
17.9.25start (Starting Value)implemented11start gives a level's first number (parts.rs numbering, test structure.rs numbering_definitions).
17.9.26startOverride (Numbering Level Starting Value Override)implemented11startOverride restarts a level of one instance (parts.rs numbering, test structure.rs numbering_definitions).
17.9.27styleLink (Numbering Style Definition)not implemented00styleLink is not read; linked definitions are resolved from numStyleLink (17.9.21).
17.9.28suff (Content Between Numbering Symbol and Paragraph Text)not implemented00The level suffix is not read; output and layout follow a label with a tab.
17.9.29tmpl (Numbering Template Code)out of scope00The template code is informational and does not change labels.
17.10Headers and Footersimplemented77Header and footer parts, their references per page kind, the first-page switch and the even/odd setting are read (tests structure.rs sections_split_at_paragraph_section_properties and columns_footers_and_even_odd_settings); docboss-layout places them.
17.10.1evenAndOddHeaders (Different Even/Odd Page Headers and Footers)implemented11evenAndOddHeaders is read from the settings part into Settings::even_and_odd_headers (test structure.rs columns_footers_and_even_odd_settings).
17.10.2footerReference (Footer Reference)implemented11footerReference ids are read per default, first and even page kind (test structure.rs columns_footers_and_even_odd_settings).
17.10.3ftr (Footer)implemented11Footer parts are read as HeaderFooter bodies (test structure.rs columns_footers_and_even_odd_settings).
17.10.4hdr (Header)implemented11Header parts are read as HeaderFooter bodies (test structure.rs sections_split_at_paragraph_section_properties).
17.10.5headerReference (Header Reference)implemented11headerReference ids are read per default, first and even page kind (test structure.rs sections_split_at_paragraph_section_properties).
17.10.6titlePg (Different First Page Headers and Footers)implemented11titlePg is read into SectionProperties::title_page (test structure.rs sections_split_at_paragraph_section_properties).
17.11Footnotes and Endnotesincomplete1313Footnote and endnote bodies, references and number marks are read; note properties (footnotePr and endnotePr: format, restart, start, position) are not.
17.11.1continuationSeparator (Continuation Separator Mark)incomplete10Continuation separator notes are skipped like separators; no test covers them.
17.11.2endnote (Endnote Content)implemented11Endnote bodies are read into Document::endnotes (lib.rs parse_story, test structure.rs notes_and_comments).
17.11.3endnote (Special Endnote List)not implemented00The settings' special note lists are not read; separator notes are recognized by their type in the notes part.
17.11.4endnotePr (Document-Wide Endnote Properties)not implemented00Note properties are not read; footnotes number 1, 2, 3 and endnotes i, ii, iii from the start of the document.
17.11.5endnotePr (Section-Wide Endnote Properties)not implemented00Note properties are not read; footnotes number 1, 2, 3 and endnotes i, ii, iii from the start of the document.
17.11.6endnoteRef (Endnote Reference Mark)incomplete10endnoteRef is read as the note number mark, like footnoteRef; no test covers the endnote form.
17.11.7endnoteReference (Endnote Reference)implemented11endnoteReference becomes RunContent::EndnoteReference (lib.rs parse_story, test structure.rs notes_and_comments).
17.11.8endnotes (Document Endnotes)implemented11The endnotes part is read (lib.rs parse_story, test structure.rs notes_and_comments).
17.11.9footnote (Special Footnote List)not implemented00The settings' special note lists are not read; separator notes are recognized by their type in the notes part.
17.11.10footnote (Footnote Content)implemented11Footnote bodies are read into Document::footnotes (lib.rs parse_story, test structure.rs notes_and_comments).
17.11.11footnotePr (Section-Wide Footnote Properties)not implemented00Note properties are not read; footnotes number 1, 2, 3 and endnotes i, ii, iii from the start of the document.
17.11.12footnotePr (Document-Wide Footnote Properties)not implemented00Note properties are not read; footnotes number 1, 2, 3 and endnotes i, ii, iii from the start of the document.
17.11.13footnoteRef (Footnote Reference Mark)implemented11footnoteRef becomes RunContent::NoteNumber (lib.rs parse_story, test structure.rs notes_and_comments).
17.11.14footnoteReference (Footnote Reference)implemented11footnoteReference becomes RunContent::FootnoteReference (lib.rs parse_story, test structure.rs notes_and_comments).
17.11.15footnotes (Document Footnotes)implemented11The footnotes part is read (lib.rs parse_story, test structure.rs notes_and_comments).
17.11.16noEndnote (Suppress Endnotes In Document)not implemented00Note properties are not read; footnotes number 1, 2, 3 and endnotes i, ii, iii from the start of the document.
17.11.17numFmt (Endnote Numbering Format)incomplete10Endnotes are labelled lowerRoman, the default this clause gives (crates/docboss-output/src/walk.rs); the element itself is not read.
17.11.18numFmt (Footnote Numbering Format)not implemented00Note properties are not read; footnotes number 1, 2, 3 and endnotes i, ii, iii from the start of the document.
17.11.19numRestart (Footnote and Endnote Numbering Restart Location)not implemented00Note properties are not read; footnotes number 1, 2, 3 and endnotes i, ii, iii from the start of the document.
17.11.20numStart (Footnote and Endnote Numbering Starting Value)not implemented00Note properties are not read; footnotes number 1, 2, 3 and endnotes i, ii, iii from the start of the document.
17.11.21pos (Footnote Placement)not implemented00Note properties are not read; footnotes number 1, 2, 3 and endnotes i, ii, iii from the start of the document.
17.11.22pos (Endnote Placement)not implemented00Note properties are not read; footnotes number 1, 2, 3 and endnotes i, ii, iii from the start of the document.
17.11.23separator (Footnote/Endnote Separator Mark)implemented22Separator notes are skipped (lib.rs parse_story, test structure.rs notes_and_comments).
17.12Glossary Documentout of scope00The glossary document holds building blocks for insertion, not document content; docboss does not read it.
17.12.1behavior (Entry Insertion Behavior)out of scope00The glossary document holds building blocks for insertion, not document content; docboss does not read it.
17.12.2behaviors (Entry Insertion Behaviors)out of scope00The glossary document holds building blocks for insertion, not document content; docboss does not read it.
17.12.3category (Entry Categorization)out of scope00The glossary document holds building blocks for insertion, not document content; docboss does not read it.
17.12.4description (Description for Entry)out of scope00The glossary document holds building blocks for insertion, not document content; docboss does not read it.
17.12.5docPart (Glossary Document Entry)out of scope00The glossary document holds building blocks for insertion, not document content; docboss does not read it.
17.12.6docPartBody (Contents of Glossary Document Entry)out of scope00The glossary document holds building blocks for insertion, not document content; docboss does not read it.
17.12.7docPartPr (Glossary Document Entry Properties)out of scope00The glossary document holds building blocks for insertion, not document content; docboss does not read it.
17.12.8docParts (List of Glossary Document Entries)out of scope00The glossary document holds building blocks for insertion, not document content; docboss does not read it.
17.12.9gallery (Gallery Associated With Entry)out of scope00The glossary document holds building blocks for insertion, not document content; docboss does not read it.
17.12.10glossaryDocument (Glossary Document Root Element)out of scope00The glossary document holds building blocks for insertion, not document content; docboss does not read it.
17.12.11guid (Entry ID)out of scope00The glossary document holds building blocks for insertion, not document content; docboss does not read it.
17.12.12name (Category Associated With Entry)out of scope00The glossary document holds building blocks for insertion, not document content; docboss does not read it.
17.12.13name (Entry Name)out of scope00The glossary document holds building blocks for insertion, not document content; docboss does not read it.
17.12.14style (Associated Paragraph Style Name)out of scope00The glossary document holds building blocks for insertion, not document content; docboss does not read it.
17.12.15type (Entry Type)out of scope00The glossary document holds building blocks for insertion, not document content; docboss does not read it.
17.12.16types (Entry Types)out of scope00The glossary document holds building blocks for insertion, not document content; docboss does not read it.
17.13Annotationsincomplete64Comments, insertions, deletions, moves and bookmarks are read; property revisions, range permissions and proofing marks are not.
17.13.1Inline Annotationsout of scope00Descriptive clause; the inline annotations it introduces have their own rows (17.13.4 to 17.13.6).
17.13.3Property Annotationsnot implemented00Formatting revisions (rPrChange, pPrChange and the like) are not read; the current formatting is used.
17.13.4Commentsimplemented31Comments with author, initials, date and body are read, with their range marks and references (story.rs inline, test structure.rs notes_and_comments).
17.13.5Revisionsincomplete22Insertions and deletions are read as Revision inlines with author and date, moves as insertions and deletions (test structure.rs revisions); paragraph mark, table and property revisions are not read.
17.13.6Bookmarksimplemented11bookmarkStart and bookmarkEnd are read with their ids and names (story.rs inline, test structure.rs bookmarks).
17.13.7Range Permissionsnot implemented00permStart and permEnd are ignored.
17.13.8Spelling and Grammarout of scope00Proofing marks do not change content.
17.14Mail Mergeout of scope00Mail merge settings describe a data source connection; they do not change the document's content.
17.14.1active (Record Is Included in Mail Merge)out of scope00Mail merge settings describe a data source connection; they do not change the document's content.
17.14.2activeRecord (Record Currently Displayed In Merged Document)out of scope00Mail merge settings describe a data source connection; they do not change the document's content.
17.14.3addressFieldName (Column Containing E-mail Address)out of scope00Mail merge settings describe a data source connection; they do not change the document's content.
17.14.4checkErrors (Mail Merge Error Reporting Setting)out of scope00Mail merge settings describe a data source connection; they do not change the document's content.
17.14.5colDelim (Column Delimiter for Data Source)out of scope00Mail merge settings describe a data source connection; they do not change the document's content.
17.14.6column (Index of Column Being Mapped)out of scope00Mail merge settings describe a data source connection; they do not change the document's content.
17.14.7column (Index of Column Containing Unique Values for Record)out of scope00Mail merge settings describe a data source connection; they do not change the document's content.
17.14.8connectString (Data Source Connection String)out of scope00Mail merge settings describe a data source connection; they do not change the document's content.
17.14.9dataSource (Data Source File Path)out of scope00Mail merge settings describe a data source connection; they do not change the document's content.
17.14.10dataType (Data Source Type)out of scope00Mail merge settings describe a data source connection; they do not change the document's content.
17.14.11destination (Merged Document Destination)out of scope00Mail merge settings describe a data source connection; they do not change the document's content.
17.14.12doNotSuppressBlankLines (Remove Blank Lines from Merged Documents)out of scope00Mail merge settings describe a data source connection; they do not change the document's content.
17.14.13dynamicAddress (Use Country-Based Address Field Ordering)out of scope00Mail merge settings describe a data source connection; they do not change the document's content.
17.14.14fHdr (First Row of Data Source Contains Column Names)out of scope00Mail merge settings describe a data source connection; they do not change the document's content.
17.14.15fieldMapData (External Data Source to Merge Field Mapping)out of scope00Mail merge settings describe a data source connection; they do not change the document's content.
17.14.16headerSource (Header Definition File Path)out of scope00Mail merge settings describe a data source connection; they do not change the document's content.
17.14.17lid (Merge Field Name Language ID)out of scope00Mail merge settings describe a data source connection; they do not change the document's content.
17.14.18linkToQuery (Query Contains Link to External Query File)out of scope00Mail merge settings describe a data source connection; they do not change the document's content.
17.14.19mailAsAttachment (Merged Document To E-Mail Attachment)out of scope00Mail merge settings describe a data source connection; they do not change the document's content.
17.14.20mailMerge (Mail Merge Settings)out of scope00Mail merge settings describe a data source connection; they do not change the document's content.
17.14.21mailSubject (Merged E-mail or Fax Subject Line)out of scope00Mail merge settings describe a data source connection; they do not change the document's content.
17.14.22mainDocumentType (Source Document Type)out of scope00Mail merge settings describe a data source connection; they do not change the document's content.
17.14.23mappedName (Predefined Merge Field Name)out of scope00Mail merge settings describe a data source connection; they do not change the document's content.
17.14.24name (Data Source Name for Column)out of scope00Mail merge settings describe a data source connection; they do not change the document's content.
17.14.25odso (Office Data Source Object Settings)out of scope00Mail merge settings describe a data source connection; they do not change the document's content.
17.14.26query (Query For Data Source Records To Merge)out of scope00Mail merge settings describe a data source connection; they do not change the document's content.
17.14.27recipientData (Data About Single Data Source Record)out of scope00Mail merge settings describe a data source connection; they do not change the document's content.
17.14.28recipientData (Reference to Inclusion/Exclusion Data for Data Source)out of scope00Mail merge settings describe a data source connection; they do not change the document's content.
17.14.29recipients (Inclusion/Exclusion Data for Data Source)out of scope00Mail merge settings describe a data source connection; they do not change the document's content.
17.14.30src (ODSO Data Source File Path)out of scope00Mail merge settings describe a data source connection; they do not change the document's content.
17.14.31table (Data Source Table Name)out of scope00Mail merge settings describe a data source connection; they do not change the document's content.
17.14.32type (ODSO Data Source Type)out of scope00Mail merge settings describe a data source connection; they do not change the document's content.
17.14.33type (Merge Field Mapping)out of scope00Mail merge settings describe a data source connection; they do not change the document's content.
17.14.34udl (UDL Connection String)out of scope00Mail merge settings describe a data source connection; they do not change the document's content.
17.14.35uniqueTag (Unique Value for Record)out of scope00Mail merge settings describe a data source connection; they do not change the document's content.
17.14.36viewMergedData (View Merged Data Within Document)out of scope00Mail merge settings describe a data source connection; they do not change the document's content.
17.15Settingsincomplete53defaultTabStop and evenAndOddHeaders are read from the settings part; the other settings are not.
17.15.1Document Settingsincomplete31defaultTabStop and evenAndOddHeaders are read (parts.rs settings, test structure.rs columns_footers_and_even_odd_settings); zoom, protection, compatibility options and the rest are not.
17.15.2Web Page Settingsout of scope00Web page settings affect HTML saving only.
17.15.3Language Compatibility Settingsincomplete12Only the compatibilityMode compatSetting is read (parts.rs settings, test parts.rs settings_read_the_compatibility_mode) and written back; below 15, and when a file states none, tables move left by their first cell's left margin as Word 2007 and LibreOffice place them (test layout.rs table_borders_take_row_height_and_old_tables_outdent). The other compatibility settings are not read.
17.16Fields and Hyperlinksincomplete129Simple and complex fields keep their instruction and cached result, HYPERLINK fields become links and docboss-layout evaluates PAGE and NUMPAGES; other fields are not recalculated and form field data is not read.
17.16.1Syntaxnot implemented00Instructions are kept as text; only HYPERLINK arguments are parsed.
17.16.2XML representationout of scope00Descriptive clause; the elements it describes have their own rows (17.16.18, 17.16.19, 17.16.23).
17.16.3Formulas and expressionsnot implemented00Formula fields are not evaluated; their cached result is kept.
17.16.4Field formattingnot implemented01Format switches are not applied; the cached result is kept.
17.16.5Field definitionsincomplete22HYPERLINK becomes a hyperlink with its target, anchor and tooltip (test structure.rs complex_fields), and layout evaluates PAGE and NUMPAGES; other field types keep their cached results.
17.16.6calcOnExit (Recalculate Fields When Current Field Is Modified)not implemented00Form field data (ffData) is not read; the field's cached result is kept.
17.16.7checkBox (Checkbox Form Field Properties)not implemented00Form field data (ffData) is not read; the field's cached result is kept.
17.16.8checked (Checkbox Form Field State)not implemented00Form field data (ffData) is not read; the field's cached result is kept.
17.16.9ddList (Drop-Down List Form Field Properties)not implemented00Form field data (ffData) is not read; the field's cached result is kept.
17.16.10default (Default Text Box Form Field String)not implemented00Form field data (ffData) is not read; the field's cached result is kept.
17.16.11default (Default Drop-Down List Item Index)not implemented00Form field data (ffData) is not read; the field's cached result is kept.
17.16.12default (Default Checkbox Form Field State)not implemented00Form field data (ffData) is not read; the field's cached result is kept.
17.16.13delInstrText (Deleted Field Code)incomplete10Deleted field codes are read like instrText (story.rs run_content); no test covers them.
17.16.14enabled (Form Field Enabled)not implemented00Form field data (ffData) is not read; the field's cached result is kept.
17.16.15entryMacro (Script Function to Execute on Form Field Entry)not implemented00Form field data (ffData) is not read; the field's cached result is kept.
17.16.16exitMacro (Script Function to Execute on Form Field Exit)not implemented00Form field data (ffData) is not read; the field's cached result is kept.
17.16.17ffData (Form Field Properties)not implemented00Form field data (ffData) is not read; the field's cached result is kept.
17.16.18fldChar (Complex Field Character)implemented31begin, separate and end field characters fold into Field inlines, nested and across runs and paragraphs (story.rs fold, tests structure.rs complex_fields and fields_spanning_paragraphs).
17.16.19fldSimple (Simple Field)implemented11fldSimple keeps its instruction and content as the result (test structure.rs hyperlinks_and_simple_fields).
17.16.20format (Text Box Form Field Formatting)not implemented00Form field data (ffData) is not read; the field's cached result is kept.
17.16.21helpText (Associated Help Text)not implemented00Form field data (ffData) is not read; the field's cached result is kept.
17.16.22hyperlink (Hyperlink)implemented21Hyperlinks are read with the relationship target, anchor and tooltip (test structure.rs hyperlinks_and_simple_fields).
17.16.23instrText (Field Code)implemented11instrText pieces are joined into the field's instruction (test structure.rs complex_fields).
17.16.24label (Form Field Label)not implemented00Form field data (ffData) is not read; the field's cached result is kept.
17.16.25listEntry (Drop-Down List Entry)not implemented00Form field data (ffData) is not read; the field's cached result is kept.
17.16.26maxLength (Text Box Form Field Maximum Length)not implemented00Form field data (ffData) is not read; the field's cached result is kept.
17.16.27name (Form Field Name)not implemented00Form field data (ffData) is not read; the field's cached result is kept.
17.16.28result (Drop-Down List Selection)not implemented00Form field data (ffData) is not read; the field's cached result is kept.
17.16.29size (Checkbox Form Field Size)not implemented00Form field data (ffData) is not read; the field's cached result is kept.
17.16.30sizeAuto (Automatically Size Form Field)not implemented00Form field data (ffData) is not read; the field's cached result is kept.
17.16.31statusText (Associated Status Text)not implemented00Form field data (ffData) is not read; the field's cached result is kept.
17.16.32tabIndex (Form Field Navigation Order Index)not implemented00Form field data (ffData) is not read; the field's cached result is kept.
17.16.33textInput (Text Box Form Field Properties)not implemented00Form field data (ffData) is not read; the field's cached result is kept.
17.16.34type (Text Box Form Field Type)not implemented00Form field data (ffData) is not read; the field's cached result is kept.
17.17Miscellaneous Topicsincomplete22Boolean properties are read everywhere; alternative format chunks are reported as dropped and subdocuments are not followed.
17.17.1Subdocumentsnot implemented00subDoc references are not followed.
17.17.2Alternative Format Importincomplete11altChunk content is not imported; each occurrence is reported as dropped (story.rs block, test structure.rs alternative_format_chunks_are_reported).
17.17.3Roundtripping Alternate Contentout of scope00The writer does not round-trip mc:AlternateContent; reading follows ECMA-376 Part 3.
17.17.4Boolean Property (CT_OnOff)implemented11on, off, true, false, 1, 0 and an absent val are read (xml.rs on_off_value and its unit test).
17.18Simple Typesincomplete1614Simple types are parsed where the elements using them are read; the rows of those elements say which values are handled.
17.18.1ST_AnnotationVMerge (Table Cell Vertical Merge Revision Type)not implemented00No reader code cites this clause.
17.18.2ST_Border (Border Styles)incomplete12single, thick, double, dotted, dashed, dotDash, dotDotDash and dashSmallGap are read and drawn, the dashed styles with round caps and the dash lengths LibreOffice uses (props.rs border, table.rs border_line; tests structure.rs dashed_border_styles, render.rs dashed_borders_paint_dashes); dashDotStroked is drawn dash-dotted as LibreOffice draws it; art borders (every value that is not a line style) are left out; the triple, thick-thin, 3-D and wave borders are drawn as single lines.
17.18.3ST_BrClear (Line Break Text Wrapping Restart Location)not implemented00No reader code cites this clause.
17.18.4ST_BrType (Break Types)not implemented00No reader code cites this clause.
17.18.5ST_CaptionPos (Automatic Caption Positioning Values)not implemented00No reader code cites this clause.
17.18.6ST_ChapterSep (Chapter Separator Types)not implemented00No reader code cites this clause.
17.18.7ST_CharacterSpacing (Character-Level Whitespace Compression Settings)not implemented00No reader code cites this clause.
17.18.8ST_CombineBrackets (Two Lines in One Enclosing Character Type)not implemented00No reader code cites this clause.
17.18.9ST_DateTime (Standard Date and Time Storage Format)not implemented00No reader code cites this clause.
17.18.10ST_DecimalNumber (Decimal Number Value)not implemented00No reader code cites this clause.
17.18.11ST_DecimalNumberOrPercent (Percentage Measurement)not implemented00No reader code cites this clause.
17.18.12ST_Direction (Bidirectional Direction Types)not implemented00No reader code cites this clause.
17.18.13ST_DisplacedByCustomXml (Location of Custom XML Markup Displacing an Annotation)not implemented00No reader code cites this clause.
17.18.14ST_DocGrid (Document Grid Types)not implemented00No reader code cites this clause.
17.18.15ST_DocPartBehavior (Insertion Behavior Types)not implemented00No reader code cites this clause.
17.18.16ST_DocPartGallery (Entry Gallery Types)not implemented00No reader code cites this clause.
17.18.17ST_DocPartType (Entry Types)not implemented00No reader code cites this clause.
17.18.18ST_DocProtect (Document Protection Types)not implemented00No reader code cites this clause.
17.18.19ST_DocType (Document Classification Values)not implemented00No reader code cites this clause.
17.18.20ST_DropCap (Text Frame Drop Cap Location)implemented21dropCap is read (props.rs frame_properties); a drop cap frame stands at the start of the next paragraph, a margin drop cap too as LibreOffice places it (flow.rs frame_float, tests fixtures.rs wrapping_frames_and_floating_tables_are_read, read.rs drop_cap_frames).
17.18.21ST_EdGrp (Range Permision Editing Group)not implemented00No reader code cites this clause.
17.18.22ST_EdnPos (Endnote Positioning Location)not implemented00No reader code cites this clause.
17.18.23ST_EighthPointMeasure (Measurement in Eighths of a Point)not implemented00No reader code cites this clause.
17.18.24ST_Em (Emphasis Mark Type)not implemented00No reader code cites this clause.
17.18.25ST_FFHelpTextVal (Help Text Value)not implemented00No reader code cites this clause.
17.18.26ST_FFName (Form Field Name Value)not implemented00No reader code cites this clause.
17.18.27ST_FFStatusTextVal (Status Text Value)not implemented00No reader code cites this clause.
17.18.28ST_FFTextType (Text Box Form Field Type Values)not implemented00No reader code cites this clause.
17.18.29ST_FldCharType (Complex Field Character Type)not implemented00No reader code cites this clause.
17.18.30ST_FontFamily (Font Family Value)not implemented00No reader code cites this clause.
17.18.31ST_FrameLayout (Frameset Layout Order)not implemented00No reader code cites this clause.
17.18.32ST_FrameScrollbar (Frame Scrollbar Visibility)not implemented00No reader code cites this clause.
17.18.33ST_FtnEdn (Footnote or Endnote Type)not implemented00No reader code cites this clause.
17.18.34ST_FtnPos (Footnote Positioning Location)not implemented00No reader code cites this clause.
17.18.35ST_HAnchor (Horizontal Anchor Location)implemented22hAnchor and horzAnchor are read into position bases (props.rs anchored_position, test fixtures.rs wrapping_frames_and_floating_tables_are_read).
17.18.36ST_HdrFtr (Header or Footer Type)not implemented00No reader code cites this clause.
17.18.37ST_HeightRule (Height Rule)not implemented00No reader code cites this clause.
17.18.38ST_HexColor (Color Value)not implemented00No reader code cites this clause.
17.18.39ST_HexColorAuto (‘Automatic’ Color Value)not implemented00No reader code cites this clause.
17.18.40ST_HighlightColor (Text Highlight Colors)incomplete20The sixteen highlight names map to RGB (xml.rs); no test covers it.
17.18.41ST_Hint (Font Type Hint)not implemented00No reader code cites this clause.
17.18.42ST_HpsMeasure (Measurement in Half-Points)not implemented00No reader code cites this clause.
17.18.43ST_InfoTextType (Help or Status Text Type)not implemented00No reader code cites this clause.
17.18.44ST_Jc (Horizontal Alignment Type)not implemented00No reader code cites this clause.
17.18.45ST_JcTable (Table Alignment Type)not implemented00No reader code cites this clause.
17.18.46ST_LevelSuffix (Content Between Numbering Symbol and Paragraph Text)not implemented00No reader code cites this clause.
17.18.47ST_LineNumberRestart (Line Numbering Restart Position)not implemented00No reader code cites this clause.
17.18.48ST_LineSpacingRule (Line Spacing Rule)not implemented00No reader code cites this clause.
17.18.49ST_Lock (Locking Types)not implemented00No reader code cites this clause.
17.18.50ST_LongHexNumber (Eight Digit Hexadecimal Value)not implemented00No reader code cites this clause.
17.18.51ST_MacroName (Script Subroutine Name Value)not implemented00No reader code cites this clause.
17.18.52ST_MailMergeDataType (Mail Merge Data Source Type Values)not implemented00No reader code cites this clause.
17.18.53ST_MailMergeDest (Merged Document Destination Types)not implemented00No reader code cites this clause.
17.18.54ST_MailMergeDocType (Source Document Types)not implemented00No reader code cites this clause.
17.18.55ST_MailMergeOdsoFMDFieldType (Merge Field Mapping Types)not implemented00No reader code cites this clause.
17.18.56ST_MailMergeSourceType (Mail Merge ODSO Data Source Types)not implemented00No reader code cites this clause.
17.18.57ST_Merge (Merged Cell Type)not implemented00No reader code cites this clause.
17.18.58ST_MultiLevelType (Numbering Definition Type)not implemented00No reader code cites this clause.
17.18.59ST_NumberFormat (Numbering Format)implemented11decimal, decimalZero, upper and lower Roman and letter, ordinal, bullet and none are mapped; other formats label as decimal (parts.rs number_format), held to 954 vectors from the Lean reference (crates/docboss-model/tests/ledger_vectors.rs).
17.18.60ST_ObjectDrawAspect (Embedded Object Representations)not implemented00No reader code cites this clause.
17.18.61ST_ObjectUpdateMode (Embedded Object Update Modes)not implemented00No reader code cites this clause.
17.18.62ST_PageBorderDisplay (Page Border Display Options)implemented11allPages, firstPage and notFirstPage pick the pages a page border is drawn on (props.rs section_properties, flow.rs shows_on; test layout.rs page_borders_sit_at_their_offsets).
17.18.63ST_PageBorderOffset (Page Border Positioning Base)implemented11page and text set what a page border's space is measured from (props.rs section_properties, flow.rs page_border_lines; test layout.rs page_borders_sit_at_their_offsets).
17.18.64ST_PageBorderZOrder (Page Border Z-Order)implemented11back draws page borders under the page content, front over it (props.rs section_properties; test structure.rs page_borders).
17.18.65ST_PageOrientation (Page Orientation)not implemented00No reader code cites this clause.
17.18.66ST_Pitch (Font Pitch Value)not implemented00No reader code cites this clause.
17.18.67ST_PixelsMeasure (Measurement in Pixels)not implemented00No reader code cites this clause.
17.18.68ST_PointMeasure (Measurement in Points)not implemented00No reader code cites this clause.
17.18.69ST_Proof (Proofing State Values)not implemented00No reader code cites this clause.
17.18.70ST_ProofErr (Proofing Error Type)not implemented00No reader code cites this clause.
17.18.71ST_PTabAlignment (Absolute Position Tab Alignment)not implemented00No reader code cites this clause.
17.18.72ST_PTabLeader (Absolute Position Tab Leader Character)not implemented00No reader code cites this clause.
17.18.73ST_PTabRelativeTo (Absolute Position Tab Positioning Base)not implemented00No reader code cites this clause.
17.18.74ST_RestartNumber (Footnote/Endnote Numbering Restart Locations)not implemented00No reader code cites this clause.
17.18.75ST_RubyAlign (Phonetic Guide Text Alignment)not implemented00No reader code cites this clause.
17.18.76ST_SdtDateMappingType (Date Storage Format Types)not implemented00No reader code cites this clause.
17.18.77ST_SectionMark (Section Type)not implemented00No reader code cites this clause.
17.18.78ST_Shd (Shading Patterns)not implemented00No reader code cites this clause.
17.18.79ST_ShortHexNumber (Four Digit Hexadecimal Value)not implemented00No reader code cites this clause.
17.18.80ST_SignedHpsMeasure (Signed Measurement in Half-Points)not implemented00No reader code cites this clause.
17.18.81ST_SignedTwipsMeasure (Signed Measurement in Twentieths of a Point)not implemented00No reader code cites this clause.
17.18.82ST_StyleSort (Style Sort Settings)not implemented00No reader code cites this clause.
17.18.83ST_StyleType (Style Types)not implemented00No reader code cites this clause.
17.18.84ST_TabJc (Custom Tab Stop Type)not implemented00No reader code cites this clause.
17.18.85ST_TabTlc (Custom Tab Stop Leader Character)not implemented00No reader code cites this clause.
17.18.86ST_TargetScreenSz (Target Screen Sizes for Generated Web Pages)not implemented00No reader code cites this clause.
17.18.87ST_TblLayoutType (Table Layout Type)not implemented00No reader code cites this clause.
17.18.88ST_TblOverlap (Table Overlap Setting)not implemented00No reader code cites this clause.
17.18.89ST_TblStyleOverrideType (Conditional Table Style Formatting Types)not implemented00No reader code cites this clause.
17.18.90ST_TblWidth (Table Width Units)not implemented00No reader code cites this clause.
17.18.91ST_TextAlignment (Vertical Text Alignment Types)not implemented00No reader code cites this clause.
17.18.92ST_TextboxTightWrap (Lines To Tight Wrap Within Text Box)not implemented00No reader code cites this clause.
17.18.93ST_TextDirection (Text Flow Direction)incomplete11The cell values are read (props.rs text_direction, test structure.rs vertical_text_directions); the rotated East Asian variants run across.
17.18.94ST_TextEffect (Animated Text Effects)not implemented00No reader code cites this clause.
17.18.95ST_TextScale (Text Expansion/Compression Percentage)not implemented00No reader code cites this clause.
17.18.96ST_Theme (Theme Font)not implemented00No reader code cites this clause.
17.18.97ST_ThemeColor (Theme Color)not implemented00No reader code cites this clause.
17.18.98ST_UcharHexNumber (Two Digit Hexadecimal Value)not implemented00No reader code cites this clause.
17.18.99ST_Underline (Underline Patterns)not implemented00No reader code cites this clause.
17.18.100ST_VAnchor (Vertical Anchor Location)implemented22vAnchor and vertAnchor are read into position bases (props.rs anchored_position, test fixtures.rs wrapping_frames_and_floating_tables_are_read).
17.18.101ST_VerticalJc (Vertical Alignment Type)not implemented00No reader code cites this clause.
17.18.102ST_View (Document View Values)not implemented00No reader code cites this clause.
17.18.103ST_WmlColorSchemeIndex (Theme Color Reference)not implemented00No reader code cites this clause.
17.18.104ST_Wrap (Text Wrapping around Text Frame Type)implemented22The frame wrap types are read (props.rs frame_properties) and laid out: around, auto and tight flow text beside the frame, notBeside moves it below, none lets it run under (flow.rs frame_float, tests fixtures.rs wrapping_frames_and_floating_tables_are_read, layout.rs text_frames_sit_apart_and_text_flows_around_them).
17.18.105ST_Zoom (Magnification Preset Values)not implemented00No reader code cites this clause.
17.18.106ST_TextScalePercent (Text Expansion/Compression Percentage)not implemented00No reader code cites this clause.
17.18.107ST_MeasurementOrPercent (Measurement or Percentage Value)not implemented00No reader code cites this clause.

20 DrawingML - Framework Reference Material

ClauseFeatureStatusCode citationsTest citationsNote
20.4DrawingML - WordprocessingML Drawingincomplete6276Inline and anchored pictures and shapes with their extent, name, description, offsets, text box content and geometry are read and drawn, preset (all 186 presetShapeDefinitions.xml shapes, generated by crates/docboss-layout/tools/presets.py) and custom geometry turned and flipped by a:xfrm, with line ends, groups and drawing canvases with their members placed through each group's child coordinates, and linear and path gradient fills; text wraps around anchored objects in the body as the wrap rows say; picture and pattern fills are not.
20.4.2Elementsincomplete4958inline, anchor, extent, docPr, positionH, positionV, posOffset, the wrap elements and wrapPolygon, wsp, txbx, txbxContent, wgp, grpSp, grpSpPr and wpc are read; the other elements are not, as their rows say.
20.4.2.1align (Relative Horizontal Alignment)implemented24wp:align in positionH is read into DrawingPosition::align and layout places the object at the start, center or end of its base, inside and outside by page parity (story.rs drawing_children, flow.rs Frame::place; tests fixtures.rs word_aligned_text_box, layout.rs aligned_floats_sit_on_their_base).
20.4.2.2align (Relative Vertical Alignment)implemented22wp:align in positionV is read into DrawingPosition::align and layout places the object at the top, center or bottom of its base (story.rs drawing_children, flow.rs Frame::place; tests structure.rs drawing_alignment_and_bases, layout.rs aligned_floats_sit_on_their_base).
20.4.2.3anchor (Anchor for Floating DrawingML Object)incomplete24behindDoc, the positionH and positionV offsets, bases and alignments and the distances from the text are read (tests structure.rs drawings_and_media, drawing_alignment_and_bases, fixtures.rs wrapping_frames_and_floating_tables_are_read); simplePos and z-order are not.
20.4.2.4cNvGraphicFramePr (Common DrawingML Non-Visual Properties)not implemented00Not read.
20.4.2.5docPr (Drawing Object Non-Visual Properties)implemented21docPr name and descr are read into Drawing::name and description (story.rs drawing_children, test structure.rs drawings_and_media); a drawing marked hidden is left out and reported.
20.4.2.6effectExtent (Object Extents Including Effects)not implemented00effectExtent is not read; drawings take their extent alone.
20.4.2.7extent (Drawing Object Size)implemented11extent cx and cy are read into Drawing::width and height (story.rs drawing_children, test structure.rs drawings_and_media).
20.4.2.8inline (Inline DrawingML Object)implemented21Inline pictures are read with their extent and image (story.rs drawing_children, test structure.rs drawings_and_media).
20.4.2.9lineTo (Wrapping Polygon Line End Position)implemented11lineTo points are read into the wrap polygon (story.rs wrap, test fixtures.rs wrapping_frames_and_floating_tables_are_read).
20.4.2.10positionH (Horizontal Positioning)implemented23relativeFrom, posOffset and align are read into Drawing placement (story.rs drawing_children, tests structure.rs drawing_alignment_and_bases, fixtures.rs word_aligned_text_box); character positions are laid out from the column.
20.4.2.11positionV (Vertical Positioning)implemented22relativeFrom, posOffset and align are read into Drawing placement (story.rs drawing_children, tests structure.rs drawing_alignment_and_bases, fixtures.rs word_aligned_text_box); line positions are laid out from the paragraph's first line.
20.4.2.12posOffset (Absolute Position Offset)implemented11posOffset gives the anchor offset in EMU (story.rs drawing_children, test structure.rs drawings_and_media).
20.4.2.13simplePos (Simple Positioning Coordinates)not implemented00simplePos is not read.
20.4.2.14start (Wrapping Polygon Start)implemented11start is read as the wrap polygon's first point (story.rs wrap, test fixtures.rs wrapping_frames_and_floating_tables_are_read).
20.4.2.15wrapNone (No Text Wrapping)implemented21Read (story.rs wrap); text runs under or over the object (flow.rs register_floats).
20.4.2.16wrapPolygon (Wrapping Polygon)implemented33The polygon is read (story.rs wrap) and tight and through wrapping follow it across each line's height (wrap.rs outline_extent, tests fixtures.rs wrapping_frames_and_floating_tables_are_read, wrap.rs tight_wrapping_follows_the_polygon).
20.4.2.17wrapSquare (Square Wrapping)implemented35Read (story.rs wrap, test fixtures.rs wrapping_frames_and_floating_tables_are_read) and laid out: lines beside the object are shortened, or split in two when text flows on both sides, and move below it when no span is wide enough (paragraph.rs break_rows, wrap.rs band, tests wrap.rs and layout.rs square_wrapping_flows_text_on_both_sides, one_sided_and_top_and_bottom_wrapping, wrapping_moves_with_its_page, a_page_placed_picture_wraps_the_text_above_its_anchor).
20.4.2.18wrapThrough (Through Wrapping)implemented31Read (story.rs wrap, test fixtures.rs wrapping_frames_and_floating_tables_are_read) and laid out: lines beside the object are shortened, or split in two when text flows on both sides, and move below it when no span is wide enough (paragraph.rs break_rows, wrap.rs band, tests wrap.rs and layout.rs square_wrapping_flows_text_on_both_sides, one_sided_and_top_and_bottom_wrapping, wrapping_moves_with_its_page, a_page_placed_picture_wraps_the_text_above_its_anchor). Through wrapping follows the polygon like tight wrapping.
20.4.2.19wrapTight (Tight Wrapping)implemented33Read (story.rs wrap, test fixtures.rs wrapping_frames_and_floating_tables_are_read) and laid out: lines beside the object are shortened, or split in two when text flows on both sides, and move below it when no span is wide enough (paragraph.rs break_rows, wrap.rs band, tests wrap.rs and layout.rs square_wrapping_flows_text_on_both_sides, one_sided_and_top_and_bottom_wrapping, wrapping_moves_with_its_page, a_page_placed_picture_wraps_the_text_above_its_anchor). The wrap polygon gives the outline.
20.4.2.20wrapTopAndBottom (Top and Bottom Wrapping)implemented33Read (story.rs wrap, test fixtures.rs wrapping_frames_and_floating_tables_are_read) and laid out: lines beside the object are shortened, or split in two when text flows on both sides, and move below it when no span is wide enough (paragraph.rs break_rows, wrap.rs band, tests wrap.rs and layout.rs square_wrapping_flows_text_on_both_sides, one_sided_and_top_and_bottom_wrapping, wrapping_moves_with_its_page, a_page_placed_picture_wraps_the_text_above_its_anchor).
20.4.2.21bg (Background Formatting)not implemented00Not read.
20.4.2.22bodyPr (Body Properties)incomplete26lIns, tIns, rIns, bIns, anchor and a:spAutoFit are read, and text that overflows a box without spAutoFit is clipped to the box less its insets, as Word and LibreOffice draw it whatever vertOverflow and horzOverflow say (story.rs drawing_children, textbox.rs layout_text_box, paint.rs Renderer::render; tests layout.rs text_boxes_grow_to_fit_and_anchor_their_text, render.rs overflowing_text_box_content_is_clipped_to_its_insets). vert (vert, eaVert and mongolianVert top to bottom, vert270 bottom to top; wordArtVert runs across with a note) and upright are read; text turns with its shape's a:xfrm rotation, a vertical flip adding a half turn, through a transform the renderer applies to glyph outlines and images (textbox.rs text_map, paint.rs Renderer::turned; tests structure.rs vertical_text_directions, layout.rs text_boxes_turn_their_text, render.rs transforms_turn_rectangles_and_text); rot, wrap, columns and the other attributes are not read.
20.4.2.23cNvCnPr (Non-Visual Connector Shape Drawing Properties)not implemented00Not read.
20.4.2.24cNvContentPartPr (Non-Visual Content Part Drawing Properties)not implemented00Not read.
20.4.2.25cNvFrPr (Non-Visual Graphic Frame Drawing Properties)not implemented00Not read.
20.4.2.26cNvGrpSpPr (Non-Visual Group Shape Drawing Properties)not implemented00Not read.
20.4.2.27cNvPr (Non-Visual Drawing Properties)not implemented00Not read.
20.4.2.28cNvSpPr (Non-Visual Drawing Properties for a Shape)not implemented00Not read.
20.4.2.29contentPart (Content Part)not implemented00Not read.
20.4.2.30extLst (Extension List)not implemented00Not read.
20.4.2.31graphicFrame (Graphical object container)implemented11A group's graphic frame is read as a member at its wpg:xfrm box, holding the chart or diagram its graphic names (story/group.rs, test structure.rs group_graphic_frames_hold_charts).
20.4.2.32grpSp (Group Shape)implemented11Nested groups are read up to 16 deep; their members are placed through every group around them into the members of the outer drawing (story/group.rs StoryParser::group, model group.rs GroupFrame::place_through; tests structure.rs group_members_are_placed_through_their_groups, group.rs group_frames_place_children).
20.4.2.33grpSpPr (Group Shape Properties)implemented11The a:xfrm offset, extent, child offset, child extent, rotation and flips map the members' boxes; a child turned by a quarter scales along the swapped axes (story/group.rs group_transform, model group.rs GroupFrame::place; tests structure.rs group_members_are_placed_through_their_groups, group.rs group_frames_place_children).
20.4.2.34linkedTxbx (Textual contents of shape)not implemented00Not read.
20.4.2.35spPr (Shape Properties)incomplete12Solid fills, the outline with its dash, cap, join and line ends, the preset or custom geometry and the a:xfrm rotation and flips are read (story.rs shape_properties, geometry.rs) and drawn (drawn.rs shape_items; tests structure.rs shape_preset_geometry_transform_and_line_ends and shape_custom_geometry, layout.rs shapes_without_text_paint_their_geometry, render.rs preset_shapes_fill_and_stroke_their_outline); a:gradFill linear and path gradients with their stops and focus rectangle are read and painted per pixel (story.rs gradient_fill, shade.rs Shader; tests structure.rs shape_gradient_fill, render.rs gradient_fills_shade_across_the_shape); picture and pattern fills and effects are not.
20.4.2.36style (Shape Style)not implemented00Not read.
20.4.2.37txbx (Textual contents of shape)implemented11wps:txbx is read for its text box content (story.rs drawing_children, test structure.rs drawings_and_media).
20.4.2.38txbxContent (Rich Text Box Content Container)implemented34txbxContent is read as block content into Drawing::text_box (story.rs drawing_children, test structure.rs drawings_and_media).
20.4.2.39wgp (WordprocessingML Shape Group)implemented23A group's shapes, text boxes, pictures and nested groups become Drawing::members, laid out and painted in order at their boxes (story/group.rs, textbox.rs layout_group; tests structure.rs group_members_are_placed_through_their_groups, layout.rs groups_paint_their_members_in_place).
20.4.2.40whole (Whole E2O Formatting)not implemented00Not read.
20.4.2.41wpc (WordprocessingML Drawing Canvas)incomplete11A canvas's shapes, pictures and groups become members at their offsets in the canvas; an empty canvas keeps its extent (story/group.rs; test structure.rs canvas_members_keep_their_offsets); wpc:bg and wpc:whole are not read.
20.4.2.42wsp (WordprocessingML Shape)implemented11WordprocessingML shapes are read for their text box content (story.rs drawing_children, test structure.rs drawings_and_media) and drawn with their geometry, with or without text (test layout.rs shapes_without_text_paint_their_geometry).
20.4.2.43xfrm (2D Transform for Graphic Frames)not implemented00Not read.
20.4.3Simple Typesincomplete1318The alignment, relative positioning, wrap distance and wrap side types are read, as their rows say; ST_PositionOffset is not.
20.4.3.1ST_AlignH (Relative Horizontal Alignment Positions)implemented24left, center, right, inside and outside are read (story.rs position_align) and placed by layout (flow.rs Frame::place; tests structure.rs drawing_alignment_and_bases, layout.rs aligned_floats_sit_on_their_base).
20.4.3.2ST_AlignV (Vertical Alignment Definition)implemented22top, center, bottom, inside and outside are read (story.rs position_align) and placed by layout (flow.rs Frame::place; tests structure.rs drawing_alignment_and_bases, layout.rs aligned_floats_sit_on_their_base).
20.4.3.3ST_PositionOffset (Absolute Position Offset Value)not implemented00No reader code cites this type; positions and wrapping values are read only as the 20.4.2 rows say.
20.4.3.4ST_RelFromH (Horizontal Relative Positioning)implemented24Every value is read (story.rs position_base) and laid out against the page, margins, column or page margin areas (flow.rs Frame::horizontal; tests structure.rs drawing_alignment_and_bases, layout.rs aligned_floats_sit_on_their_base); character is laid out from the column.
20.4.3.5ST_RelFromV (Vertical Relative Positioning)implemented22Every value is read (story.rs position_base) and laid out against the page, margins, paragraph or margin areas (flow.rs Frame::vertical; tests structure.rs drawing_alignment_and_bases, layout.rs aligned_floats_sit_on_their_base); line is laid out from the paragraph's first line, insideMargin as the top margin and outsideMargin as the bottom margin.
20.4.3.6ST_WrapDistance (Distance from Text)implemented12distT, distB, distL and distR are read from wp:anchor and the wrap elements (story.rs wrap_distances, test fixtures.rs wrapping_frames_and_floating_tables_are_read) and keep text away (wrap.rs Exclusion).
20.4.3.7ST_WrapText (Text Wrapping Location)implemented44wrapText is read (story.rs wrap_side, test fixtures.rs wrapping_frames_and_floating_tables_are_read): both sides, left, right or the side with more room (wrap.rs band, tests wrap.rs square_wrapping_leaves_the_allowed_sides, layout.rs one_sided_and_top_and_bottom_wrapping).

22 Shared MLs Reference Material

ClauseFeatureStatusCode citationsTest citationsNote
22.2Extended Propertiesincomplete22Application, Company, Pages, Words and Characters are read into Metadata (parts.rs properties, test structure.rs document_properties); the other extended properties are not.
22.2.2Elementsincomplete11Application, Company, Pages, Words and Characters are read; the other elements are not.

ECMA-376 Part 2: Open Packaging Conventions (5th edition, 2021)

6 Abstract package model

ClauseFeatureStatusCode citationsTest citationsNote
6.2Partsincomplete23Part names, media types and XML parts are read; growth hints are ignored and part name syntax is not validated.
6.2.2Part namesincomplete12Part names resolve and compare case-insensitively (test structure.rs part_names_compare_case_insensitively); their syntax is not validated, so malformed names are read as written.
6.2.3Media typesimplemented11A part's media type comes from its Override, else the Default for its extension (package.rs content_type, test structure.rs part_names_compare_case_insensitively).
6.2.4Growth hintout of scope00Growth hints pad parts for in-place editing; readers ignore them.
6.2.5XML usagenot implemented00The clause's XML restrictions are not enforced: a DOCTYPE is skipped rather than refused and any encoding the tokenizer can decode is accepted.
6.3Part addressingout of scope00Pack IRIs address parts from outside the package; docboss reads parts by name.
6.3.2Pack schemeout of scope00Pack IRIs address parts from outside the package; docboss reads parts by name.
6.3.3Resolving a pack IRI to a resourceout of scope00Pack IRIs address parts from outside the package; docboss reads parts by name.
6.3.4Composing a pack IRIout of scope00Pack IRIs address parts from outside the package; docboss reads parts by name.
6.3.5Equivalenceout of scope00Pack IRIs address parts from outside the package; docboss reads parts by name.
6.4Resolving relative referencesimplemented32Relationship targets resolve against the source part's directory with dot segments removed and percent escapes decoded (package.rs resolve_target, unit test resolves_targets).
6.4.2Base IRIsimplemented11The source part is the base IRI of its relationships (package.rs resolve_target, unit test resolves_targets).
6.4.3Examplesout of scope01Informative examples; the unit test resolves_targets follows them.
6.5Relationshipsimplemented53Package and part relationships are read by id with their type, target and target mode (package.rs, tests structure.rs and package.rs names_relationship_parts).
6.5.2Relationships partimplemented21A part's relationships part name is derived from the part name, the package's being _rels/.rels (package.rs rels_name, unit test names_relationship_parts).
6.5.3Relationship markupimplemented21Relationship Id, Type, Target and TargetMode are read; type URIs match on their last segment, so transitional and strict types agree (test structure.rs part_names_compare_case_insensitively).
6.5.4Examplesout of scope00Informative examples.

7 Physical package model

ClauseFeatureStatusCode citationsTest citationsNote
7.2Physical mapping guidelinesincomplete33Parts map to ZIP items by name and media types come from the Media Types stream; interleaved parts are not reassembled.
7.2.1Using features of physical formatsout of scope00Guidance for designers of physical formats.
7.2.2Mapped componentsout of scope00Guidance for designers of physical formats.
7.2.3Mapping media types to partsimplemented22[Content_Types].xml Default and Override elements are read (package.rs read_content_types, tests structure.rs part_names_compare_case_insensitively and write package.rs every_part_has_a_content_type).
7.2.4Interleavingnot implemented00Interleaved parts (split into [n].piece items) are not reassembled; such a part is not found.
7.2.5Mapping part names to physical package item namesimplemented11A part name maps to the ZIP item of the same name without its leading slash (package.rs existing_name, test structure.rs part_names_compare_case_insensitively).
7.3Mapping to a ZIP fileincomplete67Parts are read from and written to ZIP items with the Media Types stream; interleaved pieces and growth hints are not handled.
7.3.2Mapping part dataimplemented11Part data is the ZIP item's data (test structure.rs part_names_compare_case_insensitively).
7.3.3ZIP item namesimplemented11ZIP item names are decoded per APPNOTE and matched to part names (test structure.rs part_names_compare_case_insensitively).
7.3.4Mapping logical item names to ZIP item namesimplemented11The writer stores each part under its name without the leading slash (crates/docboss-write/src/package.rs, test package.rs every_part_has_a_content_type).
7.3.5Mapping ZIP item names to logical item namesimplemented12ZIP item names match part names case-insensitively (test structure.rs part_names_compare_case_insensitively).
7.3.6ZIP package limitationsout of scope00Constraints on producers; the reader accepts ZIP64 archives and names beyond them.
7.3.7Mapping the Media Types streamimplemented22The Media Types stream is the [Content_Types].xml item, read by the reader and written by the writer (tests structure.rs part_names_compare_case_insensitively and package.rs every_part_has_a_content_type).
7.3.8Mapping the growth hintout of scope00Growth hints pad parts for in-place editing; readers ignore them.

8 Core properties

ClauseFeatureStatusCode citationsTest citationsNote
8.2Core Properties partimplemented11The core properties part is found through the package relationship (parts.rs properties, test structure.rs document_properties).
8.3Core properties markupincomplete33Title, subject, creator, keywords, description, lastModifiedBy, revision, created, modified and category are read; contentStatus, identifier, language, lastPrinted and version are not.
8.3.2Support for versioning and extensibilitynot implemented00Markup compatibility attributes in the core properties part are not processed.
8.3.3coreProperties elementimplemented11The coreProperties root is read (test structure.rs document_properties).
8.3.4Core property elementsincomplete11Ten core property elements are read (test structure.rs document_properties); contentStatus, identifier, language, lastPrinted and version are not.

10 Digital signatures

ClauseFeatureStatusCode citationsTest citationsNote
10.2Overview of OPC-specific restrictions and extensions to “XML-Signature Syntax and Processing”out of scope00Digital signatures are not read or verified; reading content does not depend on them.
10.3Choosing content to signout of scope00Digital signatures are not read or verified; reading content does not depend on them.
10.4Digital signature partsout of scope00Digital signatures are not read or verified; reading content does not depend on them.
10.4.2Digital Signature Origin partout of scope00Digital signatures are not read or verified; reading content does not depend on them.
10.4.3Digital Signature XML Signature partout of scope00Digital signatures are not read or verified; reading content does not depend on them.
10.4.4Digital Signature Certificate partout of scope00Digital signatures are not read or verified; reading content does not depend on them.
10.5Digital signature markupout of scope00Digital signatures are not read or verified; reading content does not depend on them.
10.5.2Support for versioning and extensibilityout of scope00Digital signatures are not read or verified; reading content does not depend on them.
10.5.3Signature elementout of scope00Digital signatures are not read or verified; reading content does not depend on them.
10.5.4SignedInfo elementout of scope00Digital signatures are not read or verified; reading content does not depend on them.
10.5.5CanonicalizationMethod elementout of scope00Digital signatures are not read or verified; reading content does not depend on them.
10.5.6SignatureMethod elementout of scope00Digital signatures are not read or verified; reading content does not depend on them.
10.5.7Reference elementout of scope00Digital signatures are not read or verified; reading content does not depend on them.
10.5.8Transform elementout of scope00Digital signatures are not read or verified; reading content does not depend on them.
10.5.9RelationshipReference elementout of scope00Digital signatures are not read or verified; reading content does not depend on them.
10.5.10RelationshipsGroupReference elementout of scope00Digital signatures are not read or verified; reading content does not depend on them.
10.5.11DigestMethod elementout of scope00Digital signatures are not read or verified; reading content does not depend on them.
10.5.12Object elementout of scope00Digital signatures are not read or verified; reading content does not depend on them.
10.5.13Manifest elementout of scope00Digital signatures are not read or verified; reading content does not depend on them.
10.5.14SignatureProperty elementout of scope00Digital signatures are not read or verified; reading content does not depend on them.
10.5.15SignatureTime elementout of scope00Digital signatures are not read or verified; reading content does not depend on them.
10.5.16Format elementout of scope00Digital signatures are not read or verified; reading content does not depend on them.
10.5.17Value elementout of scope00Digital signatures are not read or verified; reading content does not depend on them.
10.5.18XPath elementout of scope00Digital signatures are not read or verified; reading content does not depend on them.
10.6Relationships transform algorithmout of scope00Digital signatures are not read or verified; reading content does not depend on them.
10.7Digital signature exampleout of scope00Digital signatures are not read or verified; reading content does not depend on them.
10.8Generating signaturesout of scope00Digital signatures are not read or verified; reading content does not depend on them.
10.9Validating signaturesout of scope00Digital signatures are not read or verified; reading content does not depend on them.

ECMA-376 Part 3: Markup Compatibility and Extensibility (5th edition, 2015)

7 MCE Elements and Attributes

ClauseFeatureStatusCode citationsTest citationsNote
7.2Ignorable Attributenot implemented00mc:Ignorable is not read; elements in namespaces the reader does not know are skipped whether or not they are ignorable.
7.3ProcessContent Attributenot implemented00ProcessContent is not read; the content of unknown elements is dropped.
7.4MustUnderstand Attributenot implemented00MustUnderstand is not read; documents that set it are not refused.
7.5AlternateContent Elementimplemented21AlternateContent is read at block, run and drawing level through one chooser (story.rs alternate_content, test structure.rs markup_compatibility_and_content_controls).
7.6Choice Elementimplemented11The first Choice whose Requires namespaces the reader understands is read (test structure.rs markup_compatibility_and_content_controls).
7.7Fallback Elementimplemented11Fallback is read when no Choice is understood (test structure.rs markup_compatibility_and_content_controls).

9 Semantic Definitions and Reference Processing Model

ClauseFeatureStatusCode citationsTest citationsNote
9.1Overviewout of scope00Informative overview.
9.2Step 1: Processing the Ignorable and ProcessContent Attributesnot implemented00Step 1 is not performed: Ignorable and ProcessContent are not read.
9.3Step 2: Processing the AlternateContent, Choice and Fallback Elementsimplemented23Choice and Fallback selection follows step 2 (story.rs alternate_content, test structure.rs markup_compatibility_and_content_controls).
9.4Step 3: Processing the MustUnderstand Attribute and Creating the Output Documentnot implemented00Step 3 is not performed: MustUnderstand is not checked.

[MS-DOC]: Word (.doc) Binary File Format

2 Structures

ClauseFeatureStatusCode citationsTest citationsNote
2.1File Structureincomplete74The WordDocument, table and Data streams, the summary streams and the Equation Native streams of the ObjectPool are read; other ObjectPool objects, custom XML, macros, signatures and IRM storages are not.
2.1.1WordDocument Streamimplemented11The WordDocument stream holds the FIB, the text and the FKPs (document.rs, test read.rs text_matches_libreoffice).
2.1.3Data Streamimplemented11The Data stream is read for PICF picture data (test read.rs inline_picture).
2.1.4ObjectPool Storageincomplete21The Equation Native stream of each object storage is read as an Equation Editor 3 equation and given to the preview picture of the field whose separator names the storage (document.rs equations, test read.rs equation_editor_objects); other embedded objects are not read.
2.1.5Custom XML Data Storagenot implemented00Custom XML data storage is not read.
2.1.6Summary Information Streamimplemented11SummaryInformation gives the title, author and other metadata (test read.rs metadata_and_format).
2.1.7Document Summary Information Streamincomplete10DocumentSummaryInformation gives the company and counts (property.rs); no DOC test checks those fields.
2.1.8Encryption Streamnot implemented00Not read.
2.1.9Macros Storageout of scope00Macros are code, not content.
2.1.10XML Signatures Storageout of scope00Signatures are not read or verified; reading content does not depend on them.
2.1.11Signatures Streamout of scope00Signatures are not read or verified; reading content does not depend on them.
2.1.12Information Rights Management Data Space Storagenot implemented00IRM-protected documents are not decrypted.
2.1.13Protected Content Streamnot implemented00IRM-protected documents are not decrypted.
2.2Fundamental Conceptsincomplete137CPs, PLCs, STTBs, sprm property storage, RC4 decryption and XOR obfuscation of Word 97 and later files are handled.
2.2.1Character Position (CP)implemented11CPs map to stream offsets through the piece table (text.rs, test read.rs text_matches_libreoffice).
2.2.2PLCimplemented11PLCs are read as CP arrays with fixed-size data elements (document.rs plc, test read.rs text_matches_libreoffice).
2.2.3Valid Selectionout of scope00Selection validity constrains editing, not reading.
2.2.4STTBimplemented21Extended and non-extended STTBs are read with their extra data (sttb.rs, test read.rs font_table).
2.2.5Property Storageimplemented42grpprls are walked with operand sizes from the spra bits (sprm.rs, unit tests and read.rs character_and_paragraph_formatting).
2.2.6Encryption and Obfuscation (Password to Open)incomplete52RC4 and RC4 CryptoAPI encryption are decrypted with the password (crypt.rs, test read.rs encrypted_documents), and XOR obfuscation undone with the docboss-crypt XOR array, the password tried through the document code page and by low bytes (document.rs deobfuscate, test read.rs xor_obfuscated_documents, fixtures made by tools/xor_obfuscate.py); password-protected Word 6 and 95 files are refused.
2.3Document Partsincomplete129All seven document parts are located by their CP ranges; no test has a header text box.
2.3.1Main Documentimplemented11The main document range comes first in the CP space (document.rs, test read.rs text_matches_libreoffice).
2.3.2Footnotesimplemented22Footnote text is read per note through PlcffndTxt (document.rs, test read.rs notes_comments_fields_bookmarks).
2.3.3Headersimplemented11Header and footer stories are read through Plcfhdd, each section inheriting unset ones from the previous section (document.rs, test read.rs sections_and_headers).
2.3.4Commentsimplemented22Comment text is read per comment through PlcfandTxt (document.rs, test read.rs notes_comments_fields_bookmarks).
2.3.5Endnotesimplemented22Endnote text is read per note through PlcfendTxt (document.rs, test read.rs notes_comments_fields_bookmarks).
2.3.6Textboxesimplemented21Text box stories are read through PlcftxbxTxt (document.rs, test read.rs floating_picture_and_text_box).
2.3.7Header Textboxesincomplete10Header text box stories are read through PlcfHdrtxbxTxt like main text boxes (document.rs); no test covers them.
2.4Document Contentincomplete1110Text, paragraph and cell boundaries, tables and direct and style formatting are read; VtHyperlink application data is not.
2.4.1Retrieving Textimplemented22Text is retrieved piece by piece, 8-bit pieces through the FcCompressed mapping (story.rs, test read.rs text_matches_libreoffice).
2.4.2Determining Paragraph Boundariesimplemented21Paragraph marks end paragraphs; PAPX runs give their properties (story.rs, test read.rs text_matches_libreoffice).
2.4.3Overview of Tablesimplemented32Table depth and TTP marks build rows and nested tables (story.rs, test read.rs tables_with_merges_and_nesting).
2.4.4Determining Cell Boundariesimplemented11Cell marks end cells at each table depth (story.rs, test read.rs tables_with_merges_and_nesting).
2.4.5Determining Row Boundariesimplemented11Row ends come from TTP paragraphs at each depth (story.rs, test read.rs tables_with_merges_and_nesting).
2.4.6Applying Propertiesimplemented23Styles, CHPX and PAPX formatting and list properties are applied in the order the clause gives (story.rs, test read.rs character_and_paragraph_formatting).
2.4.7Application Data For VtHyperlinknot implemented00VtHyperlink application data is not read; hyperlinks come from HYPERLINK fields.
2.5The File Information Blockincomplete1310FibBase, FibRgLw97 and FibRgFcLcb97 are read; FibRgW97, the later FibRgFcLcb blocks and FibRgCswNew are skipped by their counts. The Word 6 and 95 FIB (nFib below 0x00C1: counts at 0x34, 38 fc/lcb pairs at 0x58 in the Word 97 order) is read too (word6.rs fill_fib, test read.rs word6_formatting_sections_and_headers).
2.5.1Fibimplemented13The FIB is read from the start of the WordDocument stream (fib.rs, test read.rs text_matches_libreoffice).
2.5.2FibBaseimplemented11FibBase gives wIdent, nFib, lid, the complex, encrypted, table stream and obfuscation flags and the encryption key (fib.rs, test read.rs text_matches_libreoffice).
2.5.3FibRgW97not implemented00FibRgW97 is skipped by its count; nothing in it is needed.
2.5.4FibRgLw97implemented21FibRgLw97 gives the character count of every document part (fib.rs, test read.rs text_matches_libreoffice).
2.5.5FibRgFcLcbimplemented11The FibRgFcLcb pairs are read as far as cbRgFcLcb says (fib.rs, test read.rs text_matches_libreoffice).
2.5.6FibRgFcLcb97implemented21The FibRgFcLcb97 offsets locate every table stream structure docboss reads (fib.rs, test read.rs text_matches_libreoffice).
2.5.7FibRgFcLcb2000not implemented00Skipped by its count: nothing docboss reads lives there.
2.5.8FibRgFcLcb2002not implemented00Skipped by its count: nothing docboss reads lives there.
2.5.9FibRgFcLcb2003not implemented00Skipped by its count: nothing docboss reads lives there.
2.5.10FibRgFcLcb2007not implemented00Skipped by its count: nothing docboss reads lives there.
2.5.11FibRgCswNewnot implemented00Skipped by its count: nothing docboss reads lives there.
2.5.12FibRgCswNewData2000not implemented00Skipped by its count: nothing docboss reads lives there.
2.5.13FibRgCswNewData2007not implemented00Skipped by its count: nothing docboss reads lives there.
2.5.14Determining the nFibincomplete11Word 97 and later files are told from FibBase.nFib alone (fib.rs is_word97); FibRgCswNew.nFibNew is not consulted.
2.5.15How to read the FIBimplemented42The FIB is read in the order the clause gives, each block sized by the count before it (fib.rs, test read.rs text_matches_libreoffice).
2.6Single Property Modifiersincomplete1312The character, paragraph, table and section sprms that map to model properties are applied; the rest are skipped by their operand size, and picture sprms are not read.
2.6.1Character Propertiesincomplete13The sprms that map to model properties are applied (props.rs or table.rs, test read.rs character_and_paragraph_formatting); the others are skipped by their operand size.
2.6.2Paragraph Propertiesincomplete23The sprms that map to model properties are applied (props.rs or table.rs, test read.rs character_and_paragraph_formatting), the frame sprms among them (props.rs apply_frame_prl, test read.rs drop_cap_frames); the others are skipped by their operand size.
2.6.3Table Propertiesincomplete64The sprms that map to model properties are applied (props.rs or table.rs, test read.rs tables_with_merges_and_nesting), the floating table sprms among them (table.rs table_float, test read.rs shape_wrapping_and_floating_tables); the others are skipped by their operand size.
2.6.4Section Propertiesincomplete32The sprms that map to model properties are applied (props.rs or table.rs, test read.rs sections_and_headers); the others are skipped by their operand size.
2.6.5Picture Propertiesnot implemented00Picture sprms are not read; pictures take their size from the PICF.
2.7Document Propertiesnot implemented00The Dop is not read; document settings keep their defaults, such as the 720-twip default tab stop.
2.7.1Dopnot implemented00The Dop is not read; document settings keep their defaults, such as the 720-twip default tab stop.
2.7.2DopBasenot implemented00The Dop is not read; document settings keep their defaults, such as the 720-twip default tab stop.
2.7.3Dop95not implemented00The Dop is not read; document settings keep their defaults, such as the 720-twip default tab stop.
2.7.4Dop97not implemented00The Dop is not read; document settings keep their defaults, such as the 720-twip default tab stop.
2.7.5Dop2000not implemented00The Dop is not read; document settings keep their defaults, such as the 720-twip default tab stop.
2.7.6Dop2002not implemented00The Dop is not read; document settings keep their defaults, such as the 720-twip default tab stop.
2.7.7Dop2003not implemented00The Dop is not read; document settings keep their defaults, such as the 720-twip default tab stop.
2.7.8Dop2007not implemented00The Dop is not read; document settings keep their defaults, such as the 720-twip default tab stop.
2.7.9Dop2010not implemented00The Dop is not read; document settings keep their defaults, such as the 720-twip default tab stop.
2.7.10Dop2013not implemented00The Dop is not read; document settings keep their defaults, such as the 720-twip default tab stop.
2.7.11Copts60not implemented00The Dop is not read; document settings keep their defaults, such as the 720-twip default tab stop.
2.7.12Copts80not implemented00The Dop is not read; document settings keep their defaults, such as the 720-twip default tab stop.
2.7.13Coptsnot implemented00The Dop is not read; document settings keep their defaults, such as the 720-twip default tab stop.
2.7.14Asumyinot implemented00The Dop is not read; document settings keep their defaults, such as the 720-twip default tab stop.
2.7.15Dogridnot implemented00The Dop is not read; document settings keep their defaults, such as the 720-twip default tab stop.
2.7.16DopTypographynot implemented00The Dop is not read; document settings keep their defaults, such as the 720-twip default tab stop.
2.7.17DopMthnot implemented00The Dop is not read; document settings keep their defaults, such as the 720-twip default tab stop.
2.8PLCsincomplete2718The PLCs for formatting, notes, comments, bookmarks, headers, sections, shapes, text boxes and pieces are read; Plcfld, proofing, factoid, revision and web PLCs are not.
2.8.1Plcbkfincomplete10Comment range starts (PlcfAtnBkf) are read (document.rs comment_references); no test checks the ranges.
2.8.2Plcbkfdnot implemented00Factoid bookmarks are not read.
2.8.3Plcbklincomplete10Comment range ends (PlcfAtnBkl) are read (document.rs comment_references); no test checks the ranges.
2.8.4Plcbkldnot implemented00Factoid bookmarks are not read.
2.8.5PlcBteChpximplemented21The CHPX bin table locates the character FKPs (document.rs, test read.rs character_and_paragraph_formatting).
2.8.6PlcBtePapximplemented21The PAPX bin table locates the paragraph FKPs (document.rs, test read.rs character_and_paragraph_formatting).
2.8.7PlcfandRefimplemented21Comment references are read with their ATRDPre10 author and bookmark data (document.rs, test read.rs notes_comments_fields_bookmarks).
2.8.8PlcfandTxtimplemented11Comment text ranges are read (document.rs, test read.rs notes_comments_fields_bookmarks).
2.8.9PlcfAsumyout of scope00Auto summary data does not change content.
2.8.10Plcfbkfimplemented21Bookmark starts are read (document.rs, test read.rs notes_comments_fields_bookmarks).
2.8.11Plcfbkfdnot implemented00Factoid bookmarks are not read.
2.8.12Plcfbklimplemented11Bookmark ends are read (document.rs, test read.rs notes_comments_fields_bookmarks).
2.8.13Plcfbkldnot implemented00Factoid bookmarks are not read.
2.8.14Plcfcookieout of scope00Cookie data does not change content.
2.8.15PlcfcookieOldout of scope00Cookie data does not change content.
2.8.16PlcfendRefimplemented11Endnote references are read (document.rs, test read.rs notes_comments_fields_bookmarks).
2.8.17PlcfendTxtimplemented11Endnote text ranges are read (document.rs, test read.rs notes_comments_fields_bookmarks).
2.8.18Plcffactoidnot implemented00Smart tag factoids are not read; their text is.
2.8.19PlcffndRefimplemented21Footnote references are read (document.rs, test read.rs notes_comments_fields_bookmarks).
2.8.20PlcffndTxtimplemented11Footnote text ranges are read (document.rs, test read.rs notes_comments_fields_bookmarks).
2.8.21Plcfgramout of scope00Proofing state does not change content.
2.8.22Plcfhddimplemented21Header and footer ranges are read per section and story kind (document.rs, test read.rs sections_and_headers).
2.8.23PlcfHdrtxbxTxtincomplete10Header text box story ranges are read (document.rs); no test covers them.
2.8.24Plcfladout of scope00Language auto-detection state does not change content.
2.8.25Plcfldnot implemented00Fields are found by their 0x13, 0x14 and 0x15 characters; Plcfld is not read.
2.8.26PlcfSedimplemented22Section boundaries are read with each Sed's SEPX offset (document.rs, test read.rs sections_and_headers).
2.8.27PlcfSpaimplemented22Shape anchors are read with their Spa data (document.rs, test read.rs floating_picture_and_text_box).
2.8.28Plcfsplout of scope00Proofing state does not change content.
2.8.29PlcfTchout of scope00The text cache does not change content.
2.8.30PlcfTxbxBkdnot implemented00Linked text box chains are not followed; each text box story is read whole.
2.8.31PlcfTxbxHdrBkdnot implemented00Linked text box chains are not followed; each text box story is read whole.
2.8.32PlcftxbxTxtimplemented22Text box story ranges are read (document.rs, test read.rs floating_picture_and_text_box).
2.8.33Plcfuimnot implemented00Not read.
2.8.34PlcfWKBnot implemented00Not read.
2.8.35PlcPcdimplemented11The piece table is read from the Clx (document.rs, test read.rs text_matches_libreoffice).
2.9Basic Typesincomplete9179Basic types are read where the structures above need them; each row says whether its type is.
2.9.1Acdnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.2Afdnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.3ASUMYnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.4ATNBEnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.5AtrdExtranot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.6ATRDPost10not implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.7ATRDPre10implemented11ATRDPre10 gives each comment's author index and bookmark id (test read.rs notes_comments_fields_bookmarks).
2.9.8BKCnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.9BKFimplemented11BKF entries pair bookmark starts with their ends (test read.rs notes_comments_fields_bookmarks).
2.9.10BKFDnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.11BKLimplemented11BKL entries end bookmarks (test read.rs notes_comments_fields_bookmarks).
2.9.12BKLDnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.13BlockSelnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.14Bool16not implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.15Bool8not implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.16Brcincomplete11Brc values are read with their fShadow bit (props.rs brc; test props.rs border_shadow_bits); fFrame is not.
2.9.17Brc80incomplete22Brc80 values are read for paragraph, cell and page borders (props.rs brc80; test props.rs page_borders_from_section_sprms), with fShadow; fFrame is not.
2.9.18Brc80MayBeNilnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.19BrcCvOperandnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.20BrcMayBeNilnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.21BrcOperandimplemented11The BrcOperand of sprmSBrcTop to sprmSBrcRight is read past its cb byte into a page border side (props.rs apply_sep; test props.rs page_borders_from_section_sprms).
2.9.22BrcTypeincomplete11none, single, thick, double, dotted, dashed, dotDash, dotDotDash, dashSmallGap and dashDotStroked are read, and 0x40 to 0xE3 as art borders, which are not drawn (props.rs brc_style; test props.rs dashed_border_types); the other types are read as single.
2.9.23BxPapnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.24CAPInot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.25CDBnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.26CellHideMarkOperandnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.27CellRangeFitTextnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.28CellRangeNoWrapnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.29CellRangeTextFlowimplemented11sprmTTextFlow sets the text flow of its range of cells (table.rs RowInfo::parse, test table.rs cells_take_their_text_flow).
2.9.30CellRangeVertAlignnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.31CFitTextOperandnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.32Chpxnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.33ChpxFkpimplemented31ChpxFkp pages give character runs and their CHPX (test read.rs character_and_paragraph_formatting).
2.9.34Cidnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.35CidAllocatednot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.36CidFcinot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.37CidMacronot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.38Clximplemented31The Clx is read as Prc entries then the Pcdt (test read.rs text_matches_libreoffice).
2.9.39CMajorityOperandnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.40Cmtnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.41CNFOperandnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.42CNSnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.43COLORREFimplemented11COLORREF values become colors, fAuto giving auto (test read.rs character_and_paragraph_formatting).
2.9.44COSLnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.45CSSAnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.46CSSAOperandnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.47CSymbolOperandnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.48CTBnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.49CTBWRAPPERnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.50Customizationnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.51DCSimplemented12sprmPDcs's DCS gives a frame's drop cap type and lines (props.rs apply_frame_prl, test read.rs drop_cap_frames).
2.9.52DefTableShd80Operandnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.53DefTableShdOperandnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.54DispFldRmOperandnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.55Dofrnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.56DofrFsnnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.57DofrFsnFnmnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.58DofrFsnNamenot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.59DofrFsnpnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.60DofrFsnSpbdnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.61Dofrhnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.62DofrRglstsfnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.63Dofrtnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.64DPCIDnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.65DTTMimplemented11DTTM values become ISO 8601 dates (test read.rs notes_comments_fields_bookmarks).
2.9.66FACTOIDINFOnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.67FactoidSplsnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.68FarEastLayoutOperandnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.69Fatlnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.70FBKFnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.71FBKFDnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.72FBKLDnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.73FcCompressedimplemented12FcCompressed selects 8-bit or UTF-16 pieces, 8-bit through the Windows-1252 exceptions (test read.rs text_matches_libreoffice).
2.9.74FCCTnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.75Fcinot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.76FCKSnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.77FCKSOLDnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.78FFDatanot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.79FFDataBitsnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.80FFIDnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.81FFMnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.82FFNimplemented41FFN entries give font names, families and pitch (test read.rs font_table).
2.9.83FieldMapBasenot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.84FieldMapDataItemnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.85FieldMapInfonot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.86FieldMapTerminatornot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.87FilterDataItemnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.88Fldimplemented11Fld markers are folded into fields (test read.rs notes_comments_fields_bookmarks).
2.9.89fldchimplemented11fldch values tell begin, separator and end (test read.rs notes_comments_fields_bookmarks).
2.9.90fltincomplete11Only flt 0x58 (HYPERLINK) changes how a field is read; other types keep their cached results.
2.9.91FNFBnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.92FNIFnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.93FNPInot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.94FOBJHnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.95FrameTextFlowOperandnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.96FSDAPnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.97Fsnknot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.98Fssdnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.99FssUnitsnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.100FTOnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.101Ftsnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.102FtsWWidth_Indentnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.103FtsWWidth_Tablenot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.104FtsWWidth_TablePartnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.105FTXBXNonReusablenot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.106FTXBXSnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.107FTXBXSReusablenot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.108GOSLnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.109GrammarSplsnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.110grffldEndnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.111grfhicnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.112GRFSTDnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.113GrLPUpxSwnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.114GrpPrlAndIstdnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.115HFDnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.116HFDBitsnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.117Hplxsdrnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.118HresiOperandnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.119Icoincomplete10Ico values are read (props.rs or text.rs); no test covers them.
2.9.120IDPCInot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.121Ipatincomplete11Clear and solid fill, and the percentage patterns (5% to 90%, 12.5%, 15%) mix the foreground into the background as LibreOffice paints them (props.rs pattern_fill, tests props.rs shading_patterns_mix_their_colors, read.rs word95_tables_merge_and_shade_their_cells); stripes, crosses and the other new percentages keep the background.
2.9.122IScrollTypenot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.123ItcFirstLimnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.124Kcmnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.125Kmenot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.126Ktnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.127Kulnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.128LadSplsnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.129LBCOperandnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.130LEGOXTR_V11not implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.131LFOimplemented11LFO entries become numbering instances (test read.rs list_labels).
2.9.132LFODatanot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.133LFOLVLnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.134LIDnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.135LPStdnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.136LPStshinot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.137LPStshiGrpPrlnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.138LPUpxChpxnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.139LPUpxChpxRMnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.140LPUpxPapxnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.141LPUpxPapxRMnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.142LPUpxRmnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.143LPUpxTapxnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.144LPXCharBuffer9not implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.145LSDnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.146LSPDimplemented11LSPD gives line spacing and its rule (test read.rs character_and_paragraph_formatting).
2.9.147LSTFimplemented11LSTF gives each list's id and level count (test read.rs list_labels).
2.9.148Lstsfnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.149LVLimplemented21LVL gives each level's format, start, text and properties (test read.rs list_labels).
2.9.150LVLFimplemented11LVLF gives each level's fixed fields (test read.rs list_labels).
2.9.151MacroNamenot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.152MacroNamesnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.153MathPrOperandnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.154Mcdnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.155MDPnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.156MFPFnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.157NilBrcnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.158NilPICFAndBinDatanot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.159NumRMnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.160NumRMOperandnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.161OcxInfonot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.162ODSOPropertyBasenot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.163ODSOPropertyLargenot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.164ODSOPropertyStandardnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.165ODTnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.166ODTPersist1not implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.167ODTPersist2not implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.168OfficeArtClientAnchornot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.169OfficeArtClientDatanot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.170OfficeArtClientTextboxnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.171OfficeArtContentincomplete21OfficeArtContent is read for the BLIP store and shape containers (document.rs shapes); shapes other than pictures and text boxes are dropped.
2.9.172OfficeArtWordDrawingimplemented11OfficeArtWordDrawing gives each story's drawing container (test read.rs floating_picture_and_text_box).
2.9.173PANOSEnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.174PapxFkpimplemented21PapxFkp pages give paragraph runs and their PAPX (test read.rs character_and_paragraph_formatting).
2.9.175PapxInFkpnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.176PbiGrfOperandnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.177Pcdimplemented11Pcd entries give each piece's offset, compression and Prm (test read.rs text_matches_libreoffice).
2.9.178Pcdtimplemented11The Pcdt holds the PlcPcd (test read.rs text_matches_libreoffice).
2.9.179PChgTabsAddnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.180PChgTabsDelnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.181PChgTabsDelClosenot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.182PChgTabsOperandnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.183PChgTabsPapxOperandnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.184PgbApplyToimplemented11pgbAllPages, pgbFirstPage and pgbAllButFirst are read into the page border display (props.rs apply_sep; test props.rs page_borders_from_section_sprms).
2.9.185PgbOffsetFromimplemented11pgbFromText and pgbFromEdge are read into what page border space is measured from (props.rs apply_sep; test props.rs page_borders_from_section_sprms).
2.9.186PgbPageDepthimplemented11pgbAtFront and pgbAtBack are read into whether page borders are drawn behind the text (props.rs apply_sep; test props.rs page_borders_from_section_sprms).
2.9.187PGPArraynot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.188PGPInfonot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.189PGPOptionsnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.190PICFimplemented11PICF gives a picture's size and scaling (test read.rs inline_picture).
2.9.191PICF_Shapenot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.192PICFAndOfficeArtDataimplemented12PICFAndOfficeArtData leads to the picture's BLIP (test read.rs inline_picture).
2.9.193PICMIDnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.194PlcfGlsynot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.195PlfAcdnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.196PlfCoslnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.197PlfGoslnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.198PlfguidUimnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.199PlfKmenot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.200PlfLfoimplemented11PlfLfo gives the list instances (test read.rs list_labels).
2.9.201PlfLstimplemented21PlfLst gives the list definitions (test read.rs list_labels).
2.9.202PlfMcdnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.203PLRSIDnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.204Pmfsnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.205Pmsnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.206PnFkpChpximplemented11PnFkpChpx entries locate character FKP pages (test read.rs character_and_paragraph_formatting).
2.9.207PnFkpPapximplemented11PnFkpPapx entries locate paragraph FKP pages (test read.rs character_and_paragraph_formatting).
2.9.208PositionCodeOperandimplemented13pcVert and pcHorz give the bases of frames and floating tables (props.rs position_code, tests read.rs drop_cap_frames, shape_wrapping_and_floating_tables).
2.9.209Prcincomplete10Prc values are read (props.rs or text.rs); no test covers them.
2.9.210PrcDatanot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.211PrDrvrnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.212PrEnvLandnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.213PrEnvPortnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.214Prmimplemented11A piece's Prm is read (test read.rs text_matches_libreoffice).
2.9.215Prm0incomplete21Prm0 values are read (props.rs or text.rs); no test covers them.
2.9.216Prm1not implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.217PropRMarknot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.218PropRMarkOperandnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.219ProtectionTypenot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.220PRTInot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.221PTIstdInfoOperandnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.222Rcanot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.223RecipientBasenot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.224RecipientDataItemnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.225RecipientInfonot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.226RecipientTerminatornot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.227Rfsnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.228RgCdbnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.229RgxOcxInfonot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.230RmdThreadingnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.231Rncnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.232RouteSlipnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.233RouteSlipInfonot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.234RouteSlipProtectionEnumnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.235SBkcOperandnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.236SBOrientationOperandnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.237SClmOperandnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.238SDmBinOperandnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.239SDTInot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.240SDTTnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.241SDxaColSpacingOperandnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.242SDxaColWidthOperandnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.243Sedimplemented11Sed entries give each section's SEPX offset (test read.rs sections_and_headers).
2.9.244Selsfnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.245Sepximplemented11SEPX grpprls give section properties (test read.rs sections_and_headers).
2.9.246SFpcOperandnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.247Shdincomplete11Shd values are read, their pattern mixed as the Ipat row says (props.rs shd, test props.rs shading_patterns_mix_their_colors).
2.9.248Shd80incomplete12Shd80 values are read, their pattern mixed as the Ipat row says (props.rs shd80, tests props.rs shading_patterns_mix_their_colors, read.rs word95_tables_merge_and_shade_their_cells).
2.9.249SHDOperandnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.250SLncOperandnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.251SmartTagDatanot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.252SortColumnAndDirectionnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.253Spaimplemented22Spa entries give floating shape anchors, ids, the bx and by origins of each axis, and wr and wrk the wrapping; fBelowText counts only when wr is 3 (document.rs shapes, tests read.rs floating_picture_and_text_box, shape_wrapping_and_floating_tables).
2.9.254SpellingSplsnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.255SPgbPropOperandimplemented11pgbApplyTo, pgbPageDepth and pgbOffsetFrom are read from sprmSPgbProp (props.rs apply_sep; test props.rs page_borders_from_section_sprms).
2.9.256SPLSnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.257SPPOperandnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.258STDimplemented21STD entries give each style's kind, base, next, name and UPXs (test read.rs character_and_paragraph_formatting).
2.9.259Stdfimplemented11Stdf fields give each style's kind and links (test read.rs character_and_paragraph_formatting).
2.9.260StdfBaseimplemented11StdfBase is read with the size STSHI states (test read.rs character_and_paragraph_formatting).
2.9.261StdfPost2000not implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.262StdfPost2000OrNonenot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.263StkCharGRLPUPXnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.264StkCharLPUpxGrLPUpxRMnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.265StkCharUpxGrLPUpxRMnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.266StkListGRLPUPXnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.267StkParaGRLPUPXnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.268StkParaLPUpxGrLPUpxRMnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.269StkParaUpxGrLPUpxRMnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.270StkTableGRLPUPXnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.271STSHimplemented31The STSH is read into model styles (test read.rs character_and_paragraph_formatting).
2.9.272STSHIimplemented11STSHI gives the style count, base size and default fonts (test read.rs character_and_paragraph_formatting).
2.9.273STSHIBnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.274Stshifnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.275StshiLsdnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.276SttbfAssocnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.277SttbfAtnBkmkimplemented11SttbfAtnBkmk names comment range bookmarks (test read.rs notes_comments_fields_bookmarks).
2.9.278SttbfAutoCaptionnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.279SttbfBkmkimplemented11SttbfBkmk gives bookmark names (test read.rs notes_comments_fields_bookmarks).
2.9.280SttbfBkmkBPRepairsnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.281SttbfBkmkFactoidnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.282SttbfBkmkFccnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.283SttbfBkmkProtnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.284SttbfBkmkSdtnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.285SttbfCaptionnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.286SttbfFfnimplemented11SttbfFfn is read into FontEntry values (test read.rs font_table).
2.9.287SttbfGlsynot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.288SttbFnmnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.289SttbfRfsnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.290SttbfRMarknot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.291SttbGlsyStylenot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.292SttbListNamesnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.293SttbProtUsernot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.294SttbRgtplcnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.295SttbSavedBynot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.296SttbTtmbdnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.297SttbW6not implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.298StwUsernot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.299Stynot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.300TabJCnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.301TabLCnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.302TableBordersOperandnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.303TableBordersOperand80not implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.304TableBrc80Operandnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.305TableBrcOperandnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.306TableCellWidthOperandnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.307TableSelnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.308TableShadeOperandnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.309TBCnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.310TBDnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.311TBDeltanot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.312Tbkdnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.313TC80implemented42TC80 gives each cell's merge flags, width and borders (test read.rs tables_with_merges_and_nesting).
2.9.314TCellBrcTypeOperandnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.315Tcgnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.316Tcg255not implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.317TCGRFimplemented23TCGRF gives horizontal and vertical merge flags and the text flow (tests read.rs tables_with_merges_and_nesting, table.rs cells_take_their_text_flow).
2.9.318TcgSttbfnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.319TcgSttbfCorenot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.320Tchnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.321TDefTableOperandimplemented22TDefTableOperand gives cell edges and TC80s (test read.rs tables_with_merges_and_nesting).
2.9.322TDxaColOperandnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.323TextFlowimplemented21grpfTFtbrl and grpfTFtbrlv turn a cell's text top to bottom, grpfTFbtlr bottom to top; the East Asian variants are read as the plain flows (table.rs text_direction, test table.rs cells_take_their_text_flow).
2.9.324TInsertOperandnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.325TIQnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.326TLPnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.327ToggleOperandnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.328Tplcnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.329TplcBuildInnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.330TplcUsernot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.331Ttmbdnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.332UFELnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.333UIDnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.334UidSelnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.335UIMnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.336UpxChpximplemented11UpxChpx gives a style's character grpprl (test read.rs character_and_paragraph_formatting).
2.9.337UPXPaddingnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.338UpxPapximplemented11UpxPapx gives a style's paragraph grpprl (test read.rs character_and_paragraph_formatting).
2.9.339UpxRmnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.340UpxTapxnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.341VerticalAlignnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.342VerticalMergeFlagnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.343VertMergeOperandnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.344Vjcnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.345WHeightAbsimplemented11sprmPWHeightAbs gives a frame's height and whether it is a minimum (props.rs apply_frame_prl).
2.9.346WKBnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.347Wpmsnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.348Wpmsdtnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.349XASnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.350XAS_nonNegnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.351XAS_plusOneimplemented12sprmPDxaAbs and sprmTDxaAbs are read as XAS_plusOne, their special values as alignments (props.rs plus_one_position, test read.rs shape_wrapping_and_floating_tables).
2.9.352XSDRnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.353Xstimplemented21Xst strings give comment authors (test read.rs notes_comments_fields_bookmarks).
2.9.354Xstznot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.355YASnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.356YAS_nonNegnot implemented00No reader code cites this structure; it is not read, or is read only inside a structure whose row names it.
2.9.357YAS_plusOneimplemented12sprmPDyaAbs and sprmTDyaAbs are read as YAS_plusOne, their special values as alignments and 0 as inline (props.rs plus_one_position, test read.rs shape_wrapping_and_floating_tables).

[MS-CFB]: Compound File Binary File Format

2 Structures

ClauseFeatureStatusCode citationsTest citationsNote
2.1Compound File Sector Numbers and Typesimplemented11FREESECT, ENDOFCHAIN, FATSECT and DIFSECT end or skip chains; a chain that loops or runs past the file is cut and reported (tests cfb.rs walks_the_directory_of_a_word_file and fat_loops_are_cut).
2.2Compound File Headerimplemented54Signature, version, sector shifts, the FAT, directory, mini FAT and DIFAT locations and the first 109 DIFAT entries are read for v3 and v4 files (lib.rs parse, test cfb.rs walks_the_directory_of_a_word_file).
2.3Compound File FAT Sectorsimplemented22FAT sectors are read and chains followed with loop detection (tests cfb.rs walks_the_directory_of_a_word_file and fat_loops_are_cut).
2.4Compound File Mini FAT Sectorsimplemented21The mini FAT and the mini stream held by the root entry serve streams below the cutoff (test cfb.rs walks_the_directory_of_a_word_file).
2.5Compound File DIFAT Sectorsimplemented21DIFAT sectors after the header's 109 entries are followed to find every FAT sector (lib.rs parse, test cfb.rs walks_the_directory_of_a_word_file).
2.6Compound File Directory Sectorsimplemented85Directory sectors are read into entries with names, types, sizes and sibling and child links (test cfb.rs walks_the_directory_of_a_word_file).
2.6.1Compound File Directory Entryimplemented31Directory entries are read with their name, object type, links, start sector and size (directory.rs, test cfb.rs walks_the_directory_of_a_word_file).
2.6.2Root Directory Entryimplemented11The root entry's start sector and size locate the mini stream (test cfb.rs walks_the_directory_of_a_word_file).
2.6.3Other Directory Entriesimplemented11Storage and stream entries are read and opened by path (test cfb.rs walks_the_directory_of_a_word_file).
2.6.4Red-Black Treeimplemented21Children are walked through the sibling tree in order and names compare case-insensitively (lib.rs children, test cfb.rs lookup_ignores_case).
2.7Compound File User-Defined Data Sectorsout of scope00User-defined data sectors are ordinary sectors of their stream's chain; nothing more to read.
2.8Compound File Range Lock Sectorout of scope00The range lock sector is never read.
2.9Compound File Size Limitsnot implemented00The size limits are not enforced; reads are bounded by the file's length.

[MS-OLEPS]: Object Linking and Embedding (OLE) Property Set Data Structures

2 Structures

ClauseFeatureStatusCode citationsTest citationsNote
2.1PropertyIdentifierimplemented11Property identifiers 2 to 19 map to metadata fields (property.rs read_metadata, test cfb.rs reads_summary_metadata).
2.2PropertyTypeimplemented11The property type selects the value decoder (property.rs parse_value, test cfb.rs reads_summary_metadata).
2.3CURRENCY (Packet Version)not implemented00Not read: the metadata docboss models uses none of it.
2.4DATE (Packet Version)not implemented00Not read: the metadata docboss models uses none of it.
2.5CodePageStringimplemented11CodePageString values decode through the set's code page, with 874, 1250 to 1258, Mac Roman, UTF-8, UTF-16 and the CJK code pages supported (codepage.rs, test cfb.rs reads_summary_metadata).
2.6DECIMAL (Packet Version)not implemented00Not read: the metadata docboss models uses none of it.
2.7UnicodeStringincomplete10UnicodeString values decode (property.rs parse_value); no test file stores one.
2.8FILETIME (Packet Version)implemented11FILETIME values become ISO 8601 dates (time.rs, unit test filetime_epoch_and_known_dates).
2.9BLOBnot implemented00Not read: the metadata docboss models uses none of it.
2.10IndirectPropertyNamenot implemented00Not read: the metadata docboss models uses none of it.
2.11ClipboardDatanot implemented00Not read: the metadata docboss models uses none of it.
2.12GUID (Packet Version)not implemented00Not read: the metadata docboss models uses none of it.
2.13VersionedStreamnot implemented00Not read: the metadata docboss models uses none of it.
2.14Vector and Array Property Typesnot implemented00Not read: the metadata docboss models uses none of it.
2.14.1Property Types in Variable-Typed Vectors and Arraysnot implemented00Not read: the metadata docboss models uses none of it.
2.14.2VectorHeadernot implemented00Not read: the metadata docboss models uses none of it.
2.14.3ArrayDimensionnot implemented00Not read: the metadata docboss models uses none of it.
2.14.4ArrayHeadernot implemented00Not read: the metadata docboss models uses none of it.
2.15TypedPropertyValueincomplete42VT_I2, VT_I4, VT_UI4, VT_BOOL, VT_FILETIME, VT_LPSTR and VT_LPWSTR decode; other types are kept as Value::Other and reported (property.rs parse_value).
2.16DictionaryEntrynot implemented00Not read: the metadata docboss models uses none of it.
2.17Dictionarynot implemented00Not read: the metadata docboss models uses none of it.
2.18Special Propertiesincomplete11Only the CodePage property is read among the special properties.
2.18.1Dictionary Propertynot implemented00Not read: the metadata docboss models uses none of it.
2.18.2CodePage Propertyimplemented11The CodePage property selects the decoding of the set's strings (test cfb.rs reads_summary_metadata).
2.18.3Locale Propertynot implemented00Not read: the metadata docboss models uses none of it.
2.18.4Behavior Propertynot implemented00Not read: the metadata docboss models uses none of it.
2.19PropertyIdentifierAndOffsetimplemented11Property identifier and offset pairs locate each value (test cfb.rs reads_summary_metadata).
2.20PropertySetimplemented22A property set's size, count and pairs are read with bounds checks (property.rs parse_set, test cfb.rs reads_summary_metadata).
2.21PropertySetStreamincomplete22The stream header and the first property set are read (test cfb.rs reads_summary_metadata); the user-defined second set of DocumentSummaryInformation is not.
2.22Non-Simple Property Set Storage Formatnot implemented00Not read: the metadata docboss models uses none of it.
2.23Property Set Stream and Storage Namesimplemented11The summary streams are opened by their names with the 0x05 prefix (test cfb.rs reads_summary_metadata).
2.24Standard Bindingsnot implemented00Not read: the metadata docboss models uses none of it.
2.24.1Compound File Bindingnot implemented00Not read: the metadata docboss models uses none of it.
2.24.2Alternate Stream Bindingnot implemented00Not read: the metadata docboss models uses none of it.
2.24.3Control Streamnot implemented00Not read: the metadata docboss models uses none of it.
2.24.4Simple Property Set Streamnot implemented00Not read: the metadata docboss models uses none of it.
2.24.5Non-Simple Property Set Storagenot implemented00Not read: the metadata docboss models uses none of it.
2.25Well-Known Property Set Formatsincomplete11SummaryInformation and the DocumentSummaryInformation fields docboss models are read; PropertyBag is not.
2.25.1SummaryInformationimplemented11Title, subject, author, keywords, comments, last author, revision, application, dates and counts are read into Metadata (test cfb.rs reads_summary_metadata).
2.25.2PropertyBagnot implemented00Not read: the metadata docboss models uses none of it.

[MS-OSHARED]: Office Common Data Types and Objects Structures

2 Structures

ClauseFeatureStatusCode citationsTest citationsNote
2.1Common ABNF Definitionsnot implemented00Not used by the DOC reader.
2.2Data Typesincomplete11MSONFC list number formats map to model formats (lists.rs, test read.rs list_labels); the other data types are not used.
2.3Common Objectsnot implemented00Not used by the DOC reader.
2.4Common Algorithmsnot implemented00Not used by the DOC reader.

[MS-ODRAW]: Office Drawing Binary File Format

2 Structures

ClauseFeatureStatusCode citationsTest citationsNote
2.1Custom OfficeArt Typesnot implemented00Not read.
2.2OfficeArt Record Typesincomplete147Record headers, containers, BLIP records and the BLIP store are read for pictures, shape ids for text boxes, the OfficeArtFSP shape type and flips for drawn shapes, and group containers with their OfficeArtFSPGR coordinate space and the OfficeArtChildAnchor of each member, nested groups included (picture.rs shape_groups, story.rs group_members; tests read.rs inline_picture, floating_picture_and_text_box and group_members_and_shaded_fill, picture.rs shape_type_flips_rotation_and_line_ends); shapes that are neither pictures, text boxes, preset shape types nor groups are dropped and reported.
2.3Propertiesincomplete4335The pib property, the fill, line and text frame properties, lineDashing, lineJoinStyle and lineEndCapStyle, the line end properties, rotation, the shaded fills (fillType msofillShade to msofillShadeTitle with fillBackColor, fillAngle and fillFocus, drawn as gradients; test read.rs group_members_and_shaded_fill), txflTextFlow (test picture.rs shape_format_reads_fill_line_insets_and_anchor), adjustValue to adjust8Value for the shape types whose preset guides take them as the same fraction (inline.rs Geometry::from_shape_type_adjusted; tests picture.rs shape_type_flips_rotation_and_line_ends, inline.rs shape_type_adjust_values_carry_over), posh, posrelh, posv and posrelv, and the wrap distances dxWrapDistLeft, dyWrapDistTop, dxWrapDistRight and dyWrapDistBottom (test read.rs shape_wrapping_and_floating_tables) of OfficeArtFOPT and OfficeArtTertiaryFOPT are read (picture.rs); the others are not.
2.4Enumerationsincomplete1110MSOLINEDASHING, MSOLINEJOIN, MSOLINECAP, MSOLINEEND, MSOLINEENDWIDTH and MSOLINEENDLENGTH are read for shape outlines, MSOFILLTYPE for shaded fills, MSOTXFL for text box flow, and MSOSPT maps shape types to DrawingML preset geometries for DOC shapes and VML (picture.rs line_dashing, shape_format and line_end, inline.rs Geometry::from_shape_type; tests picture.rs shape_format_reads_line_dashing_join_and_cap and shape_type_flips_rotation_and_line_ends, inline.rs shape_types_name_presets); the other enumerations are not.
2.5Algorithmsnot implemented00Not read.

[MS-WMF]: Windows Metafile Format

2 Structures

ClauseFeatureStatusCode citationsTest citationsNote
2.1WMF Constantsincomplete11RecordType, BinaryRasterOperation (R2_BLACK, R2_WHITE, R2_NOP and copy; other mix modes are drawn as copy), BrushStyle, CharacterSet (the symbol character set maps to the symbol-font private-use codes), MapMode, PenStyle (styles, caps and joins), PolyFillMode, TernaryRasterOperation (SRCCOPY, SRCPAINT and SRCAND as black or white keyed out, NOTSRCCOPY, PATCOPY, BLACKNESS, WHITENESS; others noted), ExtTextOutOptions and TextAlignmentMode are read (docboss-metafile dc.rs, wmf.rs); the other enumerations are not needed for drawing or are ignored.
2.2WMF Objectsincomplete41Brush, Font and Pen objects, the DeviceIndependentBitmap with BitmapCoreHeader, BitmapInfoHeader, BitmapV4Header and BitmapV5Header (1 to 32 bits, bit fields, RLE4 and RLE8; bitmap.rs, tests bitmap.rs), LogBrush, PolyPolygon, PointS and Rect are read. Palette and Region objects only hold their table slot; Bitmap16 pattern brushes fill grey; DIB pattern brushes fill with the bitmap's average color.
2.3WMF Recordsincomplete203Records are played through a device context model into paths, text and bitmaps that the layout scales into the picture's rectangle (docboss-metafile wmf.rs, dc.rs; docboss-layout metafile.rs; tests tests/play.rs). What is left out is listed per record class below and reported as a diagnostic per picture.
2.3.1Bitmap Record Typesincomplete10META_DIBBITBLT, META_DIBSTRETCHBLT and META_STRETCHDIB are drawn, with or without a bitmap (without one they paint the brush); META_BITBLT and META_STRETCHBLT with a Bitmap16 and META_SETDIBTODEV are reported and not drawn.
2.3.2Control Record Typesimplemented31META_PLACEABLE gives the frame and its units per inch; a file without it takes its frame from the first window origin and extent. META_HEADER is checked and META_EOF ends playback (wmf.rs; test tests/play.rs wmf_records_draw_the_same_shapes).
2.3.3Drawing Record Typesincomplete90META_ARC, META_CHORD, META_ELLIPSE, META_EXTTEXTOUT (advances, opaque and clip rectangles), META_LINETO, META_PATBLT, META_PIE, META_POLYLINE, META_POLYGON, META_POLYPOLYGON, META_RECTANGLE, META_ROUNDRECT, META_SETPIXEL and META_TEXTOUT are drawn. The region records (META_FILLREGION, META_FRAMEREGION, META_INVERTREGION, META_PAINTREGION) and the flood fills are reported and not drawn.
2.3.4Object Record Typesincomplete40Pens, brushes and fonts are created into the lowest free slot of the object table, selected and deleted; palettes and regions only hold their slot, META_SELECTCLIPREGION clears the clip and META_SELECTPALETTE is ignored.
2.3.5State Record Typesincomplete10Window origin, extent, offset and scale, the map mode, background mode and color, text color and alignment, fill mode, mix mode, the current position, META_INTERSECTCLIPRECT and META_SAVEDC and META_RESTOREDC are played. The viewport stays the picture's frame, so the viewport records are ignored; META_EXCLUDECLIPRECT and META_OFFSETCLIPRGN are reported and ignored; palette, layout, mapper flag, text character extra and justification records are ignored.
2.3.6Escape Record Typesincomplete12META_ESCAPE_ENHANCED_METAFILE: when the escape records carry a whole EMF it is played in place of the WMF records (wmf.rs embedded_emf; test tests/play.rs wmf_plays_the_emf_its_escapes_carry). The other escapes are printer driver requests and are ignored.

[MS-EMF]: Enhanced Metafile Format

2 Structures

ClauseFeatureStatusCode citationsTest citationsNote
2.1EMF Enumerationsincomplete31RecordType, ArcDirection, BackgroundMode, ExtTextOutOptions (opaque, clipped, glyph index, PDY), MapMode, ModifyWorldTransformMode, PenStyle, PolygonFillMode, RegionMode (and, or and copy; xor and diff are reported), StockObject and the text alignment flags are read (docboss-metafile dc.rs, emf.rs); the color, ICM, font description and OpenGL enumerations are not needed for drawing.
2.2EMF Objectsincomplete40Header (with HeaderExtension1 and HeaderExtension2's micrometre size), EmrText, LogBrushEx, LogFont (height, escapement, weight, italic, underline, strike-out, character set, face; the width is not honoured), LogPen, LogPenEx (user dash styles), RegionData (as the bounds of its rectangles) and XForm are read. Palettes, color spaces, PixelFormatDescriptor, the design vector and gradient objects are not.
2.3EMF Recordsincomplete328Records are played through a device context model into paths, text and bitmaps that the layout scales from the frame into the picture's rectangle (docboss-metafile emf.rs, dc.rs; docboss-layout metafile.rs; tests tests/play.rs). What is left out is listed per record class below and reported as a diagnostic per picture.
2.3.1Bitmap Record Typesincomplete31EMR_ALPHABLEND (constant and per-pixel alpha), EMR_BITBLT, EMR_SETDIBITSTODEVICE, EMR_STRETCHBLT and EMR_STRETCHDIBITS are drawn, those without a bitmap as brush fills; EMR_MASKBLT, EMR_PLGBLT and EMR_TRANSPARENTBLT are reported and not drawn.
2.3.2Clipping Record Typesincomplete20EMR_INTERSECTCLIPRECT is exact; EMR_EXTSELECTCLIPRGN and EMR_SELECTCLIPPATH clip to the bounds of the region or path. EMR_EXCLUDECLIPRECT and EMR_OFFSETCLIPRGN are reported and ignored.
2.3.3Comment Record Typesincomplete10EMR_COMMENT_EMFPLUS is only detected: every EMF+ picture in the test corpus is EMF+ dual, so its EMF records are played and the EMF+ records skipped; an EMF+ only picture is reported and drawn as a placeholder. The other comments carry no drawing and are skipped.
2.3.4Control Record Typesimplemented11EMR_HEADER gives the frame, the reference device size and its millimetre or micrometre size; EMR_EOF ends playback (emf.rs; test tests/play.rs emf_shapes_fill_with_their_brushes_on_the_frame).
2.3.5Drawing Record Typesincomplete123EMR_ANGLEARC, EMR_ARC, EMR_ARCTO, EMR_CHORD, EMR_ELLIPSE, EMR_EXTTEXTOUTA, EMR_EXTTEXTOUTW, EMR_FILLPATH, EMR_LINETO, EMR_PIE, the POLYBEZIER, POLYGON, POLYLINE, POLYPOLYGON and POLYPOLYLINE records in both widths, EMR_RECTANGLE, EMR_ROUNDRECT, EMR_STROKEANDFILLPATH and EMR_STROKEPATH are drawn. Text given as glyph indices, EMR_EXTFLOODFILL, EMR_FILLRGN, EMR_FRAMERGN, EMR_PAINTRGN, EMR_GRADIENTFILL, EMR_POLYDRAW, EMR_POLYTEXTOUT, EMR_SETPIXELV and EMR_SMALLTEXTOUT are reported and not drawn.
2.3.6Escape Record Typesnot implemented00Printer escapes carry no drawing and are skipped.
2.3.7Object Creation Record Typesincomplete61EMR_CREATEBRUSHINDIRECT, EMR_CREATEPEN, EMR_EXTCREATEPEN and EMR_EXTCREATEFONTINDIRECTW are read; EMR_CREATEDIBPATTERNBRUSHPT and EMR_CREATEMONOBRUSH fill with their bitmap's average color and hatched brushes with a tint of their color. Palettes and color spaces are skipped.
2.3.8Object Manipulation Record Typesincomplete20EMR_SELECTOBJECT (table and stock objects) and EMR_DELETEOBJECT are played; the palette and color space records are skipped.
2.3.9OpenGL Record Typesnot implemented00OpenGL records are skipped.
2.3.10Path Bracket Record Typesincomplete10EMR_BEGINPATH, EMR_ENDPATH, EMR_CLOSEFIGURE and EMR_ABORTPATH bracket the figures that the path records fill, stroke or clip to; EMR_FLATTENPATH and EMR_WIDENPATH are reported and ignored, and text inside a bracket is not drawn.
2.3.11State Record Typesincomplete11Window and viewport origins, extents and their scaling, the map mode, arc direction, background mode and color, text color and alignment, fill mode, mix mode, EMR_MOVETOEX, EMR_SAVEDC and EMR_RESTOREDC (relative and absolute) are played. Brush origin, color adjustment, ICM, layout, linked fonts, mapper flags, miter limit, stretch mode and text justification are skipped.
2.3.12Transform Record Typesimplemented21EMR_SETWORLDTRANSFORM and EMR_MODIFYWORLDTRANSFORM in all four modes (dc.rs world; test dc.rs world_transform_modes_compose_in_order).

APPNOTE.TXT: .ZIP File Format Specification (PKWARE)

4 ZIP Files

ClauseFeatureStatusCode citationsTest citationsNote
4.1What is a ZIP fileincomplete11Stored and deflated entries are read and written with CRC-32 checks; encryption, other compression methods, split archives and manifest files are not supported.
4.1.1ZIP files MAY be identified by the standard .ZIP file extension although use of…out of scope00Introductory statement; the requirements it summarizes have their own rows under 4.3 to 4.5.
4.1.2ZIP files SHOULD contain at least one file and MAY contain multiple filesout of scope00Introductory statement; the requirements it summarizes have their own rows under 4.3 to 4.5.
4.1.3Data compression MAY be used to reduce the size of files placed into a ZIP…out of scope00Introductory statement; the requirements it summarizes have their own rows under 4.3 to 4.5.
4.1.4Data encryption MAY be used to protect files within a ZIP filenot implemented00Encrypted entries are refused with Error::Encrypted (crates/docboss-zip/src/lib.rs); nothing is decrypted.
4.1.5Data integrity MUST be provided for each file using CRC32implemented11Every entry read is checked against its CRC-32; a mismatch is an error from Archive::entry and a flag from Archive::read (test archive.rs corrupted_bytes_fail_the_crc_check).
4.1.6Additional data integrity MAY be included through the use of digital signaturesout of scope00Introductory statement; the requirements it summarizes have their own rows under 4.3 to 4.5.
4.1.7Files MAY be placed within a ZIP file uncompressed or storedout of scope00Introductory statement; the requirements it summarizes have their own rows under 4.3 to 4.5.
4.1.8Each data file placed into a ZIP file MAY be compressed, stored, encrypted or…out of scope00Introductory statement; the requirements it summarizes have their own rows under 4.3 to 4.5.
4.1.9ZIP files MAY be streamed, split into segments (on fixed or on removable media)…not implemented00Split and spanned archives are not read; only the last segment's central directory would be found.
4.1.10Extensibility is provided for platform or application specific needs through…out of scope00Introductory statement; the requirements it summarizes have their own rows under 4.3 to 4.5.
4.1.11Common uses for ZIP MAY also include the use of manifest filesout of scope00Introductory statement; the requirements it summarizes have their own rows under 4.3 to 4.5.
4.1.12ZIP files MAY be placed within other ZIP filesout of scope00Introductory statement; the requirements it summarizes have their own rows under 4.3 to 4.5.
4.2ZIP Metadataout of scope00Introductory statement; the record types have their own rows under 4.3.
4.2.1ZIP files are identified by metadata consisting of defined record types…out of scope00Introductory statement; the record types have their own rows under 4.3.
4.3General Format of a .ZIP fileincomplete1914Local headers, file data, data descriptors, the central directory, the ZIP64 records and the end record are read and written; the archive decryption header, archive extra data record and digital signature are not.
4.3.1A ZIP file MUST contain an "end of central directory record"out of scope00Normative summary of the layout that 4.3.6 to 4.3.16 specify record by record; see those rows.
4.3.2Each file placed into a ZIP file MUST be preceded by a "local file header"…out of scope00Normative summary of the layout that 4.3.6 to 4.3.16 specify record by record; see those rows.
4.3.3Files MAY be stored in arbitrary order within a ZIP fileout of scope00Normative summary of the layout that 4.3.6 to 4.3.16 specify record by record; see those rows.
4.3.4Compression MUST NOT be applied to a "local file header", an "encryption…out of scope00Normative summary of the layout that 4.3.6 to 4.3.16 specify record by record; see those rows.
4.3.5File data MAY be followed by a "data descriptor" for the fileout of scope00Normative summary of the layout that 4.3.6 to 4.3.16 specify record by record; see those rows.
4.3.6Overall .ZIP file formatimplemented11Entries are located through the central directory and read at their local header offsets (crates/docboss-zip/src/lib.rs central_directory, test archive.rs reads_stored_and_deflated_entries).
4.3.7Local file headerimplemented32Local headers give each entry's data offset and, when the central directory cannot be read, are scanned to recover the entries, which is reported as a diagnostic (test archive.rs recovers_from_a_missing_central_directory); the writer emits one per entry.
4.3.8File dataimplemented11Stored data is borrowed from the input and deflated data inflated under the size and ratio limits of Limits (test archive.rs reads_stored_and_deflated_entries).
4.3.9Data descriptorimplemented12General purpose bit 3 defers the CRC and sizes to a data descriptor, which recovery finds after the data (test archive.rs reads_entries_with_data_descriptors); the writer can emit descriptors (write.rs every_layout_reads_back).
4.3.10Archive decryption headernot implemented00The archive decryption header of central directory encryption is not read; such archives do not open.
4.3.11Archive extra data recordnot implemented00The archive extra data record is not read.
4.3.12Central directory structureimplemented52Central directory headers give each entry's name, method, flags, CRC, sizes and local header offset (test archive.rs reads_stored_and_deflated_entries); the writer emits them.
4.3.13Digital signaturenot implemented00The central directory digital signature is not read or verified.
4.3.14Zip64 end of central directory recordimplemented22The ZIP64 end of central directory record gives 64-bit entry counts, directory size and offset (test archive.rs reads_zip64_archives); the writer emits it with WriteOptions::zip64.
4.3.15Zip64 end of central directory locatorimplemented21The ZIP64 locator is followed to the ZIP64 end record (test archive.rs reads_zip64_archives); the writer emits it with WriteOptions::zip64.
4.3.16End of central directory recordimplemented43The end of central directory record is located from the end of the file and gives the directory's offset and entry count; the writer ends every archive with one (test write.rs archive_ends_with_directory_record).
4.4Explanation of fieldsincomplete77The fields needed to locate, decode and check entries are read; version, attribute, disk, date and comment fields are ignored.
4.4.1General notes on fieldsnot implemented00No reader code cites this field; the reader uses it only as far as the 4.3 record rows say.
4.4.2version made by (2 bytes)not implemented00No reader code cites this field; the reader uses it only as far as the 4.3 record rows say.
4.4.3version needed to extract (2 bytes)not implemented00No reader code cites this field; the reader uses it only as far as the 4.3 record rows say.
4.4.4general purpose bit flagincomplete32Bit 0 refuses an encrypted entry, bit 3 defers sizes to a data descriptor and bit 11 selects UTF-8 names (tests archive.rs reads_entries_with_data_descriptors and decodes_name_encodings); the other bits are ignored.
4.4.5compression methodincomplete11Methods 0 (stored) and 8 (deflated) are read and written; any other method is Error::UnsupportedMethod.
4.4.6date and time fieldsnot implemented00Entry dates and times are not read; the writer stores 1980-01-01 00:00 so its output does not depend on the clock.
4.4.7CRC-32implemented23Slicing-by-8 CRC-32 over the reflected polynomial (crates/docboss-zip/src/crc.rs), held to 40 vectors computed by the Lean reference (tests/ledger_vectors.rs).
4.4.8compressed sizenot implemented00No reader code cites this field; the reader uses it only as far as the 4.3 record rows say.
4.4.9uncompressed sizenot implemented00No reader code cites this field; the reader uses it only as far as the 4.3 record rows say.
4.4.10file name lengthnot implemented00No reader code cites this field; the reader uses it only as far as the 4.3 record rows say.
4.4.11extra field lengthnot implemented00No reader code cites this field; the reader uses it only as far as the 4.3 record rows say.
4.4.12file comment lengthnot implemented00No reader code cites this field; the reader uses it only as far as the 4.3 record rows say.
4.4.13disk number startnot implemented00No reader code cites this field; the reader uses it only as far as the 4.3 record rows say.
4.4.14internal file attributesnot implemented00No reader code cites this field; the reader uses it only as far as the 4.3 record rows say.
4.4.15external file attributesnot implemented00No reader code cites this field; the reader uses it only as far as the 4.3 record rows say.
4.4.16relative offset of local headernot implemented00No reader code cites this field; the reader uses it only as far as the 4.3 record rows say.
4.4.17file nameimplemented11Names decode as UTF-8 when bit 11 is set, else as code page 437 (crates/docboss-zip/src/cp437.rs, test archive.rs decodes_name_encodings).
4.4.18file commentnot implemented00No reader code cites this field; the reader uses it only as far as the 4.3 record rows say.
4.4.19number of this disknot implemented00No reader code cites this field; the reader uses it only as far as the 4.3 record rows say.
4.4.20number of the disk with the start of the central directorynot implemented00No reader code cites this field; the reader uses it only as far as the 4.3 record rows say.
4.4.21total number of entries in the central dir on this disknot implemented00No reader code cites this field; the reader uses it only as far as the 4.3 record rows say.
4.4.22total number of entries in the central dirnot implemented00No reader code cites this field; the reader uses it only as far as the 4.3 record rows say.
4.4.23size of the central directorynot implemented00No reader code cites this field; the reader uses it only as far as the 4.3 record rows say.
4.4.24offset of start of central directory with respect to the starting disk numbernot implemented00No reader code cites this field; the reader uses it only as far as the 4.3 record rows say.
4.4.25ZIP file comment lengthnot implemented00No reader code cites this field; the reader uses it only as far as the 4.3 record rows say.
4.4.26ZIP file commentnot implemented00No reader code cites this field; the reader uses it only as far as the 4.3 record rows say.
4.4.27zip64 extensible data sector (variable size)not implemented00No reader code cites this field; the reader uses it only as far as the 4.3 record rows say.
4.4.28extra fieldnot implemented00No reader code cites this field; the reader uses it only as far as the 4.3 record rows say.
4.5Extensible data fieldsincomplete21Only the ZIP64 extended information extra field (0x0001) is read; every other extra field is skipped by its length.
4.5.1In order to allow different programs and different types of information to be…not implemented00Extra fields are walked as Header ID and size pairs within their declared length; only ID 0x0001 is interpreted (lib.rs zip64_extra).
4.5.2The current Header ID mappings defined by PKWARE arenot implemented00Of the PKWARE Header IDs only 0x0001 is interpreted; the rest are skipped by their length.
4.5.3Zip64 Extended Information Extra Field (0x0001)implemented21The ZIP64 extra field supplies 64-bit sizes and offsets when the 32-bit fields are saturated (test archive.rs reads_zip64_archives); the writer emits it with WriteOptions::zip64.
4.5.4OS/2 Extra Field (0x0009)not implemented00This extra field is skipped by its length.
4.5.5NTFS Extra Field (0x000a)not implemented00This extra field is skipped by its length.
4.5.6OpenVMS Extra Field (0x000c)not implemented00This extra field is skipped by its length.
4.5.7UNIX Extra Field (0x000d)not implemented00This extra field is skipped by its length.
4.5.8PATCH Descriptor Extra Field (0x000f)not implemented00This extra field is skipped by its length.
4.5.9PKCS#7 Store for X.509 Certificates (0x0014)not implemented00This extra field is skipped by its length.
4.5.10X.509 Certificate ID and Signature for individual file (0x0015)not implemented00This extra field is skipped by its length.
4.5.11X.509 Certificate ID and Signature for central directory (0x0016)not implemented00This extra field is skipped by its length.
4.5.12Strong Encryption Header (0x0017)not implemented00This extra field is skipped by its length.
4.5.13Record Management Controls (0x0018)not implemented00This extra field is skipped by its length.
4.5.14PKCS#7 Encryption Recipient Certificate List (0x0019)not implemented00This extra field is skipped by its length.
4.5.15MVS Extra Field (0x0065)not implemented00This extra field is skipped by its length.
4.5.16OS/400 Extra Field (0x0065)not implemented00This extra field is skipped by its length.
4.5.17Policy Decryption Key Record Extra Field (0x0021)not implemented00This extra field is skipped by its length.
4.5.18Key Provider Record Extra Field (0x0022)not implemented00This extra field is skipped by its length.
4.5.19Policy Key Data Record Record Extra Field (0x0023)not implemented00This extra field is skipped by its length.
4.6Third Party Mappingsnot implemented00Third-party extra fields are skipped by their length.
4.6.1Third party mappings commonly used arenot implemented00Third-party extra fields are skipped by their length.
4.6.2Third-party Extra Fields MUST include a Header ID using the format defined in…not implemented00Third-party extra fields are skipped by their length.
4.6.3In case two different programs appropriate the same Header ID value, it is…not implemented00Third-party extra fields are skipped by their length.
4.6.4ZipIt Macintosh Extra Field (long) (0x2605)not implemented00This extra field is skipped by its length.
4.6.5ZipIt Macintosh Extra Field (short, for files) (0x2705)not implemented00This extra field is skipped by its length.
4.6.6ZipIt Macintosh Extra Field (short, for directories) (0x2805)not implemented00This extra field is skipped by its length.
4.6.7FWKCS MD5 Extra Field (0x4b46)not implemented00This extra field is skipped by its length.
4.6.8Info-ZIP Unicode Comment Extra Field (0x6375)not implemented00This extra field is skipped by its length.
4.6.9Info-ZIP Unicode Path Extra Field (0x7075)not implemented00This extra field is skipped by its length.
4.6.10Microsoft Open Packaging Growth Hint (0xa220)not implemented00This extra field is skipped by its length.
4.6.11Data Stream Alignment (Apache Commons-Compress) (0xa11e)not implemented00This extra field is skipped by its length.
4.7Manifest Filesout of scope00Manifest files are application data; docboss reads OPC parts by name instead.
4.7.1Applications using ZIP files MAY have a need for additional information that…out of scope00Manifest files are application data; docboss reads OPC parts by name instead.
4.7.2A manifest file is a file created for the application process that requires…out of scope00Manifest files are application data; docboss reads OPC parts by name instead.
4.7.3Manifest files MAY be compressed or encrypted as needed for application…out of scope00Manifest files are application data; docboss reads OPC parts by name instead.

5 Explanation of compression methods

ClauseFeatureStatusCode citationsTest citationsNote
5.1UnShrinking - Method 1not implemented00Method 1 is not read; such entries fail with Error::UnsupportedMethod.
5.2Expanding - Methods 2-5not implemented00Method 2 to 5 is not read; such entries fail with Error::UnsupportedMethod.
5.3Imploding - Method 6not implemented00Method 6 is not read; such entries fail with Error::UnsupportedMethod.
5.4Tokenizing - Method 7not implemented00Method 7 is not read; such entries fail with Error::UnsupportedMethod.
5.5Deflating - Method 8implemented11Deflate streams are inflated and written through flate2's zlib-rs backend, a truncated stream keeping what it inflated (tests archive.rs truncated_deflate_keeps_the_readable_prefix and write.rs every_layout_reads_back).
5.6Enhanced Deflating - Method 9not implemented00Method 9 is not read; such entries fail with Error::UnsupportedMethod.
5.7BZIP2 - Method 12not implemented00Method 12 is not read; such entries fail with Error::UnsupportedMethod.
5.8LZMA - Method 14not implemented00Method 14 is not read; such entries fail with Error::UnsupportedMethod.
5.9WavPack - Method 97not implemented00Method 97 is not read; such entries fail with Error::UnsupportedMethod.
5.10PPMd - Method 98not implemented00Method 98 is not read; such entries fail with Error::UnsupportedMethod.
5.11AE-x Encryption marker - Method 99not implemented00Method 99 is not read; such entries fail with Error::UnsupportedMethod.
5.12JPEG variant - Method 96not implemented00Method 96 is not read; such entries fail with Error::UnsupportedMethod.
5.13PKWARE Data Compression Library Imploding - Method 10not implemented00Method 10 is not read; such entries fail with Error::UnsupportedMethod.
5.14Reserved - Method 11out of scope00Reserved method number with nothing to implement.
5.15Reserved - Method 13out of scope00Reserved method number with nothing to implement.
5.16Reserved - Method 15out of scope00Reserved method number with nothing to implement.
5.17IBM z/OS CMPSC Compression - Method 16not implemented00Method 16 is not read; such entries fail with Error::UnsupportedMethod.
5.18Reserved - Method 17out of scope00Reserved method number with nothing to implement.
5.19IBM TERSE - Method 18not implemented00Method 18 is not read; such entries fail with Error::UnsupportedMethod.
5.20IBM LZ77 z Architecture - Method 19not implemented00Method 19 is not read; such entries fail with Error::UnsupportedMethod.