Skip to content

Functionality

npond edited this page Aug 27, 2026 · 2 revisions

Functionality

Everything the converter implements today, by area. This is the reference to check before calling something missing — the scope is unusually complete, and several things that have looked like gaps turned out to be implemented with a probe fixture behind them. What is genuinely absent is on Known Gaps. For the exhaustive, itemised list, see Current Scope.

Text and paragraphs

  • Paragraphs and runs; xml:space handling; line and page breaks
  • Fonts by family with theme resolution; size, bold, italic, underline, strikethrough, colour, caps, character spacing and scaling
  • Highlighting (the sixteen colours, measured off Word's page), run backgrounds, paragraph shading with patterns (w:shd — pattern blends computed in whole 255ths as Word computes them)
  • Borders round a paragraph (w:pBdr, shared between paragraphs bordered alike) and round a run (w:bdr)
  • Emphasis marks over a run's characters (w:em)
  • Superscript/subscript with Word's measured (not derived — none derivable exists) shift shares; raised/lowered runs keeping the line box of the size they are given
  • Alignment including justification; indents including hanging and first-line; spacing before/after with contextual spacing and Word's larger-of collapse; line spacing auto/exact/at-least, with Word's measured baseline-placement rules for exact lines
  • Every baseline on Word's 1/300-inch grid, with line heights kept exact (see Matching Word)
  • Tab stops of every alignment — left, centre, right, decimal, bar — with leaders on Word's page-edge grid
  • Automatic hyphenation: Liang's patterns (TeX's own), Word's measured break-at-last-fit and two-letters-each-side rules, hyphenationZone, consecutiveHyphenLimit, doNotHyphenateCaps, suppressAutoHyphens
  • Line breaking by the Unicode algorithm, so the scripts written without spaces — Chinese, Japanese, Thai, Lao, Khmer, Burmese — wrap where Word wraps them
  • Widow and orphan control, w:keepNext and w:keepLines including chains of headings that move as one
  • Dropped capitals (w:framePr with w:dropCap), in the text or hanging in the margin
  • Phonetic guides (w:ruby) with every alignment the markup has
  • Symbols by code (w:sym), each bringing its own face and line box
  • Legacy checkbox form fields (w:checkBox), drawn to Word's measured geometry
  • Content controls (w:sdt), compatibility alternatives (mc:AlternateContent, choice branch at block level), and w:customXml — all unwrapped wherever blocks are read
  • Tracked changes as Word exports them: insertions kept, deletions dropped

International text

  • The Unicode bidirectional algorithm in full — paragraph rules, embeddings, isolates, weak and neutral types, bracket pairs, levels and reordering — validated against GNU FriBidi on thousands of random lines
  • Hebrew and Arabic layout: storage order kept to the writer, glyphs reversed there; per-character font fallback walking the document's own substitution chain
  • Arabic shaping: the four joining forms, lam-alef and longer ligatures (the name of God as its single glyph), mark placement through ligature attachment points, marks skipped or matched per-lookup as the font asks
  • Indic scripts by the OpenType shaping rules, both the old and new specifications, as the font's script tag selects: Devanagari, Bengali, Gurmukhi, Gujarati, Oriya, Tamil, Telugu, Kannada, Malayalam
  • Khmer, Myanmar, Thai and Lao shapers
  • The Universal Shaping Engine for some seventy further scripts — Sinhala, Tibetan, Javanese, Balinese, Cham, Newa, Chakma, Adlam, Egyptian hieroglyphs — none with a line of code to itself
  • Apple AAT state tables (morx/kerx), which several macOS-shipped faces carry instead of OpenType lookups
  • All of it validated glyph-for-glyph, advance-for-advance and offset-for-offset against HarfBuzz (Validation)
  • Mark attachment (accents, Hebrew points, Arabic dots) by the font's anchors, including marks on marks

Fonts and embedding

  • SFNT parsing for TrueType and CFF outlines, .ttc collections, real metrics
  • Kerning from GPOS and the legacy kern table, applied where w:kern asks and from the size it names
  • Per-character font fallback in a fixed order, so two machines holding the same fonts agree
  • Embedded fonts (w:embedRegular) read from the document, taking precedence over installed faces of the same name, bounded by MaximumFontBytes
  • Subsetting: a TrueType face renumbered from nothing (thirty glyphs used = thirty embedded — Times New Roman 676KB → 33KB, Hiragino Sans GB 11.4MB → 497KB); CFF charstrings and unreachable subroutines emptied
  • Type0/CIDFontType2 embedding with a ToUnicode map, so text stays selectable and searchable — a ligature maps back to everything it stands for, equation letters to the mathematical alphabet characters that were set

