Skip to content

Matching Word in Detail

npond edited this page Aug 27, 2026 · 1 revision

Matching Word — the full measurements

The full, per-rule detail behind the Matching Word digest — each rule with its probe fixture and how it was derived. Migrated from the README, which is now a landing page.

Several layout rules here were derived by measuring Word's own output rather than from the spec, each with a fixture built so that only one candidate model survives:

  • Adjacent paragraph spacing collapses to the larger of space-after and space-before, it does not sum. Across a page break the collapse still applies, but the previous paragraph's space-after is absorbed by the page it ended on.
  • A line-spacing multiple's extra leading goes below the baseline, so the first line of a paragraph sits at its natural ascent whatever the multiple.
  • The font's line gap belongs above the ascent, not below the descent.
  • Every baseline is written on a grid of 1/300 inch, while the line heights that stack the boxes stay exact — see The grid every baseline stands on.
  • An East Asian face gets three tenths of an em of extra leading, whatever its own metrics say. Word gives MS Mincho, MS Gothic, KaiTi and MingLiU at 12pt a line of exactly 15.6pt, although those four faces ask for 1.0, 1.0, 1.14 and 1.20 em between them — and although Core Text reads those four values back from the files just as this reader does. It does the same for a line of Latin letters set in one of them, so the height belongs to the face rather than to the script written in it, and a face is taken to be East Asian when OS/2 declares one of the five East Asian code pages. Measured by east-asian-line-box-probe; sixteen hundredths of the leading go above the ascent and the rest below the descent, which is as close as Word's own vertical quantum allows.
  • Word fills in what a document's styles leave unstated from its own built-in definitions — see WordBuiltInStyles. These sit below the document's docDefaults in precedence: they are a fallback for what nothing states, not an override. Set ConversionOptions.ApplyWordBuiltInStyleDefaults = false to render strictly what the document says.

Text wrapping around a floating picture is single-pass: a float's exclusion applies to the text laid out from its anchor onwards, while Word lays out the whole page and reflows text above the anchor too. The one case where that shows — a float whose top clearance reaches back over the previous paragraph's last line — is handled by moving those lines down, which is correct because a full-width float does not change their width. A partial-width float reaching backwards would need the line broken again, and is not handled.

A tight or through wrap follows the float's own wrap polygon rather than its bounding box, so a line closes in against a shape's real outline instead of the rectangle around it, and a through wrap runs text into the polygon's concavities where a tight one holds off the whole of it (#65).

Three rules about how tall a line is were settled by superscript-probe and numbering, and none of them is what the code did before it was asked. A raised or lowered run keeps the line box of the size it was given, not the smaller size it is drawn at: a twenty point superscript in a twelve point line makes that line as tall as a twenty point one, above the baseline and below it, while a twelve point superscript in a twelve point line changes nothing at all. A line's box is the tallest ascent over the deepest descent across its runs, which is not the tallest of the runs' own boxes — twelve point Times with an eleven point Calibri mark on the end takes the Times ascent and the Calibri descent, and is deeper than either font alone would make it. And a list's number is drawn on its line without being part of its box, which is the one thing on a line that is not.

The shifts themselves are a share of the type size — a third up, a twelfth down — and that share is fitted rather than derived, because Word's is not a share of anything that can be read out of a document or a font. superscript-shift-probe puts the question to Word five sizes wide and three faces deep, and eleven faces were measured while it was written:

  • It is not a share of the size. For every face the sizes disagree: Times New Roman wants at least 0.375 of the size at eight point and at most 0.350 at twelve, and no one number is both.
  • It is not a share of anything the face declares — not its ascent, descent, cap height, x-height, nor the superscript offset in its own OS/2 table. Calibri and Candara agree on every vertical metric to four decimal places, and Word raises a superscript 0.3325 of the size in one and 0.4525 in the other. No linear combination of those metrics comes within twenty times the precision of the measurement.

So one number it stays, fitted to Times New Roman, which is what the fixtures are written in: every size from eight point to ninety-six lands within a step of Word's grid, Arial within three, Calibri within ten — all of Calibri's beyond forty-eight point, which is not a size anything is superscripted at. LineBoxTests states the gap case by case rather than hiding it behind one tolerance, because the gaps are the finding.

The grid every baseline stands on

Word writes every baseline on a grid of one three-hundredth of an inch — 0.24 points, the same grid it rounds a type size to, which is why a 15pt run comes out of one of its PDFs as 15.12. Two probes say what is rounded and what is not:

  • The height of a line is exact. line-grid-probe fills nine pages with forty single-spaced lines each and measures the distance from the first baseline to the fortieth. Were the height rounded, every gap on a page would be the same whole number of steps; instead they mix 2.16 with 2.4, and the span comes to within a quarter point of thirty-nine exact heights. The height is worked out at the size the run states, not the size Word draws at: at two point, which Word draws at 1.92, a page would span 86.1 points if the drawn size decided it and 89.69 if the stated size did, and Word spans 89.52. Eleven point, drawn at 11.04, has the rounding going the other way and agrees.
  • Inside a line, the descent is rounded and the ascent takes what is left. line-ascent-probe gives each of its seventy-four pages a first paragraph of one letter, so the baseline is the top margin plus that line's ascent and nothing else. Over the seventy-four — four faces, and Times New Roman and Arial at every half point from six to twenty — rounding the descent accounts for seventy-one. Rounding the ascent instead accounts for sixty-two, and no rounding of a height or a descent through any intermediate unit does better. The three misses are a single step each, and each is a descent that lands just above a half step.

Neither rounding accumulates: the next line starts from the exact height. Six of the nine forty-line pages come out as Word's line for line, and 292 of the 360 baselines overall. Across the whole fixture set, twenty-four documents of the 140 now agree with Word's page exactly, where before the grid none did, and the average of each document's worst baseline is 0.298pt against the 0.387 it stood at then — what is left is almost everywhere a single step of the grid, where a rounding falls the other way.

Anything moved after it is written — a line pushed down by a float, a page centred between its margins, the contents of a table cell or a footnote, a raised or lowered run — is moved onto the grid too, so nothing this engine writes along a line stands off it. What a line draws is not: the rule above a carried footnote is where the arithmetic puts it, within a hundredth of a point of Word's, and rounding it would take it a twentieth of a point away. LineGridTests holds every fixture to the grid, and the two probes to Word's own page.

A multiple of a line a picture has made taller

w:lineRule="auto" asks for a multiple of the line — 1.08 of it in Word's own Normal, which every document Word writes inherits. Put a picture on such a line and the two readings of "the line" part company: a multiple of the whole box, picture and all, or a multiple of the line the text would have made with the picture set on top of it.

It is the second. image-line-probe puts pictures of six, twelve, twenty-four and ninety-six points on a line of twelve point Times at multiples of one, 1.08, one and a half and two, and Word leaves exactly the same room under the picture as under the text alone in all sixteen: a ninety-six point picture on a 1.08 line makes a line 99.6 points tall, not the 106.8 that multiplying the whole box gives. Two of the four heights are shorter than the line the text makes on its own, so the plain rule is measured in the same document as the rule that replaces it.

Every fixture written by hand here sets its spacing to a single line, where a multiple of one makes the two readings identical. It took a document Word wrote — brochure, whose picture paragraph inherits Word's 1.08 — to tell them apart, and the error it found was 6.8 points.

The box round a paragraph

w:pBdr was parsed by nothing and drawn by nothing until paragraph-border-probe measured it, seven pages of one export:

the reach a fiftieth of an inch clear of the text, and the declared space beyond that, the space rounded down to the grid — four points comes out 3.84, twelve comes out twelve
above one step more than the space, the same step a line box keeps above its text everywhere here
below exactly the space: the foot of the box sits on the foot of the last line
the weight the line is its eighths of a point rounded down to the grid — three points draws 2.88 — and grows outward from the reach
the indents move the box, as they move a background; a first-line indent and a centred line do not
in a row paragraphs bordered alike share one box, with no line between them unless w:between asks for one, and then it sits at the foot of the paragraph above with the usual step under it
with shading the background fills the box rather than the lines, so it reaches as far as the border
the bar w:bar draws nothing, which is what Word's own export has for it

The first page comes out ink for ink — Word draws each side as a bar between the corners and fills the corners in, where this draws the bars corner to corner, and the ground covered is identical. The pages after it carry a step of drift in the text, which is the paragraph-to-paragraph rounding this engine has everywhere rather than anything this rule does, so what ParagraphBorderTests holds them to is the geometry that does not depend on where the text landed.

The marks over a run's characters

w:em draws a mark over (or under) every character of a run, and Word draws each as a character in its own right, at the text's size, in an East Asian face — a fullwidth stop for the dot and for the dot below, an ideographic comma for the comma, a ring above for the circle. emphasis-mark-probe reads the rest off Word's page:

  • every character but a space takes one, punctuation included: "a,b" takes three;
  • the mark is centred over the character by its ink, not by its advance — Word's fullwidth stop carries its dot a sixth of an em from the glyph's own edge, and the mark still lands in the middle of the letter. Centring by ink is also what makes the result independent of which face the mark came from, which matters because that face depends on what is installed;
  • the dot and the comma stand the type size and a step of the grid above the baseline — exact at twelve, twenty-four and forty-eight point, a step out at eight — the ring three tenths of the size above, and the dot below three eighths of the size under;
  • the line grows to hold whatever stands above the text's own ascent.

Because the mark is a character of whatever face carries it, its own origin sits wherever that face puts it, so the probe is left out of the line-by-line comparison and held by EmphasisMarkTests instead: the marks step with the characters they mark, to a hundredth of a point, and stand where Word's numbers say.