Tables

  • Fixed and autofit sizing; declared cell widths (w:tcW), percentage widths, the table's own stated width (w:tblW) — each measured against Word five to seven ways
  • Every column edge snapped to Word's grid while text breaks against the exact width
  • Horizontal spans; vertical merges (w:vMerge) behaving as one tall cell, dividing at page breaks wherever the break falls
  • Borders, shading (cell fill="auto" painted white, as measured), cell margins, vertical alignment
  • Word's measured cell inset rules: the greater of margin and half the border across, the whole border down, and the half-point a table declaring no margin still gets
  • Rows kept whole across page breaks, or divided at a line boundary with both halves closed by full border boxes; w:cantSplit
  • Repeating heading rows (w:tblHeader) with Word's measured top-run-only rule
  • Table styles: all thirteen conditional formats through the basedOn chain, gated by w:tblLook in either spelling, with Word's measured (spec-contradicting) precedence
  • Adjacent tables folded into one as Word folds them, rows keeping their own columns and indents, the merged table squeezed by one scale where it will not fit
  • Floating tables (w:tblpPr): placed as floats, text run down both sides, breaking at a row across pages, paper-anchored ones moved up rather than broken
  • RTL tables (w:bidiVisual): laid from the right margin, mirrored borders and spans
  • Turned cell text (w:textDirection btLr/tbRl), stacking and aligning as Word does, words broken letter-by-letter where they must be

Sections and pages

  • Page size, orientation and margins per section; next-page, continuous, even- and odd-page breaks
  • Multiple text columns, evenly divided or individually stated, column breaks, the rule down the gap, and last-page balancing under a continuous break (with Word's measured division rule)
  • Vertical page alignment: top, centred, bottom, justified
  • Headers and footers per section with first-page and even-page variants, inherited per kind from the section before; pictures and fields in them
  • Footnotes and endnotes: reference-order numbering, per-page/per-section restarts (read from where Word actually reads them, which cost fixtures to find), placement at the foot or beneath the text, division across pages where too long, per-column notes at the column's measure, endnotes gathered at the document or section end
  • Page borders (w:pgBorders) with Word's measured offset and display rules
  • Line numbers in the margin (w:lnNumType): countBy, restarts, suppression, all measured against Word to a hundredth of a point
  • Page numbering restarts per section, with PAGE/NUMPAGES/SECTIONPAGES/PAGEREF each following the numbering the section states
  • Watermarks of both kinds — a word stretched to its shape, half-solid, turned; or a picture washed out by Word's measured gain/black-level formula — behind everything on every page of their section

Fields

  • Page numbers: PAGE, NUMPAGES, SECTION, SECTIONPAGES, PAGEREF (two-pass layout where needed, converging as Word converges)
  • Document properties: AUTHOR, TITLE, SUBJECT, KEYWORDS, COMMENTS, LASTSAVEDBY, CREATEDATE, SAVEDATE, PRINTDATE, DOCPROPERTY, FILENAME
  • SEQ counters with restart, repeat and format switches; REF to a bookmark's text; STYLEREF with Word's measured header/footer/body search rules; QUOTE; DATE/TIME with \@ pictures
  • Every \* format switch: arabic, roman, letters, ordinals, words, hex, dollars, and the casing switches
  • Table of contents: recomputed rather than read back, by outline level or named styles, TOCn styles, margin-measured tab stops, the trailing empty paragraph Word leaves
  • Index: XE entries gathered by INDEX, subentries, groupings, all the switches
  • Mail merge: guillemets without a record, the letter itself with one; MERGEREC, MERGESEQ; NEXT/NEXTIF/SKIPIF drawing nothing, as Word draws them
  • IF with wildcards; formula fields (=) with the operators, cell references and all eighteen functions Word knows, plus Word's three measured formatting oddities
  • Fields Word does not recompute keep their cached result — the honest answer
  • Hyperlinks: external addresses as clickable regions, internal links to bookmarks, placed and padded as Word places them

Lists and numbering

  • Decimal, letters, roman, bullets; nested levels with independent counters; multi-level templates; hanging indents; the number on the line without being part of its box (as measured)

Images

  • PNG (all bit depths, interlaced, 16-bit kept at 16), GIF (interlaced, transparency to a soft mask), BMP (1–32 bpp, both row orders, RLE), TIFF (both byte orders; grey, colour, palette; strips and tiles; chunky and planar; uncompressed, LZW, PackBits, Deflate, and all three fax encodings; JPEG-in-TIFF both the old and new way), EMF/EMF+ (interpreted as drawings all the way to the PDF, staying sharp and selectable — paths, pens, brushes, text, embedded bitmaps, and clipping honoured as PDF clip paths), JPEG (passed through untouched where possible — PDF's own filter is JPEG — and decoded where a TIFF forces it: sequential, progressive, arithmetic, restarts)
  • CMYK for print, as JPEG or TIFF, including Adobe's inverted convention, verified by rasterising the page
  • Transparency via soft masks; inline and floating placement; square, top-and-bottom, no-wrap, and tight/through wrap following the wrap polygon

Shapes and text boxes

  • Both spellings: the modern w:drawing and the pre-2007 w:pict (VML), with the compatibility wrapper drawn once
  • Rectangles, rounded rectangles, ellipses and triangles as themselves; other presets as their bounding rectangle
  • Rotation and mirroring (a:xfrm), with the wrap staying the stated extent as measured; linear gradients of any number of stops; picture fills kept inside the path; outer shadows at the shadow's solidity
  • Grow-to-fit and shrink-text-on-overflow, applied where Word was measured applying them
  • Text boxes holding documents of their own — paragraphs and tables laid out clear of insets and outline, anchored top/middle/bottom
  • VML quirks reproduced where measured: the even-point offset of thick-outlined shapes, the outline's effect on its line height (held as a known divergence)

Charts

Thirteen kinds drawn: columns, bars, lines, pies, areas, scatters, doughnuts, bubbles, radars, stock charts — and three-dimensional columns/bars, pies, and lines/areas as ribbons in depth, projected by measured camera laws. With:

  • The plot area where the chart states it, or worked out by Word's measured room-for-labels rules where it does not
  • Axis scaling by Word's measured 1-2-5 rule with its strictness and its twentieth; label room per axis orientation; the ten-step cap
  • Bars clustered, stacked, stacked-to-the-whole; invertIfNegative; gridlines, axis lines, marks; labels in the chart's number format; category labels that wrap
  • Lines curved by the Catmull-Rom rule Word uses or straight where told; markers of nine shapes on Word's grid; the default marker cycle
  • Titles (bold by Word's measured default), axis titles turned on end, legends on any side or hand-placed, sized legend boxes with Word's measured layout/wrap/ellipsis/drop rules, numbers at every point with per-kind placement
  • Trendlines of all six kinds, forward/back, forced intercepts (fitting checked against independently computed coefficients); error bars of all five kinds including Word's measured mean-anchored deviation oddity; drop lines and high-low lines
  • 3-D: the view, walls, floor, depth axis, shaded boxes back to front, the pie's sectors and rim — each pinned against Word's own raster

Equations

Office Math Markup set from the face's own MATH table by the OpenType rules plus the ten measured places Word departs from them (Matching Word): fractions stacked and slanted, scripts before and after, radicals with degrees, growing brackets from the face's shape series, n-ary operators with their per-operator limit rules, functions, matrices, aligned arrays, accents and bars — in the mathematical alphabets, at the size of the carrying text, selectable in the output.

Diagrams (SmartArt)

Drawn from the arrangement the document caches — which is what every reader except Word draws, and the only arrangement Word's own export can be compared against — with geometry, theme-resolved fills and outlines, and text laid into each shape by DrawingML's measured spacing rules.

PDF output

  • Hand-rolled object model, cross-reference table and content streams, validated by qpdf on every fixture
  • Type0/CIDFontType2 embedding, subset fonts, ToUnicode maps
  • Document outline (navigation pane) from the heading structure
  • Tagged PDF: a structure tree in reading order, image alt text, language
  • PDF/A-2b on request (ConversionOptions.PdfA), validated by the tool an archive would run
  • Transparency graphics states, soft masks, clip paths; deterministic bytes

Clone this wiki locally