The box round a run

w:bdr is neither the paragraph's box in miniature nor a highlight with a line round it, and run-border-probe says how it differs:

  • it is drawn to the run's own box — its ascent and descent, with a step of the grid over it — where a highlight takes the whole line's. A twelve point run beside a thirty-six point one is boxed to its own 13.92 points and highlighted to the line's 41.52;
  • it takes room along the line as well: its weight on each side and the declared space beyond that, so four points of space widens the run by eight and heightens its line by eight. A run's space is taken as it stands, where a paragraph's is rounded down to the grid;
  • runs bordered alike and touching share one box; a plain space between them leaves two;
  • a run too long for its line is boxed on each line it takes, closed on both sides, and the line is filled with the closing side's room in hand — without that the line takes one word too many.

What is left between us and Word is the step of drift the flow carries from paragraph to paragraph, which moves a box with its baseline rather than changing its shape.

What a highlight and a background cover

Both are filled rectangles behind text, and both are measured rather than assumed — highlight-probe and paragraph-shading-probe, compared against Word's own ink rather than its text.

A highlight is as wide as the run and as tall as the line, both edges put on the grid. The line, not the run: a twelve point run beside a thirty-six point one is highlighted the full forty-one points the two share. Its ends are where the run's are — a space inside the line is covered, a space dropped at a line break is not, and a plain space between two highlighted words leaves two boxes rather than one long one. A highlighted paragraph mark paints nothing at all. The sixteen names are the sixteen colours of an old display adapter, each channel off, half on at 128, or full; they are listed in HighlightColors and read off Word's page, not off a table.

A shaded paragraph is one rectangle per line, each covering its line box exactly, so the fills of a paragraph — and of two shaded paragraphs in a row — tile without a seam. It reaches a fiftieth of an inch past the paragraph's own edges on both sides: text from 72 to 540 is filled from 70.56 to 541.44. The paragraph's indents move it and the first line's indent does not, and centring the text does not either — it is the paragraph that is shaded, not the line. A pattern is a straight blend of the two colours it is given: pct25 of red on yellow is #FFBF00, solid is the pattern colour alone, and Word works the blend in whole 255ths with a half going down. The named textures — horzStripe and its kind — are hatchings rather than blends and take the fill alone.

What a line paints now comes off the page with the line. A line at the foot of a page can be taken off and laid again on the next — widow control alone moves two of them — and its fill has to go with it or the page it left keeps a rectangle under empty space. The same bookkeeping carries a bar tab's rule and a form field's box, neither of which was taken off before this.

A run's own background — a w:shd inside a w:rPr — turns out to be the highlight's rectangle exactly. run-shading-probe mirrors highlight-probe page for page, and Word draws the two identically down to the thousandth of a point: the run's width by the line's height, the same ends, the same nothing behind a shaded paragraph mark. Two things are its own, and both are measured there: it is drawn over the paragraph's background and takes none of the paragraph's fiftieth of an inch of reach, and a run asking for a background and a highlight gets the highlight alone — Word's page has one rectangle for such a run, not two.

A cell blends the same way, which cell-shading-probe measures rather than assumes: six shares of red over yellow come out of Word as the same six colours a paragraph gives them, pct12 among them — that name means an eighth, not a twelfth, and Word's #FFDF00 says so. A cell differs from a paragraph in one thing only, and it is worth knowing: an automatic fill is a white surface in a cell. A cell asking for a clear pattern over fill="auto" is painted white; a paragraph asking for exactly the same thing is not painted at all. Over an automatic fill a pattern blends with white — half red comes out #FF7F7F in a cell, in a paragraph and in a run alike.

Two things the same probe settles by showing nothing at all. A w:shd on the table reaches no cell of it: Word's export has nothing behind the cell that says nothing of its own, so neither has this. And a texturehorzStripe and its kind — is a real hatch, which Word writes into its PDF as a tiling pattern; a flat rectangle of the fill is drawn here instead, which is the one place in all of this that is an approximation rather than a match.

How far inside its own edges a shape sets its text

A text box holds its text clear of its edges by two things added together: the inset the shape declares — a tenth of an inch at the sides and half of that above and below, where it declares none — and half its outline, the half that falls inside the shape. shape-inset-probe is what says so: its third page sets a six point outline against no inset at all, and the text there begins 3.12pt inside the shape rather than 6pt or nothing.

The outline itself straddles the edge. Word's export fills the whole extent and then strokes the same rectangle, insetting neither, which is what a PDF does with a stroked path anyway — so the frame here is drawn the same way and the two agree to a hundredth of a point.

What an outline does to the line a shape sits on

An old-style (VML) shape with an outline is drawn a little down and to the right of its own box, and the line it sits on is taller than the shape is. Both follow from one number — the outline's weight rounded to whole points, and never less than one:

the shape is drawn the even number of points at or below it — 2⌊n/2⌋
the line is as tall as ⌈the shape's height⌉ + n − 1

So a quarter-point outline and a one-point outline behave alike, a shape 13½ points tall with a 4½pt outline sits on a line of eighteen points, and an 8pt outline is drawn eight points in.

vml-stroke-stack-probe is what says so, and it is built to be read finely: a single line can only be measured to within a step of Word's grid, 0.24pt, which is wider than the differences here, so each page stacks thirty shapes and divides that by thirty. Fourteen weights and five heights fit both rules exactly. An earlier reading of a coarser probe had the offset as the even number of points reaching past the weight, which agrees on every weight that probe held and is wrong at 1¼ and 3¼ — the two this one added.

The ceiling belongs to the outline rather than to the shape: the same shape with no outline sits on a line of exactly its own height, 13.5 for 13.5, and so does an inline picture (inline-picture-line-probe). Any outline, however fine, rounds it up to the whole point.

Two smaller things fell out of the same measurement. A line holding nothing but a picture is never shorter than the paragraph's own mark — Word gives a 4½pt shape under an eleven point mark the mark's 13.43pt line and stands the shape at the foot of it — and a picture rests on its line's exact baseline rather than the rounded one its text is written at, which is why Word's shapes land at precisely the margin plus their offset however the rounding of the line falls.

Where a chart puts things

A chart is the one thing a document describes only as data: series, axes and formatting, with no drawing of it anywhere, not even the cache a diagram carries. So every number below was measured from Word's export rather than read anywhere.

  • The plot area goes exactly where a chart states it, to the last decimal place, when it states it as fractions of the frame.
  • A bar's width falls out of the gap between them, which is a percentage of the bar itself: one series at a gap of 150 makes a category two and a half bars wide, so four categories across 252pt give 63pt each and a bar of 25.2pt — which is what Word draws, to the quantum. Two series at a gap of 100 and an overlap of −27 share their category and then stand apart: 117 ÷ 3.27 = 35.78, against Word's 35.76.
  • A label ranged against its axis ends a little under one em short of it — 9.278pt at ten point type and 18.547pt at twenty, so proportional with nothing fixed about it — and is set with the box from its ascenders to its descenders centred on its mark, which puts the baseline a quarter of the type size below it. The face's typographic ascent and descent are what that quarter comes from, not the ones a line is measured by: Calibri says 1536 and 512 of its 2048 for the first pair and 1950 and 550 for the second, and only the first puts the label where Word puts it.
  • A label written under its axis sits with its baseline 1.584 times its type size below it, at ten point and at twenty alike, and each hundred of lblOffset moves it a further 0.312 of that size.
  • Whether the axis carries marks makes no difference to either: a chart drawn with them and one drawn without put their labels in exactly the same places. A mark itself reaches 40301 EMU outside its axis, which is 3.1733pt — the same on both axes of chart-axis-probe and on the lying axis of chart-bar-stacked, and outwards in every case.
  • A chart's own frame is a white rectangle with ten point corners outlined in #898989 at half a point, which is what Word draws where the chart says nothing about its border.

Every line of all seven chart fixtures lands within 0.012pt of Word's across the page and 0.32pt down it, and the ink of a page agrees with Word's on better than 99.4% of it.

Where the plotting goes when the chart does not say — which is what every chart in a real document leaves to be worked out — is measured too, by chart-layout-probe. A chart carrying no labels at all puts its plotting eleven points inside its frame on every side, whatever size the frame is; a chart carrying them begins its labels 6.5pt inside the frame and gives the plotting what is left:

side what it makes room for
left the widest label ranged against the axis there, plus the gap it keeps from the axis
foot the line written under the axis: 1.584 type sizes below it, and its descender below that
top half a label's height, so the topmost number does not overrun the frame
right nothing — a category label wider than its bars is left to overrun, as Word leaves it

A chart lying on its side swaps the two labelled edges over — the words go up the side and the numbers along the foot — and swaps what the other two do with them. Its top takes the bare eleven points, since nothing reaches above the plot; its right takes eleven plus half the widest number, because the last number along the foot is centred on the plot's own corner and half of it hangs past. Word gives the second page of chart-bar-stacked 39.34pt on the left, 11 above, 25.05 below and 16.07 on the right, and each of the four falls out of the rules above to a fortieth of a point.

The heights in that table are the face as Windows reads it, where the baselines are the face as it reads itself: for Calibri, 1950 and 550 of its 2048 against 1536 and 512. Two questions, two answers, and using the second for both put the plot area two points out at twenty point type.

Across the six charts of the probe — varying the frame size, the width of the numbers, the type size, the length of the category labels, and whether there are labels at all — the plot area lands within a quarter of a point of Word's, and the chart with no labels lands exactly.

What the axis runs between when the chart does not say is measured by chart-scale-probe and chart-bar-scale-probe, twenty-six charts between them, varying the numbers, how long the axis is, which way it runs and what size its labels are set at. One rule accounts for every one:

the step is the smallest of one, two or five times a power of ten for which the axis — running from the largest step at or below the least value to the smallest step strictly above the greatest and a twentieth — carries no more marks than the axis has room to write

So up a 126pt side at ten point: 7 runs to 8 in ones, 9.5 to 10 in ones, 10 to 12 in twos, 47 to 50 in fives, 105 to 120 in twenties, 1000 to 1200 in two hundreds, and 0.4 to 0.45 in twentieths. The strictness is what puts a chart of exactly 100 at 120 rather than leaving its tallest bar against the frame, and the twentieth is what puts a chart of 58 at 70 rather than 60 — chart-legend-key-probe holds one of each, bars and an area, and Word stops both at 70. The foot is nought wherever nothing is negative, whatever the smallest value — a chart of 30 and 55 still starts at nought — and where something is negative the foot steps below it the same way the top steps above: −20 and 60 give an axis from −30 to 70 in tens.

How much room a mark needs is the part that only the second probe could reach, since every chart in the first is upright and 126pt tall. A label wants along its axis:

axis room per label
standing up a tenth over its own type size — anything from 1.05 to 1.145 fits the measurements
lying down three times it — anything from 3.02 to 3.15 fits

and the axis takes as many steps as leaves room for one more label than it has steps, since a mark is written at both ends as well as between — and never more than ten, however long the axis is. The ten only shows itself on an axis long enough for eleven labels: chart-area-scatter's fifteenth page holds a chart of exactly one over a plot that would take eleven, and Word runs it to 1.2 in fifths rather than to 1.1 in tenths. That is why the same 47 that runs to 50 in fives up a side runs to 60 in twenties along a foot of the same length, and why setting the labels in twenty point rather than ten thirds the number of steps either way. Two of the fourteen pages exist only to part the readings: a chart of millions divides its foot exactly as a chart of tens does, so the room has nothing to do with how wide the numbers are; and the same chart set in twenty point divides it into a third as many steps, so the room does grow with the type. All twenty-six come out label for label as Word's.

The negative case also showed up something the positive ones cannot: the words under the bars go beside the nought rather than at the foot of the plot, because that is where the two axes cross. A chart whose bars all stand up puts the two in the same place; one with a bar hanging down does not, and what hangs down hangs past its own label.

Bars that lie down, and bars piled on each other

A bar chart is a column chart turned on its side, and almost nothing about it is stated: barDir is the whole of what the format says, and everything that follows had to be measured from chart-bar-stacked.

  • The categories run upwards: the first is at the foot of the plot, not the top, which is the opposite of the left-to-right an upright chart uses.
  • Within one category the series run upwards too, so of two clustered bars the second is the upper. Both reversals together are what makes a bar chart read the same way round as the column chart it is a turn of.
  • The value axis stays at the edge it is drawn on — the foot — however far the categories move. The category axis crosses it at the nought, and its labels follow it: the last page of the fixture puts them 9.28pt to the left of the nought, three fifths of the way across the plot, and not beside the plot's own edge.
  • Gridlines run the other way, up the plot rather than across it, and the one at the crossing is left out because the axis itself is drawn there. A chart with nothing negative leaves out the one at the foot of the scale for the same reason; one with something negative draws it and leaves out the nought.
  • A mark on a lying category axis reaches to the left of it, and one on the value axis below — outwards in both cases, the same 3.1733pt.

Stacking is an overlap of a hundred and nothing else, so far as the width of a bar goes: two stacked series across a 78pt category give a bar of 78 ÷ 2.5 = 31.2pt, which is what one clustered series would have given, and Word draws exactly that. What changes is where each bar starts — at where the last one ended rather than at the axis, with what rises above nought and what hangs below it piled apart — and what the axis has to reach, which is what a category comes to rather than what any one bar holds. Word runs the fixture's stacked page to 70 where the same numbers unstacked would have stopped at 50.

Stacked to the whole, each bar is first taken as its share of its own category, and the axis runs to exactly one — the single place the top of an axis is not a step above what it holds. The labels are written by the axis's own number format, of which what is read here is what a chart carries: how many decimal places to keep, whether to group the thousands, and whether the number is a per cent.

One thing the negative page turned up that has nothing to do with lying down: a bar hanging below nought is drawn the other way about — white, and outlined in black at three quarters of a point — which is what invertIfNegative asks for, and asks for by default. Word draws it so even though the series it belongs to asks for no outline at all.

All eight pages of the fixture agree with Word rectangle for rectangle within a quarter of a point, which is the 1/300in Word rounds every edge it draws to.

How a line curves, and where a pie sits

A line chart curves through its points unless the series says not to — the format's default is smooth, which is not the obvious one, and Word writes c:smooth on every line chart it makes so its own files never depend on it. The curve is a Catmull-Rom spline: each point is passed at a slope of half the distance between its neighbours, the ends take the slope of their own segment, and the Bézier controls sit a third of the way along those slopes. Every control point of the fixture's curve comes out of that to the EMU — Word writes 266700 where the rule gives 266690.

The points themselves sit at the middles of the categories, where a bar chart's bars stand.

A pie is centred in its plot area and reaches the nearer pair of its edges: Word's export puts the fixture's pie at the middle of a plot 216 by 172.8 with a radius of 86.4, which is half the shorter side. Its slices begin at the top and run clockwise. A pie carries no axes, so a pie left to place itself gets the bare eleven points on every side — the same margin a chart with no labels gets, and Word draws it at exactly that.

Inside the frame, all four of chart-line-pie agree with Word on better than 99.9% of their ink. The one thing left outside it is that Word clips a chart to its own frame, so the outer half of the border it draws is cut away; nothing here clips, and that border straddles the edge instead. It comes to a quarter of a point of halo round the outside of a chart.

An area, and a chart of pairs

An area chart is a line chart with the space under it coloured in, and a scatter is the one kind that has no categories at all. Both were measured from chart-area-scatter, nineteen pages of it.

  • An area's corners sit at the marks rather than between them, so the first and last touch the ends of the plot: Word's four corners land at 162, 240, 318 and 396 across a plot running 162 to 396. That is what crossBetween="midCat" asks for, and Word writes it on every area chart it makes; a line chart says between instead and keeps its points at the middles of the categories.
  • The category labels follow the points, so the outermost two are centred on the plot's own corners and half of each hangs past. A chart left to place itself makes room for that half — the fifth page gives its right edge eleven points plus half of "Four" — and where a label is too wide for its category it wraps, which grows the foot by a line and the side by half of the widest line it came to. The nineteenth page, whose first category is nearly six times as wide as any of its numbers, lands within three hundredths of a point of Word both ways.
  • Stacked, each area is a band rather than a shape hiding the ones behind: it runs along its own points and back along the series below it. Unstacked, they are drawn one over another in the order the chart lists them, opaquely — Word writes no transparency of its own, so a taller area behind a shorter one is simply hidden by it.
  • A scatter is scaled both ways, and the foot is divided by the rule a lying axis uses rather than an upright one: three times the type size per label against a tenth over it. Its eighteenth page, left to Word both to place and to scale, divides a 320pt foot into eight and a 180pt side into six.

A marker is the one thing whose placing is Word's rounding rather than its arithmetic. A marker of size s is drawn in a box of s rounded to the three-hundredth of an inch, whose corner is the point less half that box rounded down to the same grid, and the shape itself sits half a three-hundredth inside the box. So a marker of seven comes out 6.72 across and up to a third of a point left of and above the point it belongs to. Four sizes and two shapes come out of that rule exactly; on one point in four Word breaks the tie on the grid the other way, and what decides it is not measurable from what is here.

A series that says nothing about its markers still gets them — in its own colour, outlined in it at half a point, and seven points across where the series draws a line or six where it does not. Word runs through diamond, square, triangle and cross for the first four such series, which is measured; what it does with a fifth is Excel's old order and is not.

What goes round the plotting

A title, a legend and the numbers written at the points are the three things a chart carries that are not the plotting itself, and the first two take their room out of it. Measured from chart-title-legend-label, nineteen pages.

A title takes nine points and a line of its own type, whatever that line comes to: at ten point it takes 20.076 off the top of the plot, at eighteen 28.931, at twenty 31.146 and at thirty 42.216, and two lines take two lines' worth. The line in question is the face as Windows reads it — for Times New Roman 1.1074 ems against the 1.1499 a line of body text is set by — which is the same split between the two pairs of metrics that runs through the rest of a chart. An axis title takes the same nine points and a line off the side it names.

Where each then goes is measured once apiece: a chart's own title has its first baseline 7.43pt below the top of the frame and is centred on the frame, while an axis title's box ends 12.5pt inside the edge it belongs to and is centred on the plot. The one up the side is turned on its end, reading upwards, and is drawn into the chart's own picture rather than set as a line of text — turned text has no baseline to compare with an upright one's, so it is held to Word by ink instead.

A legend takes 11.8pt and a line along the top or the foot, and 15.118pt and its widest entry up a side. Its key is a square 0.5492 of the type size across, the words beside it begin 0.8239 of the size less 0.376pt from the key's own left edge, and the key sits that much again below their baseline. Along the foot the entries are set 0.784 of the type size apart — except where one entry is long enough that a seventh of it is more, which is what the four-series page shows and what nothing here explains — and the whole block is centred a little right of the middle. Up a side they are one to a line, 1.8083 type sizes apart, centred on the middle of the frame.

A number written at a point takes nothing from the plot and sits clear of what it names: past the end of a bar by four and a half points and its own descender, inside the end by the same four and a half and its ascender, and to the right of a point on a line by 8.5pt. What would overrun the top of the chart is set against it instead. On a slice of a pie it goes out along the middle of the slice, 14.3pt inside the rim — measured on two pies of different sizes, whose labels sit 14.79, 14.58, 12.52 and 14.39 inside a rim of 72.96 and 14.17, 14.36, 12.30 and 14.15 inside one of 83.5. Word fits those to the slices by a rule of its own, and the odd one out of each four is the narrowest slice, which it pushes further out; that slice, and the degree and a half Word turns some labels off the middle of their own, is the one place on these pages where two points of disagreement are left.

A pie or a doughnut with anything written on it also gives way to it: where Word is placing the plotting itself, the disc comes out 0.86083 of the plot it would otherwise fill — 83.5 of the same 194 point plot that an unlabelled one fills to 97 — and by the same share whether the labels are ten point, fourteen or twenty, so it is not the room the words take that decides. A chart that states where its plot area goes is drawn exactly there, labels or no labels.

Everything else agrees with Word to within 0.73pt vertically and half a point horizontally, and the ink of a page agrees on better than 99.3% of it.

Four more kinds of chart

A doughnut, a bubble chart, a radar and a stock chart are the four kinds a document is likely to hold that are none of the six above. Each is described by the same kind of part — numbers, axes and formatting — and each was measured against Word's own export of it: chart-doughnut-bubble, chart-radar-stock, chart-kinds-probe, chart-kinds-probe-two and chart-legend-key-probe, fifty pages between them.

A doughnut is a pie with a hole through it. The hole is a percentage of the whole disc — a quarter, a half and three quarters of an 86.4pt disc give holes of 21.6, 43.2 and 64.8 — and where the chart holds more than one series, what the hole leaves is divided evenly between them, the first series innermost: two series of a disc of 86.4 with a hole of half give rings of 43.2 to 64.8 and 64.8 to 86.4. A share written on a ring sits at the middle of that ring, whatever size it is set in, which is the one label on a chart that needs no fitting at all. Its legend names its slices rather than its series, as a pie's does.

A bubble chart is a scatter whose points carry a third number, drawn as how large a bubble to put there. How large the largest one comes out is the frame's doing and not the plot's — a page whose plotting is made small draws the same bubbles as one whose plotting fills the frame, and a frame turned on its side draws the same as one standing up:

diameter = (shorter side of the frame − 10) × scale ÷ (scale + 333⅓)

which gives 47.538 of a 216 point frame at the hundred per cent a chart means by saying nothing, 97.385 of a 432 point frame, and 131.684 at three hundred per cent of 288 — to the third decimal place on all eleven pages, at seven scales and four frames. So however large the scale is asked to be, the bubbles run out at the frame less five points a side. The rest are drawn in proportion by area unless the chart says its numbers are widths, and each is kept inside the plot: Word wraps every bubble in the plot area's own rectangle, so one larger than the plot is cut off at its edge rather than drawn over what is written round it.

An axis a bubble chart leaves to Word reaches a step further at each end than the same numbers would give a scatter, which is how the bubbles get somewhere to be: a foot running 1 to 7 comes out −2 to 10 by twos where a scatter gets 0 to 8, and a side running 10 to 55 comes out 0 to 70 by tens where a scatter gets 0 to 60. The side keeps its nought, since a value axis of nothing but positives begins there whatever else is true. The marks those extra steps add are marks like any other and are counted against the room the axis has for them.

A radar sets the categories round a circle and measures the values out from its middle. Word squares the plot area to its shorter side and centres it in what it was given, so a plot 216 by 172.8 becomes 172.8 square, 21.6 in from each side. The first category is at the top and the rest run clockwise; the value axis is ruled as one many-sided figure per mark rather than as lines across the plot, and the axis itself and the spokes the categories stand on are not drawn at all. A series is the figure through its own points: outlined where the chart draws lines, filled where it says filled, and marked at its corners where it says marker.

The words round a web are set against a circle a twenty-fifth wider than the rim — 89.856 outside a rim of 86.4, 74.33 outside one of 71.487, 90.35 outside one of 86.872 — with the near edge of each label on that circle and its baseline where the circle crosses its own spoke, less 0.8pt and plus half the difference between the label's ascent and its descent. It is a share of the web and nothing to do with the type: the same web labelled at ten point and at twenty sets both at the same distance out. One at the very foot is centred on its spoke and hangs its ascender on the same circle; one at the very top clears it by a further 1.63pt below its descender. The numbers go up the middle, ranged against it and ending 1.02 type sizes short less a twentieth of a point.

A web left to Word to place keeps 1.5385 × the type size + 5.743 clear on every side of the frame, which is what decides how large it comes out: a 216 point frame gives a web 173.744 across at ten point and 142.974 at twenty, and both are the line through them.

A stock chart is three or four series read together as one day's trading, and what it draws is the lines between them rather than lines along them. Which series is which is said by nothing but their order — high, low and close, or open, high, low and close. The line from the day's lowest to its highest stands where a line chart's point would; the bar from what the day opened at to what it closed at is as wide as one bar of a bar chart holding a single series, so a category 63 points wide gives 25.2 at the gap of 150 a chart means by saying nothing and 42 at a gap of 50. A day that closed higher than it opened is drawn white and one that closed lower black, both outlined, where the chart says nothing about either — and where it does say, it is obeyed, which for a while it was not: the colours were being looked for one namespace out and quietly ignored. Nothing caught it because the fixture stating them stated white and black, the very colours the fallback fills in, so a reader that ignored the document drew the same picture. chart-updown-bar-probe states green and red instead, and exchanges them between its two pages. The close of a chart with no opening is shown by whatever the series marks its points with, and a series marking them with nothing shows nothing: Word draws no tick of its own.

A legend draws a line beside a series that is a line rather than a shape — a line chart's, a radar's, a scatter's — 19.2pt long with the words beginning 21.225pt past where it starts, both at ten point and at twenty, so neither is a share of the type. A series that marks its points draws one at the middle of the key as well, and a series that is neither a shape nor a line — a stock chart's, whose drawing is all in the lines between the series — gets no key at all, which is what puts its three names where Word puts them.

Setting an equation

An equation is not a line of runs. Word writes it in a language of its own — Office Math Markup, in its own namespace — and what is in it is fractions and radicals rather than paragraphs and runs, so a reader walking a paragraph looking for w:r finds nothing at all in one. That is what used to happen here: an equation reached the page as the space it took up and nothing else.

Almost nothing about how one is set is a number anybody chose. A face meant for mathematics carries a MATH table — where the axis of an equation sits, how far a superscript rises, how thick a fraction's bar is, how much room a radical leaves over what is under it, and a set of taller shapes for every bracket that has to grow. Those are read and used, and the rules that combine them are the ones the OpenType specification lays down. What was measured is where Word departs from them, and it departs in ten places:

  • An equation is set at the size of the text carrying it, not at the size its own runs state. Its letters are drawn at their runs' size and everything else — every distance from the table, every bracket and radical it stretches — is measured in the em of the text round it. math-structure-probe is what says so: its paragraphs are twenty point and every run inside its equations is twelve, and Word draws the letters at twelve and the brackets and radicals round them at 19.92, which is twenty rounded to the 1/300 inch Word rounds a size to. An equation on a line of its own has no text round it, and takes its own runs — which is why the radical of the quadratic formula is at twelve point where the same radical in a sentence is 11.04.
  • Its script sizes are the face's own percentages taken down to a whole half point. Cambria Math says 73% and 60%; twelve point gives 17.52 half points, so seventeen, so 8.5pt, written out as the 8.4 Word rounds a size to. The same rule gives Word's 6.96 for a script of a script of twelve point, its 17.52 for a script of twenty-four, and its 4.08 for a script of six — three sizes and two levels, none of them a simple share of the size.
  • Inside something — a bracket, a radical — the room between a letter and the sign after it is four eighteenths of the em the equation is set at and the letter's lean is not counted at all; out in the equation itself it is four eighteenths of the em its letters are and the lean as well. x+y=z agrees with Word's to four decimal places on every gap of it, and the pair inside a radical to a hundredth of a point.
  • A script sits in the corner of the letter it is on by what the face says of that corner. The face states a lean for the letter and a kern for each of its four corners, the kern as a staircase of values by height; a superscript takes the lean and the corner kern, a subscript takes the corner kern alone, and the script's own opposite corner is added to it, each in its own em. Word's f with an x under it pulls the x back 2.35 points — the −400 units the face states for the f's bottom right — and its f with an x over it pushes the x out a point, which is the f's lean, 65 units for its top right corner and 65 more for the x's bottom left. None of it applies where the letter is not the size the equation is set at: the same kerns in a twelve point equation whose letters are twelve point and does not with sixteen point letters, or with twelve point letters in a sixteen point paragraph.
  • The baseline-drop rules apply to what is built rather than to a letter, which is TeX's own rule: a script sits on a letter at the shift the table states, and on anything else at that thing's height less a drop. What counts as a letter is one glyph at the size the equation is set at — the of math-kern-probe is one and takes the stated shift, the of the equations fixture is a twelve point letter in an eleven point equation and takes the drop, and the limits of an integral are placed from the integral's own ink exactly. Under a radical the cramped shift is used, which is what Word uses.
  • Where a superscript and a subscript would close up on each other, the room wanted is shared evenly between them: Word sets the two of x with an i under it at 4.56 and 2.64 where the shifts alone would give 4.04 and 2.25.
  • A bracket grows by the shapes the face keeps rather than by being drawn larger, and it need only cover five sixths of what it holds before Word stops reaching for a taller one. math-bracket-probe walks a bracket up the whole of the face's series by growing what it holds from twelve point to seventy-two: seven of the twenty-two are the step from one shape to the next, and they put the factor between 0.8320 and 0.8434. Past the end of the series the face states a recipe — a head, a foot, and a middle repeated as often as it takes — and Word builds one, which is what happens to a bracket round a seventy-two point letter in a twelve point equation. It is the whole height that decides whether to build rather than the five sixths, and the pieces are overlapped as far as the face allows.
  • An n-ary operator is centred on the axis — which raises Word's sum half a point and drops its integral by as much — and the 1.8886 points it leaves after the limits before what the sum is taken of is a number no constant of the table and no fraction of an em accounts for. It is written down as what it was measured to be, from a sum and an integral that agree on it exactly although they agree on nothing else.
  • Which rules an operator's limits follow is the operator's own doing, not the markup's. math-nary-probe writes each of four operators both ways round — limits above, limits beside — and a sum is set identically either way, as is an integral, while the two disagree with each other. An integral's limits are scripts on a box, placed from the operator's own ink; a sum's are placed by rules of their own: the lower one goes down by the stated shift and 0.115 of what is in it, the two of them straddle a line 0.08 of the size apart, and an upper limit with no lower one takes the stated shift from that same line. Twenty limits, and every one of them lands where Word lands it but for two that round the other way.
  • A limit the markup writes and leaves empty — which is what a document says when a limit has been deleted — is not a limit, but the line still leaves room for it: the face's typographic ascender at the size a limit is set at, and nothing below. Word's sum with only a lower limit asks its line for 11.0 points where the limit alone would ask for 4.4, and the 6.6 between them is that ascender to a twentieth of a point across five probes.

A slanted fraction is set at the full size with a taller fraction slash — not the solidus, which the face keeps no shapes for — its numerator raised 0.3 of the type size and its denominator dropped by the table's own shift. A matrix stands its columns an em apart and its rows a line apart, the line being the face's ascent and descent and the leading the table asks for.

Every position in an equation is rounded to Word's own 1/300 inch, which is the only reason the figures above come out exactly rather than a hundredth away.

The equations fixture holds seventeen of them beside Word's export of the same file. Drawn and compared line by line, the two agree on 99.8% of their ink, and every equation begins within a third of a point of where Word begins it — most within four hundredths.

How tall a line holding an equation is was the last part of it that was not Word's, and math-line-box-probe settled it. It stands twenty-five equations between rails — a two point full stop on a line of its own — so that the room each asks for above and below the line can be read off Word's page directly. Two things decide it:

  • the ink of everything in the equation, with the face's own math leading over it — 300 design units, 1.6 points at eleven point. Nothing below: what hangs down asks for its ink and no more.
  • and never less than a line of the face at the size the equation is set at, which is what a bare letter gets and what an equation whose ink is small keeps. An equation of nothing but letters is the one case where that floor follows the runs instead: an x at twenty-four point in an eleven point paragraph asks for a twenty-four point line.

Twenty-five probes, at three sizes and two levels of script, come out within 0.56 of a point of Word's — most within a quarter, which is the 1/300 inch Word rounds a position to — and one within 0.92: a sum whose limits this engine places where the OpenType rules put an integral's and Word places lower. Across the whole equations fixture the drift down the page is under two points, where the reading before this probe existed left it thirteen.

math-kern-probe is what settled the corner kerns: fifteen scripts on letters chosen for what the face says about them — the largest kern it states, the smallest, a negative one, and a staircase whose step a full stop's ink does not reach. Every one of them lands within four hundredths of a point of Word's, and fourteen within seven thousandths. Which height Word reads a staircase at cannot quite be pinned: it behaves as though it reads the value where the glyph's own ink ends, which Cambria Math's data cannot separate from reading it at the script's own baseline in the script's em — but both differ from reading it at the height of the script, which is what the specification's wording suggests and what Word's own full stop over an i rules out.

One more thing the probes turned up, which is about sizes rather than brackets: Word measures at the size a run states and writes the size rounded to its 1/300 inch. It draws the x of a sixteen point run at 16.08 and puts the script after it at the advance of a sixteen point x; it sets the row i=1 of the equations fixture at the advances of eight and a half point although it writes 8.4 for every one of them. The two are separated here: every measurement is at the size, every size written into the file is rounded. What a bracket has to cover is the exception, since what it covers is what is on the page.

An equation's letters are drawn from the mathematical alphabets — an x in an equation is U+1D465, a character of its own, which is what Word draws — so what a reader copies out of one of our pages is the letter that was set. Word's own file maps them back to nothing at all. The letters are drawn into the line as a group of their own rather than in among the words on either side, so everything is there and selectable and each is where Word puts it, but dragging across a whole line copies it in a different order from Word's.

Content wrapped in something else

A body holds paragraphs and tables, and a reader that walks it looking only for those two is right about every document written by hand and wrong about most documents written by Word. Three things wrap ordinary blocks:

  • a content control (w:sdt), which Word puts round the cover page, the table of contents and every placeholder a template leaves to be filled in;
  • a compatibility alternative (mc:AlternateContent), which offers the same content twice over;
  • the old custom XML element (w:customXml), round whatever an older document tagged.

All three are unwrapped, wherever blocks are read: the body, a table cell, a running head, a note and a text box. content-controls puts one of each on a page and names the line inside it, and Word draws all of them in place with no more room between the lines than any other paragraph gets. Where an alternative offers two branches Word draws the choice rather than the fallback — the fixture's two branches hold different words so that its export says which — and that is the opposite of how a run-level alternative is read here, where the choice may be a drawing this cannot read and the fallback is what it is for.

This was found by asking the converter what it did with each, and it had been losing all of it in silence. The test that should have caught it could not: it compared the text on the page against the text in the parsed model, and a construct the reader drops is missing from both sides. It now reads what the document says from the part itself, so the two sides come from different code, and reverting the fix fails it.

What a diagram is, and which half of it to draw

SmartArt is written down twice. There is what it means — points, the connections between them, and a layout definition saying how points of that shape are arranged — and there is the arrangement it last came to, kept beside it as a flat list of shapes at absolute positions with their geometry, colours and text. The first is a language, a system of constraints and algorithms with a hundred layouts written in it. Word runs it afresh every time it opens a document; every other reader draws the cached arrangement, and so does this.

That is measured, not assumed: the seed for the smartart fixture carries a cache no layout would produce — three boxes stepping down the frame — and Word's export shows three boxes in a row filling it. Word_lays_a_diagram_out_again_rather_than_trusting_the_cache keeps that fact in the suite.

It also decides how a diagram can be held to Word at all. A hand-authored cache says nothing, since Word throws it away; the only cache worth comparing is the one Word itself wrote, so the fixture is a real document — the seed goes through Word, which rebuilds the diagram and saves its own arrangement, and that is what gets rendered and compared.

Two things about diagram text differ from anything on a page. Its spacing is a percentage of a line, where DrawingML's line is a flat six fifths of the type size rather than whatever the face asks for — Word sets the fixture's paragraphs 15.6pt apart where 35% of the type size would be 12.6pt and 35% of six fifths of it is 15.1pt. And a word too wide for its box comes apart between its letters: Word sets "Three" in a 67.84pt box as "Thre" and "e". So does a page — this repository believed otherwise until break-tolerance-probe asked a page directly.

What is left is a constant 3.1pt: every line of the diagram is where Word puts it across the page, and every line the right distance below the one above it, but each box's block of text sits 3.1pt high. The block is centred, so that is either a 6.2pt disagreement about how tall the block is or a 3.1pt one about where the first baseline sits inside it — and those cannot be told apart here, because Word writes the cache itself and so chooses the type size, the line spacing and the anchoring. Both readings fit every line. It is recorded as a known divergence rather than fitted away.

How a diagram sets the text in its boxes

Two rules, and each was worth a point or two of the smartart fixture's divergence:

  • A percentage line spacing in a drawing takes its room off the top. The same 90% that leaves a document's paragraph sitting at its natural ascent — losing the room below the baseline, which line-spacing-multiples measures — takes the room from above in a diagram, so the ascent is the scaled line less the whole descent. At 36pt Calibri: the line is 39.55, the descent 9.67, and Word's first baseline sits 29.90 below the frame where the face's own ascent is 34.28 and nine tenths of it is 30.85.
  • No space is kept after the last paragraph of a box, nor before the first, unless its body says spcFirstLastPara="1". Word's diagrams put 35% of a line between paragraphs, so keeping it at the end makes the block a third of a line too tall — and a block centred in its box then sits half of that too high.

smartart-lines is what separates them, and the separation is the whole point of it: with the text centred, as a diagram normally sets it, the height of the block and the place of the first baseline inside it are added together and no measurement can pull them apart. So the probe asks Word for text anchored to the top of its boxes — through the layout, since Word rebuilds a diagram's cache from that and not from what the document last held — and then the first baseline is the frame plus one ascent and nothing else. Its three boxes hold one, two and three paragraphs, which is what says the remaining error is constant rather than per line.

With both, the diagram in smartart agrees with Word to a single step of the grid, where it stood at 3.36 points.

How large a watermark is set

A watermark is a word on a path, and the size the document gives it is a single point — the shape type says the letters are to be fitted to the shape, and that is what decides how large they come out. What is fitted is the ink itself, stretched to fill the shape less its own insets, and not the box the face would set the word in. watermark-fit-probe says so seven times over: the same rectangle of ink comes back whether the box is asked for DRAFT, for CONFIDENTIAL, for a short word, for a word with a tail below the line, or for the same word in another face — and it is the box less the tenth of an inch at the sides and half of that above and below that every text box has.

The letters are stretched to that box rather than scaled to it, so a word with a descender is squashed to the same height as one without. Every page of the probe agrees with Word on better than 99.8% of its ink, and the diagonal watermark of the watermark fixture on 99.89%.

Two things about it are deliberately not Word's. Word's export turns the letters into outlines, so its own file holds no watermark text at all and a reader cannot search for the word; this keeps it as text, which is why the line-by-line comparison has to allow the two files a different number of lines. And Word for Mac draws a watermark in the document's own face whatever face the document asked for — the probe's sixth page asks for Times New Roman and gets Calibri — where this sets it in the face that was asked for. That page is the only one of the seven that agrees on less than 99.8% of its ink; it agrees on 98%.

What washing a picture out does

The other kind of watermark is a picture, faded until the page can be read through it, and the fading is two numbers on the image: a gain and a black level, both written in sixty-fourths of a thousand. watermark-washout-probe holds the same bands of flat colour six times over at different settings, and what comes out of each channel — everything in nought to one — is

gain × in + (1 − gain) ÷ 2 + black × (1 + gain)

clamped at both ends. The gain is a contrast about mid grey: half a gain leaves grey alone and pulls black and white halfway towards it. The black level is a brightness on top of that, and counts for more when the gain is high, which is the part of this that is fitted rather than explained. Word writes a gain of 19661 and a black level of 22938 for every picture watermark it makes — three tenths of the contrast, and pale enough to read a page through.

Every band of every setting comes out within one part in 256 of Word's, including the two that saturate.

Where an old-style shape is drawn

A shape in the older w:pict spelling is drawn a little way down and to the right of where its own size puts it, and how far depends on the weight of its outline. vml-stroke-probe holds the same rectangle thirteen times over, varying nothing but that weight:

outline none ¼pt ½pt ¾pt 1pt 1½pt 2pt 3pt 4½pt 6pt
offset 0 0 0 0 0 2pt 2pt 2pt 4pt 6pt

The offset steps in twos rather than growing with the weight, and it starts a whole point in: it is the smallest even number of points that reaches a point short of the outline. The text inside moves by half as much again, which is what the six point page of vml-inset-probe shows — its text sits at the very edge of the box, where the inset alone would put it three points inside. The last three pages of the probe rule out the two obvious alternatives: a rounded rectangle and an ellipse at the same weight are offset identically, and two shapes on one line neither shift each other nor themselves.

Why it steps in twos is not explained here. What is implemented is the rule the measurements fit, and none of it shows in an ordinary document: Word draws a text box with a ¾pt outline, and everything at a point or less is offset by nothing at all.

Two things about the same shapes were measured and are not implemented, both of them out of reach of any ordinary document. The first is that an outline thicker than a point also makes the shape's line taller, so what follows it sits lower — by 0.96pt at 1½ and 2 points, 1.92pt at 3, 4.08pt at 4½ and 5.04pt at 6, which follows neither the weight nor the offset the same shape is drawn at. The second is that such a shape sharing a line with another nudges its neighbour by about a point. vml-stroke-probe holds the first as a known divergence in TextPositionComparisonTests, and vml-shapes holds the second: the two pages agree on 96% of that page's ink rather than the 99% the newer spelling's shapes manage.

Which part of a table style reaches which cell

A table style is unlike every other kind: what it says depends on where a cell is rather than on what the cell says about itself. It can describe thirteen different parts of a table — the whole of it, the banding across the rows and down the columns, the first and last rows, the first and last columns, and the four corner cells — and the order in which those override each other was measured rather than read. table-style-conditional-probe gives every one of the thirteen a different type size, so the size Word draws a cell at names the format that reached it, and seven pages of tables give the whole lattice at once. Two of the answers are not the ones the specification's ordering would give:

  • Banding down the columns beats banding across the rows. With both in force the rows leave no mark at all — every cell in the middle of the probe's first table comes out at its column band's size — so the fixture needs a page with the column banding turned off to see the row banding at all.
  • A first row beats a first column. Where a style defines no corner formats, the cell where the two meet is drawn in the first row's size.

The rest is as expected: the whole table, then the banding, then the edge columns, then the edge rows, then the corners, each overriding what came before. Two orderings could not be measured because nothing makes the two formats meet in one cell — a last row against a last column, and the corners against each other — and each follows the pattern of the pair beside it.

A table of one row has a first row and no last one, and a table of one column a first column and no last one. The single row of a four-column table comes out in the first row's size, and the cells at either end of it in the north-west and north-east corners rather than the southern pair — which matters, because a one-row table is what a great many documents use for a banner or a form.

Three more things the same fixture settled. w:tblLook gates every one of the conditional formats, the corners and the banding included: with it turned off, a table drawn by a style with all thirteen comes out entirely in the whole-table formatting. Banding begins counting after the first row or column where there is one, and runs on through the last one whether or not a format for it exists. And a table style sits between the document's defaults and the paragraph's own style in the cascade — a paragraph style used in a cell overrides the table style, and direct formatting overrides both.

The border round a page

w:pgBorders draws a line round the page, and where that line falls depends on what it is measured from. page-border-probe puts four sections to Word and reads the answer off the ink:

  • Offset from the page, the space is to the outside of the line: a border 24 points in has its outer edge at 24 and its ink from 24 to 24.96.
  • Offset from the text, the space is to the inside: a border against the text with no space at all has its inner edge on the margin and its ink just outside it.
  • w:display picks the pages — firstPage means the section's first page and no other.
  • A missing side lets its neighbours run on to the paper's edge. A border with a top and a left and nothing else draws its top line the full width of the page, not the width of the border.

A drawn width rounds down to the 1/300 inch grid rather than to the nearest. Three points is the case that says so, being exactly half a step from either answer: Word draws it at 2.88 where 3pt is 12½ steps. Every coarser weight agrees either way.

Word draws each side as a bar between the corners and then fills the corners in; this draws one bar corner to corner, which covers the same ground. So the comparison is of ink rather than rectangles, and every page of the probe agrees with Word's exactly — no point of the margins differs.

Numbers down the margin

w:lnNumType sets a number beside every line, or every fifth, out in the left margin. It is a section's property rather than a paragraph's, and line-number-probe puts the whole of it to Word in three sections and one export:

  • w:countBy counts every line and prints some of them. With countBy="5" the count still runs 1, 2, 3 — only the multiples are set, so the tenth line carries a 10 whether or not the ninth carried a 9.
  • w:restart is newPage, newSection, or continuous, and w:start is ignored where the count is continuous: the probe's middle section asks to begin at 10 and Word carries on from the 6 the section before it reached.
  • An empty line is counted, which is why the probe's "Counting again 1." is the eighth line and not the seventh.
  • w:suppressLineNumbers on a paragraph passes its lines over entirely — no number, and no turn: the count comes out of the two suppressed lines the same as it went in.
  • The paragraph a section break is written on is not counted. That one is read off the count rather than seen: it runs 6, 7 across the break where counting the break's own paragraph would have made it 6, 8. Whether Word lays that paragraph out at all its export cannot say, since it falls at the foot of a page where an invisible line and no line look alike.

The number is set in the document's default face at the default size, both quantised like any other text — Calibri 11pt is drawn at 11.04. w:distance names how far the end of the number stands from the text, and 18 points is what Word uses when nothing says: a single figure begins at 48.48 on a page with an inch margin, and 720 twips moves it exactly 18 points further out.

The width it is set against is the sum of its figures' widths rounded to the grid, not its true width. Word's own numbers say so: one figure stands at 48.48 and two at 42.96, which is 5.52 apart where the figure itself measures 5.597 and 5.52 is what that rounds to. It follows that every number lands on the grid, which every one of Word's does.

Every number of the probe agrees with Word's — the same figure, in the same place to a hundredth of a point, beside the same line.

A phonetic guide over a word

w:ruby sets a reading over the word it belongs to — ふりがな over 振仮名 — and a run holding one was dropped whole: the guide went, and so did the word under it. ruby-probe puts every alignment the markup has to Word, over the same word, and each of them comes out where Word puts it:

  • The wider of the guide and the word decides the room the pair takes, and the narrower is set in the middle of it. A guide of eight letters over one takes forty-eight points, with the word centred underneath; a guide narrower than its word takes the word's own room.
  • center, left and right put the slack between the two ends, at one end, or at the other.
  • distributeLetter spreads the guide's letters so its ends meet the word's — four letters over three take three gaps of four points each.
  • distributeSpace spreads them the same way but leaves space outside as well: half a gap at each end, which is what Word's 33 points inside a 36 point word comes to.
  • The guide sits on a baseline of its own, raised by w:hpsRaise and set at the size w:hps names, and the line grows to hold it: the probe's lines stand 20.4 points apart where the twelve point Mincho alone would take 15.6.

The line box is the word's rather than the run's that wraps it — a guided word set in Mincho gives the line a Mincho box however the run round it is written, which is what Word's own line spacing says. And the pair is written into the page where it stands in the line rather than after everything else on it, so that what a reader copies out reads as the document does.

Two tables written one after the other

A document that means two tables must put a paragraph between them: two w:tbl elements that touch are one table to Word, and the difference shows. adjacent-tables-probe borders each table three points at the top and foot and half a point inside, so the join can be read off the ink — and two touching tables come out with one line round the pair, none where they meet, and no space between them either.

So they are folded into one when the document is read, and what the second table said about itself is not thrown away with it:

  • Its rows keep the columns they were written with. The probe's second table names its columns the other way round — a narrow one first — and Word keeps them that way, a table being free to have rows of different widths.
  • Its rows keep their own indent, which is a row's property in Word's model rather than a table's. So does the first table's — the merged table stands where the first table's indent puts it, and then each row is indented again by whatever its own table asked for, which means a first table asking for half an inch has its own rows an inch in. That reading is forced by the one page where the first table is the indented one.
  • What it said about its borders is thrown away: the line round the merged table is the first table's.

And where the merged table will not fit, the whole of it is squeezed until it does. A row that overruns — because its own columns are wider, or because it asks to be indented, or both — does not hang off the edge: Word fits every row's columns and every row's indent by one scale, so that the widest row ends exactly at the width the first table declared. merged-indent-probe measures it over ten pages:

the second table the widest row wants the scale
indented 18 points 233.52 0.925
indented 36 251.52 0.859
indented 72 287.52 0.751
indented 108 323.52 0.668
270 points wide, not indented 270 0.8
270 wide and indented 36 305.52 0.707
narrow enough to fit indent and all none

so it is the width that decides it and not the indent, and a table that fits is left alone. What a row is fitted to is the width the table declares rather than what its own columns come to: a first table calling itself 180 points wide over a grid of 216 squeezes to 180. The indent an overrunning row keeps is measured the way any indent is — to the edge the cell's text stands at, so the border and the cell margin are absorbed into it — and is scaled with everything else.

Every row of all ten pages lands within 0.4pt of Word's, and the fourth page of adjacent-tables-probe, which used to stand 5.54 points out, now lands within 0.03. The residual is Word's own rounding of the share each column takes of the squeezed total: its first column comes out a whisker narrower than two thirds every time, and what decides that is not measurable from here.

The boxes a form is filled in by

A legacy form field holding w:checkBox draws no text at all: the box is the field, and Word draws it with lines rather than setting a character from a face — which is why a document full of them came out with nothing where the boxes should be. checkbox-probe puts fifteen of them to Word, ten sizes from eight point to seventy-two, some stating their own size and some taking the text's, and three numbers come straight off the drawing:

  • The field is 1.15 times the size wide. Exactly that, at every size measured — 13.8 points for a twelve point box, 82.8 for a seventy-two point one.
  • The box is drawn in the middle of that, 2.2 points narrower, so it is inset 1.1 either side.
  • Its foot sits below the baseline by 0.216 of the size, less 1.2 points: level with the baseline at eight point, a fifth of an inch below it at seventy-two.

The square is drawn three quarters of a point thick whatever its size, and a ticked one takes a cross of two half-point lines corner to corner. Word strokes its square where this fills the four sides of one, which covers the same ground; the cross needed a new primitive, since a rule is a bar lying along the page and a diagonal is not.

A box that states its own size takes it whatever the text around it is set in, and one that does not takes the text's — and either way the line grows as though a letter of that size were on it. Every line of the probe sits where Word puts it, and the ink of the boxes covers what Word's covers.

Breaking a word at the end of a line

w:autoHyphenation lets Word break a word between two lines. Where a word may be broken is not something that can be worked out from its letters — it is a matter of a language's habits, and every program that does it carries a table. This one carries Liang's patterns, as TeX has distributed them since 1990, turned into source by tools/make-hyphenation-tables.py the same way the Unicode tables are: the library has no dependencies and the answer must not depend on a file being present at run time. The pattern file's own licence asks that its copyright notice be preserved, and the generated source carries it.

Word's dictionary is its own, so the question was whether the two agree. They do: hyphenation-probe gives Word a paragraph of long words in a narrow measure and every line comes out where Word puts it — conspicu-ous, exam-ples, misun-derstanding, un-derstanding, or-ganisation.

Two rules are this library's rather than the table's, and both were measured:

  • A word is broken at the last place that fits. Word breaks conspicuous after "conspicu" and organisation after "or", each being as much of the word as the line had room for.
  • Two letters must stay behind and two must go on. The pattern file states two and three, as a typesetter would, but Word breaks PARTICULAR-LY and leaves LY to the next line.

The rest is what the document asks for, and each of the four is a fixture of its own:

  • w:hyphenationZone is how much white a line may be left with before a word is broken to fill it — a quarter of an inch where the document says nothing. An inch of it leaves every word in the probe whole.
  • w:consecutiveHyphenLimit is how many lines in a row may end in a hyphen. Two of them stops the third.
  • w:doNotHyphenateCaps leaves a word in capitals whole.
  • w:suppressAutoHyphens on a paragraph leaves that paragraph's words whole.

All four agree with Word's own export line for line.

Columns the other way round

w:bidiVisual turns a table about: the first cell of a row stands at the right and the rest follow leftwards. column-order-probe puts five tables to Word — three columns of different widths, each cell shaded so the order can be read out of the ink as well as the text — and it turns out to be the whole table that is turned, not merely the cells:

  • The table is laid from the right margin rather than the left.
  • Its indent is measured from the right: half an inch moves it half an inch leftwards.
  • The border a cell calls its left is drawn on its right. The probe's table has a three point left border and half a point everywhere else, and the thick one comes out at the right-hand end of the mirrored table, which is where its first column is.
  • What that border does to the text inside is not turned about with it. Word insets the content of a cell by the border it calls its left however that border is drawn, so the rightmost cell's text stands 1.44 points inside its left edge — half of a border drawn on the other side — rather than the half point the border there would ask for. Two of the probe's pages say so, and it is the one place where the mirroring is less than thorough.
  • Cells joined by w:gridSpan are joined at the right-hand end, the columns they cover being the ones the row began with.

Every column of the probe stands where Word's stands, within a tenth of a point, with the same words in it.

Text turned on its side in a cell

w:textDirection turns a cell's text a quarter circle — btLr for the narrow heading a table usually wants, tbRl for the other way. It is not the glyphs that are turned but the whole frame the paragraphs are laid in, and cell-direction-probe puts eleven of them to Word:

  • The line runs along the cell's height and the lines stack across its width. btLr reads from the foot of the cell upwards and stacks from the left; tbRl reads from the head down and stacks from the right.
  • Word does not make the row any taller to hold it. A turned cell in a row one line tall breaks its text every two letters and runs out of the cell to the right — Word draws it there, past its own table, rather than growing the row. The height is settled by the cells that are not turned.
  • w:vAlign moves the stack of lines across the cell rather than down it: top puts the first line against the left edge, bottom against the right.
  • The paragraph's own alignment works along the turned line, so a centred one sits in the middle of the cell's height.

Every turned line of the probe stands where Word's stands, to within a step of the grid, reading the same way with the same words on it. The comparison against Word that covers the rest of the document leaves turned runs alone — a turned baseline cannot be set against an upright one's — so CellDirectionTests reads them out of both files and sets them side by side.

A word too wide for a box is broken inside it. A page lets a long word overrun the margin and stay whole, but a box does not: Word breaks it wherever it has to, taking as many letters as fit. The probe has a cell a fifth of an inch wide in which Word sets "Unturnable" as "U", "nt", "ur", "na", "bl", "e", and this now does the same — in a table cell as in a shape, upright as much as turned. The break waits until the word has a line to itself, which is why "and rather" comes out "an", "d", "rat" and not "an", "d r", "at".

A table that floats

w:tblpPr takes a table out of the flow: it stands where it is put and the text runs round it. floating-table-probe puts seven of them to Word — against each margin, on the paper itself, with half an inch of daylight, with none, half an inch further down, and one drawn with a three point border — and reads the answers off the ink and the text together.

  • The place names the cell's text edge, not the table's edge. The same rule w:tblInd follows. The thick-bordered page is what proves it: thicken the border from half a point to three and the border grows outward while the text stays on the margin.
  • Down the page the place names the outer edge instead. Word draws the thin border and the thick one with their tops in the same place, which only holds if what is put there is the outside of the line.
  • The daylight is measured from the outside of the border too, which is why the text beside the thick-bordered table stands a point and a half further out than beside the thin one.
  • tblpXSpec names a place rather than measuring oneright puts the table's right text edge on the right margin, center centres the box, since it hangs out equally at both ends.
  • A table anchored to the text stands where it would have stood plus whatever w:tblpY says; one anchored to the paper stands where it is told and the flow takes no notice of it beyond making room.

The table is placed as a float in the same machinery a wrapped picture uses, so the lines it reaches give up its width and the ones past it come back to the full measure. Every one of the seven pages agrees with Word: the box within a tenth of a point sideways, and the text beside it within half of one.

A floating table with less of the page left than it needs breaks at a row, and the rest carries on at the top of the next page in the same place across the measure. That is what Word does with one — floating-table-break-probe puts twenty rows where six of them fit and Word writes six, then fourteen; sixty rows come out forty and twenty. Three more things the same probe settles:

  • The text that follows a broken table begins on the page the rest of it carries on to. Word writes nothing beside the part that stayed behind, though it writes plenty beside a table that did not break — so the flow resumes below what was laid rather than beside it, which leaves it at the foot of the page.
  • A table anchored to the paper does not break. One too tall for what is left below it is moved up until it ends at the paper's own edge, bottom margin and all: the probe puts one a foot down the page and Word draws it 28 points higher, ending exactly at 792.
  • A table with nothing left to carry it makes its own pages. Sixty rows begun near the end of a document come out on a page of their own with nothing else on it, which is what Word does and what this already did for a footnote too long for its page.

A line that moves to the next page is broken again there. The measure it was composed against is not always the measure it lands in — a float narrowed it on the page left behind and there may be none here — and Word breaks such a line again rather than carrying its old shape over.

Text down both sides of a float

A float with room on either side of it does not take the text with it: Word runs each line through both gaps, left to right, as though the float were a hole in the paper. A line beside a table standing in the middle of the measure begins at the margin, stops at the table, picks up again past it, and ends at the right margin — one line, in two pieces, on one baseline.

That is what the layout does now. The free bands across a line are resolved in the order they stand on the page, and the line is filled through all of them:

  • Each band is filled and finished on its own, so a justified line is stretched to the edge of every band it passes through rather than to the last one only, which is what Word does with it.
  • Only the first band of a line is indented. An indent is measured from the margin, and a band further across the page has left the margin behind.
  • A band too narrow for the next word takes nothing rather than overflowing into whatever stands beside it. The first band is not held to that: a word too long for the whole measure has to go somewhere, and Word lets it overflow.
  • A band narrower than a point is dropped before any of that: nothing can be set in it.

Measured against Word twice over, since it is the wrapping engine rather than the table that does it — floating-table-wrap-probe for a table standing in the middle of the measure, and images-floating for a picture doing the same. Every line of both agrees with Word's own export to within a step of the grid, in the same places, with the same words on them.

A clearance that reaches back

A float is not known until the flow reaches the paragraph it is anchored to, and by then the lines above it have been written. Where its clearance reaches back over them — a table with half an inch of daylight above it, a picture with six points — Word breaks those lines again round the float, and so does this: the paragraph they belong to is taken off the page and laid again with the room the float wants already spoken for.

Two things about it are Word's, not ours to choose:

  • The float stays where the flow first reached. Breaking the lines above it can lengthen the paragraph they belong to and so move the flow, but the float does not follow it down. Word's export says so plainly: with the picture of images-floating standing in the middle of the measure, the line above it is broken round a picture that has not moved.
  • A float taking the whole measure is not treated this way. It has no room to offer the lines it reaches back over, so they are moved down instead, which is what Word does with them and what this already did.

The paragraph the float belongs to has already made the room between itself and the one before it by the time the float is placed, and laying that one again puts the flow back before the gap — so the gap is made a second time, rather than left to be lost. brochure, whose text box keeps nine points of clearance over a picture paragraph six points above it, is what said so: without it every line of the paragraph sat six points high.

Only the paragraph immediately before the float is offered this, and only where it can be laid twice — one that broke across a page cannot, since the page it left behind is not this page's to take back. That is the case Word's own behaviour shows up in and the one a document is likely to have; a clearance deep enough to reach back over two paragraphs leaves the further one alone.

A dropped capital

w:framePr with w:dropCap is the big first letter a document opens a chapter with. It is not a run but a frame: the letter is a paragraph of its own, and the paragraph after it makes room. drop-cap-probe is written the way Word writes one — Word's own AppleScript was asked for a dropped capital, and this is the markup that came back:

<w:pPr>
  <w:keepNext/>
  <w:framePr w:dropCap="drop" w:lines="3" w:wrap="around" w:vAnchor="text" w:hAnchor="text"/>
  <w:spacing w:after="0" w:line="827" w:lineRule="exact"/>
  <w:textAlignment w:val="baseline"/>
</w:pPr>
<w:r><w:rPr><w:position w:val="-11"/><w:sz w:val="112"/></w:rPr><w:t>T</w:t></w:r>

Everything needed to draw it is in that markup, and w:lines is not part of it:

  • w:lines is a record of what was asked for, not what is drawn. Word writes the size it worked out onto the run and the height onto the paragraph, and the drawing follows those. A frame of three lines round a letter of ordinary size shortens one line, not three — the probe puts that case to Word and Word shortens one.
  • The frame is the letter's advance plus w:hSpace, rounded to the grid. Word's own fifty-six point T measures 34.2167 and the lines beside it begin 34.32 in; with 180 twips of space beside a thirty-five point one measuring 21.3823, they begin 30.48 in.
  • Which lines make room is a matter of where the frame reaches, not of paragraphs: a frame that outlasts a two-word paragraph goes on shortening the next one.
  • A cap in the margin hangs its own width to the left and the text keeps the whole measure. Word writes w:hAnchor="page" for that one, which is the only difference between the two kinds.
  • w:position is the drop, in half-points, and it is applied where every other raised or lowered run's shift is applied — after the line's baseline is on the grid.

Every page of the probe agrees with Word's: the letter in the same place at the same size, the same lines shortened, and each of them beginning where Word's begins.

Where an exact line puts its baseline

w:lineRule="exact" fixes the height of a line and says nothing about how the room is divided above and below the baseline. At twelve point every reading of that is within a step of every other, so it went unnoticed until a dropped capital asked for an exact line of forty-one points.

exact-line-probe settles it, and a sweep of fifty-three heights from twenty points to seventy-two was run twice while it was written — once in fifty-six point Times, once in twenty-four point Verdana. Word put every baseline of the second sweep in exactly the place it put the first. So the share is Word's own and not the font's, which is the finding: the reading this replaced took the share from the font's ascent and descent, and that is within a step of the truth at twelve point and two steps out at fifty. The probe holds the same height in Times, Arial and Calibri — whose own descents are 0.1953, 0.1897 and 0.2200 of their lines, five steps of the grid apart at that size — and Word sets all three on one baseline.

Four fifths of an exact line stands above the baseline. That alone lands one step of the grid out on about a fifth of the heights, and the last step was found by sweeping every height a twip at a time rather than a point at a time: 865 heights from fifteen points to a hundred and fifty, in four exports. Two rules come out of it, and neither is derived from anything:

  • The height behaves as though it were one twip larger or smaller before the four fifths is taken — a twip larger where the whole steps of the ascent leave one over four, a twip smaller where they leave two or three, the height itself where they divide evenly. That accounts for 779 of the 865.
  • Where the height and its fifth both land half way between two steps of the grid — which is every odd multiple of three points — Word takes a further step, at all but one such height in five and then one of those in five again. Written in base five, with j the number of such heights below this one: the step is taken where j's last digit is under three and its next digit is not two.

The second is a measured pattern and nothing here explains why base five should come into it beyond the four fifths itself, so it was checked the only way a fitted rule can be: against a second sweep at sixty-three heights the first never reached, which it predicted every one of. Together the two account for all 865, and exact-line-probe holds the nineteen heights that pin them.

How the paragraph gets to its next line is settled by exact-line-advance-probe, six pages of twenty exact-spaced lines apiece: Word advances by the height itself and rounds each baseline where it lands. A two-line sample cannot tell that from an advance of a whole number of steps — both put the second baseline 83 steps below the first at twenty points — but twenty lines can, because the gaps between Word's own baselines then take two values rather than one: 83 and 84 steps at 20.05 points, where the height is 83⅓. A rounded advance would put every gap on a page at the same number, and would drift by up to three points over those twenty lines.

Nothing drifts either way: the last baseline of five of the six pages is exactly Word's and the sixth is one step from it.

How that rounding goes is the last part of it, and it is not to the nearest step. Measured over the same sweeps — 121 heights of up to thirty-two lines apiece — rounding to the nearest agrees with Word on 84% of the lines under the first, and rounding down from five twelfths of a step above agrees on 89%. Five twelfths is a fitted constant and nothing here derives it, so it was checked at sixty-one heights the fitting never saw, where it agrees on 92% against the nearest's 84%. What is left over is a last step that no rule of the height reproduces: not the font's doing either — the same twenty lines set in twenty-four point Verdana land exactly where the twelve point Times ones do — and about one line in ten under the first comes out a step from Word's, never further.

A character named by its code

w:sym is how Word writes a tick, an arrow, or anything else from the symbol faces: the run names a face and a code rather than carrying the character itself. Two things about it are worth stating, both measured from the symbols fixture against Word's export:

  • The face belongs to the character, not to the run. A run may carry text in one face and end with a character from another, which is what Word writes when a symbol is typed at the end of a word — so the symbol brings its own face and its own line box, and a Wingdings character in a line of Times makes the line as tall as Wingdings asks for.
  • The code is written in the private-use block those faces keep their glyphs in — the tick of Wingdings is F0FC — and Word's own export strips the block back off, writing the character as 00FC. It does the same with a code that never had the block on it, so F0FC and 00FC come out identically, and both are read that way here.

Every symbol of the fixture reaches the page in the face Word set it in, at the width Word gave it to a hundredth of a point, with the text either side falling where Word puts it.

Which rows repeat at the top of a page

A table that runs past the foot of a page writes its heading rows again at the top of the next, and which rows those are is four questions rather than one. table-heading-probe puts all four to Word — four tables, each long enough to break, every row saying in its own text what it is:

the table Word's second page begins
one row marked w:tblHeader that row, then the rest
the first two marked both of them, then the rest
only the third marked the rest, with no heading at all
every row marked the rest, with no heading at all

So a heading is the run of marked rows at the top of a table, and nothing else: a row marked further down is not one. The last case is the one worth writing down, because the obvious reading of the format — repeat whatever is marked — would repeat a table of headings for ever, and Word declines to repeat any of them rather than looping. A heading that would fill the page it is repeated on is left out for the same reason.

Clone this wiki locally