From 36d22d82aa202bb199967e9512281e9a53db42c9 Mon Sep 17 00:00:00 2001
From: Daniel Baumann
Date: Sun, 7 Apr 2024 21:33:14 +0200
Subject: Adding upstream version 115.7.0esr.
Signed-off-by: Daniel Baumann
---
testing/web-platform/tests/mathml/META.yml | 3 +
testing/web-platform/tests/mathml/README.md | 12 +
.../children-with-negative-block-sizes.html | 142 +++++
.../children-with-negative-inline-sizes.html | 142 +++++
.../mathml/crashtests/chrome-bug-1287843.html | 12 +
.../crashtests/display-and-column-properties.html | 30 +
.../dynamic-height-within-table-cell.html | 33 ++
.../mathml/crashtests/fixed-pos-children.html | 25 +
.../mathml/crashtests/math-depth-overflow.html | 10 +
.../tests/mathml/crashtests/mathml-in-svg-001.html | 3 +
.../mmultiscripts-with-two-prescripts.html | 8 +
.../mathml/crashtests/mozilla/1028521-1.xhtml | 5 +
.../tests/mathml/crashtests/mozilla/1061027.html | 12 +
.../tests/mathml/crashtests/mozilla/1221888-1.html | 15 +
.../tests/mathml/crashtests/mozilla/1373767-1.html | 22 +
.../tests/mathml/crashtests/mozilla/1376158.html | 6 +
.../tests/mathml/crashtests/mozilla/151054-1.xml | 15 +
.../tests/mathml/crashtests/mozilla/1600635.html | 16 +
.../tests/mathml/crashtests/mozilla/289180-1.xml | 16 +
.../tests/mathml/crashtests/mozilla/307826-1.xhtml | 30 +
.../tests/mathml/crashtests/mozilla/307839-1.xhtml | 15 +
.../tests/mathml/crashtests/mozilla/307839-2.xhtml | 24 +
.../tests/mathml/crashtests/mozilla/323733-1.xml | 7 +
.../tests/mathml/crashtests/mozilla/323737-1.xml | 9 +
.../tests/mathml/crashtests/mozilla/323738-1.xml | 11 +
.../tests/mathml/crashtests/mozilla/323741-1.xml | 13 +
.../tests/mathml/crashtests/mozilla/323742-1.xml | 16 +
.../tests/mathml/crashtests/mozilla/336074-1.xhtml | 25 +
.../mathml/crashtests/mozilla/347355-1-inner.xhtml | 28 +
.../tests/mathml/crashtests/mozilla/347355-1.gif | Bin 0 -> 980 bytes
.../tests/mathml/crashtests/mozilla/347355-1.html | 9 +
.../tests/mathml/crashtests/mozilla/347495-1.xhtml | 10 +
.../tests/mathml/crashtests/mozilla/347507-1.xhtml | 29 +
.../tests/mathml/crashtests/mozilla/348492-1.xhtml | 31 +
.../tests/mathml/crashtests/mozilla/348709-1.xhtml | 20 +
.../tests/mathml/crashtests/mozilla/348811-1.xhtml | 26 +
.../tests/mathml/crashtests/mozilla/348811-2.xhtml | 31 +
.../tests/mathml/crashtests/mozilla/353612-1.xhtml | 17 +
.../tests/mathml/crashtests/mozilla/355986-1.xhtml | 34 ++
.../tests/mathml/crashtests/mozilla/364685-1.xhtml | 19 +
.../tests/mathml/crashtests/mozilla/366012-1.xhtml | 23 +
.../tests/mathml/crashtests/mozilla/366564-1.xhtml | 44 ++
.../tests/mathml/crashtests/mozilla/367107-1.html | 22 +
.../tests/mathml/crashtests/mozilla/368430-1.xhtml | 5 +
.../tests/mathml/crashtests/mozilla/370791-1.xhtml | 33 ++
.../tests/mathml/crashtests/mozilla/370862-1.xhtml | 27 +
.../tests/mathml/crashtests/mozilla/372483-1.xhtml | 7 +
.../tests/mathml/crashtests/mozilla/373472-1.xhtml | 20 +
.../tests/mathml/crashtests/mozilla/373472-2.xhtml | 9 +
.../tests/mathml/crashtests/mozilla/375562-1.xhtml | 38 ++
.../tests/mathml/crashtests/mozilla/377824-1.xhtml | 5 +
.../tests/mathml/crashtests/mozilla/379418-1.xhtml | 7 +
.../tests/mathml/crashtests/mozilla/385226-1.xhtml | 29 +
.../tests/mathml/crashtests/mozilla/393760-1.xhtml | 16 +
.../tests/mathml/crashtests/mozilla/397518-1.xhtml | 15 +
.../tests/mathml/crashtests/mozilla/398038-1.html | 8 +
.../tests/mathml/crashtests/mozilla/400475-1.xhtml | 16 +
.../tests/mathml/crashtests/mozilla/402400-1.xhtml | 41 ++
.../tests/mathml/crashtests/mozilla/403156-1.xhtml | 12 +
.../tests/mathml/crashtests/mozilla/404485-1.xhtml | 9 +
.../tests/mathml/crashtests/mozilla/405187-1.xhtml | 10 +
.../tests/mathml/crashtests/mozilla/405271-1.xml | 36 ++
.../tests/mathml/crashtests/mozilla/412237-1.xml | 11 +
.../tests/mathml/crashtests/mozilla/413063-1.xhtml | 21 +
.../tests/mathml/crashtests/mozilla/416907-1.xhtml | 5 +
.../tests/mathml/crashtests/mozilla/420420-1.xhtml | 7 +
.../tests/mathml/crashtests/mozilla/431072-1.xhtml | 25 +
.../tests/mathml/crashtests/mozilla/443089-1.xhtml | 7 +
.../tests/mathml/crashtests/mozilla/462929-1.html | 12 +
.../tests/mathml/crashtests/mozilla/463763-1.xhtml | 10 +
.../tests/mathml/crashtests/mozilla/463763-2.xhtml | 12 +
.../tests/mathml/crashtests/mozilla/476547-1.xhtml | 5 +
.../tests/mathml/crashtests/mozilla/541620-1.xhtml | 6 +
.../tests/mathml/crashtests/mozilla/557474-1.html | 11 +
.../tests/mathml/crashtests/mozilla/654928-1.html | 3 +
.../tests/mathml/crashtests/mozilla/655451-1.xhtml | 15 +
.../tests/mathml/crashtests/mozilla/713606-1.html | 24 +
.../tests/mathml/crashtests/mozilla/716349-1.html | 13 +
.../tests/mathml/crashtests/mozilla/767251.xhtml | 1 +
.../tests/mathml/crashtests/mozilla/770710-1.html | 25 +
.../tests/mathml/crashtests/mozilla/848725-1.html | 17 +
.../tests/mathml/crashtests/mozilla/848725-2.html | 17 +
.../tests/mathml/crashtests/mozilla/947557-1.html | 21 +
.../tests/mathml/crashtests/mozilla/973322-1.xhtml | 8 +
.../mspace-mpadded-negative-dimensions.html | 13 +
.../tests/mathml/crashtests/mtd-as-multicol.html | 9 +
.../mathml/crashtests/multicol-inside-ms.html | 4 +
.../crashtests/multicol-on-token-elements.html | 11 +
.../crashtests/operator-and-first-letter.html | 9 +
.../crashtests/scrollbar-caching-assert.html | 17 +
.../direction/direction-006-ref.html | 74 +++
.../direction/direction-006.html | 82 +++
.../direction/direction-007-ref.html | 42 ++
.../direction/direction-007.html | 53 ++
.../direction/direction-008-ref.html | 27 +
.../direction/direction-008.html | 36 ++
.../direction/direction-010-ref.html | 44 ++
.../direction/direction-010.html | 54 ++
.../direction/direction-overall-ref.html | 40 ++
.../direction/direction-overall.html | 53 ++
.../direction/direction-token-ref.html | 16 +
.../direction/direction-token.html | 28 +
.../presentation-markup/direction/direction.html | 39 ++
.../presentation-markup/fractions/frac-1.html | 191 +++++++
.../fractions/frac-bar-001-ref.html | 21 +
.../fractions/frac-bar-001.html | 56 ++
.../fractions/frac-bar-002-ref.html | 23 +
.../fractions/frac-bar-002.html | 83 +++
.../fractions/frac-bar-003-ref.html | 21 +
.../fractions/frac-bar-003.html | 46 ++
.../fractions/frac-color-001-notref.html | 16 +
.../fractions/frac-color-001.html | 20 +
.../fractions/frac-color-002-ref.html | 14 +
.../fractions/frac-color-002.html | 34 ++
.../fractions/frac-created-dynamically-2-ref.html | 17 +
.../fractions/frac-created-dynamically-2.html | 44 ++
.../fractions/frac-created-dynamically-3-ref.html | 16 +
.../fractions/frac-created-dynamically-3.html | 36 ++
.../fractions/frac-created-dynamically-ref.html | 16 +
.../fractions/frac-created-dynamically.html | 39 ++
.../fractions/frac-default-padding-ref.html | 19 +
.../fractions/frac-default-padding.html | 37 ++
.../fractions/frac-invalid-2-ref.html | 15 +
.../fractions/frac-invalid-2.html | 18 +
.../fractions/frac-invalid-3-ref.html | 17 +
.../fractions/frac-invalid-3.html | 20 +
.../fractions/frac-invalid-ref.html | 14 +
.../fractions/frac-invalid.html | 17 +
...ac-legacy-bevelled-attribute.tentative-ref.html | 18 +
.../frac-legacy-bevelled-attribute.tentative.html | 28 +
.../fractions/frac-linethickness-001-ref.html | 42 ++
.../fractions/frac-linethickness-001.html | 47 ++
.../fractions/frac-linethickness-002.html | 131 +++++
.../fractions/frac-linethickness-003-notref.html | 16 +
.../fractions/frac-linethickness-003.html | 19 +
.../fractions/frac-linethickness-004-ref.html | 27 +
.../fractions/frac-linethickness-004.html | 32 ++
.../fractions/frac-mrow-001-ref.html | 16 +
.../fractions/frac-mrow-001.html | 28 +
.../frac-numalign-denomalign-001-ref.html | 75 +++
.../fractions/frac-numalign-denomalign-001.html | 56 ++
.../fractions/frac-parameters-1.html | 440 ++++++++++++++
.../fractions/frac-parameters-2.html | 290 ++++++++++
.../fractions/frac-parameters-3.html | 168 ++++++
.../fractions/frac-parameters-gap-001-ref.html | 63 +++
.../fractions/frac-parameters-gap-001.html | 90 +++
.../fractions/frac-parameters-gap-002-ref.html | 63 +++
.../fractions/frac-parameters-gap-002.html | 90 +++
.../fractions/frac-parameters-gap-003-ref.html | 63 +++
.../fractions/frac-parameters-gap-003.html | 90 +++
.../fractions/frac-parameters-gap-004-ref.html | 63 +++
.../fractions/frac-parameters-gap-004.html | 90 +++
.../fractions/frac-parameters-gap-005-ref.html | 63 +++
.../fractions/frac-parameters-gap-005.html | 90 +++
.../fractions/frac-parameters-gap-006-ref.html | 63 +++
.../fractions/frac-parameters-gap-006.html | 90 +++
.../fractions/frac-rendering-from-in-flow-ref.html | 15 +
.../fractions/frac-rendering-from-in-flow.html | 40 ++
.../fractions/frac-visibility-001-ref.html | 12 +
.../fractions/frac-visibility-001.html | 24 +
.../legacy-menclose-radical-notation-ref.html | 23 +
.../menclose/legacy-menclose-radical-notation.html | 30 +
.../mpadded/legacy-orthogonal-pseudo-units.html | 101 ++++
.../presentation-markup/mpadded/mpadded-001.html | 147 +++++
.../presentation-markup/mpadded/mpadded-002.html | 164 ++++++
.../presentation-markup/mpadded/mpadded-003.html | 230 ++++++++
.../mpadded/mpadded-percentage-001-ref.html | 18 +
.../mpadded/mpadded-percentage-001.html | 33 ++
.../mpadded/mpadded-percentage-002.html | 81 +++
.../mrow/dynamic-mrow-like-001-ref.html | 41 ++
.../mrow/dynamic-mrow-like-001.html | 72 +++
.../mrow/inferred-mrow-baseline.html | 57 ++
.../mrow/inferred-mrow-stretchy.html | 64 +++
.../mrow/legacy-mfenced-element-001-ref.html | 24 +
.../mrow/legacy-mfenced-element-001.html | 34 ++
.../mrow/legacy-mrow-like-elements-001.html | 188 ++++++
.../mrow/legacy-mrow-like-elements-002-ref.html | 44 ++
.../mrow/legacy-mrow-like-elements-002.html | 57 ++
.../mrow/legacy-mstyle-attributes.html | 164 ++++++
.../presentation-markup/mrow/merror-001.html | 43 ++
.../presentation-markup/mrow/mrow-fallback.html | 125 ++++
.../mrow/mrow-painting-order-ref.html | 83 +++
.../mrow/mrow-painting-order.html | 42 ++
.../mrow/mrow-preferred-width.html | 121 ++++
.../presentation-markup/mrow/no-spacing.html | 139 +++++
.../mathml/presentation-markup/mrow/spacing.html | 54 ++
.../mrow/stretch-along-block-axis-001.html | 176 ++++++
.../operators/embellished-operator-001-crash.html | 10 +
.../operators/embellished-operator-001.html | 521 +++++++++++++++++
.../operators/embellished-operator-002.html | 559 ++++++++++++++++++
.../operators/embellished-operator-003.html | 394 +++++++++++++
.../embellished-operator-dynamic-001-ref.html | 95 ++++
.../embellished-operator-dynamic-001.html | 123 ++++
.../embellished-operator-dynamic-002.html | 185 ++++++
.../operators/largeop-hit-testing.html | 64 +++
.../operators/mo-axis-height-1.html | 75 +++
.../operators/mo-font-relative-lengths-001.html | 114 ++++
.../operators/mo-form-dynamic-002-ref.html | 48 ++
.../operators/mo-form-dynamic-002.html | 66 +++
.../operators/mo-form-dynamic-ref.html | 26 +
.../operators/mo-form-dynamic.html | 51 ++
.../operators/mo-form-fallback-ref.html | 15 +
.../operators/mo-form-fallback.html | 28 +
.../operators/mo-form-minus-plus-ref.html | 84 +++
.../operators/mo-form-minus-plus.html | 89 +++
.../presentation-markup/operators/mo-form-ref.html | 25 +
.../presentation-markup/operators/mo-form.html | 30 +
.../operators/mo-lspace-rspace-2-ref.html | 363 ++++++++++++
.../operators/mo-lspace-rspace-2.html | 363 ++++++++++++
.../operators/mo-lspace-rspace-3-ref.html | 41 ++
.../operators/mo-lspace-rspace-3.html | 61 ++
.../operators/mo-lspace-rspace-4-ref.html | 20 +
.../operators/mo-lspace-rspace-4.html | 19 +
.../operators/mo-lspace-rspace-dynamic-ref.html | 48 ++
.../operators/mo-lspace-rspace-dynamic.html | 64 +++
.../operators/mo-lspace-rspace-ref.html | 41 ++
.../operators/mo-lspace-rspace.html | 38 ++
.../operators/mo-minsize-maxsize-001.html | 143 +++++
...movablelimits-and-embellished-operator-ref.html | 33 ++
.../mo-movablelimits-and-embellished-operator.html | 39 ++
.../operators/mo-movablelimits-default-ref.html | 18 +
.../operators/mo-movablelimits-default.html | 24 +
.../operators/mo-movablelimits-dynamic-ref.html | 15 +
.../operators/mo-movablelimits-dynamic.html | 27 +
.../mo-movablelimits-from-in-flow-ref.html | 30 +
.../operators/mo-movablelimits-from-in-flow.html | 53 ++
.../operators/mo-movablelimits-ref.html | 29 +
.../operators/mo-movablelimits.html | 34 ++
.../mo-not-in-dictionary-lspace-rspace-ref.html | 47 ++
.../mo-not-in-dictionary-lspace-rspace.html | 52 ++
.../mo-not-in-dictionary-movablelimits-ref.html | 47 ++
.../mo-not-in-dictionary-movablelimits.html | 52 ++
.../operators/mo-paint-lspace-rspace-ref.html | 78 +++
.../operators/mo-paint-lspace-rspace.html | 71 +++
.../operators/mo-single-char-and-children-ref.html | 30 +
.../operators/mo-single-char-and-children.html | 51 ++
.../operators/mo-stretch-properties-001.html | 68 +++
.../mo-stretch-properties-dynamic-001.html | 154 +++++
.../operators/op-dict-1-notref.html | 15 +
.../presentation-markup/operators/op-dict-1.html | 15 +
.../operators/op-dict-12-ref.html | 14 +
.../presentation-markup/operators/op-dict-12.html | 15 +
.../operators/op-dict-13-notref.html | 14 +
.../presentation-markup/operators/op-dict-13.html | 15 +
.../operators/op-dict-2-ref.html | 14 +
.../presentation-markup/operators/op-dict-2.html | 15 +
.../operators/op-dict-3-notref.html | 14 +
.../presentation-markup/operators/op-dict-3.html | 15 +
.../operators/op-dict-4-ref.html | 18 +
.../presentation-markup/operators/op-dict-4.html | 19 +
.../operators/op-dict-5-notref.html | 18 +
.../presentation-markup/operators/op-dict-5.html | 19 +
.../operators/op-dict-6-ref.html | 13 +
.../presentation-markup/operators/op-dict-6.html | 14 +
.../operators/op-dict-7-notref.html | 13 +
.../presentation-markup/operators/op-dict-7.html | 14 +
.../operators/op-dict-8-ref.html | 13 +
.../presentation-markup/operators/op-dict-8.html | 14 +
.../operators/op-dict-9-notref.html | 15 +
.../presentation-markup/operators/op-dict-9.html | 14 +
.../operator-dictionary-arabic-001-ref.html | 20 +
.../operators/operator-dictionary-arabic-001.html | 28 +
.../operator-dictionary-arabic-002-ref.html | 30 +
.../operators/operator-dictionary-arabic-002.html | 39 ++
.../operators/operator-dictionary-combining.html | 159 ++++++
...rator-dictionary-empty-and-three-chars-ref.html | 32 ++
.../operator-dictionary-empty-and-three-chars.html | 39 ++
.../operators/operator-dictionary-largeop-001.html | 33 ++
.../operators/operator-dictionary-largeop-002.html | 33 ++
.../operators/operator-dictionary-largeop-003.html | 33 ++
.../operators/operator-dictionary-largeop-004.html | 33 ++
.../operators/operator-dictionary-largeop-005.html | 33 ++
.../operators/operator-dictionary-largeop-006.html | 33 ++
.../operator-dictionary-movablelimits-001.html | 33 ++
.../operator-dictionary-movablelimits-002.html | 33 ++
.../operator-dictionary-movablelimits-003.html | 33 ++
.../operator-dictionary-movablelimits-004.html | 33 ++
.../operator-dictionary-movablelimits-005.html | 33 ++
.../operator-dictionary-movablelimits-006.html | 33 ++
.../operators/operator-dictionary-spacing-001.html | 33 ++
.../operators/operator-dictionary-spacing-002.html | 33 ++
.../operators/operator-dictionary-spacing-003.html | 33 ++
.../operators/operator-dictionary-spacing-004.html | 33 ++
.../operators/operator-dictionary-spacing-005.html | 33 ++
.../operators/operator-dictionary-spacing-006.html | 33 ++
.../operator-dictionary-stretchy-001.html | 33 ++
.../operator-dictionary-stretchy-002.html | 33 ++
.../operator-dictionary-stretchy-003.html | 33 ++
.../operator-dictionary-stretchy-004.html | 33 ++
.../operator-dictionary-stretchy-005.html | 33 ++
.../operator-dictionary-stretchy-006.html | 33 ++
.../operator-dictionary-symmetric-001.html | 33 ++
.../operator-dictionary-symmetric-002.html | 33 ++
.../operator-dictionary-symmetric-003.html | 33 ++
.../operator-dictionary-symmetric-004.html | 33 ++
.../operator-dictionary-symmetric-005.html | 33 ++
.../operator-dictionary-symmetric-006.html | 33 ++
.../painting-stretchy-operator-001-ref.html | 22 +
.../operators/painting-stretchy-operator-001.html | 73 +++
.../support/operator-dictionary-tests.css | 10 +
.../operators/support/operator-dictionary-tests.js | 226 ++++++++
...dynamic-radical-paint-invalidation-001-ref.html | 125 ++++
.../dynamic-radical-paint-invalidation-001.html | 167 ++++++
.../radical-rendering-from-in-flow-ref.html | 18 +
.../radicals/radical-rendering-from-in-flow.html | 49 ++
.../radicals/root-parameters-1.html | 222 ++++++++
.../radicals/root-parameters-2.html | 79 +++
.../presentation-markup/scripts/cramped-001.html | 627 ++++++++++++++++++++
.../scripts/empty-underover.html | 68 +++
.../scripts/mover-accent-dynamic-change-ref.html | 9 +
.../scripts/mover-accent-dynamic-change.html | 16 +
.../scripts/mprescripts-001-ref.html | 19 +
.../scripts/mprescripts-001.html | 26 +
.../presentation-markup/scripts/none-001-ref.html | 19 +
.../presentation-markup/scripts/none-001.html | 26 +
.../presentation-markup/scripts/none-002-ref.html | 73 +++
.../presentation-markup/scripts/none-002.html | 76 +++
.../presentation-markup/scripts/subsup-1.html | 114 ++++
.../presentation-markup/scripts/subsup-2.html | 173 ++++++
.../presentation-markup/scripts/subsup-3.html | 192 +++++++
.../presentation-markup/scripts/subsup-4.html | 129 +++++
.../presentation-markup/scripts/subsup-5.html | 97 ++++
.../presentation-markup/scripts/subsup-6.html | 120 ++++
...y-scriptshift-attributes-001.tentative-ref.html | 35 ++
...egacy-scriptshift-attributes-001.tentative.html | 48 ++
.../scripts/subsup-parameters-1.html | 354 ++++++++++++
.../scripts/subsup-parameters-2.html | 181 ++++++
.../presentation-markup/scripts/underover-1.html | 175 ++++++
.../underover-legacy-align-attribute-001-ref.html | 61 ++
.../underover-legacy-align-attribute-001.html | 72 +++
.../scripts/underover-parameters-1.html | 151 +++++
.../scripts/underover-parameters-2.html | 151 +++++
.../scripts/underover-parameters-3.html | 452 +++++++++++++++
.../scripts/underover-parameters-4.tentative.html | 335 +++++++++++
...over-parameters-and-embellished-operator-1.html | 151 +++++
...over-parameters-and-embellished-operator-2.html | 151 +++++
.../scripts/underover-stretchy-001-ref.html | 167 ++++++
.../scripts/underover-stretchy-001.html | 270 +++++++++
.../scripts/underover-stretchy-002-ref.html | 167 ++++++
.../scripts/underover-stretchy-002.html | 272 +++++++++
.../scripts/underover-stretchy-003-ref.html | 167 ++++++
.../scripts/underover-stretchy-003.html | 272 +++++++++
.../spaces/mspace-children-ref.html | 11 +
.../spaces/mspace-children.html | 13 +
.../spaces/mspace-percentage-001-ref.html | 18 +
.../spaces/mspace-percentage-001.html | 33 ++
.../spaces/mspace-width-height-001.html | 113 ++++
.../mathml/presentation-markup/spaces/space-1.html | 150 +++++
.../presentation-markup/spaces/space-2-ref.html | 15 +
.../mathml/presentation-markup/spaces/space-2.html | 42 ++
.../presentation-markup/spaces/space-like-001.html | 340 +++++++++++
.../presentation-markup/spaces/space-like-002.html | 174 ++++++
.../presentation-markup/spaces/space-like-003.html | 252 +++++++++
.../presentation-markup/spaces/space-like-004.html | 446 +++++++++++++++
.../spaces/space-vertical-align.tentative-ref.html | 15 +
.../spaces/space-vertical-align.tentative.html | 22 +
.../tables/dynamic-table-001.html | 301 ++++++++++
.../presentation-markup/tables/table-001.html | 286 ++++++++++
.../presentation-markup/tables/table-002.html | 146 +++++
.../presentation-markup/tables/table-003.html | 146 +++++
.../tables/table-axis-height.html | 55 ++
.../tables/table-cell-mrow-layout.html | 74 +++
.../tables/table-default-styles-001.html | 49 ++
.../tokens/dynamic-mtext-like-001-ref.html | 43 ++
.../tokens/dynamic-mtext-like-001.html | 70 +++
.../presentation-markup/tokens/ms-001-ref.html | 22 +
.../mathml/presentation-markup/tokens/ms-001.html | 30 +
.../css-styling/attribute-mapping-001.html | 111 ++++
.../css-styling/attribute-mapping-002.html | 118 ++++
.../relations/css-styling/blur-filter-ref.html | 13 +
.../mathml/relations/css-styling/blur-filter.html | 21 +
.../relations/css-styling/clip-path-ref.html | 13 +
.../mathml/relations/css-styling/clip-path.html | 21 +
.../mathml/relations/css-styling/clip-ref.html | 13 +
.../tests/mathml/relations/css-styling/clip.html | 21 +
.../relations/css-styling/color-001-ref.html | 12 +
.../mathml/relations/css-styling/color-001.html | 34 ++
.../relations/css-styling/color-002-ref.html | 12 +
.../mathml/relations/css-styling/color-002.html | 29 +
.../relations/css-styling/color-003-ref.html | 12 +
.../mathml/relations/css-styling/color-003.html | 31 +
.../css-styling/color-004.tentative-ref.html | 12 +
.../relations/css-styling/color-004.tentative.html | 55 ++
.../relations/css-styling/color-005-ref.html | 12 +
.../mathml/relations/css-styling/color-005.html | 88 +++
.../relations/css-styling/default-font-family.html | 36 ++
...efault-properties-on-semantics-and-maction.html | 47 ++
.../default-properties-on-the-math-root.html | 57 ++
.../relations/css-styling/display-1-ref.html | 12 +
.../mathml/relations/css-styling/display-1.html | 18 +
.../mathml/relations/css-styling/display-2.html | 139 +++++
.../relations/css-styling/display-contents.html | 36 ++
.../css-styling/display-with-overflow-ref.html | 20 +
.../css-styling/display-with-overflow.html | 19 +
.../css-styling/displaystyle-011-ref.html | 155 +++++
.../relations/css-styling/displaystyle-011.html | 168 ++++++
.../css-styling/displaystyle-012-ref.html | 30 +
.../relations/css-styling/displaystyle-012.html | 37 ++
.../css-styling/displaystyle-013-ref.html | 58 ++
.../relations/css-styling/displaystyle-013.html | 80 +++
.../css-styling/displaystyle-014-ref.html | 35 ++
.../relations/css-styling/displaystyle-014.html | 55 ++
.../css-styling/displaystyle-015-ref.html | 58 ++
.../relations/css-styling/displaystyle-015.html | 83 +++
.../relations/css-styling/displaystyle-1.html | 136 +++++
.../relations/css-styling/displaystyle-2.html | 208 +++++++
.../relations/css-styling/displaystyle-3.html | 84 +++
.../relations/css-styling/dynamic-dir-1-ref.html | 75 +++
.../relations/css-styling/dynamic-dir-1.html | 105 ++++
...ating-inside-mathml-with-block-display-ref.html | 15 +
.../floating-inside-mathml-with-block-display.html | 20 +
.../css-styling/floats/floating-math-ref.html | 14 +
.../css-styling/floats/floating-math.html | 19 +
.../css-styling/floats/not-floating-001.html | 74 +++
.../css-styling/ignored-properties-001.html | 79 +++
.../legacy-scriptminsize-attribute-ref.html | 27 +
.../legacy-scriptminsize-attribute.html | 32 ++
.../legacy-scriptsizemultiplier-attribute-ref.html | 27 +
.../legacy-scriptsizemultiplier-attribute.html | 32 ++
.../relations/css-styling/lengths-1-ref.html | 14 +
.../mathml/relations/css-styling/lengths-1.html | 122 ++++
.../mathml/relations/css-styling/lengths-2.html | 266 +++++++++
.../css-styling/mathbackground-001-notref.html | 9 +
.../relations/css-styling/mathbackground-001.html | 14 +
.../css-styling/mathbackground-002-notref.html | 9 +
.../relations/css-styling/mathbackground-002.html | 14 +
.../css-styling/mathbackground-003-notref.html | 7 +
.../relations/css-styling/mathbackground-003.html | 11 +
.../css-styling/mathbackground-004-notref.html | 9 +
.../relations/css-styling/mathbackground-004.html | 14 +
.../css-styling/mathcolor-001-notref.html | 9 +
.../relations/css-styling/mathcolor-001.html | 13 +
.../css-styling/mathcolor-002-notref.html | 9 +
.../relations/css-styling/mathcolor-002.html | 14 +
.../css-styling/mathcolor-003-notref.html | 7 +
.../relations/css-styling/mathcolor-003.html | 11 +
.../css-styling/mathcolor-004-notref.html | 9 +
.../relations/css-styling/mathcolor-004.html | 14 +
.../mathcolor-mathbackground-css-ref.html | 23 +
.../css-styling/mathcolor-mathbackground-css.html | 27 +
.../mathsize-attribute-css-keywords-ref.html | 26 +
.../mathsize-attribute-css-keywords.html | 33 ++
.../mathsize-attribute-legacy-values-ref.html | 16 +
.../mathsize-attribute-legacy-values.html | 23 +
.../css-styling/mathsize-attribute-ref.html | 19 +
.../relations/css-styling/mathsize-attribute.html | 22 +
.../css-styling/mathvariant-auto-ref.html | 139 +++++
.../relations/css-styling/mathvariant-auto.html | 145 +++++
.../mathvariant-font-style-font-weight-ref.html | 44 ++
.../mathvariant-font-style-font-weight.html | 49 ++
.../css-styling/mi-fontstyle-fontweight-ref.html | 22 +
.../css-styling/mi-fontstyle-fontweight.html | 27 +
.../relations/css-styling/multi-column-layout.html | 56 ++
.../not-participating-to-parent-layout.html | 77 +++
.../out-of-flow/absolutely-positioned-001-ref.html | 18 +
.../out-of-flow/absolutely-positioned-001.html | 25 +
.../out-of-flow/all-mathml-containers.html | 103 ++++
.../out-of-flow/fixed-positioned-001-ref.html | 28 +
.../out-of-flow/fixed-positioned-001.html | 35 ++
.../css-styling/overflow/computed-value-001.html | 45 ++
.../padding-border-margin/border-001.html | 179 ++++++
.../padding-border-margin/border-002.html | 72 +++
.../padding-border-margin/margin-001.html | 179 ++++++
.../padding-border-margin/margin-002.html | 86 +++
.../padding-border-margin/margin-003.html | 93 +++
.../padding-border-margin/padding-001.html | 179 ++++++
.../padding-border-margin/padding-002.html | 71 +++
.../padding-border-margin-001-ref.html | 17 +
.../padding-border-margin-001.html | 22 +
.../padding-border-margin-002-ref.html | 18 +
.../padding-border-margin-002.html | 34 ++
.../padding-border-margin-003-ref.html | 18 +
.../padding-border-margin-003.html | 33 ++
.../css-styling/presentational-hints-001-ref.html | 62 ++
.../css-styling/presentational-hints-001.html | 63 +++
.../css-styling/presentational-hints-002-ref.html | 59 ++
.../css-styling/presentational-hints-002.html | 84 +++
.../relations/css-styling/scriptlevel-001.html | 219 +++++++
.../relations/css-styling/transform-ref.html | 13 +
.../mathml/relations/css-styling/transform.html | 21 +
.../relations/css-styling/visibility-001-ref.html | 12 +
.../relations/css-styling/visibility-001.html | 34 ++
.../relations/css-styling/visibility-002-ref.html | 12 +
.../relations/css-styling/visibility-002.html | 29 +
.../relations/css-styling/visibility-003-ref.html | 12 +
.../relations/css-styling/visibility-003.html | 31 +
.../css-styling/visibility-004.tentative-ref.html | 12 +
.../css-styling/visibility-004.tentative.html | 55 ++
.../relations/css-styling/visibility-005-ref.html | 12 +
.../relations/css-styling/visibility-005.html | 88 +++
.../relations/css-styling/width-height-001.html | 62 ++
.../css-styling/width-height-002-ref.html | 162 ++++++
.../relations/css-styling/width-height-002.html | 135 +++++
.../css-styling/width-height-003-ref.html | 178 ++++++
.../relations/css-styling/width-height-003.html | 150 +++++
.../relations/css-styling/width-height-004.html | 133 +++++
.../writing-mode/force-horizontal-tb.html | 50 ++
.../reset-and-logicial-property-ref.html | 15 +
.../writing-mode/reset-and-logicial-property.html | 20 +
.../css-styling/writing-mode/writing-mode-001.html | 69 +++
.../css-styling/writing-mode/writing-mode-002.html | 82 +++
.../mathml/relations/html5-tree/class-1-ref.html | 15 +
.../tests/mathml/relations/html5-tree/class-1.html | 24 +
.../tests/mathml/relations/html5-tree/class-2.html | 42 ++
.../clipboard-event-handlers.tentative.html | 119 ++++
.../html5-tree/color-attributes-1-ref.html | 26 +
.../relations/html5-tree/color-attributes-1.html | 38 ++
.../relations/html5-tree/content-editable.html | 51 ++
.../css-inline-style-dynamic.tentative-ref.html | 18 +
.../css-inline-style-dynamic.tentative.html | 46 ++
.../css-inline-style-interface.tentative.html | 54 ++
.../mathml/relations/html5-tree/display-1.html | 175 ++++++
.../mathml/relations/html5-tree/display-2-ref.html | 31 +
.../mathml/relations/html5-tree/display-2.html | 37 ++
.../mathml/relations/html5-tree/dynamic-1-ref.html | 16 +
.../mathml/relations/html5-tree/dynamic-1.html | 30 +
.../mathml/relations/html5-tree/dynamic-2-ref.html | 16 +
.../mathml/relations/html5-tree/dynamic-2.html | 27 +
.../html5-tree/dynamic-childlist-001.html | 630 +++++++++++++++++++++
.../html5-tree/dynamic-childlist-002.html | 119 ++++
.../relations/html5-tree/href-click-1-ref.html | 15 +
.../mathml/relations/html5-tree/href-click-1.html | 36 ++
.../relations/html5-tree/href-click-2-ref.html | 15 +
.../mathml/relations/html5-tree/href-click-2.html | 40 ++
.../mathml/relations/html5-tree/href-click-3.html | 38 ++
...ml-or-foreign-element-interfaces.tentative.html | 111 ++++
.../html5-tree/integration-point-1-ref.html | 13 +
.../relations/html5-tree/integration-point-1.html | 25 +
.../html5-tree/integration-point-2-ref.html | 15 +
.../relations/html5-tree/integration-point-2.html | 72 +++
.../html5-tree/integration-point-3-ref.html | 17 +
.../relations/html5-tree/integration-point-3.html | 63 +++
.../relations/html5-tree/integration-point-4.html | 59 ++
.../relations/html5-tree/integration-point-5.html | 57 ++
.../math-global-event-handlers.tentative.html | 155 +++++
.../html5-tree/required-extensions-2-ref.html | 13 +
.../html5-tree/required-extensions-2.html | 23 +
.../mathml/relations/html5-tree/tabindex-001.html | 58 ++
.../mathml/relations/html5-tree/tabindex-002.html | 71 +++
.../html5-tree/unique-identifier-1-iframe-1.html | 18 +
.../html5-tree/unique-identifier-1-iframe-2.html | 15 +
.../html5-tree/unique-identifier-1-ref.html | 16 +
.../relations/html5-tree/unique-identifier-1.html | 19 +
.../relations/html5-tree/unique-identifier-2.html | 30 +
.../html5-tree/unique-identifier-3-ref.html | 15 +
.../relations/html5-tree/unique-identifier-3.html | 24 +
...cal-alphanumeric-symbols-with-default-font.html | 39 ++
.../text-and-math/use-typo-metrics-1-ref.html | 19 +
.../text-and-math/use-typo-metrics-1.html | 51 ++
.../tests/mathml/support/attribute-values.js | 31 +
.../tests/mathml/support/box-comparison.js | 107 ++++
.../tests/mathml/support/box-navigation.js | 29 +
.../mathml/support/feature-detection-operators.js | 86 +++
.../tests/mathml/support/feature-detection.js | 325 +++++++++++
testing/web-platform/tests/mathml/support/fonts.js | 9 +
.../tests/mathml/support/layout-comparison.js | 112 ++++
.../tests/mathml/support/mathml-fragments.js | 189 +++++++
.../tests/mathml/support/operator-dictionary.js | 42 ++
.../tests/mathml/support/operator-dictionary.json | 1 +
.../web-platform/tests/mathml/tools/axisheight.py | 27 +
.../web-platform/tests/mathml/tools/fractions.py | 163 ++++++
testing/web-platform/tests/mathml/tools/largeop.py | 64 +++
testing/web-platform/tests/mathml/tools/limits.py | 78 +++
.../web-platform/tests/mathml/tools/math-text.py | 64 +++
.../tests/mathml/tools/mathvariant-transforms.py | 202 +++++++
.../tests/mathml/tools/operator-dictionary.py | 130 +++++
.../tests/mathml/tools/operator-dictionary.xsl | 73 +++
.../tests/mathml/tools/percentscaledown.py | 24 +
.../web-platform/tests/mathml/tools/radicals.py | 133 +++++
testing/web-platform/tests/mathml/tools/scripts.py | 155 +++++
testing/web-platform/tests/mathml/tools/stacks.py | 80 +++
.../tests/mathml/tools/stretchstacks.py | 78 +++
.../mathml/tools/stretchy-centered-on-baseline.py | 44 ++
.../web-platform/tests/mathml/tools/stretchy.py | 43 ++
.../web-platform/tests/mathml/tools/underover.py | 88 +++
.../tests/mathml/tools/use-typo-lineheight.py | 53 ++
.../tests/mathml/tools/utils/__init__.py | 1 +
.../tests/mathml/tools/utils/mathfont.py | 232 ++++++++
.../web-platform/tests/mathml/tools/utils/misc.py | 35 ++
testing/web-platform/tests/mathml/tools/xHeight.py | 12 +
580 files changed, 36168 insertions(+)
create mode 100644 testing/web-platform/tests/mathml/META.yml
create mode 100644 testing/web-platform/tests/mathml/README.md
create mode 100644 testing/web-platform/tests/mathml/crashtests/children-with-negative-block-sizes.html
create mode 100644 testing/web-platform/tests/mathml/crashtests/children-with-negative-inline-sizes.html
create mode 100644 testing/web-platform/tests/mathml/crashtests/chrome-bug-1287843.html
create mode 100644 testing/web-platform/tests/mathml/crashtests/display-and-column-properties.html
create mode 100644 testing/web-platform/tests/mathml/crashtests/dynamic-height-within-table-cell.html
create mode 100644 testing/web-platform/tests/mathml/crashtests/fixed-pos-children.html
create mode 100644 testing/web-platform/tests/mathml/crashtests/math-depth-overflow.html
create mode 100644 testing/web-platform/tests/mathml/crashtests/mathml-in-svg-001.html
create mode 100644 testing/web-platform/tests/mathml/crashtests/mmultiscripts-with-two-prescripts.html
create mode 100644 testing/web-platform/tests/mathml/crashtests/mozilla/1028521-1.xhtml
create mode 100644 testing/web-platform/tests/mathml/crashtests/mozilla/1061027.html
create mode 100644 testing/web-platform/tests/mathml/crashtests/mozilla/1221888-1.html
create mode 100644 testing/web-platform/tests/mathml/crashtests/mozilla/1373767-1.html
create mode 100644 testing/web-platform/tests/mathml/crashtests/mozilla/1376158.html
create mode 100644 testing/web-platform/tests/mathml/crashtests/mozilla/151054-1.xml
create mode 100644 testing/web-platform/tests/mathml/crashtests/mozilla/1600635.html
create mode 100644 testing/web-platform/tests/mathml/crashtests/mozilla/289180-1.xml
create mode 100644 testing/web-platform/tests/mathml/crashtests/mozilla/307826-1.xhtml
create mode 100644 testing/web-platform/tests/mathml/crashtests/mozilla/307839-1.xhtml
create mode 100644 testing/web-platform/tests/mathml/crashtests/mozilla/307839-2.xhtml
create mode 100644 testing/web-platform/tests/mathml/crashtests/mozilla/323733-1.xml
create mode 100644 testing/web-platform/tests/mathml/crashtests/mozilla/323737-1.xml
create mode 100644 testing/web-platform/tests/mathml/crashtests/mozilla/323738-1.xml
create mode 100644 testing/web-platform/tests/mathml/crashtests/mozilla/323741-1.xml
create mode 100644 testing/web-platform/tests/mathml/crashtests/mozilla/323742-1.xml
create mode 100644 testing/web-platform/tests/mathml/crashtests/mozilla/336074-1.xhtml
create mode 100644 testing/web-platform/tests/mathml/crashtests/mozilla/347355-1-inner.xhtml
create mode 100644 testing/web-platform/tests/mathml/crashtests/mozilla/347355-1.gif
create mode 100644 testing/web-platform/tests/mathml/crashtests/mozilla/347355-1.html
create mode 100644 testing/web-platform/tests/mathml/crashtests/mozilla/347495-1.xhtml
create mode 100644 testing/web-platform/tests/mathml/crashtests/mozilla/347507-1.xhtml
create mode 100644 testing/web-platform/tests/mathml/crashtests/mozilla/348492-1.xhtml
create mode 100644 testing/web-platform/tests/mathml/crashtests/mozilla/348709-1.xhtml
create mode 100644 testing/web-platform/tests/mathml/crashtests/mozilla/348811-1.xhtml
create mode 100644 testing/web-platform/tests/mathml/crashtests/mozilla/348811-2.xhtml
create mode 100644 testing/web-platform/tests/mathml/crashtests/mozilla/353612-1.xhtml
create mode 100644 testing/web-platform/tests/mathml/crashtests/mozilla/355986-1.xhtml
create mode 100644 testing/web-platform/tests/mathml/crashtests/mozilla/364685-1.xhtml
create mode 100644 testing/web-platform/tests/mathml/crashtests/mozilla/366012-1.xhtml
create mode 100644 testing/web-platform/tests/mathml/crashtests/mozilla/366564-1.xhtml
create mode 100644 testing/web-platform/tests/mathml/crashtests/mozilla/367107-1.html
create mode 100644 testing/web-platform/tests/mathml/crashtests/mozilla/368430-1.xhtml
create mode 100644 testing/web-platform/tests/mathml/crashtests/mozilla/370791-1.xhtml
create mode 100644 testing/web-platform/tests/mathml/crashtests/mozilla/370862-1.xhtml
create mode 100644 testing/web-platform/tests/mathml/crashtests/mozilla/372483-1.xhtml
create mode 100644 testing/web-platform/tests/mathml/crashtests/mozilla/373472-1.xhtml
create mode 100644 testing/web-platform/tests/mathml/crashtests/mozilla/373472-2.xhtml
create mode 100644 testing/web-platform/tests/mathml/crashtests/mozilla/375562-1.xhtml
create mode 100644 testing/web-platform/tests/mathml/crashtests/mozilla/377824-1.xhtml
create mode 100644 testing/web-platform/tests/mathml/crashtests/mozilla/379418-1.xhtml
create mode 100644 testing/web-platform/tests/mathml/crashtests/mozilla/385226-1.xhtml
create mode 100644 testing/web-platform/tests/mathml/crashtests/mozilla/393760-1.xhtml
create mode 100644 testing/web-platform/tests/mathml/crashtests/mozilla/397518-1.xhtml
create mode 100644 testing/web-platform/tests/mathml/crashtests/mozilla/398038-1.html
create mode 100644 testing/web-platform/tests/mathml/crashtests/mozilla/400475-1.xhtml
create mode 100644 testing/web-platform/tests/mathml/crashtests/mozilla/402400-1.xhtml
create mode 100644 testing/web-platform/tests/mathml/crashtests/mozilla/403156-1.xhtml
create mode 100644 testing/web-platform/tests/mathml/crashtests/mozilla/404485-1.xhtml
create mode 100644 testing/web-platform/tests/mathml/crashtests/mozilla/405187-1.xhtml
create mode 100644 testing/web-platform/tests/mathml/crashtests/mozilla/405271-1.xml
create mode 100644 testing/web-platform/tests/mathml/crashtests/mozilla/412237-1.xml
create mode 100644 testing/web-platform/tests/mathml/crashtests/mozilla/413063-1.xhtml
create mode 100644 testing/web-platform/tests/mathml/crashtests/mozilla/416907-1.xhtml
create mode 100644 testing/web-platform/tests/mathml/crashtests/mozilla/420420-1.xhtml
create mode 100644 testing/web-platform/tests/mathml/crashtests/mozilla/431072-1.xhtml
create mode 100644 testing/web-platform/tests/mathml/crashtests/mozilla/443089-1.xhtml
create mode 100644 testing/web-platform/tests/mathml/crashtests/mozilla/462929-1.html
create mode 100644 testing/web-platform/tests/mathml/crashtests/mozilla/463763-1.xhtml
create mode 100644 testing/web-platform/tests/mathml/crashtests/mozilla/463763-2.xhtml
create mode 100644 testing/web-platform/tests/mathml/crashtests/mozilla/476547-1.xhtml
create mode 100644 testing/web-platform/tests/mathml/crashtests/mozilla/541620-1.xhtml
create mode 100644 testing/web-platform/tests/mathml/crashtests/mozilla/557474-1.html
create mode 100644 testing/web-platform/tests/mathml/crashtests/mozilla/654928-1.html
create mode 100644 testing/web-platform/tests/mathml/crashtests/mozilla/655451-1.xhtml
create mode 100644 testing/web-platform/tests/mathml/crashtests/mozilla/713606-1.html
create mode 100644 testing/web-platform/tests/mathml/crashtests/mozilla/716349-1.html
create mode 100644 testing/web-platform/tests/mathml/crashtests/mozilla/767251.xhtml
create mode 100644 testing/web-platform/tests/mathml/crashtests/mozilla/770710-1.html
create mode 100644 testing/web-platform/tests/mathml/crashtests/mozilla/848725-1.html
create mode 100644 testing/web-platform/tests/mathml/crashtests/mozilla/848725-2.html
create mode 100644 testing/web-platform/tests/mathml/crashtests/mozilla/947557-1.html
create mode 100644 testing/web-platform/tests/mathml/crashtests/mozilla/973322-1.xhtml
create mode 100644 testing/web-platform/tests/mathml/crashtests/mspace-mpadded-negative-dimensions.html
create mode 100644 testing/web-platform/tests/mathml/crashtests/mtd-as-multicol.html
create mode 100644 testing/web-platform/tests/mathml/crashtests/multicol-inside-ms.html
create mode 100644 testing/web-platform/tests/mathml/crashtests/multicol-on-token-elements.html
create mode 100644 testing/web-platform/tests/mathml/crashtests/operator-and-first-letter.html
create mode 100644 testing/web-platform/tests/mathml/crashtests/scrollbar-caching-assert.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/direction/direction-006-ref.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/direction/direction-006.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/direction/direction-007-ref.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/direction/direction-007.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/direction/direction-008-ref.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/direction/direction-008.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/direction/direction-010-ref.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/direction/direction-010.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/direction/direction-overall-ref.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/direction/direction-overall.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/direction/direction-token-ref.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/direction/direction-token.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/direction/direction.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/fractions/frac-1.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/fractions/frac-bar-001-ref.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/fractions/frac-bar-001.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/fractions/frac-bar-002-ref.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/fractions/frac-bar-002.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/fractions/frac-bar-003-ref.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/fractions/frac-bar-003.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/fractions/frac-color-001-notref.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/fractions/frac-color-001.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/fractions/frac-color-002-ref.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/fractions/frac-color-002.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/fractions/frac-created-dynamically-2-ref.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/fractions/frac-created-dynamically-2.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/fractions/frac-created-dynamically-3-ref.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/fractions/frac-created-dynamically-3.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/fractions/frac-created-dynamically-ref.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/fractions/frac-created-dynamically.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/fractions/frac-default-padding-ref.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/fractions/frac-default-padding.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/fractions/frac-invalid-2-ref.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/fractions/frac-invalid-2.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/fractions/frac-invalid-3-ref.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/fractions/frac-invalid-3.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/fractions/frac-invalid-ref.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/fractions/frac-invalid.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/fractions/frac-legacy-bevelled-attribute.tentative-ref.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/fractions/frac-legacy-bevelled-attribute.tentative.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/fractions/frac-linethickness-001-ref.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/fractions/frac-linethickness-001.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/fractions/frac-linethickness-002.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/fractions/frac-linethickness-003-notref.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/fractions/frac-linethickness-003.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/fractions/frac-linethickness-004-ref.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/fractions/frac-linethickness-004.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/fractions/frac-mrow-001-ref.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/fractions/frac-mrow-001.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/fractions/frac-numalign-denomalign-001-ref.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/fractions/frac-numalign-denomalign-001.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/fractions/frac-parameters-1.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/fractions/frac-parameters-2.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/fractions/frac-parameters-3.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/fractions/frac-parameters-gap-001-ref.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/fractions/frac-parameters-gap-001.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/fractions/frac-parameters-gap-002-ref.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/fractions/frac-parameters-gap-002.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/fractions/frac-parameters-gap-003-ref.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/fractions/frac-parameters-gap-003.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/fractions/frac-parameters-gap-004-ref.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/fractions/frac-parameters-gap-004.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/fractions/frac-parameters-gap-005-ref.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/fractions/frac-parameters-gap-005.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/fractions/frac-parameters-gap-006-ref.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/fractions/frac-parameters-gap-006.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/fractions/frac-rendering-from-in-flow-ref.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/fractions/frac-rendering-from-in-flow.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/fractions/frac-visibility-001-ref.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/fractions/frac-visibility-001.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/menclose/legacy-menclose-radical-notation-ref.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/menclose/legacy-menclose-radical-notation.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/mpadded/legacy-orthogonal-pseudo-units.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/mpadded/mpadded-001.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/mpadded/mpadded-002.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/mpadded/mpadded-003.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/mpadded/mpadded-percentage-001-ref.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/mpadded/mpadded-percentage-001.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/mpadded/mpadded-percentage-002.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/mrow/dynamic-mrow-like-001-ref.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/mrow/dynamic-mrow-like-001.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/mrow/inferred-mrow-baseline.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/mrow/inferred-mrow-stretchy.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/mrow/legacy-mfenced-element-001-ref.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/mrow/legacy-mfenced-element-001.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/mrow/legacy-mrow-like-elements-001.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/mrow/legacy-mrow-like-elements-002-ref.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/mrow/legacy-mrow-like-elements-002.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/mrow/legacy-mstyle-attributes.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/mrow/merror-001.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/mrow/mrow-fallback.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/mrow/mrow-painting-order-ref.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/mrow/mrow-painting-order.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/mrow/mrow-preferred-width.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/mrow/no-spacing.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/mrow/spacing.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/mrow/stretch-along-block-axis-001.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/operators/embellished-operator-001-crash.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/operators/embellished-operator-001.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/operators/embellished-operator-002.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/operators/embellished-operator-003.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/operators/embellished-operator-dynamic-001-ref.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/operators/embellished-operator-dynamic-001.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/operators/embellished-operator-dynamic-002.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/operators/largeop-hit-testing.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/operators/mo-axis-height-1.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/operators/mo-font-relative-lengths-001.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/operators/mo-form-dynamic-002-ref.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/operators/mo-form-dynamic-002.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/operators/mo-form-dynamic-ref.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/operators/mo-form-dynamic.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/operators/mo-form-fallback-ref.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/operators/mo-form-fallback.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/operators/mo-form-minus-plus-ref.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/operators/mo-form-minus-plus.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/operators/mo-form-ref.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/operators/mo-form.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/operators/mo-lspace-rspace-2-ref.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/operators/mo-lspace-rspace-2.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/operators/mo-lspace-rspace-3-ref.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/operators/mo-lspace-rspace-3.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/operators/mo-lspace-rspace-4-ref.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/operators/mo-lspace-rspace-4.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/operators/mo-lspace-rspace-dynamic-ref.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/operators/mo-lspace-rspace-dynamic.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/operators/mo-lspace-rspace-ref.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/operators/mo-lspace-rspace.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/operators/mo-minsize-maxsize-001.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/operators/mo-movablelimits-and-embellished-operator-ref.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/operators/mo-movablelimits-and-embellished-operator.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/operators/mo-movablelimits-default-ref.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/operators/mo-movablelimits-default.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/operators/mo-movablelimits-dynamic-ref.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/operators/mo-movablelimits-dynamic.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/operators/mo-movablelimits-from-in-flow-ref.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/operators/mo-movablelimits-from-in-flow.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/operators/mo-movablelimits-ref.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/operators/mo-movablelimits.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/operators/mo-not-in-dictionary-lspace-rspace-ref.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/operators/mo-not-in-dictionary-lspace-rspace.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/operators/mo-not-in-dictionary-movablelimits-ref.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/operators/mo-not-in-dictionary-movablelimits.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/operators/mo-paint-lspace-rspace-ref.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/operators/mo-paint-lspace-rspace.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/operators/mo-single-char-and-children-ref.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/operators/mo-single-char-and-children.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/operators/mo-stretch-properties-001.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/operators/mo-stretch-properties-dynamic-001.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/operators/op-dict-1-notref.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/operators/op-dict-1.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/operators/op-dict-12-ref.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/operators/op-dict-12.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/operators/op-dict-13-notref.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/operators/op-dict-13.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/operators/op-dict-2-ref.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/operators/op-dict-2.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/operators/op-dict-3-notref.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/operators/op-dict-3.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/operators/op-dict-4-ref.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/operators/op-dict-4.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/operators/op-dict-5-notref.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/operators/op-dict-5.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/operators/op-dict-6-ref.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/operators/op-dict-6.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/operators/op-dict-7-notref.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/operators/op-dict-7.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/operators/op-dict-8-ref.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/operators/op-dict-8.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/operators/op-dict-9-notref.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/operators/op-dict-9.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/operators/operator-dictionary-arabic-001-ref.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/operators/operator-dictionary-arabic-001.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/operators/operator-dictionary-arabic-002-ref.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/operators/operator-dictionary-arabic-002.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/operators/operator-dictionary-combining.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/operators/operator-dictionary-empty-and-three-chars-ref.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/operators/operator-dictionary-empty-and-three-chars.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/operators/operator-dictionary-largeop-001.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/operators/operator-dictionary-largeop-002.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/operators/operator-dictionary-largeop-003.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/operators/operator-dictionary-largeop-004.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/operators/operator-dictionary-largeop-005.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/operators/operator-dictionary-largeop-006.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/operators/operator-dictionary-movablelimits-001.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/operators/operator-dictionary-movablelimits-002.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/operators/operator-dictionary-movablelimits-003.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/operators/operator-dictionary-movablelimits-004.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/operators/operator-dictionary-movablelimits-005.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/operators/operator-dictionary-movablelimits-006.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/operators/operator-dictionary-spacing-001.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/operators/operator-dictionary-spacing-002.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/operators/operator-dictionary-spacing-003.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/operators/operator-dictionary-spacing-004.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/operators/operator-dictionary-spacing-005.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/operators/operator-dictionary-spacing-006.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/operators/operator-dictionary-stretchy-001.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/operators/operator-dictionary-stretchy-002.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/operators/operator-dictionary-stretchy-003.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/operators/operator-dictionary-stretchy-004.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/operators/operator-dictionary-stretchy-005.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/operators/operator-dictionary-stretchy-006.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/operators/operator-dictionary-symmetric-001.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/operators/operator-dictionary-symmetric-002.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/operators/operator-dictionary-symmetric-003.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/operators/operator-dictionary-symmetric-004.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/operators/operator-dictionary-symmetric-005.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/operators/operator-dictionary-symmetric-006.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/operators/painting-stretchy-operator-001-ref.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/operators/painting-stretchy-operator-001.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/operators/support/operator-dictionary-tests.css
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/operators/support/operator-dictionary-tests.js
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/radicals/dynamic-radical-paint-invalidation-001-ref.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/radicals/dynamic-radical-paint-invalidation-001.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/radicals/radical-rendering-from-in-flow-ref.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/radicals/radical-rendering-from-in-flow.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/radicals/root-parameters-1.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/radicals/root-parameters-2.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/scripts/cramped-001.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/scripts/empty-underover.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/scripts/mover-accent-dynamic-change-ref.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/scripts/mover-accent-dynamic-change.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/scripts/mprescripts-001-ref.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/scripts/mprescripts-001.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/scripts/none-001-ref.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/scripts/none-001.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/scripts/none-002-ref.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/scripts/none-002.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/scripts/subsup-1.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/scripts/subsup-2.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/scripts/subsup-3.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/scripts/subsup-4.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/scripts/subsup-5.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/scripts/subsup-6.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/scripts/subsup-legacy-scriptshift-attributes-001.tentative-ref.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/scripts/subsup-legacy-scriptshift-attributes-001.tentative.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/scripts/subsup-parameters-1.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/scripts/subsup-parameters-2.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/scripts/underover-1.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/scripts/underover-legacy-align-attribute-001-ref.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/scripts/underover-legacy-align-attribute-001.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/scripts/underover-parameters-1.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/scripts/underover-parameters-2.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/scripts/underover-parameters-3.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/scripts/underover-parameters-4.tentative.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/scripts/underover-parameters-and-embellished-operator-1.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/scripts/underover-parameters-and-embellished-operator-2.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/scripts/underover-stretchy-001-ref.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/scripts/underover-stretchy-001.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/scripts/underover-stretchy-002-ref.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/scripts/underover-stretchy-002.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/scripts/underover-stretchy-003-ref.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/scripts/underover-stretchy-003.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/spaces/mspace-children-ref.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/spaces/mspace-children.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/spaces/mspace-percentage-001-ref.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/spaces/mspace-percentage-001.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/spaces/mspace-width-height-001.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/spaces/space-1.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/spaces/space-2-ref.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/spaces/space-2.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/spaces/space-like-001.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/spaces/space-like-002.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/spaces/space-like-003.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/spaces/space-like-004.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/spaces/space-vertical-align.tentative-ref.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/spaces/space-vertical-align.tentative.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/tables/dynamic-table-001.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/tables/table-001.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/tables/table-002.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/tables/table-003.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/tables/table-axis-height.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/tables/table-cell-mrow-layout.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/tables/table-default-styles-001.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/tokens/dynamic-mtext-like-001-ref.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/tokens/dynamic-mtext-like-001.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/tokens/ms-001-ref.html
create mode 100644 testing/web-platform/tests/mathml/presentation-markup/tokens/ms-001.html
create mode 100644 testing/web-platform/tests/mathml/relations/css-styling/attribute-mapping-001.html
create mode 100644 testing/web-platform/tests/mathml/relations/css-styling/attribute-mapping-002.html
create mode 100644 testing/web-platform/tests/mathml/relations/css-styling/blur-filter-ref.html
create mode 100644 testing/web-platform/tests/mathml/relations/css-styling/blur-filter.html
create mode 100644 testing/web-platform/tests/mathml/relations/css-styling/clip-path-ref.html
create mode 100644 testing/web-platform/tests/mathml/relations/css-styling/clip-path.html
create mode 100644 testing/web-platform/tests/mathml/relations/css-styling/clip-ref.html
create mode 100644 testing/web-platform/tests/mathml/relations/css-styling/clip.html
create mode 100644 testing/web-platform/tests/mathml/relations/css-styling/color-001-ref.html
create mode 100644 testing/web-platform/tests/mathml/relations/css-styling/color-001.html
create mode 100644 testing/web-platform/tests/mathml/relations/css-styling/color-002-ref.html
create mode 100644 testing/web-platform/tests/mathml/relations/css-styling/color-002.html
create mode 100644 testing/web-platform/tests/mathml/relations/css-styling/color-003-ref.html
create mode 100644 testing/web-platform/tests/mathml/relations/css-styling/color-003.html
create mode 100644 testing/web-platform/tests/mathml/relations/css-styling/color-004.tentative-ref.html
create mode 100644 testing/web-platform/tests/mathml/relations/css-styling/color-004.tentative.html
create mode 100644 testing/web-platform/tests/mathml/relations/css-styling/color-005-ref.html
create mode 100644 testing/web-platform/tests/mathml/relations/css-styling/color-005.html
create mode 100644 testing/web-platform/tests/mathml/relations/css-styling/default-font-family.html
create mode 100644 testing/web-platform/tests/mathml/relations/css-styling/default-properties-on-semantics-and-maction.html
create mode 100644 testing/web-platform/tests/mathml/relations/css-styling/default-properties-on-the-math-root.html
create mode 100644 testing/web-platform/tests/mathml/relations/css-styling/display-1-ref.html
create mode 100644 testing/web-platform/tests/mathml/relations/css-styling/display-1.html
create mode 100644 testing/web-platform/tests/mathml/relations/css-styling/display-2.html
create mode 100644 testing/web-platform/tests/mathml/relations/css-styling/display-contents.html
create mode 100644 testing/web-platform/tests/mathml/relations/css-styling/display-with-overflow-ref.html
create mode 100644 testing/web-platform/tests/mathml/relations/css-styling/display-with-overflow.html
create mode 100644 testing/web-platform/tests/mathml/relations/css-styling/displaystyle-011-ref.html
create mode 100644 testing/web-platform/tests/mathml/relations/css-styling/displaystyle-011.html
create mode 100644 testing/web-platform/tests/mathml/relations/css-styling/displaystyle-012-ref.html
create mode 100644 testing/web-platform/tests/mathml/relations/css-styling/displaystyle-012.html
create mode 100644 testing/web-platform/tests/mathml/relations/css-styling/displaystyle-013-ref.html
create mode 100644 testing/web-platform/tests/mathml/relations/css-styling/displaystyle-013.html
create mode 100644 testing/web-platform/tests/mathml/relations/css-styling/displaystyle-014-ref.html
create mode 100644 testing/web-platform/tests/mathml/relations/css-styling/displaystyle-014.html
create mode 100644 testing/web-platform/tests/mathml/relations/css-styling/displaystyle-015-ref.html
create mode 100644 testing/web-platform/tests/mathml/relations/css-styling/displaystyle-015.html
create mode 100644 testing/web-platform/tests/mathml/relations/css-styling/displaystyle-1.html
create mode 100644 testing/web-platform/tests/mathml/relations/css-styling/displaystyle-2.html
create mode 100644 testing/web-platform/tests/mathml/relations/css-styling/displaystyle-3.html
create mode 100644 testing/web-platform/tests/mathml/relations/css-styling/dynamic-dir-1-ref.html
create mode 100644 testing/web-platform/tests/mathml/relations/css-styling/dynamic-dir-1.html
create mode 100644 testing/web-platform/tests/mathml/relations/css-styling/floats/floating-inside-mathml-with-block-display-ref.html
create mode 100644 testing/web-platform/tests/mathml/relations/css-styling/floats/floating-inside-mathml-with-block-display.html
create mode 100644 testing/web-platform/tests/mathml/relations/css-styling/floats/floating-math-ref.html
create mode 100644 testing/web-platform/tests/mathml/relations/css-styling/floats/floating-math.html
create mode 100644 testing/web-platform/tests/mathml/relations/css-styling/floats/not-floating-001.html
create mode 100644 testing/web-platform/tests/mathml/relations/css-styling/ignored-properties-001.html
create mode 100644 testing/web-platform/tests/mathml/relations/css-styling/legacy-scriptminsize-attribute-ref.html
create mode 100644 testing/web-platform/tests/mathml/relations/css-styling/legacy-scriptminsize-attribute.html
create mode 100644 testing/web-platform/tests/mathml/relations/css-styling/legacy-scriptsizemultiplier-attribute-ref.html
create mode 100644 testing/web-platform/tests/mathml/relations/css-styling/legacy-scriptsizemultiplier-attribute.html
create mode 100644 testing/web-platform/tests/mathml/relations/css-styling/lengths-1-ref.html
create mode 100644 testing/web-platform/tests/mathml/relations/css-styling/lengths-1.html
create mode 100644 testing/web-platform/tests/mathml/relations/css-styling/lengths-2.html
create mode 100644 testing/web-platform/tests/mathml/relations/css-styling/mathbackground-001-notref.html
create mode 100644 testing/web-platform/tests/mathml/relations/css-styling/mathbackground-001.html
create mode 100644 testing/web-platform/tests/mathml/relations/css-styling/mathbackground-002-notref.html
create mode 100644 testing/web-platform/tests/mathml/relations/css-styling/mathbackground-002.html
create mode 100644 testing/web-platform/tests/mathml/relations/css-styling/mathbackground-003-notref.html
create mode 100644 testing/web-platform/tests/mathml/relations/css-styling/mathbackground-003.html
create mode 100644 testing/web-platform/tests/mathml/relations/css-styling/mathbackground-004-notref.html
create mode 100644 testing/web-platform/tests/mathml/relations/css-styling/mathbackground-004.html
create mode 100644 testing/web-platform/tests/mathml/relations/css-styling/mathcolor-001-notref.html
create mode 100644 testing/web-platform/tests/mathml/relations/css-styling/mathcolor-001.html
create mode 100644 testing/web-platform/tests/mathml/relations/css-styling/mathcolor-002-notref.html
create mode 100644 testing/web-platform/tests/mathml/relations/css-styling/mathcolor-002.html
create mode 100644 testing/web-platform/tests/mathml/relations/css-styling/mathcolor-003-notref.html
create mode 100644 testing/web-platform/tests/mathml/relations/css-styling/mathcolor-003.html
create mode 100644 testing/web-platform/tests/mathml/relations/css-styling/mathcolor-004-notref.html
create mode 100644 testing/web-platform/tests/mathml/relations/css-styling/mathcolor-004.html
create mode 100644 testing/web-platform/tests/mathml/relations/css-styling/mathcolor-mathbackground-css-ref.html
create mode 100644 testing/web-platform/tests/mathml/relations/css-styling/mathcolor-mathbackground-css.html
create mode 100644 testing/web-platform/tests/mathml/relations/css-styling/mathsize-attribute-css-keywords-ref.html
create mode 100644 testing/web-platform/tests/mathml/relations/css-styling/mathsize-attribute-css-keywords.html
create mode 100644 testing/web-platform/tests/mathml/relations/css-styling/mathsize-attribute-legacy-values-ref.html
create mode 100644 testing/web-platform/tests/mathml/relations/css-styling/mathsize-attribute-legacy-values.html
create mode 100644 testing/web-platform/tests/mathml/relations/css-styling/mathsize-attribute-ref.html
create mode 100644 testing/web-platform/tests/mathml/relations/css-styling/mathsize-attribute.html
create mode 100644 testing/web-platform/tests/mathml/relations/css-styling/mathvariant-auto-ref.html
create mode 100644 testing/web-platform/tests/mathml/relations/css-styling/mathvariant-auto.html
create mode 100644 testing/web-platform/tests/mathml/relations/css-styling/mathvariant-font-style-font-weight-ref.html
create mode 100644 testing/web-platform/tests/mathml/relations/css-styling/mathvariant-font-style-font-weight.html
create mode 100644 testing/web-platform/tests/mathml/relations/css-styling/mi-fontstyle-fontweight-ref.html
create mode 100644 testing/web-platform/tests/mathml/relations/css-styling/mi-fontstyle-fontweight.html
create mode 100644 testing/web-platform/tests/mathml/relations/css-styling/multi-column-layout.html
create mode 100644 testing/web-platform/tests/mathml/relations/css-styling/not-participating-to-parent-layout.html
create mode 100644 testing/web-platform/tests/mathml/relations/css-styling/out-of-flow/absolutely-positioned-001-ref.html
create mode 100644 testing/web-platform/tests/mathml/relations/css-styling/out-of-flow/absolutely-positioned-001.html
create mode 100644 testing/web-platform/tests/mathml/relations/css-styling/out-of-flow/all-mathml-containers.html
create mode 100644 testing/web-platform/tests/mathml/relations/css-styling/out-of-flow/fixed-positioned-001-ref.html
create mode 100644 testing/web-platform/tests/mathml/relations/css-styling/out-of-flow/fixed-positioned-001.html
create mode 100644 testing/web-platform/tests/mathml/relations/css-styling/overflow/computed-value-001.html
create mode 100644 testing/web-platform/tests/mathml/relations/css-styling/padding-border-margin/border-001.html
create mode 100644 testing/web-platform/tests/mathml/relations/css-styling/padding-border-margin/border-002.html
create mode 100644 testing/web-platform/tests/mathml/relations/css-styling/padding-border-margin/margin-001.html
create mode 100644 testing/web-platform/tests/mathml/relations/css-styling/padding-border-margin/margin-002.html
create mode 100644 testing/web-platform/tests/mathml/relations/css-styling/padding-border-margin/margin-003.html
create mode 100644 testing/web-platform/tests/mathml/relations/css-styling/padding-border-margin/padding-001.html
create mode 100644 testing/web-platform/tests/mathml/relations/css-styling/padding-border-margin/padding-002.html
create mode 100644 testing/web-platform/tests/mathml/relations/css-styling/padding-border-margin/padding-border-margin-001-ref.html
create mode 100644 testing/web-platform/tests/mathml/relations/css-styling/padding-border-margin/padding-border-margin-001.html
create mode 100644 testing/web-platform/tests/mathml/relations/css-styling/padding-border-margin/padding-border-margin-002-ref.html
create mode 100644 testing/web-platform/tests/mathml/relations/css-styling/padding-border-margin/padding-border-margin-002.html
create mode 100644 testing/web-platform/tests/mathml/relations/css-styling/padding-border-margin/padding-border-margin-003-ref.html
create mode 100644 testing/web-platform/tests/mathml/relations/css-styling/padding-border-margin/padding-border-margin-003.html
create mode 100644 testing/web-platform/tests/mathml/relations/css-styling/presentational-hints-001-ref.html
create mode 100644 testing/web-platform/tests/mathml/relations/css-styling/presentational-hints-001.html
create mode 100644 testing/web-platform/tests/mathml/relations/css-styling/presentational-hints-002-ref.html
create mode 100644 testing/web-platform/tests/mathml/relations/css-styling/presentational-hints-002.html
create mode 100644 testing/web-platform/tests/mathml/relations/css-styling/scriptlevel-001.html
create mode 100644 testing/web-platform/tests/mathml/relations/css-styling/transform-ref.html
create mode 100644 testing/web-platform/tests/mathml/relations/css-styling/transform.html
create mode 100644 testing/web-platform/tests/mathml/relations/css-styling/visibility-001-ref.html
create mode 100644 testing/web-platform/tests/mathml/relations/css-styling/visibility-001.html
create mode 100644 testing/web-platform/tests/mathml/relations/css-styling/visibility-002-ref.html
create mode 100644 testing/web-platform/tests/mathml/relations/css-styling/visibility-002.html
create mode 100644 testing/web-platform/tests/mathml/relations/css-styling/visibility-003-ref.html
create mode 100644 testing/web-platform/tests/mathml/relations/css-styling/visibility-003.html
create mode 100644 testing/web-platform/tests/mathml/relations/css-styling/visibility-004.tentative-ref.html
create mode 100644 testing/web-platform/tests/mathml/relations/css-styling/visibility-004.tentative.html
create mode 100644 testing/web-platform/tests/mathml/relations/css-styling/visibility-005-ref.html
create mode 100644 testing/web-platform/tests/mathml/relations/css-styling/visibility-005.html
create mode 100644 testing/web-platform/tests/mathml/relations/css-styling/width-height-001.html
create mode 100644 testing/web-platform/tests/mathml/relations/css-styling/width-height-002-ref.html
create mode 100644 testing/web-platform/tests/mathml/relations/css-styling/width-height-002.html
create mode 100644 testing/web-platform/tests/mathml/relations/css-styling/width-height-003-ref.html
create mode 100644 testing/web-platform/tests/mathml/relations/css-styling/width-height-003.html
create mode 100644 testing/web-platform/tests/mathml/relations/css-styling/width-height-004.html
create mode 100644 testing/web-platform/tests/mathml/relations/css-styling/writing-mode/force-horizontal-tb.html
create mode 100644 testing/web-platform/tests/mathml/relations/css-styling/writing-mode/reset-and-logicial-property-ref.html
create mode 100644 testing/web-platform/tests/mathml/relations/css-styling/writing-mode/reset-and-logicial-property.html
create mode 100644 testing/web-platform/tests/mathml/relations/css-styling/writing-mode/writing-mode-001.html
create mode 100644 testing/web-platform/tests/mathml/relations/css-styling/writing-mode/writing-mode-002.html
create mode 100644 testing/web-platform/tests/mathml/relations/html5-tree/class-1-ref.html
create mode 100644 testing/web-platform/tests/mathml/relations/html5-tree/class-1.html
create mode 100644 testing/web-platform/tests/mathml/relations/html5-tree/class-2.html
create mode 100644 testing/web-platform/tests/mathml/relations/html5-tree/clipboard-event-handlers.tentative.html
create mode 100644 testing/web-platform/tests/mathml/relations/html5-tree/color-attributes-1-ref.html
create mode 100644 testing/web-platform/tests/mathml/relations/html5-tree/color-attributes-1.html
create mode 100644 testing/web-platform/tests/mathml/relations/html5-tree/content-editable.html
create mode 100644 testing/web-platform/tests/mathml/relations/html5-tree/css-inline-style-dynamic.tentative-ref.html
create mode 100644 testing/web-platform/tests/mathml/relations/html5-tree/css-inline-style-dynamic.tentative.html
create mode 100644 testing/web-platform/tests/mathml/relations/html5-tree/css-inline-style-interface.tentative.html
create mode 100644 testing/web-platform/tests/mathml/relations/html5-tree/display-1.html
create mode 100644 testing/web-platform/tests/mathml/relations/html5-tree/display-2-ref.html
create mode 100644 testing/web-platform/tests/mathml/relations/html5-tree/display-2.html
create mode 100644 testing/web-platform/tests/mathml/relations/html5-tree/dynamic-1-ref.html
create mode 100644 testing/web-platform/tests/mathml/relations/html5-tree/dynamic-1.html
create mode 100644 testing/web-platform/tests/mathml/relations/html5-tree/dynamic-2-ref.html
create mode 100644 testing/web-platform/tests/mathml/relations/html5-tree/dynamic-2.html
create mode 100644 testing/web-platform/tests/mathml/relations/html5-tree/dynamic-childlist-001.html
create mode 100644 testing/web-platform/tests/mathml/relations/html5-tree/dynamic-childlist-002.html
create mode 100644 testing/web-platform/tests/mathml/relations/html5-tree/href-click-1-ref.html
create mode 100644 testing/web-platform/tests/mathml/relations/html5-tree/href-click-1.html
create mode 100644 testing/web-platform/tests/mathml/relations/html5-tree/href-click-2-ref.html
create mode 100644 testing/web-platform/tests/mathml/relations/html5-tree/href-click-2.html
create mode 100644 testing/web-platform/tests/mathml/relations/html5-tree/href-click-3.html
create mode 100644 testing/web-platform/tests/mathml/relations/html5-tree/html-or-foreign-element-interfaces.tentative.html
create mode 100644 testing/web-platform/tests/mathml/relations/html5-tree/integration-point-1-ref.html
create mode 100644 testing/web-platform/tests/mathml/relations/html5-tree/integration-point-1.html
create mode 100644 testing/web-platform/tests/mathml/relations/html5-tree/integration-point-2-ref.html
create mode 100644 testing/web-platform/tests/mathml/relations/html5-tree/integration-point-2.html
create mode 100644 testing/web-platform/tests/mathml/relations/html5-tree/integration-point-3-ref.html
create mode 100644 testing/web-platform/tests/mathml/relations/html5-tree/integration-point-3.html
create mode 100644 testing/web-platform/tests/mathml/relations/html5-tree/integration-point-4.html
create mode 100644 testing/web-platform/tests/mathml/relations/html5-tree/integration-point-5.html
create mode 100644 testing/web-platform/tests/mathml/relations/html5-tree/math-global-event-handlers.tentative.html
create mode 100644 testing/web-platform/tests/mathml/relations/html5-tree/required-extensions-2-ref.html
create mode 100644 testing/web-platform/tests/mathml/relations/html5-tree/required-extensions-2.html
create mode 100644 testing/web-platform/tests/mathml/relations/html5-tree/tabindex-001.html
create mode 100644 testing/web-platform/tests/mathml/relations/html5-tree/tabindex-002.html
create mode 100644 testing/web-platform/tests/mathml/relations/html5-tree/unique-identifier-1-iframe-1.html
create mode 100644 testing/web-platform/tests/mathml/relations/html5-tree/unique-identifier-1-iframe-2.html
create mode 100644 testing/web-platform/tests/mathml/relations/html5-tree/unique-identifier-1-ref.html
create mode 100644 testing/web-platform/tests/mathml/relations/html5-tree/unique-identifier-1.html
create mode 100644 testing/web-platform/tests/mathml/relations/html5-tree/unique-identifier-2.html
create mode 100644 testing/web-platform/tests/mathml/relations/html5-tree/unique-identifier-3-ref.html
create mode 100644 testing/web-platform/tests/mathml/relations/html5-tree/unique-identifier-3.html
create mode 100644 testing/web-platform/tests/mathml/relations/text-and-math/basic-mathematical-alphanumeric-symbols-with-default-font.html
create mode 100644 testing/web-platform/tests/mathml/relations/text-and-math/use-typo-metrics-1-ref.html
create mode 100644 testing/web-platform/tests/mathml/relations/text-and-math/use-typo-metrics-1.html
create mode 100644 testing/web-platform/tests/mathml/support/attribute-values.js
create mode 100644 testing/web-platform/tests/mathml/support/box-comparison.js
create mode 100644 testing/web-platform/tests/mathml/support/box-navigation.js
create mode 100644 testing/web-platform/tests/mathml/support/feature-detection-operators.js
create mode 100644 testing/web-platform/tests/mathml/support/feature-detection.js
create mode 100644 testing/web-platform/tests/mathml/support/fonts.js
create mode 100644 testing/web-platform/tests/mathml/support/layout-comparison.js
create mode 100644 testing/web-platform/tests/mathml/support/mathml-fragments.js
create mode 100644 testing/web-platform/tests/mathml/support/operator-dictionary.js
create mode 100644 testing/web-platform/tests/mathml/support/operator-dictionary.json
create mode 100755 testing/web-platform/tests/mathml/tools/axisheight.py
create mode 100755 testing/web-platform/tests/mathml/tools/fractions.py
create mode 100755 testing/web-platform/tests/mathml/tools/largeop.py
create mode 100755 testing/web-platform/tests/mathml/tools/limits.py
create mode 100755 testing/web-platform/tests/mathml/tools/math-text.py
create mode 100755 testing/web-platform/tests/mathml/tools/mathvariant-transforms.py
create mode 100755 testing/web-platform/tests/mathml/tools/operator-dictionary.py
create mode 100644 testing/web-platform/tests/mathml/tools/operator-dictionary.xsl
create mode 100755 testing/web-platform/tests/mathml/tools/percentscaledown.py
create mode 100755 testing/web-platform/tests/mathml/tools/radicals.py
create mode 100755 testing/web-platform/tests/mathml/tools/scripts.py
create mode 100755 testing/web-platform/tests/mathml/tools/stacks.py
create mode 100755 testing/web-platform/tests/mathml/tools/stretchstacks.py
create mode 100755 testing/web-platform/tests/mathml/tools/stretchy-centered-on-baseline.py
create mode 100755 testing/web-platform/tests/mathml/tools/stretchy.py
create mode 100755 testing/web-platform/tests/mathml/tools/underover.py
create mode 100755 testing/web-platform/tests/mathml/tools/use-typo-lineheight.py
create mode 100644 testing/web-platform/tests/mathml/tools/utils/__init__.py
create mode 100644 testing/web-platform/tests/mathml/tools/utils/mathfont.py
create mode 100644 testing/web-platform/tests/mathml/tools/utils/misc.py
create mode 100755 testing/web-platform/tests/mathml/tools/xHeight.py
(limited to 'testing/web-platform/tests/mathml')
diff --git a/testing/web-platform/tests/mathml/META.yml b/testing/web-platform/tests/mathml/META.yml
new file mode 100644
index 0000000000..ee5c81bfb6
--- /dev/null
+++ b/testing/web-platform/tests/mathml/META.yml
@@ -0,0 +1,3 @@
+spec: https://w3c.github.io/mathml-core/
+suggested_reviewers:
+ - fred-wang
diff --git a/testing/web-platform/tests/mathml/README.md b/testing/web-platform/tests/mathml/README.md
new file mode 100644
index 0000000000..4511b3e7df
--- /dev/null
+++ b/testing/web-platform/tests/mathml/README.md
@@ -0,0 +1,12 @@
+# Tests for the MathML Core specification
+
+This directory contains tests for the
+[MathML Core specification](https://w3c.github.io/mathml-core/).
+Many of the tests verify OpenType features and require specific Web fonts for
+that purpose. WOFF fonts are generated by scripts in the `tools/` folder using
+the Python API of
+[fontforge](https://github.com/fontforge/fontforge/). A recent enough version
+of FontForge is necessary so that it includes fixes for
+[WOFF checkSumAdjustment](https://github.com/fontforge/fontforge/issues/926),
+[USE_TYPO_METRICS flag](https://github.com/fontforge/fontforge/pull/2274) and
+for other various bugs.
diff --git a/testing/web-platform/tests/mathml/crashtests/children-with-negative-block-sizes.html b/testing/web-platform/tests/mathml/crashtests/children-with-negative-block-sizes.html
new file mode 100644
index 0000000000..c50f9be153
--- /dev/null
+++ b/testing/web-platform/tests/mathml/crashtests/children-with-negative-block-sizes.html
@@ -0,0 +1,142 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/crashtests/children-with-negative-inline-sizes.html b/testing/web-platform/tests/mathml/crashtests/children-with-negative-inline-sizes.html
new file mode 100644
index 0000000000..5c41fc8969
--- /dev/null
+++ b/testing/web-platform/tests/mathml/crashtests/children-with-negative-inline-sizes.html
@@ -0,0 +1,142 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/crashtests/chrome-bug-1287843.html b/testing/web-platform/tests/mathml/crashtests/chrome-bug-1287843.html
new file mode 100644
index 0000000000..6fc95fc12e
--- /dev/null
+++ b/testing/web-platform/tests/mathml/crashtests/chrome-bug-1287843.html
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/crashtests/display-and-column-properties.html b/testing/web-platform/tests/mathml/crashtests/display-and-column-properties.html
new file mode 100644
index 0000000000..c40a2a0549
--- /dev/null
+++ b/testing/web-platform/tests/mathml/crashtests/display-and-column-properties.html
@@ -0,0 +1,30 @@
+
+
+
+ MathML elements with display and column properties
+
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/crashtests/dynamic-height-within-table-cell.html b/testing/web-platform/tests/mathml/crashtests/dynamic-height-within-table-cell.html
new file mode 100644
index 0000000000..cf42101bc8
--- /dev/null
+++ b/testing/web-platform/tests/mathml/crashtests/dynamic-height-within-table-cell.html
@@ -0,0 +1,33 @@
+
+
+
+ Dynamic height within table cell
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/crashtests/fixed-pos-children.html b/testing/web-platform/tests/mathml/crashtests/fixed-pos-children.html
new file mode 100644
index 0000000000..773439d6f3
--- /dev/null
+++ b/testing/web-platform/tests/mathml/crashtests/fixed-pos-children.html
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/testing/web-platform/tests/mathml/crashtests/math-depth-overflow.html b/testing/web-platform/tests/mathml/crashtests/math-depth-overflow.html
new file mode 100644
index 0000000000..e096dbb558
--- /dev/null
+++ b/testing/web-platform/tests/mathml/crashtests/math-depth-overflow.html
@@ -0,0 +1,10 @@
+
diff --git a/testing/web-platform/tests/mathml/crashtests/mathml-in-svg-001.html b/testing/web-platform/tests/mathml/crashtests/mathml-in-svg-001.html
new file mode 100644
index 0000000000..94a905f3b0
--- /dev/null
+++ b/testing/web-platform/tests/mathml/crashtests/mathml-in-svg-001.html
@@ -0,0 +1,3 @@
+
+
+42
diff --git a/testing/web-platform/tests/mathml/crashtests/mmultiscripts-with-two-prescripts.html b/testing/web-platform/tests/mathml/crashtests/mmultiscripts-with-two-prescripts.html
new file mode 100644
index 0000000000..54f9384606
--- /dev/null
+++ b/testing/web-platform/tests/mathml/crashtests/mmultiscripts-with-two-prescripts.html
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/crashtests/mozilla/1028521-1.xhtml b/testing/web-platform/tests/mathml/crashtests/mozilla/1028521-1.xhtml
new file mode 100644
index 0000000000..b8d0947741
--- /dev/null
+++ b/testing/web-platform/tests/mathml/crashtests/mozilla/1028521-1.xhtml
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/crashtests/mozilla/1061027.html b/testing/web-platform/tests/mathml/crashtests/mozilla/1061027.html
new file mode 100644
index 0000000000..3187f500a3
--- /dev/null
+++ b/testing/web-platform/tests/mathml/crashtests/mozilla/1061027.html
@@ -0,0 +1,12 @@
+
\ No newline at end of file
diff --git a/testing/web-platform/tests/mathml/crashtests/mozilla/1221888-1.html b/testing/web-platform/tests/mathml/crashtests/mozilla/1221888-1.html
new file mode 100644
index 0000000000..741daa7503
--- /dev/null
+++ b/testing/web-platform/tests/mathml/crashtests/mozilla/1221888-1.html
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/crashtests/mozilla/1373767-1.html b/testing/web-platform/tests/mathml/crashtests/mozilla/1373767-1.html
new file mode 100644
index 0000000000..a159cec7be
--- /dev/null
+++ b/testing/web-platform/tests/mathml/crashtests/mozilla/1373767-1.html
@@ -0,0 +1,22 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/crashtests/mozilla/1376158.html b/testing/web-platform/tests/mathml/crashtests/mozilla/1376158.html
new file mode 100644
index 0000000000..42b6dd73c8
--- /dev/null
+++ b/testing/web-platform/tests/mathml/crashtests/mozilla/1376158.html
@@ -0,0 +1,6 @@
+
+
+>
+
+)
+
diff --git a/testing/web-platform/tests/mathml/crashtests/mozilla/151054-1.xml b/testing/web-platform/tests/mathml/crashtests/mozilla/151054-1.xml
new file mode 100644
index 0000000000..f634d089f3
--- /dev/null
+++ b/testing/web-platform/tests/mathml/crashtests/mozilla/151054-1.xml
@@ -0,0 +1,15 @@
+
+
+
+
+ Math with position: absolute
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/crashtests/mozilla/1600635.html b/testing/web-platform/tests/mathml/crashtests/mozilla/1600635.html
new file mode 100644
index 0000000000..d6ad315885
--- /dev/null
+++ b/testing/web-platform/tests/mathml/crashtests/mozilla/1600635.html
@@ -0,0 +1,16 @@
+
+
diff --git a/testing/web-platform/tests/mathml/crashtests/mozilla/289180-1.xml b/testing/web-platform/tests/mathml/crashtests/mozilla/289180-1.xml
new file mode 100644
index 0000000000..8d1f2e843c
--- /dev/null
+++ b/testing/web-platform/tests/mathml/crashtests/mozilla/289180-1.xml
@@ -0,0 +1,16 @@
+
+
+
+
+ x
+ y
+
+
+
+
+
+ x
+ y
+
+
+
diff --git a/testing/web-platform/tests/mathml/crashtests/mozilla/307826-1.xhtml b/testing/web-platform/tests/mathml/crashtests/mozilla/307826-1.xhtml
new file mode 100644
index 0000000000..02d436e825
--- /dev/null
+++ b/testing/web-platform/tests/mathml/crashtests/mozilla/307826-1.xhtml
@@ -0,0 +1,30 @@
+
+
+
+
+Testcase for MathML crash
+
+
+
+
+
+
+
+
+Floated div
+
+mi
+
+
+
diff --git a/testing/web-platform/tests/mathml/crashtests/mozilla/307839-1.xhtml b/testing/web-platform/tests/mathml/crashtests/mozilla/307839-1.xhtml
new file mode 100644
index 0000000000..a26e58ac07
--- /dev/null
+++ b/testing/web-platform/tests/mathml/crashtests/mozilla/307839-1.xhtml
@@ -0,0 +1,15 @@
+
+
+ Testcase
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/crashtests/mozilla/307839-2.xhtml b/testing/web-platform/tests/mathml/crashtests/mozilla/307839-2.xhtml
new file mode 100644
index 0000000000..05dc08a78f
--- /dev/null
+++ b/testing/web-platform/tests/mathml/crashtests/mozilla/307839-2.xhtml
@@ -0,0 +1,24 @@
+
+
+]>
+
+
+
+Testcase bug - Evil mrow:hover testcase crashes Mozilla
+
+
+
+
+
+ hovering over this should not crash Mozilla
+
+ 10
+ times
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/crashtests/mozilla/323733-1.xml b/testing/web-platform/tests/mathml/crashtests/mozilla/323733-1.xml
new file mode 100644
index 0000000000..5551d8588c
--- /dev/null
+++ b/testing/web-platform/tests/mathml/crashtests/mozilla/323733-1.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/crashtests/mozilla/323737-1.xml b/testing/web-platform/tests/mathml/crashtests/mozilla/323737-1.xml
new file mode 100644
index 0000000000..ad673f9460
--- /dev/null
+++ b/testing/web-platform/tests/mathml/crashtests/mozilla/323737-1.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/testing/web-platform/tests/mathml/crashtests/mozilla/323738-1.xml b/testing/web-platform/tests/mathml/crashtests/mozilla/323738-1.xml
new file mode 100644
index 0000000000..318aa93b4e
--- /dev/null
+++ b/testing/web-platform/tests/mathml/crashtests/mozilla/323738-1.xml
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/testing/web-platform/tests/mathml/crashtests/mozilla/323741-1.xml b/testing/web-platform/tests/mathml/crashtests/mozilla/323741-1.xml
new file mode 100644
index 0000000000..8527c1a783
--- /dev/null
+++ b/testing/web-platform/tests/mathml/crashtests/mozilla/323741-1.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+ f
+
+
+
+
\ No newline at end of file
diff --git a/testing/web-platform/tests/mathml/crashtests/mozilla/323742-1.xml b/testing/web-platform/tests/mathml/crashtests/mozilla/323742-1.xml
new file mode 100644
index 0000000000..2cd225990d
--- /dev/null
+++ b/testing/web-platform/tests/mathml/crashtests/mozilla/323742-1.xml
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/testing/web-platform/tests/mathml/crashtests/mozilla/336074-1.xhtml b/testing/web-platform/tests/mathml/crashtests/mozilla/336074-1.xhtml
new file mode 100644
index 0000000000..3d1f5b4223
--- /dev/null
+++ b/testing/web-platform/tests/mathml/crashtests/mozilla/336074-1.xhtml
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+
+
+
+
+z
+
+
+
diff --git a/testing/web-platform/tests/mathml/crashtests/mozilla/347355-1-inner.xhtml b/testing/web-platform/tests/mathml/crashtests/mozilla/347355-1-inner.xhtml
new file mode 100644
index 0000000000..22689c3c12
--- /dev/null
+++ b/testing/web-platform/tests/mathml/crashtests/mozilla/347355-1-inner.xhtml
@@ -0,0 +1,28 @@
+
+
+
+
+
+
+
+
+
+
+
+
t
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/crashtests/mozilla/347355-1.gif b/testing/web-platform/tests/mathml/crashtests/mozilla/347355-1.gif
new file mode 100644
index 0000000000..475ea8c164
Binary files /dev/null and b/testing/web-platform/tests/mathml/crashtests/mozilla/347355-1.gif differ
diff --git a/testing/web-platform/tests/mathml/crashtests/mozilla/347355-1.html b/testing/web-platform/tests/mathml/crashtests/mozilla/347355-1.html
new file mode 100644
index 0000000000..0d61fb9d4a
--- /dev/null
+++ b/testing/web-platform/tests/mathml/crashtests/mozilla/347355-1.html
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/crashtests/mozilla/347495-1.xhtml b/testing/web-platform/tests/mathml/crashtests/mozilla/347495-1.xhtml
new file mode 100644
index 0000000000..4a65b8f34d
--- /dev/null
+++ b/testing/web-platform/tests/mathml/crashtests/mozilla/347495-1.xhtml
@@ -0,0 +1,10 @@
+
+
+
+
+
∏
1
+
+
+
+
+
\ No newline at end of file
diff --git a/testing/web-platform/tests/mathml/crashtests/mozilla/347507-1.xhtml b/testing/web-platform/tests/mathml/crashtests/mozilla/347507-1.xhtml
new file mode 100644
index 0000000000..274ae48ff2
--- /dev/null
+++ b/testing/web-platform/tests/mathml/crashtests/mozilla/347507-1.xhtml
@@ -0,0 +1,29 @@
+
+
+
+
+
+
+
+
+
+
+
+
y
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/crashtests/mozilla/348492-1.xhtml b/testing/web-platform/tests/mathml/crashtests/mozilla/348492-1.xhtml
new file mode 100644
index 0000000000..f59c9353a4
--- /dev/null
+++ b/testing/web-platform/tests/mathml/crashtests/mozilla/348492-1.xhtml
@@ -0,0 +1,31 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/crashtests/mozilla/348709-1.xhtml b/testing/web-platform/tests/mathml/crashtests/mozilla/348709-1.xhtml
new file mode 100644
index 0000000000..907ede6abb
--- /dev/null
+++ b/testing/web-platform/tests/mathml/crashtests/mozilla/348709-1.xhtml
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+
+
+
x
y
+
+
+
+
+
\ No newline at end of file
diff --git a/testing/web-platform/tests/mathml/crashtests/mozilla/348811-1.xhtml b/testing/web-platform/tests/mathml/crashtests/mozilla/348811-1.xhtml
new file mode 100644
index 0000000000..f6557e5a67
--- /dev/null
+++ b/testing/web-platform/tests/mathml/crashtests/mozilla/348811-1.xhtml
@@ -0,0 +1,26 @@
+
+
+
+
+
+
+
+
+
+
+
+ x
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/testing/web-platform/tests/mathml/crashtests/mozilla/348811-2.xhtml b/testing/web-platform/tests/mathml/crashtests/mozilla/348811-2.xhtml
new file mode 100644
index 0000000000..d6a741765a
--- /dev/null
+++ b/testing/web-platform/tests/mathml/crashtests/mozilla/348811-2.xhtml
@@ -0,0 +1,31 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+ x
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/testing/web-platform/tests/mathml/crashtests/mozilla/353612-1.xhtml b/testing/web-platform/tests/mathml/crashtests/mozilla/353612-1.xhtml
new file mode 100644
index 0000000000..386e66f933
--- /dev/null
+++ b/testing/web-platform/tests/mathml/crashtests/mozilla/353612-1.xhtml
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/crashtests/mozilla/355986-1.xhtml b/testing/web-platform/tests/mathml/crashtests/mozilla/355986-1.xhtml
new file mode 100644
index 0000000000..787e1f6772
--- /dev/null
+++ b/testing/web-platform/tests/mathml/crashtests/mozilla/355986-1.xhtml
@@ -0,0 +1,34 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ x
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/crashtests/mozilla/364685-1.xhtml b/testing/web-platform/tests/mathml/crashtests/mozilla/364685-1.xhtml
new file mode 100644
index 0000000000..ab2b56a2f8
--- /dev/null
+++ b/testing/web-platform/tests/mathml/crashtests/mozilla/364685-1.xhtml
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/crashtests/mozilla/366012-1.xhtml b/testing/web-platform/tests/mathml/crashtests/mozilla/366012-1.xhtml
new file mode 100644
index 0000000000..55f29f3ac3
--- /dev/null
+++ b/testing/web-platform/tests/mathml/crashtests/mozilla/366012-1.xhtml
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+
+
+
This paragraph disappears.
+
y 0
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/crashtests/mozilla/366564-1.xhtml b/testing/web-platform/tests/mathml/crashtests/mozilla/366564-1.xhtml
new file mode 100644
index 0000000000..8bb112a30d
--- /dev/null
+++ b/testing/web-platform/tests/mathml/crashtests/mozilla/366564-1.xhtml
@@ -0,0 +1,44 @@
+
+
+
+
+
+
+
+
+
+
+
+ b
+ 2
+
+
+
+
+ j
+ =
+
+ 55
+
+
+
+
+ ∫
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/crashtests/mozilla/367107-1.html b/testing/web-platform/tests/mathml/crashtests/mozilla/367107-1.html
new file mode 100644
index 0000000000..775ace87e0
--- /dev/null
+++ b/testing/web-platform/tests/mathml/crashtests/mozilla/367107-1.html
@@ -0,0 +1,22 @@
+
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/crashtests/mozilla/368430-1.xhtml b/testing/web-platform/tests/mathml/crashtests/mozilla/368430-1.xhtml
new file mode 100644
index 0000000000..79e10c46ac
--- /dev/null
+++ b/testing/web-platform/tests/mathml/crashtests/mozilla/368430-1.xhtml
@@ -0,0 +1,5 @@
+
+
+Foo Bar
+
+
diff --git a/testing/web-platform/tests/mathml/crashtests/mozilla/370791-1.xhtml b/testing/web-platform/tests/mathml/crashtests/mozilla/370791-1.xhtml
new file mode 100644
index 0000000000..d72eb5f709
--- /dev/null
+++ b/testing/web-platform/tests/mathml/crashtests/mozilla/370791-1.xhtml
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+
+a
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/crashtests/mozilla/370862-1.xhtml b/testing/web-platform/tests/mathml/crashtests/mozilla/370862-1.xhtml
new file mode 100644
index 0000000000..fa2f1a4d67
--- /dev/null
+++ b/testing/web-platform/tests/mathml/crashtests/mozilla/370862-1.xhtml
@@ -0,0 +1,27 @@
+
+
+
+
+
+
+
+
+
+
++1
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/crashtests/mozilla/372483-1.xhtml b/testing/web-platform/tests/mathml/crashtests/mozilla/372483-1.xhtml
new file mode 100644
index 0000000000..41edd7d9b7
--- /dev/null
+++ b/testing/web-platform/tests/mathml/crashtests/mozilla/372483-1.xhtml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/crashtests/mozilla/373472-1.xhtml b/testing/web-platform/tests/mathml/crashtests/mozilla/373472-1.xhtml
new file mode 100644
index 0000000000..6c6a304a73
--- /dev/null
+++ b/testing/web-platform/tests/mathml/crashtests/mozilla/373472-1.xhtml
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+Foo -
+
++ bar
+
+
+
diff --git a/testing/web-platform/tests/mathml/crashtests/mozilla/373472-2.xhtml b/testing/web-platform/tests/mathml/crashtests/mozilla/373472-2.xhtml
new file mode 100644
index 0000000000..1c7e1c7ade
--- /dev/null
+++ b/testing/web-platform/tests/mathml/crashtests/mozilla/373472-2.xhtml
@@ -0,0 +1,9 @@
+
+
+
+
+
+k
+
+
+
diff --git a/testing/web-platform/tests/mathml/crashtests/mozilla/375562-1.xhtml b/testing/web-platform/tests/mathml/crashtests/mozilla/375562-1.xhtml
new file mode 100644
index 0000000000..7b00d1f91a
--- /dev/null
+++ b/testing/web-platform/tests/mathml/crashtests/mozilla/375562-1.xhtml
@@ -0,0 +1,38 @@
+
+
+
+
+
+
+
+
+
+ a
+ +
+ b
+ c
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/crashtests/mozilla/377824-1.xhtml b/testing/web-platform/tests/mathml/crashtests/mozilla/377824-1.xhtml
new file mode 100644
index 0000000000..ddbe7da664
--- /dev/null
+++ b/testing/web-platform/tests/mathml/crashtests/mozilla/377824-1.xhtml
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/crashtests/mozilla/379418-1.xhtml b/testing/web-platform/tests/mathml/crashtests/mozilla/379418-1.xhtml
new file mode 100644
index 0000000000..dc6e9e5711
--- /dev/null
+++ b/testing/web-platform/tests/mathml/crashtests/mozilla/379418-1.xhtml
@@ -0,0 +1,7 @@
+
+
+
+ע
+
+
+
diff --git a/testing/web-platform/tests/mathml/crashtests/mozilla/385226-1.xhtml b/testing/web-platform/tests/mathml/crashtests/mozilla/385226-1.xhtml
new file mode 100644
index 0000000000..b1d261eb38
--- /dev/null
+++ b/testing/web-platform/tests/mathml/crashtests/mozilla/385226-1.xhtml
@@ -0,0 +1,29 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ x
+ y
+
+
+ z
+ w
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/testing/web-platform/tests/mathml/crashtests/mozilla/393760-1.xhtml b/testing/web-platform/tests/mathml/crashtests/mozilla/393760-1.xhtml
new file mode 100644
index 0000000000..cb5c2d7a12
--- /dev/null
+++ b/testing/web-platform/tests/mathml/crashtests/mozilla/393760-1.xhtml
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/crashtests/mozilla/397518-1.xhtml b/testing/web-platform/tests/mathml/crashtests/mozilla/397518-1.xhtml
new file mode 100644
index 0000000000..bc460ead11
--- /dev/null
+++ b/testing/web-platform/tests/mathml/crashtests/mozilla/397518-1.xhtml
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/crashtests/mozilla/398038-1.html b/testing/web-platform/tests/mathml/crashtests/mozilla/398038-1.html
new file mode 100644
index 0000000000..b383141c45
--- /dev/null
+++ b/testing/web-platform/tests/mathml/crashtests/mozilla/398038-1.html
@@ -0,0 +1,8 @@
+
+Crashtest for bug 398038
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/crashtests/mozilla/400475-1.xhtml b/testing/web-platform/tests/mathml/crashtests/mozilla/400475-1.xhtml
new file mode 100644
index 0000000000..13ff2fcb63
--- /dev/null
+++ b/testing/web-platform/tests/mathml/crashtests/mozilla/400475-1.xhtml
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/crashtests/mozilla/402400-1.xhtml b/testing/web-platform/tests/mathml/crashtests/mozilla/402400-1.xhtml
new file mode 100644
index 0000000000..5212d67f16
--- /dev/null
+++ b/testing/web-platform/tests/mathml/crashtests/mozilla/402400-1.xhtml
@@ -0,0 +1,41 @@
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/crashtests/mozilla/403156-1.xhtml b/testing/web-platform/tests/mathml/crashtests/mozilla/403156-1.xhtml
new file mode 100644
index 0000000000..b49bff7d04
--- /dev/null
+++ b/testing/web-platform/tests/mathml/crashtests/mozilla/403156-1.xhtml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+䦚ct䦚
䦚x䦚䦚2
+
+
diff --git a/testing/web-platform/tests/mathml/crashtests/mozilla/404485-1.xhtml b/testing/web-platform/tests/mathml/crashtests/mozilla/404485-1.xhtml
new file mode 100644
index 0000000000..fea18cbd59
--- /dev/null
+++ b/testing/web-platform/tests/mathml/crashtests/mozilla/404485-1.xhtml
@@ -0,0 +1,9 @@
+
+
+
+
+x
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/crashtests/mozilla/405187-1.xhtml b/testing/web-platform/tests/mathml/crashtests/mozilla/405187-1.xhtml
new file mode 100644
index 0000000000..537512e629
--- /dev/null
+++ b/testing/web-platform/tests/mathml/crashtests/mozilla/405187-1.xhtml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/crashtests/mozilla/405271-1.xml b/testing/web-platform/tests/mathml/crashtests/mozilla/405271-1.xml
new file mode 100644
index 0000000000..c94525c638
--- /dev/null
+++ b/testing/web-platform/tests/mathml/crashtests/mozilla/405271-1.xml
@@ -0,0 +1,36 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/crashtests/mozilla/412237-1.xml b/testing/web-platform/tests/mathml/crashtests/mozilla/412237-1.xml
new file mode 100644
index 0000000000..2e8f13b73e
--- /dev/null
+++ b/testing/web-platform/tests/mathml/crashtests/mozilla/412237-1.xml
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+ x y
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/crashtests/mozilla/413063-1.xhtml b/testing/web-platform/tests/mathml/crashtests/mozilla/413063-1.xhtml
new file mode 100644
index 0000000000..b595acd1ce
--- /dev/null
+++ b/testing/web-platform/tests/mathml/crashtests/mozilla/413063-1.xhtml
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/crashtests/mozilla/416907-1.xhtml b/testing/web-platform/tests/mathml/crashtests/mozilla/416907-1.xhtml
new file mode 100644
index 0000000000..94a9abde21
--- /dev/null
+++ b/testing/web-platform/tests/mathml/crashtests/mozilla/416907-1.xhtml
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/crashtests/mozilla/420420-1.xhtml b/testing/web-platform/tests/mathml/crashtests/mozilla/420420-1.xhtml
new file mode 100644
index 0000000000..db17b277a7
--- /dev/null
+++ b/testing/web-platform/tests/mathml/crashtests/mozilla/420420-1.xhtml
@@ -0,0 +1,7 @@
+
+
+
+
+⁡
+
+
diff --git a/testing/web-platform/tests/mathml/crashtests/mozilla/431072-1.xhtml b/testing/web-platform/tests/mathml/crashtests/mozilla/431072-1.xhtml
new file mode 100644
index 0000000000..f25ce28f14
--- /dev/null
+++ b/testing/web-platform/tests/mathml/crashtests/mozilla/431072-1.xhtml
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/crashtests/mozilla/443089-1.xhtml b/testing/web-platform/tests/mathml/crashtests/mozilla/443089-1.xhtml
new file mode 100644
index 0000000000..2630cea131
--- /dev/null
+++ b/testing/web-platform/tests/mathml/crashtests/mozilla/443089-1.xhtml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/crashtests/mozilla/462929-1.html b/testing/web-platform/tests/mathml/crashtests/mozilla/462929-1.html
new file mode 100644
index 0000000000..386d8e138f
--- /dev/null
+++ b/testing/web-platform/tests/mathml/crashtests/mozilla/462929-1.html
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/crashtests/mozilla/463763-1.xhtml b/testing/web-platform/tests/mathml/crashtests/mozilla/463763-1.xhtml
new file mode 100644
index 0000000000..61df8ff0c3
--- /dev/null
+++ b/testing/web-platform/tests/mathml/crashtests/mozilla/463763-1.xhtml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/crashtests/mozilla/463763-2.xhtml b/testing/web-platform/tests/mathml/crashtests/mozilla/463763-2.xhtml
new file mode 100644
index 0000000000..8d41abade0
--- /dev/null
+++ b/testing/web-platform/tests/mathml/crashtests/mozilla/463763-2.xhtml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/crashtests/mozilla/476547-1.xhtml b/testing/web-platform/tests/mathml/crashtests/mozilla/476547-1.xhtml
new file mode 100644
index 0000000000..0cece35eaa
--- /dev/null
+++ b/testing/web-platform/tests/mathml/crashtests/mozilla/476547-1.xhtml
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/crashtests/mozilla/541620-1.xhtml b/testing/web-platform/tests/mathml/crashtests/mozilla/541620-1.xhtml
new file mode 100644
index 0000000000..ccef762e48
--- /dev/null
+++ b/testing/web-platform/tests/mathml/crashtests/mozilla/541620-1.xhtml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/crashtests/mozilla/557474-1.html b/testing/web-platform/tests/mathml/crashtests/mozilla/557474-1.html
new file mode 100644
index 0000000000..1bf8d534ca
--- /dev/null
+++ b/testing/web-platform/tests/mathml/crashtests/mozilla/557474-1.html
@@ -0,0 +1,11 @@
+
+
+
+ Test mpadded
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/crashtests/mozilla/654928-1.html b/testing/web-platform/tests/mathml/crashtests/mozilla/654928-1.html
new file mode 100644
index 0000000000..da52f34b45
--- /dev/null
+++ b/testing/web-platform/tests/mathml/crashtests/mozilla/654928-1.html
@@ -0,0 +1,3 @@
+
+ AB
+
diff --git a/testing/web-platform/tests/mathml/crashtests/mozilla/655451-1.xhtml b/testing/web-platform/tests/mathml/crashtests/mozilla/655451-1.xhtml
new file mode 100644
index 0000000000..0d5fb687b7
--- /dev/null
+++ b/testing/web-platform/tests/mathml/crashtests/mozilla/655451-1.xhtml
@@ -0,0 +1,15 @@
+
+
+
+
+ x
+
diff --git a/testing/web-platform/tests/mathml/crashtests/mozilla/713606-1.html b/testing/web-platform/tests/mathml/crashtests/mozilla/713606-1.html
new file mode 100644
index 0000000000..a0d4939a83
--- /dev/null
+++ b/testing/web-platform/tests/mathml/crashtests/mozilla/713606-1.html
@@ -0,0 +1,24 @@
+
+
+
+ Crashtest bug 713606
+
+
+
+
+ X
+
+ Y
+
+
+
+
+ X
+
+ Y
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/crashtests/mozilla/716349-1.html b/testing/web-platform/tests/mathml/crashtests/mozilla/716349-1.html
new file mode 100644
index 0000000000..9b5895ad64
--- /dev/null
+++ b/testing/web-platform/tests/mathml/crashtests/mozilla/716349-1.html
@@ -0,0 +1,13 @@
+
+
+
+ Crashtest bug 716349
+
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/crashtests/mozilla/767251.xhtml b/testing/web-platform/tests/mathml/crashtests/mozilla/767251.xhtml
new file mode 100644
index 0000000000..aa3632a6ba
--- /dev/null
+++ b/testing/web-platform/tests/mathml/crashtests/mozilla/767251.xhtml
@@ -0,0 +1 @@
+n
diff --git a/testing/web-platform/tests/mathml/crashtests/mozilla/770710-1.html b/testing/web-platform/tests/mathml/crashtests/mozilla/770710-1.html
new file mode 100644
index 0000000000..2171966769
--- /dev/null
+++ b/testing/web-platform/tests/mathml/crashtests/mozilla/770710-1.html
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/crashtests/mozilla/848725-1.html b/testing/web-platform/tests/mathml/crashtests/mozilla/848725-1.html
new file mode 100644
index 0000000000..7ce9c434cc
--- /dev/null
+++ b/testing/web-platform/tests/mathml/crashtests/mozilla/848725-1.html
@@ -0,0 +1,17 @@
+
+
+
+ Bug 848725
+
+
+
+
+
+
+ ↠
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/crashtests/mozilla/848725-2.html b/testing/web-platform/tests/mathml/crashtests/mozilla/848725-2.html
new file mode 100644
index 0000000000..b6362f9bf2
--- /dev/null
+++ b/testing/web-platform/tests/mathml/crashtests/mozilla/848725-2.html
@@ -0,0 +1,17 @@
+
+
+
+ Bug 848725
+
+
+
+
+
+
+ ↡
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/crashtests/mozilla/947557-1.html b/testing/web-platform/tests/mathml/crashtests/mozilla/947557-1.html
new file mode 100644
index 0000000000..3ddfb7b984
--- /dev/null
+++ b/testing/web-platform/tests/mathml/crashtests/mozilla/947557-1.html
@@ -0,0 +1,21 @@
+
+
+
+
+ A
+
+
+ A
+
+ A
+ A
+
+
+ A
+
+ A
+ A
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/crashtests/mozilla/973322-1.xhtml b/testing/web-platform/tests/mathml/crashtests/mozilla/973322-1.xhtml
new file mode 100644
index 0000000000..dfac127fb4
--- /dev/null
+++ b/testing/web-platform/tests/mathml/crashtests/mozilla/973322-1.xhtml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/crashtests/mspace-mpadded-negative-dimensions.html b/testing/web-platform/tests/mathml/crashtests/mspace-mpadded-negative-dimensions.html
new file mode 100644
index 0000000000..97ae5b89b8
--- /dev/null
+++ b/testing/web-platform/tests/mathml/crashtests/mspace-mpadded-negative-dimensions.html
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/crashtests/mtd-as-multicol.html b/testing/web-platform/tests/mathml/crashtests/mtd-as-multicol.html
new file mode 100644
index 0000000000..f00fa48815
--- /dev/null
+++ b/testing/web-platform/tests/mathml/crashtests/mtd-as-multicol.html
@@ -0,0 +1,9 @@
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/crashtests/multicol-inside-ms.html b/testing/web-platform/tests/mathml/crashtests/multicol-inside-ms.html
new file mode 100644
index 0000000000..b7d481e1fb
--- /dev/null
+++ b/testing/web-platform/tests/mathml/crashtests/multicol-inside-ms.html
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/crashtests/multicol-on-token-elements.html b/testing/web-platform/tests/mathml/crashtests/multicol-on-token-elements.html
new file mode 100644
index 0000000000..9fc00eb691
--- /dev/null
+++ b/testing/web-platform/tests/mathml/crashtests/multicol-on-token-elements.html
@@ -0,0 +1,11 @@
+
+mi
+mi
+mn
+mn
+mo
+mo
+ms
+ms
+mtext
+mtext
diff --git a/testing/web-platform/tests/mathml/crashtests/operator-and-first-letter.html b/testing/web-platform/tests/mathml/crashtests/operator-and-first-letter.html
new file mode 100644
index 0000000000..a4d56de72f
--- /dev/null
+++ b/testing/web-platform/tests/mathml/crashtests/operator-and-first-letter.html
@@ -0,0 +1,9 @@
+
+
+
+
+ ∫
+
+
diff --git a/testing/web-platform/tests/mathml/crashtests/scrollbar-caching-assert.html b/testing/web-platform/tests/mathml/crashtests/scrollbar-caching-assert.html
new file mode 100644
index 0000000000..3f972ef70d
--- /dev/null
+++ b/testing/web-platform/tests/mathml/crashtests/scrollbar-caching-assert.html
@@ -0,0 +1,17 @@
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/direction/direction-006-ref.html b/testing/web-platform/tests/mathml/presentation-markup/direction/direction-006-ref.html
new file mode 100644
index 0000000000..39e6dabdfb
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/direction/direction-006-ref.html
@@ -0,0 +1,74 @@
+
+
+
+
+ RTL mtable and mtable with frame
+
+
+
+
+
+
+
+
+
+
+ É
+
+
+ p
+
+
+ X
+
+
+
+
+ pÉ
+
+
+ XÉ
+
+
+ Xp
+
+
+
+
+
+
+
+
+
+
+
+ É
+
+
+ p
+
+
+ X
+
+
+
+
+ pÉ
+
+
+ XÉ
+
+
+ Xp
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/direction/direction-006.html b/testing/web-platform/tests/mathml/presentation-markup/direction/direction-006.html
new file mode 100644
index 0000000000..76cdc41471
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/direction/direction-006.html
@@ -0,0 +1,82 @@
+
+
+
+
+ RTL mtable and mtable with frame
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ X
+
+
+ p
+
+
+ É
+
+
+
+
+ Xp
+
+
+ XÉ
+
+
+ pÉ
+
+
+
+
+
+
+
+
+
+
+
+ X
+
+
+ p
+
+
+ É
+
+
+
+
+ Xp
+
+
+ XÉ
+
+
+ pÉ
+
+
+
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/direction/direction-007-ref.html b/testing/web-platform/tests/mathml/presentation-markup/direction/direction-007-ref.html
new file mode 100644
index 0000000000..5c77395f20
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/direction/direction-007-ref.html
@@ -0,0 +1,42 @@
+
+
+
+
+ mo and embellished mrow/munderover (lspace=1em rspace=2em)
+
+
+
+
+
+
+
+ p X p
+
+
+
+
+
+ p
+ X
+ p
+
+
+
+
+
+ p
+
+ X
+ É
+ É
+
+ p
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/direction/direction-007.html b/testing/web-platform/tests/mathml/presentation-markup/direction/direction-007.html
new file mode 100644
index 0000000000..3419467ae2
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/direction/direction-007.html
@@ -0,0 +1,53 @@
+
+
+
+
+ mo and embellished mrow/munderover (lspace=1em rspace=2em)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ p X p
+
+
+
+
+
+ p
+ X
+ p
+
+
+
+
+
+ p
+
+ X
+ É
+ É
+
+ p
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/direction/direction-008-ref.html b/testing/web-platform/tests/mathml/presentation-markup/direction/direction-008-ref.html
new file mode 100644
index 0000000000..492fa9539a
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/direction/direction-008-ref.html
@@ -0,0 +1,27 @@
+
+
+
+
+ embellished mfrac (lspace=1em rspace=2em)
+
+
+
+
+
+
+
+ p
+
+ X
+ É
+
+ p
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/direction/direction-008.html b/testing/web-platform/tests/mathml/presentation-markup/direction/direction-008.html
new file mode 100644
index 0000000000..0be8137364
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/direction/direction-008.html
@@ -0,0 +1,36 @@
+
+
+
+
+ embellished mfrac (lspace=1em rspace=2em)
+
+
+
+
+
+
+
+
+
+
+
+
+
+ p
+
+ X
+ É
+
+ p
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/direction/direction-010-ref.html b/testing/web-platform/tests/mathml/presentation-markup/direction/direction-010-ref.html
new file mode 100644
index 0000000000..4f595ed49f
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/direction/direction-010-ref.html
@@ -0,0 +1,44 @@
+
+
+
+
+ dir="rtl" VS direction: rtl on math/mrow/mstyle
+
+
+
+
+
+
+
+ X
+ p
+ É
+
+
+
+
+
+
+ X
+ p
+ É
+
+
+
+
+
+
+
+ X
+ p
+ É
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/direction/direction-010.html b/testing/web-platform/tests/mathml/presentation-markup/direction/direction-010.html
new file mode 100644
index 0000000000..6e92dfda2a
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/direction/direction-010.html
@@ -0,0 +1,54 @@
+
+
+
+
+ dir="rtl" VS direction: rtl on math/mrow/mstyle
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ X
+ p
+ É
+
+
+
+
+
+
+ X
+ p
+ É
+
+
+
+
+
+
+
+ X
+ p
+ É
+
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/direction/direction-overall-ref.html b/testing/web-platform/tests/mathml/presentation-markup/direction/direction-overall-ref.html
new file mode 100644
index 0000000000..5ce6c5c42b
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/direction/direction-overall-ref.html
@@ -0,0 +1,40 @@
+
+
+
+
+ Verify dir attribute on various containers
+
+
+
+ math:
+
+
+
+
+
+
+
+
+ mrow:
+
+
+
+
+
+
+
+
+
+
+ mstyle:
+
+
+
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/direction/direction-overall.html b/testing/web-platform/tests/mathml/presentation-markup/direction/direction-overall.html
new file mode 100644
index 0000000000..6effb94c54
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/direction/direction-overall.html
@@ -0,0 +1,53 @@
+
+
+
+
+ Verify dir attribute on various containers
+
+
+
+
+
+
+
+
+
+
+
+
+
+ math:
+
+
+
+
+
+
+
+
+ mrow:
+
+
+
+
+
+
+
+
+
+
+ mstyle:
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/direction/direction-token-ref.html b/testing/web-platform/tests/mathml/presentation-markup/direction/direction-token-ref.html
new file mode 100644
index 0000000000..f1895b578a
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/direction/direction-token-ref.html
@@ -0,0 +1,16 @@
+
+
+
+
+ Verify dir attribute on token elements
+
+
+
+ חוק \left חסר או חוק \right מיותר
+ חוק \left חסר או חוק \right מיותר
+ חוק \left חסר או חוק \right מיותר
+ חוק \left חסר או חוק \right מיותר
+ חוק \left חסר או חוק \right מיותר
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/direction/direction-token.html b/testing/web-platform/tests/mathml/presentation-markup/direction/direction-token.html
new file mode 100644
index 0000000000..58319fbfac
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/direction/direction-token.html
@@ -0,0 +1,28 @@
+
+
+
+
+ Verify dir attribute on token elements
+
+
+
+
+
+
+
+
+
+
+ חוק \left חסר או חוק \right מיותר
+ חוק \left חסר או חוק \right מיותר
+ חוק \left חסר או חוק \right מיותר
+ חוק \left חסר או חוק \right מיותר
+ חוק \left חסר או חוק \right מיותר
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/direction/direction.html b/testing/web-platform/tests/mathml/presentation-markup/direction/direction.html
new file mode 100644
index 0000000000..dfb1671e4c
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/direction/direction.html
@@ -0,0 +1,39 @@
+
+
+
+
+Verify computed direction
+
+
+
+
+
+
+
+
+
+
+ שורשי משוואה מודגשת זו y 3 + p y + q = 0 מודגשים גם הם
+
+ שורשי משוואה מודגשת זו y 3 + p y + q = 0 מודגשים גם הם
+
+ שורשי משוואה מודגשת זו y 3 + p y + q = 0 מודגשים גם הם
+
+ שורשי משוואה מודגשת זו y 3 + p y + q = 0 מודגשים גם הם
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/fractions/frac-1.html b/testing/web-platform/tests/mathml/presentation-markup/fractions/frac-1.html
new file mode 100644
index 0000000000..604e574322
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/fractions/frac-1.html
@@ -0,0 +1,191 @@
+
+
+
+
+Fraction
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/fractions/frac-bar-001-ref.html b/testing/web-platform/tests/mathml/presentation-markup/fractions/frac-bar-001-ref.html
new file mode 100644
index 0000000000..5b7a8dff47
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/fractions/frac-bar-001-ref.html
@@ -0,0 +1,21 @@
+
+
+
+
+ fractions bar
+
+
+
+ This test passes if you see a green square.
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/fractions/frac-bar-001.html b/testing/web-platform/tests/mathml/presentation-markup/fractions/frac-bar-001.html
new file mode 100644
index 0000000000..8284546e4f
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/fractions/frac-bar-001.html
@@ -0,0 +1,56 @@
+
+
+
+
+ fractions bar
+
+
+
+
+
+
+
+
+
+ This test passes if you see a green square.
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/fractions/frac-bar-002-ref.html b/testing/web-platform/tests/mathml/presentation-markup/fractions/frac-bar-002-ref.html
new file mode 100644
index 0000000000..9d5eef896a
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/fractions/frac-bar-002-ref.html
@@ -0,0 +1,23 @@
+
+
+
+
+ fractions bar
+
+
+
+ This test passes if you see a green square and no red.
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/fractions/frac-bar-002.html b/testing/web-platform/tests/mathml/presentation-markup/fractions/frac-bar-002.html
new file mode 100644
index 0000000000..3eb5433e82
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/fractions/frac-bar-002.html
@@ -0,0 +1,83 @@
+
+
+
+
+ fractions bar
+
+
+
+
+
+
+
+
+
+ This test passes if you see a green square and no red.
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/fractions/frac-bar-003-ref.html b/testing/web-platform/tests/mathml/presentation-markup/fractions/frac-bar-003-ref.html
new file mode 100644
index 0000000000..6bb6370d6e
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/fractions/frac-bar-003-ref.html
@@ -0,0 +1,21 @@
+
+
+
+
+ fractions bar (reference)
+
+
+
+ This test passes if you see a green square.
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/fractions/frac-bar-003.html b/testing/web-platform/tests/mathml/presentation-markup/fractions/frac-bar-003.html
new file mode 100644
index 0000000000..69b45ea29c
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/fractions/frac-bar-003.html
@@ -0,0 +1,46 @@
+
+
+
+
+ fractions bar
+
+
+
+
+
+
+
+ This test passes if you see a green square.
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/fractions/frac-color-001-notref.html b/testing/web-platform/tests/mathml/presentation-markup/fractions/frac-color-001-notref.html
new file mode 100644
index 0000000000..498d6277a3
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/fractions/frac-color-001-notref.html
@@ -0,0 +1,16 @@
+
+
+
+
+ Fraction bar color
+
+
+ This test passes if you see a fraction with a blue fraction bar.
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/fractions/frac-color-001.html b/testing/web-platform/tests/mathml/presentation-markup/fractions/frac-color-001.html
new file mode 100644
index 0000000000..442388a6eb
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/fractions/frac-color-001.html
@@ -0,0 +1,20 @@
+
+
+
+
+ Fraction bar color
+
+
+
+
+
+
+ This test passes if you see a fraction with a blue fraction bar.
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/fractions/frac-color-002-ref.html b/testing/web-platform/tests/mathml/presentation-markup/fractions/frac-color-002-ref.html
new file mode 100644
index 0000000000..fe2f4fa7b1
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/fractions/frac-color-002-ref.html
@@ -0,0 +1,14 @@
+
+
+
+
+ fractions color
+
+
+ This test passes if you see a green square and a blue square.
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/fractions/frac-color-002.html b/testing/web-platform/tests/mathml/presentation-markup/fractions/frac-color-002.html
new file mode 100644
index 0000000000..5c87212f59
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/fractions/frac-color-002.html
@@ -0,0 +1,34 @@
+
+
+
+
+ fractions color
+
+
+
+
+
+
+ This test passes if you see a green square and a blue square.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/fractions/frac-created-dynamically-2-ref.html b/testing/web-platform/tests/mathml/presentation-markup/fractions/frac-created-dynamically-2-ref.html
new file mode 100644
index 0000000000..d389906112
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/fractions/frac-created-dynamically-2-ref.html
@@ -0,0 +1,17 @@
+
+
+
+
+ mfrac created dynamically
+
+
+ This test passes if it renders the same as an invalid fraction with 3 children.
+
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/fractions/frac-created-dynamically-2.html b/testing/web-platform/tests/mathml/presentation-markup/fractions/frac-created-dynamically-2.html
new file mode 100644
index 0000000000..8e9fa520ea
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/fractions/frac-created-dynamically-2.html
@@ -0,0 +1,44 @@
+
+
+
+
+mfrac created dynamically
+
+
+
+
+
+
+
+ This test passes if it renders the same as an invalid fraction with 3 children.
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/fractions/frac-created-dynamically-3-ref.html b/testing/web-platform/tests/mathml/presentation-markup/fractions/frac-created-dynamically-3-ref.html
new file mode 100644
index 0000000000..f8db144cfe
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/fractions/frac-created-dynamically-3-ref.html
@@ -0,0 +1,16 @@
+
+
+
+
+ mfrac created dynamically
+
+
+ This test passes if you see a fraction 1/3.
+
+
+ 1
+ 3
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/fractions/frac-created-dynamically-3.html b/testing/web-platform/tests/mathml/presentation-markup/fractions/frac-created-dynamically-3.html
new file mode 100644
index 0000000000..1f7e23bb84
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/fractions/frac-created-dynamically-3.html
@@ -0,0 +1,36 @@
+
+
+
+
+mfrac created dynamically
+
+
+
+
+
+
+
+ This test passes if you see a fraction 1/3.
+
+
+ 1
+ 2
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/fractions/frac-created-dynamically-ref.html b/testing/web-platform/tests/mathml/presentation-markup/fractions/frac-created-dynamically-ref.html
new file mode 100644
index 0000000000..e10405c572
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/fractions/frac-created-dynamically-ref.html
@@ -0,0 +1,16 @@
+
+
+
+
+ mfrac created dynamically
+
+
+ This test passes if you see a fraction.
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/fractions/frac-created-dynamically.html b/testing/web-platform/tests/mathml/presentation-markup/fractions/frac-created-dynamically.html
new file mode 100644
index 0000000000..8f65e8d9cf
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/fractions/frac-created-dynamically.html
@@ -0,0 +1,39 @@
+
+
+
+
+mfrac created dynamically
+
+
+
+
+
+
+
+ This test passes if you see a fraction.
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/fractions/frac-default-padding-ref.html b/testing/web-platform/tests/mathml/presentation-markup/fractions/frac-default-padding-ref.html
new file mode 100644
index 0000000000..93d3e0162b
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/fractions/frac-default-padding-ref.html
@@ -0,0 +1,19 @@
+
+
+
+
+ fraction default padding
+
+
+ This test passes if you see three green squares of same size, separated by a gap of one pixel.
+
+
+
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/fractions/frac-default-padding.html b/testing/web-platform/tests/mathml/presentation-markup/fractions/frac-default-padding.html
new file mode 100644
index 0000000000..30f155661a
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/fractions/frac-default-padding.html
@@ -0,0 +1,37 @@
+
+
+
+
+ fraction default padding
+
+
+
+
+
+
+ This test passes if you see three green squares of same size, separated by a gap of one pixel.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/fractions/frac-invalid-2-ref.html b/testing/web-platform/tests/mathml/presentation-markup/fractions/frac-invalid-2-ref.html
new file mode 100644
index 0000000000..d57c20901b
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/fractions/frac-invalid-2-ref.html
@@ -0,0 +1,15 @@
+
+
+
+
+mfrac with one child
+
+
+ This test passes if you see a single rectangle.
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/fractions/frac-invalid-2.html b/testing/web-platform/tests/mathml/presentation-markup/fractions/frac-invalid-2.html
new file mode 100644
index 0000000000..729fe813d0
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/fractions/frac-invalid-2.html
@@ -0,0 +1,18 @@
+
+
+
+
+mfrac with one child
+
+
+
+
+
+ This test passes if you see a single rectangle.
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/fractions/frac-invalid-3-ref.html b/testing/web-platform/tests/mathml/presentation-markup/fractions/frac-invalid-3-ref.html
new file mode 100644
index 0000000000..703e4aeca0
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/fractions/frac-invalid-3-ref.html
@@ -0,0 +1,17 @@
+
+
+
+
+mfrac with three children
+
+
+ This test passes if you see a single rectangle.
+
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/fractions/frac-invalid-3.html b/testing/web-platform/tests/mathml/presentation-markup/fractions/frac-invalid-3.html
new file mode 100644
index 0000000000..d56b55ef80
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/fractions/frac-invalid-3.html
@@ -0,0 +1,20 @@
+
+
+
+
+mfrac with three children
+
+
+
+
+
+ This test passes if you see a single rectangle.
+
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/fractions/frac-invalid-ref.html b/testing/web-platform/tests/mathml/presentation-markup/fractions/frac-invalid-ref.html
new file mode 100644
index 0000000000..beb3024732
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/fractions/frac-invalid-ref.html
@@ -0,0 +1,14 @@
+
+
+
+
+mfrac with zero children
+
+
+ This test passes if mfrac renders nothing.
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/fractions/frac-invalid.html b/testing/web-platform/tests/mathml/presentation-markup/fractions/frac-invalid.html
new file mode 100644
index 0000000000..78e11e7e2b
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/fractions/frac-invalid.html
@@ -0,0 +1,17 @@
+
+
+
+
+mfrac with zero children
+
+
+
+
+
+ This test passes if mfrac renders nothing.
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/fractions/frac-legacy-bevelled-attribute.tentative-ref.html b/testing/web-platform/tests/mathml/presentation-markup/fractions/frac-legacy-bevelled-attribute.tentative-ref.html
new file mode 100644
index 0000000000..f0b355c7bd
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/fractions/frac-legacy-bevelled-attribute.tentative-ref.html
@@ -0,0 +1,18 @@
+
+
+
+
+ fractions bevelled (reference)
+
+
+ Test passes is you see a blue rectangle above a green rectangle, separated by a horizontal bar.
+
+
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/fractions/frac-legacy-bevelled-attribute.tentative.html b/testing/web-platform/tests/mathml/presentation-markup/fractions/frac-legacy-bevelled-attribute.tentative.html
new file mode 100644
index 0000000000..a98fc0f979
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/fractions/frac-legacy-bevelled-attribute.tentative.html
@@ -0,0 +1,28 @@
+
+
+
+
+ fractions bevelled
+
+
+
+
+
+
+
+ Test passes is you see a blue rectangle above a green rectangle, separated by a horizontal bar.
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/fractions/frac-linethickness-001-ref.html b/testing/web-platform/tests/mathml/presentation-markup/fractions/frac-linethickness-001-ref.html
new file mode 100644
index 0000000000..d4be8ea03b
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/fractions/frac-linethickness-001-ref.html
@@ -0,0 +1,42 @@
+
+
+
+
+ fractions linethickness
+
+
+
+ This test passes if you see the same fraction four times.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/fractions/frac-linethickness-001.html b/testing/web-platform/tests/mathml/presentation-markup/fractions/frac-linethickness-001.html
new file mode 100644
index 0000000000..918d4aba6e
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/fractions/frac-linethickness-001.html
@@ -0,0 +1,47 @@
+
+
+
+
+ fractions linethickness
+
+
+
+
+
+
+ This test passes if you see the same fraction four times.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/fractions/frac-linethickness-002.html b/testing/web-platform/tests/mathml/presentation-markup/fractions/frac-linethickness-002.html
new file mode 100644
index 0000000000..bb47f18687
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/fractions/frac-linethickness-002.html
@@ -0,0 +1,131 @@
+
+
+
+
+ fractions linethickness
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/fractions/frac-linethickness-003-notref.html b/testing/web-platform/tests/mathml/presentation-markup/fractions/frac-linethickness-003-notref.html
new file mode 100644
index 0000000000..934d666333
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/fractions/frac-linethickness-003-notref.html
@@ -0,0 +1,16 @@
+
+
+
+
+ fractions linethickness
+
+
+ This test passes if you see a fraction without fraction bar.
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/fractions/frac-linethickness-003.html b/testing/web-platform/tests/mathml/presentation-markup/fractions/frac-linethickness-003.html
new file mode 100644
index 0000000000..d930f058c5
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/fractions/frac-linethickness-003.html
@@ -0,0 +1,19 @@
+
+
+
+
+ fractions linethickness
+
+
+
+
+
+ This test passes if you see a fraction without fraction bar.
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/fractions/frac-linethickness-004-ref.html b/testing/web-platform/tests/mathml/presentation-markup/fractions/frac-linethickness-004-ref.html
new file mode 100644
index 0000000000..8014f0a895
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/fractions/frac-linethickness-004-ref.html
@@ -0,0 +1,27 @@
+
+
+
+
+ fractions linethickness
+
+
+
+ This test passes if you see no fraction bar.
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/fractions/frac-linethickness-004.html b/testing/web-platform/tests/mathml/presentation-markup/fractions/frac-linethickness-004.html
new file mode 100644
index 0000000000..bfb708c092
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/fractions/frac-linethickness-004.html
@@ -0,0 +1,32 @@
+
+
+
+
+ fractions linethickness
+
+
+
+
+
+
+ This test passes if you see no fraction bar.
+
+
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/fractions/frac-mrow-001-ref.html b/testing/web-platform/tests/mathml/presentation-markup/fractions/frac-mrow-001-ref.html
new file mode 100644
index 0000000000..e42cb96fe8
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/fractions/frac-mrow-001-ref.html
@@ -0,0 +1,16 @@
+
+
+
+
+ Fraction mrow
+
+
+ This test passes if you see a fraction with a blue square as numerator and a cyan square as denominator.
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/fractions/frac-mrow-001.html b/testing/web-platform/tests/mathml/presentation-markup/fractions/frac-mrow-001.html
new file mode 100644
index 0000000000..82e817e4de
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/fractions/frac-mrow-001.html
@@ -0,0 +1,28 @@
+
+
+
+
+ Fraction mrow
+
+
+
+
+
+
+ This test passes if you see a fraction with a blue square as numerator and a cyan square as denominator.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/fractions/frac-numalign-denomalign-001-ref.html b/testing/web-platform/tests/mathml/presentation-markup/fractions/frac-numalign-denomalign-001-ref.html
new file mode 100644
index 0000000000..09b83e9efb
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/fractions/frac-numalign-denomalign-001-ref.html
@@ -0,0 +1,75 @@
+
+
+
+
+ Fraction numalign denomalign
+
+
+ This test passes if you see 6 fractions with numerators and
+ denominators horizontally centered.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/fractions/frac-numalign-denomalign-001.html b/testing/web-platform/tests/mathml/presentation-markup/fractions/frac-numalign-denomalign-001.html
new file mode 100644
index 0000000000..653962f33d
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/fractions/frac-numalign-denomalign-001.html
@@ -0,0 +1,56 @@
+
+
+
+
+ Fraction numalign denomalign
+
+
+
+
+
+ This test passes if you see 6 fractions with numerators and
+ denominators horizontally centered.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/fractions/frac-parameters-1.html b/testing/web-platform/tests/mathml/presentation-markup/fractions/frac-parameters-1.html
new file mode 100644
index 0000000000..3c5e35159e
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/fractions/frac-parameters-1.html
@@ -0,0 +1,440 @@
+
+
+
+
+Fraction parameters
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/fractions/frac-parameters-2.html b/testing/web-platform/tests/mathml/presentation-markup/fractions/frac-parameters-2.html
new file mode 100644
index 0000000000..d09ad8272c
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/fractions/frac-parameters-2.html
@@ -0,0 +1,290 @@
+
+
+
+
+Stack parameters
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/fractions/frac-parameters-3.html b/testing/web-platform/tests/mathml/presentation-markup/fractions/frac-parameters-3.html
new file mode 100644
index 0000000000..ddcb9d5a69
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/fractions/frac-parameters-3.html
@@ -0,0 +1,168 @@
+
+
+
+
+Fraction/Stack parameters (fallback)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/fractions/frac-parameters-gap-001-ref.html b/testing/web-platform/tests/mathml/presentation-markup/fractions/frac-parameters-gap-001-ref.html
new file mode 100644
index 0000000000..06fe8d8d35
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/fractions/frac-parameters-gap-001-ref.html
@@ -0,0 +1,63 @@
+
+
+
+
+Fraction parameters
+
+
+
+
+
+
+ This test passes if the blue squares are aligned:
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/fractions/frac-parameters-gap-001.html b/testing/web-platform/tests/mathml/presentation-markup/fractions/frac-parameters-gap-001.html
new file mode 100644
index 0000000000..ee31231145
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/fractions/frac-parameters-gap-001.html
@@ -0,0 +1,90 @@
+
+
+
+
+Fraction parameters (display gap between bar and denominator)
+
+
+
+
+
+
+
+
+
+ This test passes if the blue squares are aligned:
+
+
+
+
+
+
+
+
+
+
+
+
+ A
+
+
+
+ B
+
+
+
+ C
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/fractions/frac-parameters-gap-002-ref.html b/testing/web-platform/tests/mathml/presentation-markup/fractions/frac-parameters-gap-002-ref.html
new file mode 100644
index 0000000000..30958a6a5f
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/fractions/frac-parameters-gap-002-ref.html
@@ -0,0 +1,63 @@
+
+
+
+
+Fraction parameters
+
+
+
+
+
+
+ This test passes if the blue squares are aligned:
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/fractions/frac-parameters-gap-002.html b/testing/web-platform/tests/mathml/presentation-markup/fractions/frac-parameters-gap-002.html
new file mode 100644
index 0000000000..bf77b2d910
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/fractions/frac-parameters-gap-002.html
@@ -0,0 +1,90 @@
+
+
+
+
+Fraction parameters (inline gap between bar and denominator)
+
+
+
+
+
+
+
+
+
+ This test passes if the blue squares are aligned:
+
+
+
+
+
+
+
+
+
+
+
+
+ A
+
+
+
+ B
+
+
+
+ C
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/fractions/frac-parameters-gap-003-ref.html b/testing/web-platform/tests/mathml/presentation-markup/fractions/frac-parameters-gap-003-ref.html
new file mode 100644
index 0000000000..70e2ec5a88
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/fractions/frac-parameters-gap-003-ref.html
@@ -0,0 +1,63 @@
+
+
+
+
+Fraction parameters
+
+
+
+
+
+
+ This test passes if the blue squares are aligned:
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/fractions/frac-parameters-gap-003.html b/testing/web-platform/tests/mathml/presentation-markup/fractions/frac-parameters-gap-003.html
new file mode 100644
index 0000000000..c35c11ffdc
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/fractions/frac-parameters-gap-003.html
@@ -0,0 +1,90 @@
+
+
+
+
+Fraction parameters (display gap between bar and numerator)
+
+
+
+
+
+
+
+
+
+ This test passes if the blue squares are aligned:
+
+
+
+
+
+
+
+
+
+
+
+ A
+
+
+
+ B
+
+
+
+ C
+
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/fractions/frac-parameters-gap-004-ref.html b/testing/web-platform/tests/mathml/presentation-markup/fractions/frac-parameters-gap-004-ref.html
new file mode 100644
index 0000000000..675d33fbcc
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/fractions/frac-parameters-gap-004-ref.html
@@ -0,0 +1,63 @@
+
+
+
+
+Fraction parameters
+
+
+
+
+
+
+ This test passes if the blue squares are aligned:
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/fractions/frac-parameters-gap-004.html b/testing/web-platform/tests/mathml/presentation-markup/fractions/frac-parameters-gap-004.html
new file mode 100644
index 0000000000..6d567d02d9
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/fractions/frac-parameters-gap-004.html
@@ -0,0 +1,90 @@
+
+
+
+
+Fraction parameters (inline gap between bar and numerator)
+
+
+
+
+
+
+
+
+
+ This test passes if the blue squares are aligned:
+
+
+
+
+
+
+
+
+
+
+
+ A
+
+
+
+ B
+
+
+
+ C
+
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/fractions/frac-parameters-gap-005-ref.html b/testing/web-platform/tests/mathml/presentation-markup/fractions/frac-parameters-gap-005-ref.html
new file mode 100644
index 0000000000..c794a50047
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/fractions/frac-parameters-gap-005-ref.html
@@ -0,0 +1,63 @@
+
+
+
+
+Fraction parameters
+
+
+
+
+
+
+ This test passes if the blue squares are aligned:
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/fractions/frac-parameters-gap-005.html b/testing/web-platform/tests/mathml/presentation-markup/fractions/frac-parameters-gap-005.html
new file mode 100644
index 0000000000..a0aa13e679
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/fractions/frac-parameters-gap-005.html
@@ -0,0 +1,90 @@
+
+
+
+
+Stack parameters (display gap between numerator and denominator)
+
+
+
+
+
+
+
+
+
+ This test passes if the blue squares are aligned:
+
+
+
+
+
+
+
+
+
+
+
+
+ A
+
+
+
+ B
+
+
+
+ C
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/fractions/frac-parameters-gap-006-ref.html b/testing/web-platform/tests/mathml/presentation-markup/fractions/frac-parameters-gap-006-ref.html
new file mode 100644
index 0000000000..02faaad19f
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/fractions/frac-parameters-gap-006-ref.html
@@ -0,0 +1,63 @@
+
+
+
+
+Fraction parameters
+
+
+
+
+
+
+ This test passes if the blue squares are aligned:
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/fractions/frac-parameters-gap-006.html b/testing/web-platform/tests/mathml/presentation-markup/fractions/frac-parameters-gap-006.html
new file mode 100644
index 0000000000..1260126e55
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/fractions/frac-parameters-gap-006.html
@@ -0,0 +1,90 @@
+
+
+
+
+Stack parameters (display gap between numerator and denominator)
+
+
+
+
+
+
+
+
+
+ This test passes if the blue squares are aligned:
+
+
+
+
+
+
+
+
+
+
+
+
+ A
+
+
+
+ B
+
+
+
+ C
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/fractions/frac-rendering-from-in-flow-ref.html b/testing/web-platform/tests/mathml/presentation-markup/fractions/frac-rendering-from-in-flow-ref.html
new file mode 100644
index 0000000000..71f1583fd9
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/fractions/frac-rendering-from-in-flow-ref.html
@@ -0,0 +1,15 @@
+
+
+
+
+ fraction rendering from in-flow children
+
+
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/fractions/frac-rendering-from-in-flow.html b/testing/web-platform/tests/mathml/presentation-markup/fractions/frac-rendering-from-in-flow.html
new file mode 100644
index 0000000000..b57564b574
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/fractions/frac-rendering-from-in-flow.html
@@ -0,0 +1,40 @@
+
+
+
+
+ fraction rendering from in-flow children
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/fractions/frac-visibility-001-ref.html b/testing/web-platform/tests/mathml/presentation-markup/fractions/frac-visibility-001-ref.html
new file mode 100644
index 0000000000..41a262d511
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/fractions/frac-visibility-001-ref.html
@@ -0,0 +1,12 @@
+
+
+
+
+ Fraction bar visibility
+
+
+ This test passes if you see a green square and no red.
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/fractions/frac-visibility-001.html b/testing/web-platform/tests/mathml/presentation-markup/fractions/frac-visibility-001.html
new file mode 100644
index 0000000000..29212c0594
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/fractions/frac-visibility-001.html
@@ -0,0 +1,24 @@
+
+
+
+
+ Fraction bar visibility
+
+
+
+
+
+
+ This test passes if you see a green square and no red.
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/menclose/legacy-menclose-radical-notation-ref.html b/testing/web-platform/tests/mathml/presentation-markup/menclose/legacy-menclose-radical-notation-ref.html
new file mode 100644
index 0000000000..c67ac03f5d
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/menclose/legacy-menclose-radical-notation-ref.html
@@ -0,0 +1,23 @@
+
+
+
+
+ Legacy menclose radical notation (reference)
+
+
+
+
+
+
+ 123
+
+
+ 123
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/menclose/legacy-menclose-radical-notation.html b/testing/web-platform/tests/mathml/presentation-markup/menclose/legacy-menclose-radical-notation.html
new file mode 100644
index 0000000000..353202fd7b
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/menclose/legacy-menclose-radical-notation.html
@@ -0,0 +1,30 @@
+
+
+
+
+ Legacy menclose radical notation
+
+
+
+
+
+
+
+
+
+
+ 123
+
+
+ 123
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/mpadded/legacy-orthogonal-pseudo-units.html b/testing/web-platform/tests/mathml/presentation-markup/mpadded/legacy-orthogonal-pseudo-units.html
new file mode 100644
index 0000000000..6eebac1df9
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/mpadded/legacy-orthogonal-pseudo-units.html
@@ -0,0 +1,101 @@
+
+
+
+
+Legacy mpadded pseudo-units relying on orthogonal metrics
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/mpadded/mpadded-001.html b/testing/web-platform/tests/mathml/presentation-markup/mpadded/mpadded-001.html
new file mode 100644
index 0000000000..e61dc5af72
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/mpadded/mpadded-001.html
@@ -0,0 +1,147 @@
+
+
+
+
+mpadded
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/mpadded/mpadded-002.html b/testing/web-platform/tests/mathml/presentation-markup/mpadded/mpadded-002.html
new file mode 100644
index 0000000000..93f2d594c7
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/mpadded/mpadded-002.html
@@ -0,0 +1,164 @@
+
+
+
+
+mpadded
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/mpadded/mpadded-003.html b/testing/web-platform/tests/mathml/presentation-markup/mpadded/mpadded-003.html
new file mode 100644
index 0000000000..e0c24307f4
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/mpadded/mpadded-003.html
@@ -0,0 +1,230 @@
+
+
+
+
+mpadded
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/mpadded/mpadded-percentage-001-ref.html b/testing/web-platform/tests/mathml/presentation-markup/mpadded/mpadded-percentage-001-ref.html
new file mode 100644
index 0000000000..79d7df39d0
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/mpadded/mpadded-percentage-001-ref.html
@@ -0,0 +1,18 @@
+
+
+
+
+ mpadded percentages (reference)
+
+
+
+ This test passes if there is a green square with no red.
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/mpadded/mpadded-percentage-001.html b/testing/web-platform/tests/mathml/presentation-markup/mpadded/mpadded-percentage-001.html
new file mode 100644
index 0000000000..ef2391c42b
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/mpadded/mpadded-percentage-001.html
@@ -0,0 +1,33 @@
+
+
+
+
+ mpadded percentages
+
+
+
+
+
+
+ This test passes if there is a green square with no red.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/mpadded/mpadded-percentage-002.html b/testing/web-platform/tests/mathml/presentation-markup/mpadded/mpadded-percentage-002.html
new file mode 100644
index 0000000000..36d1b4f389
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/mpadded/mpadded-percentage-002.html
@@ -0,0 +1,81 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/mrow/dynamic-mrow-like-001-ref.html b/testing/web-platform/tests/mathml/presentation-markup/mrow/dynamic-mrow-like-001-ref.html
new file mode 100644
index 0000000000..2f823ba955
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/mrow/dynamic-mrow-like-001-ref.html
@@ -0,0 +1,41 @@
+
+
+
+
+Dynamic mrow-like elements (reference)
+
+
+
+
+
+ X p É
+ X p
+ X p É
+ X p
+ X p É
+ X p
+ X p É
+ X p
+ X p É
+ X p
+ X p É
+ X p
+ X p É
+ X p
+ X p É
+ X p
+ X p É
+ X p
+ X p É
+ X p
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/mrow/dynamic-mrow-like-001.html b/testing/web-platform/tests/mathml/presentation-markup/mrow/dynamic-mrow-like-001.html
new file mode 100644
index 0000000000..79de59feec
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/mrow/dynamic-mrow-like-001.html
@@ -0,0 +1,72 @@
+
+
+
+
+Dynamic mrow-like elements
+
+
+
+
+
+
+
+
+
+
+
+ X p É
+
+ X p É
+
+ X p É
+
+ X p É
+
+ X p É
+
+ X p É
+
+ X p É
+
+ X p É
+
+ X p É
+
+ X p É
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/mrow/inferred-mrow-baseline.html b/testing/web-platform/tests/mathml/presentation-markup/mrow/inferred-mrow-baseline.html
new file mode 100644
index 0000000000..0086646859
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/mrow/inferred-mrow-baseline.html
@@ -0,0 +1,57 @@
+
+
+
+
+Baseline of inferred mrows
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/mrow/inferred-mrow-stretchy.html b/testing/web-platform/tests/mathml/presentation-markup/mrow/inferred-mrow-stretchy.html
new file mode 100644
index 0000000000..614438deb3
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/mrow/inferred-mrow-stretchy.html
@@ -0,0 +1,64 @@
+
+
+
+
+Stretchy in inferred mrows
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ↨
+ ↨
+ ↨
+ ↨
+ ↨
+ ↨
+
+ ↨
+ ↨
+ ↨
+ ↨
+ ↨
+ ↨
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/mrow/legacy-mfenced-element-001-ref.html b/testing/web-platform/tests/mathml/presentation-markup/mrow/legacy-mfenced-element-001-ref.html
new file mode 100644
index 0000000000..00c781b6e4
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/mrow/legacy-mfenced-element-001-ref.html
@@ -0,0 +1,24 @@
+
+
+
+
+ mfenced element
+
+
+ Test passes if you see 6 green squares and no red.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/mrow/legacy-mfenced-element-001.html b/testing/web-platform/tests/mathml/presentation-markup/mrow/legacy-mfenced-element-001.html
new file mode 100644
index 0000000000..d39ff45f62
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/mrow/legacy-mfenced-element-001.html
@@ -0,0 +1,34 @@
+
+
+
+
+ mfenced element
+
+
+
+
+
+
+
+
+ Test passes if you see 6 green squares and no red.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/mrow/legacy-mrow-like-elements-001.html b/testing/web-platform/tests/mathml/presentation-markup/mrow/legacy-mrow-like-elements-001.html
new file mode 100644
index 0000000000..277529d829
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/mrow/legacy-mrow-like-elements-001.html
@@ -0,0 +1,188 @@
+
+
+
+
+Legacy maction and semantics elements
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ANNOTATION
+ ANNOTATION-XML
+
+
+
+
+
+ ANNOTATION
+ ANNOTATION-XML
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ MESSAGE
+
+
+
+
+
+ MESSAGE
+
+
+
+
+
+
+
+ MESSAGE
+
+
+
+
+
+ MESSAGE
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/mrow/legacy-mrow-like-elements-002-ref.html b/testing/web-platform/tests/mathml/presentation-markup/mrow/legacy-mrow-like-elements-002-ref.html
new file mode 100644
index 0000000000..4fd4b225f3
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/mrow/legacy-mrow-like-elements-002-ref.html
@@ -0,0 +1,44 @@
+
+
+
+
+Legacy maction and semantics elements (reference)
+
+
+ This test passes if you see 4 green squares and no red.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/mrow/legacy-mrow-like-elements-002.html b/testing/web-platform/tests/mathml/presentation-markup/mrow/legacy-mrow-like-elements-002.html
new file mode 100644
index 0000000000..99a5721bce
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/mrow/legacy-mrow-like-elements-002.html
@@ -0,0 +1,57 @@
+
+
+
+
+Legacy maction and semantics elements
+
+
+
+
+
+
+
+
+ This test passes if you see 4 green squares and no red.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/mrow/legacy-mstyle-attributes.html b/testing/web-platform/tests/mathml/presentation-markup/mrow/legacy-mstyle-attributes.html
new file mode 100644
index 0000000000..2463c40476
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/mrow/legacy-mstyle-attributes.html
@@ -0,0 +1,164 @@
+
+
+
+
+Legacy mstyle attributes
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1
+ 2
+
+
+
+
+
+
+ 1
+ 2
+
+
+
+
+
+
+
+ 1
+ A
+ 2
+
+
+
+ ∑
+ 3
+
+
+
+
+ 4
+ ⇀
+
+
+
+
+ |
+
+
+
+
+
+ |
+ 4
+
+
+
+
+
+ 1
+ A
+ 2
+
+
+
+ ∑
+ 3
+
+
+
+
+ 4
+ ⇀
+
+
+
+
+ |
+
+
+
+
+
+ |
+ 4
+
+
+
+
+
+
+
+
+ 1
+
+
+
+
+ 1
+
+
+
+
+
+
+ 1
+
+
+
+
+ 1
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/mrow/merror-001.html b/testing/web-platform/tests/mathml/presentation-markup/mrow/merror-001.html
new file mode 100644
index 0000000000..a9a021c2e9
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/mrow/merror-001.html
@@ -0,0 +1,43 @@
+
+
+
+
+Test the merror element
+
+
+
+
+
+
+
+
+
+
+
+
+ AN ERROR
+ AN ERROR
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/mrow/mrow-fallback.html b/testing/web-platform/tests/mathml/presentation-markup/mrow/mrow-fallback.html
new file mode 100644
index 0000000000..3f9d466148
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/mrow/mrow-fallback.html
@@ -0,0 +1,125 @@
+
+
+
+
+Test mrow fallback for some MathML elements
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/mrow/mrow-painting-order-ref.html b/testing/web-platform/tests/mathml/presentation-markup/mrow/mrow-painting-order-ref.html
new file mode 100644
index 0000000000..72694959a8
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/mrow/mrow-painting-order-ref.html
@@ -0,0 +1,83 @@
+
+
+
+
+ mrow painting order (reference)
+
+
+
+
+ This test passes if there is no red and content is stacked such that
+
+ foreground (dark colors) is above background (light colors)
+ yellow foreground is above green foreground which is itself above blue foreground
+ yellow background is above green background which is itself above blue background
+
+
+
+
+
+ XXÉ
+
+
+
+
+
+
+
+ XXÉX
+ p XXÉ
+
+
+
+
+
+
+
+ XXÉX
+ p XXÉX
+ p X
+
+
+
+
+
+
+
+ XXÉ
+
+
+
+
+
+
+
+ XXÉX
+ p XXÉ
+
+
+
+
+
+
+
+ XXÉX
+ p XXÉX
+ p X
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/mrow/mrow-painting-order.html b/testing/web-platform/tests/mathml/presentation-markup/mrow/mrow-painting-order.html
new file mode 100644
index 0000000000..516359a545
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/mrow/mrow-painting-order.html
@@ -0,0 +1,42 @@
+
+
+
+
+ mrow painting order
+
+
+
+
+
+
+
+
+
+ This test passes if there is no red and content is stacked such that
+
+ foreground (dark colors) is above background (light colors)
+ yellow foreground is above green foreground which is itself above blue foreground
+ yellow background is above green background which is itself above blue background
+
+
+
+
+ XXÉ
+ X
+ p XXÉ
+ X
+ p X
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/mrow/mrow-preferred-width.html b/testing/web-platform/tests/mathml/presentation-markup/mrow/mrow-preferred-width.html
new file mode 100644
index 0000000000..8f0e3216c1
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/mrow/mrow-preferred-width.html
@@ -0,0 +1,121 @@
+
+
+
+
+Preferred width of mrow-like elements
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/mrow/no-spacing.html b/testing/web-platform/tests/mathml/presentation-markup/mrow/no-spacing.html
new file mode 100644
index 0000000000..a2e7eb7d8d
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/mrow/no-spacing.html
@@ -0,0 +1,139 @@
+
+
+
+
+No spacing in elements
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ X
+ X
+
+
+
+
+
+
+ X
+ X
+
+
+
+
+
+
+ X
+ X
+
+
+
+
+
+
+ X
+ X
+ X
+
+
+
+
+
+
+ X
+ X
+ X
+
+ X
+ X
+
+
+
+
+
+
+ X
+ X
+
+
+
+
+
+
+ X
+ X
+
+
+
+
+
+
+ X
+ X
+ X
+
+
+
+
+
+
+ X
+ X
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/mrow/spacing.html b/testing/web-platform/tests/mathml/presentation-markup/mrow/spacing.html
new file mode 100644
index 0000000000..c066f72cde
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/mrow/spacing.html
@@ -0,0 +1,54 @@
+
+
+
+
+Spacing in mrows
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1 | 2
+ 1 | 2
+ 1 | 2
+ 1 2
+ 1 | 2
+ 1 | 2
+
+ 1 | 2
+ 1 | 2
+ 1 | 2
+ 1 | 2
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/mrow/stretch-along-block-axis-001.html b/testing/web-platform/tests/mathml/presentation-markup/mrow/stretch-along-block-axis-001.html
new file mode 100644
index 0000000000..31385f5388
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/mrow/stretch-along-block-axis-001.html
@@ -0,0 +1,176 @@
+
+
+
+
+Stretching operators along the block axis
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ⥚
+ ⥜
+ ⥚
+ ⥜
+
+
+
+
+
+
+
+ ⥜
+ ⥜
+ ⥜
+
+
+
+
+
+
+
+ ⥜
+
+ ⥜
+
+
+
+
+
+
+
+
+ ⥜
+
+ ⥜
+
+
+
+ ⥜
+
+
+
+ ⥜
+
+
+
+
+
+
+
+
+ ⥜
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/operators/embellished-operator-001-crash.html b/testing/web-platform/tests/mathml/presentation-markup/operators/embellished-operator-001-crash.html
new file mode 100644
index 0000000000..15e9a0367c
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/operators/embellished-operator-001-crash.html
@@ -0,0 +1,10 @@
+
+
+
+ A
+
+
+
+ A
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/operators/embellished-operator-001.html b/testing/web-platform/tests/mathml/presentation-markup/operators/embellished-operator-001.html
new file mode 100644
index 0000000000..b8e2cefc1c
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/operators/embellished-operator-001.html
@@ -0,0 +1,521 @@
+
+
+
+
+Embellished operators
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ X
+
+ X
+ X
+
+ X
+
+
+
+
+ X
+
+ X
+ X
+
+ X
+
+
+
+
+ 0 1 2
+ X
+ 0 1 2
+
+ 0 1 2
+ X
+ 0 1 2
+ X
+ 0 1 2
+
+ 0 1 2
+ X
+ 0 1 2
+
+
+
+
+ 0 1 2
+ X
+ 0 1 2
+
+ 0 1 2
+ X
+ 0 1 2
+ X
+ 0 1 2
+
+ 0 1 2
+ X
+ 0 1 2
+
+
+
+
+
+ X
+
+ X
+
+ X
+
+
+
+
+ X
+
+ X
+ X
+
+ X
+
+
+
+
+ 0 1 2
+ X
+ 0 1 2
+
+ 0 1 2
+ X
+ 0 1 2
+
+ 0 1 2
+ X
+ 0 1 2
+
+
+
+
+ 0 1 2
+ X
+ 0 1 2
+
+ 0 1 2
+ X
+ 0 1 2
+ X
+ 0 1 2
+
+ 0 1 2
+ X
+ 0 1 2
+
+
+
+
+
+ X
+
+ X
+
+ X
+
+
+
+
+ X
+
+ X
+ X
+
+ X
+
+
+
+
+ 0 1 2
+ X
+ 0 1 2
+
+ 0 1 2
+ X
+ 0 1 2
+
+ 0 1 2
+ X
+ 0 1 2
+
+
+
+
+ 0 1 2
+ X
+ 0 1 2
+
+ 0 1 2
+ X
+ 0 1 2
+ X
+ 0 1 2
+
+ 0 1 2
+ X
+ 0 1 2
+
+
+
+
+
+ X
+
+ X
+
+ X
+
+
+
+
+ X
+
+ X
+ X
+
+ X
+
+
+
+
+ 0 1 2
+ X
+ 0 1 2
+
+ 0 1 2
+ X
+ 0 1 2
+
+ 0 1 2
+ X
+ 0 1 2
+
+
+
+
+ 0 1 2
+ X
+ 0 1 2
+
+ 0 1 2
+ X
+ 0 1 2
+ X
+ 0 1 2
+
+ 0 1 2
+ X
+ 0 1 2
+
+
+
+
+
+ X
+
+ X
+
+ X
+
+
+
+
+ X
+
+ X
+ X
+
+ X
+
+
+
+
+ 0 1 2
+ X
+ 0 1 2
+
+ 0 1 2
+ X
+ 0 1 2
+
+ 0 1 2
+ X
+ 0 1 2
+
+
+
+
+ 0 1 2
+ X
+ 0 1 2
+
+ 0 1 2
+ X
+ 0 1 2
+ X
+ 0 1 2
+
+ 0 1 2
+ X
+ 0 1 2
+
+
+
+
+
+ X
+
+ X
+
+ X
+
+
+
+
+ X
+
+ X
+ X
+
+ X
+
+
+
+
+ 0 1 2
+ X
+ 0 1 2
+
+ 0 1 2
+ X
+ 0 1 2
+
+ 0 1 2
+ X
+ 0 1 2
+
+
+
+
+ 0 1 2
+ X
+ 0 1 2
+
+ 0 1 2
+ X
+ 0 1 2
+ X
+ 0 1 2
+
+ 0 1 2
+ X
+ 0 1 2
+
+
+
+
+
+ X
+
+ X
+
+ X
+
+
+
+
+ X
+
+ X
+ X
+
+ X
+
+
+
+
+ 0 1 2
+ X
+ 0 1 2
+
+ 0 1 2
+ X
+ 0 1 2
+
+ 0 1 2
+ X
+ 0 1 2
+
+
+
+
+ 0 1 2
+ X
+ 0 1 2
+
+ 0 1 2
+ X
+ 0 1 2
+ X
+ 0 1 2
+
+ 0 1 2
+ X
+ 0 1 2
+
+
+
+
+
+ X
+
+ X
+
+ X
+
+
+
+
+ X
+
+ X
+ X
+
+ X
+
+
+
+
+ 0 1 2
+ X
+ 0 1 2
+
+ 0 1 2
+ X
+ 0 1 2
+
+ 0 1 2
+ X
+ 0 1 2
+
+
+
+
+ 0 1 2
+ X
+ 0 1 2
+
+ 0 1 2
+ X
+ 0 1 2
+ X
+ 0 1 2
+
+ 0 1 2
+ X
+ 0 1 2
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/operators/embellished-operator-002.html b/testing/web-platform/tests/mathml/presentation-markup/operators/embellished-operator-002.html
new file mode 100644
index 0000000000..7ab05441c3
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/operators/embellished-operator-002.html
@@ -0,0 +1,559 @@
+
+
+
+
+Embellished operators
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ X
+
+ X
+ X
+
+ X
+
+
+
+
+ X
+
+ X
+ X
+
+ X
+
+
+
+
+ X
+
+ X
+ X
+ X
+
+ X
+
+
+
+
+ X
+
+ X
+ X
+
+ X
+
+
+
+
+ X
+
+ X
+ X
+
+ X
+
+
+
+
+ X
+
+ X
+ X
+
+ X
+
+
+
+
+ X
+
+ X
+ X
+ X
+ X
+ X
+
+ X
+
+
+
+
+ X
+
+ X
+ X
+
+ X
+
+
+
+
+
+
+ 0 1 2
+ X
+ 0 1 2
+
+ 0 1 2
+ X
+ 0 1 2
+ X
+ 0 1 2
+
+ 0 1 2
+ X
+ 0 1 2
+
+
+
+
+ 0 1 2
+ X
+ 0 1 2
+
+ 0 1 2
+ X
+ 0 1 2
+ X
+ 0 1 2
+
+ 0 1 2
+ X
+ 0 1 2
+
+
+
+
+ 0 1 2
+ X
+ 0 1 2
+
+ 0 1 2
+ X
+ 0 1 2
+ X
+ 0 1 2
+ X
+ 0 1 2
+
+ 0 1 2
+ X
+ 0 1 2
+
+
+
+
+ 0 1 2
+ X
+ 0 1 2
+
+ 0 1 2
+ X
+ 0 1 2
+ X
+ 0 1 2
+
+ 0 1 2
+ X
+ 0 1 2
+
+
+
+
+ 0 1 2
+ X
+ 0 1 2
+
+ 0 1 2
+ X
+ 0 1 2
+ X
+ 0 1 2
+
+ 0 1 2
+ X
+ 0 1 2
+
+
+
+
+ 0 1 2
+ X
+ 0 1 2
+
+ 0 1 2
+ X
+ 0 1 2
+ X
+ 0 1 2
+
+ 0 1 2
+ X
+ 0 1 2
+
+
+
+
+ 0 1 2
+ X
+ 0 1 2
+
+ 0 1 2
+ X
+ 0 1 2
+ X
+ 0 1 2
+ X
+ 0 1 2
+ X
+ 0 1 2
+ X
+ 0 1 2
+
+ 0 1 2
+ X
+ 0 1 2
+
+
+
+
+ 0 1 2
+ X
+ 0 1 2
+
+ 0 1 2
+ X
+ 0 1 2
+ X
+ 0 1 2
+
+ 0 1 2
+ X
+ 0 1 2
+
+
+
+
+
+
+ X
+
+ X
+ X
+
+ X
+
+
+
+
+ X
+
+ X
+ X
+
+ X
+
+
+
+
+ X
+
+ X
+ X
+ X
+
+ X
+
+
+
+
+ X
+
+ X
+ X
+
+ X
+
+
+
+
+ X
+
+ X
+ X
+
+ X
+
+
+
+
+ X
+
+ X
+ X
+
+ X
+
+
+
+
+ X
+
+ X
+ X
+ X
+ X
+ X
+
+ X
+
+
+
+
+ X
+
+ X
+ X
+
+ X
+
+
+
+
+
+
+ 0 1 2
+ X
+ 0 1 2
+
+ 0 1 2
+ X
+ 0 1 2
+ X
+ 0 1 2
+
+ 0 1 2
+ X
+ 0 1 2
+
+
+
+
+ 0 1 2
+ X
+ 0 1 2
+
+ 0 1 2
+ X
+ 0 1 2
+ X
+ 0 1 2
+
+ 0 1 2
+ X
+ 0 1 2
+
+
+
+
+ 0 1 2
+ X
+ 0 1 2
+
+ 0 1 2
+ X
+ 0 1 2
+ X
+ 0 1 2
+ X
+ 0 1 2
+
+ 0 1 2
+ X
+ 0 1 2
+
+
+
+
+ 0 1 2
+ X
+ 0 1 2
+
+ 0 1 2
+ X
+ 0 1 2
+ X
+ 0 1 2
+
+ 0 1 2
+ X
+ 0 1 2
+
+
+
+
+ 0 1 2
+ X
+ 0 1 2
+
+ 0 1 2
+ X
+ 0 1 2
+ X
+ 0 1 2
+
+ 0 1 2
+ X
+ 0 1 2
+
+
+
+
+ 0 1 2
+ X
+ 0 1 2
+
+ 0 1 2
+ X
+ 0 1 2
+ X
+ 0 1 2
+
+ 0 1 2
+ X
+ 0 1 2
+
+
+
+
+ 0 1 2
+ X
+ 0 1 2
+
+ 0 1 2
+ X
+ 0 1 2
+ X
+ 0 1 2
+ X
+ 0 1 2
+ X
+ 0 1 2
+ X
+ 0 1 2
+
+ 0 1 2
+ X
+ 0 1 2
+
+
+
+
+ 0 1 2
+ X
+ 0 1 2
+
+ 0 1 2
+ X
+ 0 1 2
+ X
+ 0 1 2
+
+ 0 1 2
+ X
+ 0 1 2
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/operators/embellished-operator-003.html b/testing/web-platform/tests/mathml/presentation-markup/operators/embellished-operator-003.html
new file mode 100644
index 0000000000..7b36665787
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/operators/embellished-operator-003.html
@@ -0,0 +1,394 @@
+
+
+
+
+Embellished operators
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ X
+
+ X
+ STATUS MESSAGE
+
+ X
+
+
+
+
+ X
+
+ X
+ TEXT ANNOTATION
+ X
+
+ X
+
+
+
+
+
+
+ 0 1 2
+ X
+ 0 1 2
+
+ X
+ 0 1 2
+ STATUS MESSAGE
+ 0 1 2
+
+ 0 1 2
+ X
+ 0 1 2
+
+
+
+
+ 0 1 2
+ X
+ 0 1 2
+
+ X
+ 0 1 2
+ TEXT ANNOTATION
+ 0 1 2
+ X
+ 0 1 2
+
+ 0 1 2
+ X
+ 0 1 2
+
+
+
+
+
+
+ X
+
+ X
+ X
+
+ X
+
+
+
+
+ X
+
+ X
+ X
+
+ X
+
+
+
+
+ X
+
+ X
+ X
+ X
+
+ X
+
+
+
+
+ X
+
+ X
+ X
+
+ X
+
+
+
+
+ X
+
+ X
+ X
+
+ X
+
+
+
+
+ X
+
+ X
+ X
+
+ X
+
+
+
+
+ X
+
+ X
+ X
+ X
+ X
+ X
+
+ X
+
+
+
+
+ X
+
+ X
+ X
+
+ X
+
+
+
+
+ X
+
+ X
+ STATUS MESSAGE
+
+ X
+
+
+
+
+ X
+
+
+ X
+ X
+
+ TEXT ANNOTATION
+
+ X
+
+
+
+
+
+
+ 0 1 2
+ X
+ 0 1 2
+
+ X
+ 0 1 2
+ STATUS MESSAGE
+ 0 1 2
+
+ 0 1 2
+ X
+ 0 1 2
+
+
+
+
+ 0 1 2
+ X
+ 0 1 2
+
+
+ 0 1 2
+ X
+ 0 1 2
+ X
+ 0 1 2
+
+ 0 1 2
+ TEXT ANNOTATION
+ 0 1 2
+
+ 0 1 2
+ X
+ 0 1 2
+
+
+
+
+
+
+ X
+
+
+ X
+
+
+
+
+ X
+
+
+ X
+
+
+
+
+
+
+ X
+
+ X
+
+ X
+
+
+
+
+ X
+
+ X
+
+ X
+
+
+
+
+
+
+ 0 1 2
+ X
+ 0 1 2
+
+ 0 1 2
+ X
+ 0 1 2
+ X
+ 0 1 2
+
+ 0 1 2
+ X
+ 0 1 2
+
+
+
+
+ 0 1 2
+ X
+ 0 1 2
+
+ 0 1 2
+ X
+ 0 1 2
+ X
+ 0 1 2
+
+ 0 1 2
+ X
+ 0 1 2
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/operators/embellished-operator-dynamic-001-ref.html b/testing/web-platform/tests/mathml/presentation-markup/operators/embellished-operator-dynamic-001-ref.html
new file mode 100644
index 0000000000..b37ce125a7
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/operators/embellished-operator-dynamic-001-ref.html
@@ -0,0 +1,95 @@
+
+
+
+
+Embellished operators - tree change and relayout (reference)
+
+
+
+
+ There should be the five 1em squares on the same line, with colors
+ black, orange, blue, orange, black:
+
+
+ 1
+
+
+
+ X
+
+
+
+
+ 2
+
+
+
+ There should be the five 1em squares on the same line, with colors
+ black, yellow, blue, yellow, black:
+
+
+ 3
+
+
+
+ X
+
+
+
+ 4
+
+
+
+ There should be the five 1em squares on the same line, with colors
+ black, orange, blue, orange, black:
+
+
+ 5
+
+
+
+ X
+
+
+
+
+
+
+
+
+ 6
+
+
+
+ There should be the five 1em squares on the same line, with colors
+ black, yellow, blue, yellow, black:
+
+
+ 7
+
+
+
+ X
+
+
+
+
+
+
+
+ 8
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/operators/embellished-operator-dynamic-001.html b/testing/web-platform/tests/mathml/presentation-markup/operators/embellished-operator-dynamic-001.html
new file mode 100644
index 0000000000..09a7fe412a
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/operators/embellished-operator-dynamic-001.html
@@ -0,0 +1,123 @@
+
+
+
+
+Embellished operators - tree change and relayout
+
+
+
+
+
+
+
+
+
+
+ There should be the five 1em squares on the same line, with colors
+ black, orange, blue, orange, black:
+
+
+ 1
+
+
+
+ X
+
+
+
+ 2
+
+
+
+ There should be the five 1em squares on the same line, with colors
+ black, yellow, blue, yellow, black:
+
+
+ 3
+
+
+
+ X
+
+
+
+
+ 4
+
+
+
+ There should be the five 1em squares on the same line, with colors
+ black, orange, blue, orange, black:
+
+
+ 5
+
+
+
+ X
+
+
+
+
+
+
+
+ 6
+
+
+
+ There should be the five 1em squares on the same line, with colors
+ black, yellow, blue, yellow, black:
+
+
+ 7
+
+
+
+ X
+
+
+
+
+
+
+
+
+ 8
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/operators/embellished-operator-dynamic-002.html b/testing/web-platform/tests/mathml/presentation-markup/operators/embellished-operator-dynamic-002.html
new file mode 100644
index 0000000000..2c52684765
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/operators/embellished-operator-dynamic-002.html
@@ -0,0 +1,185 @@
+
+
+
+
+Embellished operators - tree change and relayout
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1
+
+
+
+
+
+
+
+ 2
+
+
+
+
+
+
+
+ 3
+
+
+
+
+
+
+
+
+ 4
+
+
+
+
+
+
+
+ 5
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 6
+
+
+
+
+
+
+
+ 7
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 8
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/operators/largeop-hit-testing.html b/testing/web-platform/tests/mathml/presentation-markup/operators/largeop-hit-testing.html
new file mode 100644
index 0000000000..2b81eb692a
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/operators/largeop-hit-testing.html
@@ -0,0 +1,64 @@
+
+
+
+
+Test hit testing on large operators
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ⫿
+
+
+
+
+ ⫿
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/operators/mo-axis-height-1.html b/testing/web-platform/tests/mathml/presentation-markup/operators/mo-axis-height-1.html
new file mode 100644
index 0000000000..6de6284188
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/operators/mo-axis-height-1.html
@@ -0,0 +1,75 @@
+
+
+
+
+mo axis height
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ↨
+
+
+
+
+
+
+
+ ↨
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/operators/mo-font-relative-lengths-001.html b/testing/web-platform/tests/mathml/presentation-markup/operators/mo-font-relative-lengths-001.html
new file mode 100644
index 0000000000..209e59ee33
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/operators/mo-font-relative-lengths-001.html
@@ -0,0 +1,114 @@
+
+
+
+
+Font-relative lengths on an operator
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ⥯
+
+
+
+
+
+
+
+
+
+
+
+ ⥯
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/operators/mo-form-dynamic-002-ref.html b/testing/web-platform/tests/mathml/presentation-markup/operators/mo-form-dynamic-002-ref.html
new file mode 100644
index 0000000000..be7f5aa173
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/operators/mo-form-dynamic-002-ref.html
@@ -0,0 +1,48 @@
+
+
+
+
+ <mo> dynamic form
+
+
+
+
+
+
+ 1 + 2
+
+
+
+
+ + 3
+
+
+
+
+ 1 + 2
+
+
+
+
+ + 3
+
+
+
+
+ 1 + 2
+
+
+
+
+ + 3
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/operators/mo-form-dynamic-002.html b/testing/web-platform/tests/mathml/presentation-markup/operators/mo-form-dynamic-002.html
new file mode 100644
index 0000000000..862fc36a20
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/operators/mo-form-dynamic-002.html
@@ -0,0 +1,66 @@
+
+
+
+
+ <mo> dynamic form
+
+
+
+
+
+
+
+
+
+
+
+ 1 + 2
+
+
+
+
+ + 3
+
+
+
+
+ 1 + 2
+
+
+
+
+ + 3
+
+
+
+
+ 1 + 2
+
+
+
+
+ + 3
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/operators/mo-form-dynamic-ref.html b/testing/web-platform/tests/mathml/presentation-markup/operators/mo-form-dynamic-ref.html
new file mode 100644
index 0000000000..8f8d3da2c3
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/operators/mo-form-dynamic-ref.html
@@ -0,0 +1,26 @@
+
+
+
+
+ <mo> dynamic form
+
+
+
+ The test should render the same as the static reference.
+
+ _x + y _
+ _x + y _
+ _x + y _
+ _x + y _
+ _x + y _
+ _x + y _
+
+ _− y _
+ _− y _
+ _− y _
+ _− y _
+ _− y _
+ _− y _
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/operators/mo-form-dynamic.html b/testing/web-platform/tests/mathml/presentation-markup/operators/mo-form-dynamic.html
new file mode 100644
index 0000000000..cec203f517
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/operators/mo-form-dynamic.html
@@ -0,0 +1,51 @@
+
+
+
+
+ <mo> dynamic form
+
+
+
+
+
+
+
+
+
+ The test should render the same as the static reference.
+
+ _+ y _
+ _+ y _
+ _+ y _
+ _+ y _
+ _+ y _
+ _+ y _
+
+ _x − y _
+ _x − y _
+ _x − y _
+ _x − y _
+ _x − y _
+ _x − y _
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/operators/mo-form-fallback-ref.html b/testing/web-platform/tests/mathml/presentation-markup/operators/mo-form-fallback-ref.html
new file mode 100644
index 0000000000..8d964eba45
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/operators/mo-form-fallback-ref.html
@@ -0,0 +1,15 @@
+
+
+
+
+ form fallback
+
+
+
+
+ ( )
+ ( )
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/operators/mo-form-fallback.html b/testing/web-platform/tests/mathml/presentation-markup/operators/mo-form-fallback.html
new file mode 100644
index 0000000000..b49db9d9ff
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/operators/mo-form-fallback.html
@@ -0,0 +1,28 @@
+
+
+
+
+ form fallback
+
+
+
+
+
+
+
+
+
+ ( )
+ ( )
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/operators/mo-form-minus-plus-ref.html b/testing/web-platform/tests/mathml/presentation-markup/operators/mo-form-minus-plus-ref.html
new file mode 100644
index 0000000000..b46b307dbe
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/operators/mo-form-minus-plus-ref.html
@@ -0,0 +1,84 @@
+
+
+
+
+ form plus/minus
+
+
+
+
+
+ _− x _
+ _− x _
+ _− x _
+ _− x _
+ _− x _
+ _− x _
+
+
+
+ _+ x _
+ _+ x _
+ _+ x _
+ _+ x _
+ _+ x _
+ _+ x _
+
+
+
+ _± x _
+ _± x _
+ _± x _
+ _± x _
+ _± x _
+ _± x _
+
+
+
+ _∓ x _
+ _∓ x _
+ _∓ x _
+ _∓ x _
+ _∓ x _
+ _∓ x _
+
+
+
+
+
+ _x − y _
+ _x − y _
+ _x − y _
+ _x − y _
+ _x − y _
+ _x − y _
+
+
+
+ _x + y _
+ _x + y _
+ _x + y _
+ _x + y _
+ _x + y _
+ _x + y _
+
+
+
+ _x ± y _
+ _x ± y _
+ _x ± y _
+ _x ± y _
+ _x ± y _
+ _x ± y _
+
+
+
+ _x ∓ y _
+ _x ∓ y _
+ _x ∓ y _
+ _x ∓ y _
+ _x ∓ y _
+ _x ∓ y _
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/operators/mo-form-minus-plus.html b/testing/web-platform/tests/mathml/presentation-markup/operators/mo-form-minus-plus.html
new file mode 100644
index 0000000000..eb7dbbce2a
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/operators/mo-form-minus-plus.html
@@ -0,0 +1,89 @@
+
+
+
+
+ form plus/minus
+
+
+
+
+
+
+
+
+ _− x _
+ _− x _
+ _− x _
+ _− x _
+ _− x _
+ _− x _
+
+
+
+ _+ x _
+ _+ x _
+ _+ x _
+ _+ x _
+ _+ x _
+ _+ x _
+
+
+
+ _± x _
+ _± x _
+ _± x _
+ _± x _
+ _± x _
+ _± x _
+
+
+
+ _∓ x _
+ _∓ x _
+ _∓ x _
+ _∓ x _
+ _∓ x _
+ _∓ x _
+
+
+
+
+
+ _x − y _
+ _x − y _
+ _x − y _
+ _x − y _
+ _x − y _
+ _x − y _
+
+
+
+ _x + y _
+ _x + y _
+ _x + y _
+ _x + y _
+ _x + y _
+ _x + y _
+
+
+
+ _x ± y _
+ _x ± y _
+ _x ± y _
+ _x ± y _
+ _x ± y _
+ _x ± y _
+
+
+
+ _x ∓ y _
+ _x ∓ y _
+ _x ∓ y _
+ _x ∓ y _
+ _x ∓ y _
+ _x ∓ y _
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/operators/mo-form-ref.html b/testing/web-platform/tests/mathml/presentation-markup/operators/mo-form-ref.html
new file mode 100644
index 0000000000..b249fe43b5
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/operators/mo-form-ref.html
@@ -0,0 +1,25 @@
+
+
+
+
+ <mo> form attribute
+
+
+
+
+ _∇ _
+ _∇ _
+ _∇ _
+
+
+ _⋉ _
+ _⋉ _
+ _⋉ _
+
+
+ _” _
+ _” _
+ _” _
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/operators/mo-form.html b/testing/web-platform/tests/mathml/presentation-markup/operators/mo-form.html
new file mode 100644
index 0000000000..38cbd6bb4b
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/operators/mo-form.html
@@ -0,0 +1,30 @@
+
+
+
+
+ <mo> form attribute
+
+
+
+
+
+
+
+ _∇ _
+ _∇ _
+ _∇ _
+
+
+ _⋉ _
+ _⋉ _
+ _⋉ _
+
+
+ _” _
+ _” _
+ _” _
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/operators/mo-lspace-rspace-2-ref.html b/testing/web-platform/tests/mathml/presentation-markup/operators/mo-lspace-rspace-2-ref.html
new file mode 100644
index 0000000000..4ffe6cbc23
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/operators/mo-lspace-rspace-2-ref.html
@@ -0,0 +1,363 @@
+
+
+
+ mo-lspace-rspace-2 (reference)
+
+
+
+
+
+
+
+ *
+
+
+
+
+ *
+ *
+
+
+
+
+ *
+
+
+
+
+ *
+ *
+
+
+
+
+ *
+
+
+
+
+
+
+
+
+
+
+
+ *
+
+
+
+
+ *
+ *
+
+
+
+
+ *
+ *
+
+
+
+
+ *
+ *
+ *
+
+
+
+
+ *
+ *
+
+
+
+
+ *
+ *
+
+
+
+
+ *
+ *
+ *
+
+
+
+
+
+
+
+ *
+ *
+ *
+
+ *
+ *
+
+
+
+
+
+
+ *
+
+
+
+
+
+ *
+
+
+
+
+ *
+
+ *
+
+
+
+
+
+
+
+
+ *
+ *
+
+ *
+
+
+
+
+
+ *
+ *
+
+ *
+
+
+
+
+
+ *
+ *
+
+ *
+
+
+
+
+
+
+
+ *
+
+
+ *
+
+
+ *
+ *
+
+
+
+
+ *
+
+
+
+
+ *
+
+
+
+
+
+ *
+
+
+
+
+
+ *
+
+
+ *
+ *
+
+
+ *
+
+
+ *
+
+
+
+
+
+
+
+
+
+
+ *
+ *
+
+
+
+
+
+
+
+
+
+
+ *
+ *
+
+
+ *
+ *
+
+
+ *
+ *
+
+
+ *
+ *
+ *
+
+
+ *
+ *
+
+
+ *
+ *
+
+
+ *
+ *
+ *
+
+
+
+
+
+
+
+ *
+ *
+ *
+
+ *
+ *
+
+
+
+
+ *
+ *
+
+
+
+ *
+
+
+ *
+
+ *
+
+
+
+ *
+ *
+
+ *
+
+
+
+
+
+
+
+
+ *
+ *
+
+ *
+
+
+
+ *
+ *
+
+ *
+
+
+
+ *
+ *
+
+ *
+
+
+
+
+
+
+
+ *
+ *
+
+ *
+
+
+
+
+
+ *
+ *
+
+
+
+
+ *
+ *
+
+
+
+
+
+ *
+ *
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/operators/mo-lspace-rspace-2.html b/testing/web-platform/tests/mathml/presentation-markup/operators/mo-lspace-rspace-2.html
new file mode 100644
index 0000000000..d54f45c21d
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/operators/mo-lspace-rspace-2.html
@@ -0,0 +1,363 @@
+
+
+
+ mo-lspace-rspace-2
+
+
+
+
+
+
+
+
+ *
+
+
+
+
+ *
+ *
+
+
+
+
+ *
+
+
+
+
+ *
+ *
+
+
+
+
+ *
+
+
+
+
+
+
+
+
+
+
+
+ *
+
+
+
+
+ *
+ *
+
+
+
+
+ *
+ *
+
+
+
+
+ *
+ *
+ *
+
+
+
+
+ *
+ *
+
+
+
+
+ *
+ *
+
+
+
+
+ *
+ *
+ *
+
+
+
+
+
+
+
+ *
+ *
+ *
+
+ *
+ *
+
+
+
+
+
+
+ *
+
+
+
+
+
+ *
+
+
+
+
+ *
+
+ *
+
+
+
+
+
+
+
+
+ *
+ *
+
+ *
+
+
+
+
+
+ *
+ *
+
+ *
+
+
+
+
+
+ *
+ *
+
+ *
+
+
+
+
+
+
+ *
+
+
+ *
+
+
+ *
+ *
+
+
+
+
+ *
+
+
+
+
+ *
+
+
+
+
+
+ *
+
+
+
+
+
+ *
+
+
+ *
+ *
+
+
+ *
+
+
+ *
+
+
+
+
+
+
+
+
+
+
+ *
+ *
+
+
+
+
+
+
+
+
+
+
+ *
+ *
+
+
+ *
+ *
+
+
+ *
+ *
+
+
+ *
+ *
+ *
+
+
+ *
+ *
+
+
+ *
+ *
+
+
+ *
+ *
+ *
+
+
+
+
+
+
+
+ *
+ *
+ *
+
+ *
+ *
+
+
+
+
+ *
+ *
+
+
+
+ *
+
+
+ *
+
+ *
+
+
+
+ *
+ *
+
+ *
+
+
+
+
+
+
+
+
+ *
+ *
+
+ *
+
+
+
+ *
+ *
+
+ *
+
+
+
+ *
+ *
+
+ *
+
+
+
+
+
+
+
+ *
+ *
+
+ *
+
+
+
+
+
+ *
+ *
+
+
+
+
+ *
+ *
+
+
+
+
+
+ *
+ *
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/operators/mo-lspace-rspace-3-ref.html b/testing/web-platform/tests/mathml/presentation-markup/operators/mo-lspace-rspace-3-ref.html
new file mode 100644
index 0000000000..1830e11474
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/operators/mo-lspace-rspace-3-ref.html
@@ -0,0 +1,41 @@
+
+
+
+ mo-lspace-rspace-3 (reference)
+
+
+
+
+ *
+
+
+
+
+ *
+
+
+
+
+ *
+ *
+
+
+
+
+ *
+ *
+
+
+
+
+ *
+ *
+
+
+
+
+ *
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/operators/mo-lspace-rspace-3.html b/testing/web-platform/tests/mathml/presentation-markup/operators/mo-lspace-rspace-3.html
new file mode 100644
index 0000000000..4574ff39c9
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/operators/mo-lspace-rspace-3.html
@@ -0,0 +1,61 @@
+
+
+
+ mo-lspace-rspace-3
+
+
+
+
+
+ *
+
+
+
+
+ *
+
+
+
+
+ *
+ *
+
+
+
+
+ *
+ *
+
+
+
+
+ *
+
+
+
+
+ *
+ *
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/operators/mo-lspace-rspace-4-ref.html b/testing/web-platform/tests/mathml/presentation-markup/operators/mo-lspace-rspace-4-ref.html
new file mode 100644
index 0000000000..ab4c08dde1
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/operators/mo-lspace-rspace-4-ref.html
@@ -0,0 +1,20 @@
+
+
+
+ mo-lspace-rspace-4 (reference)
+
+
+
+
+ _
+
+
+ _
+ _
+
+
+ _
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/operators/mo-lspace-rspace-4.html b/testing/web-platform/tests/mathml/presentation-markup/operators/mo-lspace-rspace-4.html
new file mode 100644
index 0000000000..4798454868
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/operators/mo-lspace-rspace-4.html
@@ -0,0 +1,19 @@
+
+
+
+ mo-lspace-rspace-4
+
+
+
+
+
+ _
+
+ _
+ _
+
+ _
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/operators/mo-lspace-rspace-dynamic-ref.html b/testing/web-platform/tests/mathml/presentation-markup/operators/mo-lspace-rspace-dynamic-ref.html
new file mode 100644
index 0000000000..85cabd287d
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/operators/mo-lspace-rspace-dynamic-ref.html
@@ -0,0 +1,48 @@
+
+
+
+
+ <mo> dynamic lspace rspace (reference)
+
+
+
+
+
+
+ 1 X 2
+
+
+
+
+ 1 X 2
+
+
+
+
+ 1 X 2
+
+
+
+
+ 1 X 2
+
+
+
+
+ 1 X 2
+
+
+
+
+ 1 X 2
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/operators/mo-lspace-rspace-dynamic.html b/testing/web-platform/tests/mathml/presentation-markup/operators/mo-lspace-rspace-dynamic.html
new file mode 100644
index 0000000000..70098bebf9
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/operators/mo-lspace-rspace-dynamic.html
@@ -0,0 +1,64 @@
+
+
+
+
+ <mo> dynamic lspace rspace
+
+
+
+
+
+
+
+
+
+
+ 1 X 2
+
+
+
+
+ 1 X 2
+
+
+
+
+ 1 X 2
+
+
+
+
+ 1 X 2
+
+
+
+
+ 1 X 2
+
+
+
+
+ 1 X 2
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/operators/mo-lspace-rspace-ref.html b/testing/web-platform/tests/mathml/presentation-markup/operators/mo-lspace-rspace-ref.html
new file mode 100644
index 0000000000..46be5079e6
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/operators/mo-lspace-rspace-ref.html
@@ -0,0 +1,41 @@
+
+
+
+ mo-lspace-rspace (reference)
+
+
+
+
+
+
+
+ _
+
+ MO
+
+ _
+
+
+
+
+
+
+ _
+
+ ∿
+
+ _
+
+
+
+
+
+
+ _
+
+ _
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/operators/mo-lspace-rspace.html b/testing/web-platform/tests/mathml/presentation-markup/operators/mo-lspace-rspace.html
new file mode 100644
index 0000000000..5774e4ced0
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/operators/mo-lspace-rspace.html
@@ -0,0 +1,38 @@
+
+
+
+ mo-lspace-rspace
+
+
+
+
+
+
+
+
+ _
+ MO
+ _
+
+
+
+
+
+
+ _
+ ∿
+ _
+
+
+
+
+
+
+ _
+
+ _
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/operators/mo-minsize-maxsize-001.html b/testing/web-platform/tests/mathml/presentation-markup/operators/mo-minsize-maxsize-001.html
new file mode 100644
index 0000000000..3e7e5c9bcc
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/operators/mo-minsize-maxsize-001.html
@@ -0,0 +1,143 @@
+
+
+
+
+Edge cases for minsize and maxsize
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ⥯
+
+
+
+
+
+
+
+
+ ⥯
+
+
+
+
+
+
+
+
+ ⥯
+
+
+
+
+
+
+
+
+ ⥯
+
+
+
+
+
+
+
+
+ ⥯
+
+
+
+
+
+
+
+
+ ⥯
+
+
+
+
+
+
+
+
+ ⥯
+
+
+
+
+
+
+
+
+ ⥯
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/operators/mo-movablelimits-and-embellished-operator-ref.html b/testing/web-platform/tests/mathml/presentation-markup/operators/mo-movablelimits-and-embellished-operator-ref.html
new file mode 100644
index 0000000000..cca8b9b697
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/operators/mo-movablelimits-and-embellished-operator-ref.html
@@ -0,0 +1,33 @@
+
+
+
+
+ <mo> movablelimits and embellished operator (reference)
+
+
+
+
+
+
+ A
+ 2
+
+
+ A
+ 2
+
+
+
+
+ A
+ 2
+
+
+ A
+ 2
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/operators/mo-movablelimits-and-embellished-operator.html b/testing/web-platform/tests/mathml/presentation-markup/operators/mo-movablelimits-and-embellished-operator.html
new file mode 100644
index 0000000000..2bdfa15bc6
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/operators/mo-movablelimits-and-embellished-operator.html
@@ -0,0 +1,39 @@
+
+
+
+
+ <mo> movablelimits and embellished operator (reference)
+
+
+
+
+
+
+
+
+
+
+ A
+ 2
+
+
+ A
+ 2
+
+
+
+
+ A
+ 2
+
+
+ A
+ 2
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/operators/mo-movablelimits-default-ref.html b/testing/web-platform/tests/mathml/presentation-markup/operators/mo-movablelimits-default-ref.html
new file mode 100644
index 0000000000..8328637397
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/operators/mo-movablelimits-default-ref.html
@@ -0,0 +1,18 @@
+
+
+
+ mo movablelimits default value
+
+
+
+
+ ∑
+ x
+
+
+ ∫
+ x
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/operators/mo-movablelimits-default.html b/testing/web-platform/tests/mathml/presentation-markup/operators/mo-movablelimits-default.html
new file mode 100644
index 0000000000..4d6ee00d82
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/operators/mo-movablelimits-default.html
@@ -0,0 +1,24 @@
+
+
+
+
+ <mo> movablelimits default value
+
+
+
+
+
+
+
+ ∑
+ x
+
+
+ ∫
+ x
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/operators/mo-movablelimits-dynamic-ref.html b/testing/web-platform/tests/mathml/presentation-markup/operators/mo-movablelimits-dynamic-ref.html
new file mode 100644
index 0000000000..ee5bce2ca8
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/operators/mo-movablelimits-dynamic-ref.html
@@ -0,0 +1,15 @@
+
+
+
+
+ Test dynamically removing movablelimits attribute
+
+
+
+
+ ∑
+ x
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/operators/mo-movablelimits-dynamic.html b/testing/web-platform/tests/mathml/presentation-markup/operators/mo-movablelimits-dynamic.html
new file mode 100644
index 0000000000..647fc52321
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/operators/mo-movablelimits-dynamic.html
@@ -0,0 +1,27 @@
+
+
+
+
+ Test dynamically removing movablelimits attribute
+
+
+
+
+
+
+
+
+
+ ∑
+ x
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/operators/mo-movablelimits-from-in-flow-ref.html b/testing/web-platform/tests/mathml/presentation-markup/operators/mo-movablelimits-from-in-flow-ref.html
new file mode 100644
index 0000000000..3efeaa0dfe
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/operators/mo-movablelimits-from-in-flow-ref.html
@@ -0,0 +1,30 @@
+
+
+
+
+ <mo> movablelimits
+
+
+
+
+
+
+ +
+ 1
+
+
+ +
+ 1
+
+
+ +
+ 1
+ 2
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/operators/mo-movablelimits-from-in-flow.html b/testing/web-platform/tests/mathml/presentation-markup/operators/mo-movablelimits-from-in-flow.html
new file mode 100644
index 0000000000..d1a2422c98
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/operators/mo-movablelimits-from-in-flow.html
@@ -0,0 +1,53 @@
+
+
+
+
+ <mo> movablelimits
+
+
+
+
+
+
+
+
+
+
+
+
+ +
+ 1
+
+
+
+
+
+ +
+ 1
+
+
+
+
+
+ +
+ 1
+ 2
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/operators/mo-movablelimits-ref.html b/testing/web-platform/tests/mathml/presentation-markup/operators/mo-movablelimits-ref.html
new file mode 100644
index 0000000000..cb868d2400
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/operators/mo-movablelimits-ref.html
@@ -0,0 +1,29 @@
+
+
+
+
+ <mo> movablelimits
+
+
+
+
+ A
+ B
+
+
+ A
+ B
+
+
+
+
+ A
+ B
+
+
+ A
+ B
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/operators/mo-movablelimits.html b/testing/web-platform/tests/mathml/presentation-markup/operators/mo-movablelimits.html
new file mode 100644
index 0000000000..e7aa17380b
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/operators/mo-movablelimits.html
@@ -0,0 +1,34 @@
+
+
+
+
+ <mo> movablelimits
+
+
+
+
+
+
+
+ A
+ B
+
+
+ A
+ B
+
+
+
+
+ A
+ B
+
+
+ A
+ B
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/operators/mo-not-in-dictionary-lspace-rspace-ref.html b/testing/web-platform/tests/mathml/presentation-markup/operators/mo-not-in-dictionary-lspace-rspace-ref.html
new file mode 100644
index 0000000000..3938db19a7
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/operators/mo-not-in-dictionary-lspace-rspace-ref.html
@@ -0,0 +1,47 @@
+
+
+
+
+ lspace/rspace default value for unknown operators (reference)
+
+
+
+
+ This test passes if on each row, the space around the blue rectangle
+ is 0.2777777777777778em.
+
+
+
+ p
+ X
+ p
+
+
+
+
+
+
+ p
+ XX
+ p
+
+
+
+
+
+
+ p
+ X
+ p
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/operators/mo-not-in-dictionary-lspace-rspace.html b/testing/web-platform/tests/mathml/presentation-markup/operators/mo-not-in-dictionary-lspace-rspace.html
new file mode 100644
index 0000000000..e6b5b172c3
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/operators/mo-not-in-dictionary-lspace-rspace.html
@@ -0,0 +1,52 @@
+
+
+
+
+ lspace/rspace default value for unknown operators
+
+
+
+
+
+
+
+ This test passes if on each row, the space around the blue rectangle
+ is 0.2777777777777778em.
+
+
+
+ p
+ X
+ p
+
+
+
+
+
+
+ p
+ XX
+ p
+
+
+
+
+
+
+ p
+ X
+ p
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/operators/mo-not-in-dictionary-movablelimits-ref.html b/testing/web-platform/tests/mathml/presentation-markup/operators/mo-not-in-dictionary-movablelimits-ref.html
new file mode 100644
index 0000000000..e7ffc78994
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/operators/mo-not-in-dictionary-movablelimits-ref.html
@@ -0,0 +1,47 @@
+
+
+
+
+ movablelimits default value for unknown operators (reference)
+
+
+
+
+ This test passes if the black scripts are attached above and below
+ the corresponding blue base.
+
+
+
+ X
+ X
+ X
+
+
+
+
+
+
+ XX
+ X
+ X
+
+
+
+
+
+
+ X
+ X
+ X
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/operators/mo-not-in-dictionary-movablelimits.html b/testing/web-platform/tests/mathml/presentation-markup/operators/mo-not-in-dictionary-movablelimits.html
new file mode 100644
index 0000000000..8a96e31953
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/operators/mo-not-in-dictionary-movablelimits.html
@@ -0,0 +1,52 @@
+
+
+
+
+ movablelimits default value for unknown operators
+
+
+
+
+
+
+
+ This test passes if the black scripts are attached above and below
+ the corresponding blue base.
+
+
+
+ X
+ X
+ X
+
+
+
+
+
+
+ XX
+ X
+ X
+
+
+
+
+
+
+ X
+ X
+ X
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/operators/mo-paint-lspace-rspace-ref.html b/testing/web-platform/tests/mathml/presentation-markup/operators/mo-paint-lspace-rspace-ref.html
new file mode 100644
index 0000000000..da0b79ff9a
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/operators/mo-paint-lspace-rspace-ref.html
@@ -0,0 +1,78 @@
+
+
+
+ <mo> paint lspace rspace
+
+
+
+ LTR case
+
+ The test passes if the arrow has a leading space of 100px, which is as wide as the black block to the left,
+ and a trailing space of 200px, which is as wide as the black block to the right.
+
+
+
+
+ →
+
+
+
+
+ The test passes if the arrow has a leading space of 150px, which is as wide as the black block to the left,
+ and a trailing space of 150px, which is as wide as the black block to the right.
+
+
+
+
+ →
+
+
+
+
+ The test passes if the arrow has a leading space of 200px, which is as wide as the black block to the left,
+ and a trailing space of 100px, which is as wide as the black block to the right.
+
+
+
+
+ →
+
+
+
+
+ RTL case
+
+ The test passes if the arrow has a leading space of 100px, which is as wide as the black block to the right,
+ and a trailing space of 200px, which is as wide as the black block to the left.
+
+
+
+
+ →
+
+
+
+
+ The test passes if the arrow has a leading space of 150px, which is as wide as the black block to the right,
+ and a trailing space of 150px, which is as wide as the black block to the left.
+
+
+
+
+ →
+
+
+
+
+ The test passes if the arrow has a leading space of 200px, which is as wide as the black block to the right,
+ and a trailing space of 100px, which is as wide as the black block to the left.
+
+
+
+
+ →
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/operators/mo-paint-lspace-rspace.html b/testing/web-platform/tests/mathml/presentation-markup/operators/mo-paint-lspace-rspace.html
new file mode 100644
index 0000000000..a3a3ed501e
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/operators/mo-paint-lspace-rspace.html
@@ -0,0 +1,71 @@
+
+
+
+
+ <mo> paint lspace rspace
+
+
+
+
+
+ LTR case
+
+ The test passes if the arrow has a leading space of 100px, which is as wide as the black block to the left,
+ and a trailing space of 200px, which is as wide as the black block to the right.
+
+
+
+ →
+
+
+
+ The test passes if the arrow has a leading space of 150px, which is as wide as the black block to the left,
+ and a trailing space of 150px, which is as wide as the black block to the right.
+
+
+
+ →
+
+
+
+ The test passes if the arrow has a leading space of 200px, which is as wide as the black block to the left,
+ and a trailing space of 100px, which is as wide as the black block to the right.
+
+
+
+ →
+
+
+
+ RTL case
+
+ The test passes if the arrow has a leading space of 100px, which is as wide as the black block to the right,
+ and a trailing space of 200px, which is as wide as the black block to the left.
+
+
+
+ →
+
+
+
+ The test passes if the arrow has a leading space of 150px, which is as wide as the black block to the right,
+ and a trailing space of 150px, which is as wide as the black block to the left.
+
+
+
+ →
+
+
+
+ The test passes if the arrow has a leading space of 200px, which is as wide as the black block to the right,
+ and a trailing space of 100px, which is as wide as the black block to the left.
+
+
+
+ →
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/operators/mo-single-char-and-children-ref.html b/testing/web-platform/tests/mathml/presentation-markup/operators/mo-single-char-and-children-ref.html
new file mode 100644
index 0000000000..6b4ccc775c
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/operators/mo-single-char-and-children-ref.html
@@ -0,0 +1,30 @@
+
+
+
+
+ <mo> with a single character and children (reference)
+
+
+
+
+ There should be 5/18em horizontal gaps around the middle rectangles:
+ p X p
+ p X p
+ p Xp
+ p X p
+ p XX p
+
+ There should be no horizontal gap around the middle rectangles:
+
+ p X p
+ p Xp
+ p X p
+
+ There should be 4/18em horizontal gaps around the middle rectangles:
+ p XX p
+ p XX p
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/operators/mo-single-char-and-children.html b/testing/web-platform/tests/mathml/presentation-markup/operators/mo-single-char-and-children.html
new file mode 100644
index 0000000000..a911c44411
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/operators/mo-single-char-and-children.html
@@ -0,0 +1,51 @@
+
+
+
+
+ <mo> with a single character and children
+
+
+
+
+
+
+
+ There should be 5/18em horizontal gaps around the middle rectangles:
+ p ( p
+ p ( p
+ p (p
+ p ( p
+ p = p
+
+ There should be no horizontal gap around the middle rectangles:
+
+ p ( p
+ p (p
+ p ( p
+
+ There should be 4/18em horizontal gaps around the middle rectangles:
+ p && p
+ p & p
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/operators/mo-stretch-properties-001.html b/testing/web-platform/tests/mathml/presentation-markup/operators/mo-stretch-properties-001.html
new file mode 100644
index 0000000000..f734253930
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/operators/mo-stretch-properties-001.html
@@ -0,0 +1,68 @@
+
+
+
+
+Stretch properties
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ |
+ |
+
+ |
+ |
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/operators/mo-stretch-properties-dynamic-001.html b/testing/web-platform/tests/mathml/presentation-markup/operators/mo-stretch-properties-dynamic-001.html
new file mode 100644
index 0000000000..5d447aa1d2
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/operators/mo-stretch-properties-dynamic-001.html
@@ -0,0 +1,154 @@
+
+
+
+
+Dynamic stretch properties
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ⥯
+ ⥯
+ ⥯
+
+
+
+
+
+
+
+
+ ⥯
+ ⥯
+ ⥯
+
+
+
+
+
+
+
+
+ ⥯
+
+
+
+ ⥯
+
+
+
+
+
+
+
+
+ ⥯
+ ⥯
+
+
+
+
+
+
+
+
+ ⥯
+ ⥯
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/operators/op-dict-1-notref.html b/testing/web-platform/tests/mathml/presentation-markup/operators/op-dict-1-notref.html
new file mode 100644
index 0000000000..5650be1936
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/operators/op-dict-1-notref.html
@@ -0,0 +1,15 @@
+
+
+
+ op-dict mo form
+
+
+
+
+ +
+
+ 1
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/operators/op-dict-1.html b/testing/web-platform/tests/mathml/presentation-markup/operators/op-dict-1.html
new file mode 100644
index 0000000000..cdfcca4a57
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/operators/op-dict-1.html
@@ -0,0 +1,15 @@
+
+
+
+ op-dict mo form
+
+
+
+
+
+ +
+ 1
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/operators/op-dict-12-ref.html b/testing/web-platform/tests/mathml/presentation-markup/operators/op-dict-12-ref.html
new file mode 100644
index 0000000000..3365b47d39
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/operators/op-dict-12-ref.html
@@ -0,0 +1,14 @@
+
+
+
+ op-dict mo movablelimits
+
+
+
+
+ ∑
+ x
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/operators/op-dict-12.html b/testing/web-platform/tests/mathml/presentation-markup/operators/op-dict-12.html
new file mode 100644
index 0000000000..7d75c4c174
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/operators/op-dict-12.html
@@ -0,0 +1,15 @@
+
+
+
+ op-dict mo movablelimits
+
+
+
+
+
+ ∑
+ x
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/operators/op-dict-13-notref.html b/testing/web-platform/tests/mathml/presentation-markup/operators/op-dict-13-notref.html
new file mode 100644
index 0000000000..e9e7614836
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/operators/op-dict-13-notref.html
@@ -0,0 +1,14 @@
+
+
+
+ op-dict mo movablelimits
+
+
+
+
+ ∑
+ x
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/operators/op-dict-13.html b/testing/web-platform/tests/mathml/presentation-markup/operators/op-dict-13.html
new file mode 100644
index 0000000000..1b7c6bf38f
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/operators/op-dict-13.html
@@ -0,0 +1,15 @@
+
+
+
+ op-dict mo movablelimits
+
+
+
+
+
+ ∑
+ x
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/operators/op-dict-2-ref.html b/testing/web-platform/tests/mathml/presentation-markup/operators/op-dict-2-ref.html
new file mode 100644
index 0000000000..9c910f8411
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/operators/op-dict-2-ref.html
@@ -0,0 +1,14 @@
+
+
+
+ op-dict symmetric
+
+
+
+
+ (
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/operators/op-dict-2.html b/testing/web-platform/tests/mathml/presentation-markup/operators/op-dict-2.html
new file mode 100644
index 0000000000..0a26fcae78
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/operators/op-dict-2.html
@@ -0,0 +1,15 @@
+
+
+
+ op-dict symmetric
+
+
+
+
+
+ (
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/operators/op-dict-3-notref.html b/testing/web-platform/tests/mathml/presentation-markup/operators/op-dict-3-notref.html
new file mode 100644
index 0000000000..9c910f8411
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/operators/op-dict-3-notref.html
@@ -0,0 +1,14 @@
+
+
+
+ op-dict symmetric
+
+
+
+
+ (
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/operators/op-dict-3.html b/testing/web-platform/tests/mathml/presentation-markup/operators/op-dict-3.html
new file mode 100644
index 0000000000..bf54ef8582
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/operators/op-dict-3.html
@@ -0,0 +1,15 @@
+
+
+
+ op-dict symmetric
+
+
+
+
+
+ (
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/operators/op-dict-4-ref.html b/testing/web-platform/tests/mathml/presentation-markup/operators/op-dict-4-ref.html
new file mode 100644
index 0000000000..a501e45c8c
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/operators/op-dict-4-ref.html
@@ -0,0 +1,18 @@
+
+
+
+ op-dict stretchy
+
+
+
+
+ (
+
+ a
+ b
+
+ )
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/operators/op-dict-4.html b/testing/web-platform/tests/mathml/presentation-markup/operators/op-dict-4.html
new file mode 100644
index 0000000000..f847890aa7
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/operators/op-dict-4.html
@@ -0,0 +1,19 @@
+
+
+
+ op-dict stretchy
+
+
+
+
+
+ (
+
+ a
+ b
+
+ )
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/operators/op-dict-5-notref.html b/testing/web-platform/tests/mathml/presentation-markup/operators/op-dict-5-notref.html
new file mode 100644
index 0000000000..7ab29e3769
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/operators/op-dict-5-notref.html
@@ -0,0 +1,18 @@
+
+
+
+ op-dict stretchy
+
+
+
+
+ (
+
+ a
+ b
+
+ )
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/operators/op-dict-5.html b/testing/web-platform/tests/mathml/presentation-markup/operators/op-dict-5.html
new file mode 100644
index 0000000000..8c8260d4cd
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/operators/op-dict-5.html
@@ -0,0 +1,19 @@
+
+
+
+ op-dict stretchy
+
+
+
+
+
+ (
+
+ a
+ b
+
+ )
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/operators/op-dict-6-ref.html b/testing/web-platform/tests/mathml/presentation-markup/operators/op-dict-6-ref.html
new file mode 100644
index 0000000000..cb642c4928
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/operators/op-dict-6-ref.html
@@ -0,0 +1,13 @@
+
+
+
+ op-dict largeop
+
+
+
+
+ ∑
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/operators/op-dict-6.html b/testing/web-platform/tests/mathml/presentation-markup/operators/op-dict-6.html
new file mode 100644
index 0000000000..6be4cc90a7
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/operators/op-dict-6.html
@@ -0,0 +1,14 @@
+
+
+
+ op-dict largeop
+
+
+
+
+
+ ∑
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/operators/op-dict-7-notref.html b/testing/web-platform/tests/mathml/presentation-markup/operators/op-dict-7-notref.html
new file mode 100644
index 0000000000..78dd195558
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/operators/op-dict-7-notref.html
@@ -0,0 +1,13 @@
+
+
+
+ op-dict largeop
+
+
+
+
+ ∑
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/operators/op-dict-7.html b/testing/web-platform/tests/mathml/presentation-markup/operators/op-dict-7.html
new file mode 100644
index 0000000000..04496eb4f3
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/operators/op-dict-7.html
@@ -0,0 +1,14 @@
+
+
+
+ op-dict largeop
+
+
+
+
+
+ ∑
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/operators/op-dict-8-ref.html b/testing/web-platform/tests/mathml/presentation-markup/operators/op-dict-8-ref.html
new file mode 100644
index 0000000000..b51ce01f36
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/operators/op-dict-8-ref.html
@@ -0,0 +1,13 @@
+
+
+
+ op-dict lspace and rspace
+
+
+
+
+ x ∂ y
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/operators/op-dict-8.html b/testing/web-platform/tests/mathml/presentation-markup/operators/op-dict-8.html
new file mode 100644
index 0000000000..0f9b81900e
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/operators/op-dict-8.html
@@ -0,0 +1,14 @@
+
+
+
+ op-dict lspace and rspace
+
+
+
+
+
+ x ∂ y
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/operators/op-dict-9-notref.html b/testing/web-platform/tests/mathml/presentation-markup/operators/op-dict-9-notref.html
new file mode 100644
index 0000000000..b976536fac
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/operators/op-dict-9-notref.html
@@ -0,0 +1,15 @@
+
+
+
+ op-dict lspace and rspace
+
+
+
+
+
+ x ∂ y
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/operators/op-dict-9.html b/testing/web-platform/tests/mathml/presentation-markup/operators/op-dict-9.html
new file mode 100644
index 0000000000..1e833e31a0
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/operators/op-dict-9.html
@@ -0,0 +1,14 @@
+
+
+
+ op-dict lspace and rspace
+
+
+
+
+
+ x ∂ y
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/operators/operator-dictionary-arabic-001-ref.html b/testing/web-platform/tests/mathml/presentation-markup/operators/operator-dictionary-arabic-001-ref.html
new file mode 100644
index 0000000000..88e0f5f736
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/operators/operator-dictionary-arabic-001-ref.html
@@ -0,0 +1,20 @@
+
+
+
+
+ Spacing of Arabic operators (reference)
+
+
+
+
+
+ There should be no horizontal gaps between the squares:
+ _ 𞻰 _
+ _ 𞻱 _
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/operators/operator-dictionary-arabic-001.html b/testing/web-platform/tests/mathml/presentation-markup/operators/operator-dictionary-arabic-001.html
new file mode 100644
index 0000000000..05d2714af5
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/operators/operator-dictionary-arabic-001.html
@@ -0,0 +1,28 @@
+
+
+
+
+ Spacing of Arabic operators
+
+
+
+
+
+
+
+
+
+ There should be no horizontal gaps between the squares:
+ _ 𞻰 _
+ _ 𞻱 _
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/operators/operator-dictionary-arabic-002-ref.html b/testing/web-platform/tests/mathml/presentation-markup/operators/operator-dictionary-arabic-002-ref.html
new file mode 100644
index 0000000000..f72fdc8403
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/operators/operator-dictionary-arabic-002-ref.html
@@ -0,0 +1,30 @@
+
+
+
+
+ Stretching of Arabic operators (reference)
+
+
+
+
+ You should see two rectangles of width 3em and height 1em:
+
+
+
+
+ _
+
+
+
+
+
+
+
+ _
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/operators/operator-dictionary-arabic-002.html b/testing/web-platform/tests/mathml/presentation-markup/operators/operator-dictionary-arabic-002.html
new file mode 100644
index 0000000000..d116e1778d
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/operators/operator-dictionary-arabic-002.html
@@ -0,0 +1,39 @@
+
+
+
+
+ Stretching of Arabic operators
+
+
+
+
+
+
+
+
+ You should see two rectangles of width 3em and height 1em:
+
+
+
+
+ 𞻰
+
+
+
+
+
+
+
+ 𞻱
+
+
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/operators/operator-dictionary-combining.html b/testing/web-platform/tests/mathml/presentation-markup/operators/operator-dictionary-combining.html
new file mode 100644
index 0000000000..8c891a2a25
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/operators/operator-dictionary-combining.html
@@ -0,0 +1,159 @@
+
+
+
+
+Operator dictionary (combining char)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ =
+
+
+
+
+
+
+ ≠
+
+
+
+
+
+
+ =⃒
+
+
+
+
+
+
+
+
+ |
+
+
+
+
+
+
+ |̸
+
+
+
+
+
+
+ |⃒
+
+
+
+
+
+
+
+
+ ⋉
+
+
+
+
+
+
+ ⋉̸
+
+
+
+
+
+
+ ⋉⃒
+
+
+
+
+
+
+
+
+ ∃
+
+
+
+
+
+
+ ∄
+
+
+
+
+
+
+ ∃⃒
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/operators/operator-dictionary-empty-and-three-chars-ref.html b/testing/web-platform/tests/mathml/presentation-markup/operators/operator-dictionary-empty-and-three-chars-ref.html
new file mode 100644
index 0000000000..2cbed12940
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/operators/operator-dictionary-empty-and-three-chars-ref.html
@@ -0,0 +1,32 @@
+
+
+
+
+ Spacing of empty and three-char operators (reference)
+
+
+
+
+
+ _ _ _
+
+ The spacing after the blue squares and before the yellow squares should be the same as the above reference:
+
+ _ _
+ _ ... _
+ _ lim _
+
_ max _
+
_ min _
+
_ ||| _
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/operators/operator-dictionary-empty-and-three-chars.html b/testing/web-platform/tests/mathml/presentation-markup/operators/operator-dictionary-empty-and-three-chars.html
new file mode 100644
index 0000000000..231041c17f
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/operators/operator-dictionary-empty-and-three-chars.html
@@ -0,0 +1,39 @@
+
+
+
+
+ Spacing of empty and three-char operators
+
+
+
+
+
+
+
+
+
+ _ _ _
+
+ The spacing after the blue squares and before the yellow squares should be the same as the above reference:
+
+ _ _
+ _ ... _
+ _ lim _
+
_ max _
+
_ min _
+
_ ||| _
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/operators/operator-dictionary-largeop-001.html b/testing/web-platform/tests/mathml/presentation-markup/operators/operator-dictionary-largeop-001.html
new file mode 100644
index 0000000000..457deb3422
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/operators/operator-dictionary-largeop-001.html
@@ -0,0 +1,33 @@
+
+
+
+
+Operator dictionary
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/operators/operator-dictionary-largeop-002.html b/testing/web-platform/tests/mathml/presentation-markup/operators/operator-dictionary-largeop-002.html
new file mode 100644
index 0000000000..5f132ac3b2
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/operators/operator-dictionary-largeop-002.html
@@ -0,0 +1,33 @@
+
+
+
+
+Operator dictionary
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/operators/operator-dictionary-largeop-003.html b/testing/web-platform/tests/mathml/presentation-markup/operators/operator-dictionary-largeop-003.html
new file mode 100644
index 0000000000..cb1b1e6b9b
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/operators/operator-dictionary-largeop-003.html
@@ -0,0 +1,33 @@
+
+
+
+
+Operator dictionary
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/operators/operator-dictionary-largeop-004.html b/testing/web-platform/tests/mathml/presentation-markup/operators/operator-dictionary-largeop-004.html
new file mode 100644
index 0000000000..19a6f9b2f1
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/operators/operator-dictionary-largeop-004.html
@@ -0,0 +1,33 @@
+
+
+
+
+Operator dictionary
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/operators/operator-dictionary-largeop-005.html b/testing/web-platform/tests/mathml/presentation-markup/operators/operator-dictionary-largeop-005.html
new file mode 100644
index 0000000000..fd04712693
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/operators/operator-dictionary-largeop-005.html
@@ -0,0 +1,33 @@
+
+
+
+
+Operator dictionary
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/operators/operator-dictionary-largeop-006.html b/testing/web-platform/tests/mathml/presentation-markup/operators/operator-dictionary-largeop-006.html
new file mode 100644
index 0000000000..77d23f60f7
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/operators/operator-dictionary-largeop-006.html
@@ -0,0 +1,33 @@
+
+
+
+
+Operator dictionary
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/operators/operator-dictionary-movablelimits-001.html b/testing/web-platform/tests/mathml/presentation-markup/operators/operator-dictionary-movablelimits-001.html
new file mode 100644
index 0000000000..0a21e277b4
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/operators/operator-dictionary-movablelimits-001.html
@@ -0,0 +1,33 @@
+
+
+
+
+Operator dictionary
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/operators/operator-dictionary-movablelimits-002.html b/testing/web-platform/tests/mathml/presentation-markup/operators/operator-dictionary-movablelimits-002.html
new file mode 100644
index 0000000000..2d7dc414a0
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/operators/operator-dictionary-movablelimits-002.html
@@ -0,0 +1,33 @@
+
+
+
+
+Operator dictionary
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/operators/operator-dictionary-movablelimits-003.html b/testing/web-platform/tests/mathml/presentation-markup/operators/operator-dictionary-movablelimits-003.html
new file mode 100644
index 0000000000..e166d7ffbb
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/operators/operator-dictionary-movablelimits-003.html
@@ -0,0 +1,33 @@
+
+
+
+
+Operator dictionary
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/operators/operator-dictionary-movablelimits-004.html b/testing/web-platform/tests/mathml/presentation-markup/operators/operator-dictionary-movablelimits-004.html
new file mode 100644
index 0000000000..d5dd12b383
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/operators/operator-dictionary-movablelimits-004.html
@@ -0,0 +1,33 @@
+
+
+
+
+Operator dictionary
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/operators/operator-dictionary-movablelimits-005.html b/testing/web-platform/tests/mathml/presentation-markup/operators/operator-dictionary-movablelimits-005.html
new file mode 100644
index 0000000000..d8e96e17a6
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/operators/operator-dictionary-movablelimits-005.html
@@ -0,0 +1,33 @@
+
+
+
+
+Operator dictionary
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/operators/operator-dictionary-movablelimits-006.html b/testing/web-platform/tests/mathml/presentation-markup/operators/operator-dictionary-movablelimits-006.html
new file mode 100644
index 0000000000..a6ddeb92ff
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/operators/operator-dictionary-movablelimits-006.html
@@ -0,0 +1,33 @@
+
+
+
+
+Operator dictionary
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/operators/operator-dictionary-spacing-001.html b/testing/web-platform/tests/mathml/presentation-markup/operators/operator-dictionary-spacing-001.html
new file mode 100644
index 0000000000..6839b183be
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/operators/operator-dictionary-spacing-001.html
@@ -0,0 +1,33 @@
+
+
+
+
+Operator dictionary
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/operators/operator-dictionary-spacing-002.html b/testing/web-platform/tests/mathml/presentation-markup/operators/operator-dictionary-spacing-002.html
new file mode 100644
index 0000000000..84113a9ac8
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/operators/operator-dictionary-spacing-002.html
@@ -0,0 +1,33 @@
+
+
+
+
+Operator dictionary
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/operators/operator-dictionary-spacing-003.html b/testing/web-platform/tests/mathml/presentation-markup/operators/operator-dictionary-spacing-003.html
new file mode 100644
index 0000000000..387f61922d
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/operators/operator-dictionary-spacing-003.html
@@ -0,0 +1,33 @@
+
+
+
+
+Operator dictionary
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/operators/operator-dictionary-spacing-004.html b/testing/web-platform/tests/mathml/presentation-markup/operators/operator-dictionary-spacing-004.html
new file mode 100644
index 0000000000..b27024c2d3
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/operators/operator-dictionary-spacing-004.html
@@ -0,0 +1,33 @@
+
+
+
+
+Operator dictionary
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/operators/operator-dictionary-spacing-005.html b/testing/web-platform/tests/mathml/presentation-markup/operators/operator-dictionary-spacing-005.html
new file mode 100644
index 0000000000..7acf5ab20e
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/operators/operator-dictionary-spacing-005.html
@@ -0,0 +1,33 @@
+
+
+
+
+Operator dictionary
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/operators/operator-dictionary-spacing-006.html b/testing/web-platform/tests/mathml/presentation-markup/operators/operator-dictionary-spacing-006.html
new file mode 100644
index 0000000000..928182cbe6
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/operators/operator-dictionary-spacing-006.html
@@ -0,0 +1,33 @@
+
+
+
+
+Operator dictionary
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/operators/operator-dictionary-stretchy-001.html b/testing/web-platform/tests/mathml/presentation-markup/operators/operator-dictionary-stretchy-001.html
new file mode 100644
index 0000000000..beebe77ed7
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/operators/operator-dictionary-stretchy-001.html
@@ -0,0 +1,33 @@
+
+
+
+
+Operator dictionary
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/operators/operator-dictionary-stretchy-002.html b/testing/web-platform/tests/mathml/presentation-markup/operators/operator-dictionary-stretchy-002.html
new file mode 100644
index 0000000000..2cdf0114db
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/operators/operator-dictionary-stretchy-002.html
@@ -0,0 +1,33 @@
+
+
+
+
+Operator dictionary
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/operators/operator-dictionary-stretchy-003.html b/testing/web-platform/tests/mathml/presentation-markup/operators/operator-dictionary-stretchy-003.html
new file mode 100644
index 0000000000..4f0f0b3641
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/operators/operator-dictionary-stretchy-003.html
@@ -0,0 +1,33 @@
+
+
+
+
+Operator dictionary
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/operators/operator-dictionary-stretchy-004.html b/testing/web-platform/tests/mathml/presentation-markup/operators/operator-dictionary-stretchy-004.html
new file mode 100644
index 0000000000..08428b8928
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/operators/operator-dictionary-stretchy-004.html
@@ -0,0 +1,33 @@
+
+
+
+
+Operator dictionary
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/operators/operator-dictionary-stretchy-005.html b/testing/web-platform/tests/mathml/presentation-markup/operators/operator-dictionary-stretchy-005.html
new file mode 100644
index 0000000000..94fe507755
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/operators/operator-dictionary-stretchy-005.html
@@ -0,0 +1,33 @@
+
+
+
+
+Operator dictionary
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/operators/operator-dictionary-stretchy-006.html b/testing/web-platform/tests/mathml/presentation-markup/operators/operator-dictionary-stretchy-006.html
new file mode 100644
index 0000000000..c4d5e44d43
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/operators/operator-dictionary-stretchy-006.html
@@ -0,0 +1,33 @@
+
+
+
+
+Operator dictionary
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/operators/operator-dictionary-symmetric-001.html b/testing/web-platform/tests/mathml/presentation-markup/operators/operator-dictionary-symmetric-001.html
new file mode 100644
index 0000000000..c1154cebf5
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/operators/operator-dictionary-symmetric-001.html
@@ -0,0 +1,33 @@
+
+
+
+
+Operator dictionary
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/operators/operator-dictionary-symmetric-002.html b/testing/web-platform/tests/mathml/presentation-markup/operators/operator-dictionary-symmetric-002.html
new file mode 100644
index 0000000000..3cb4b07a55
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/operators/operator-dictionary-symmetric-002.html
@@ -0,0 +1,33 @@
+
+
+
+
+Operator dictionary
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/operators/operator-dictionary-symmetric-003.html b/testing/web-platform/tests/mathml/presentation-markup/operators/operator-dictionary-symmetric-003.html
new file mode 100644
index 0000000000..7588df48f8
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/operators/operator-dictionary-symmetric-003.html
@@ -0,0 +1,33 @@
+
+
+
+
+Operator dictionary
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/operators/operator-dictionary-symmetric-004.html b/testing/web-platform/tests/mathml/presentation-markup/operators/operator-dictionary-symmetric-004.html
new file mode 100644
index 0000000000..f7d8bdc89d
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/operators/operator-dictionary-symmetric-004.html
@@ -0,0 +1,33 @@
+
+
+
+
+Operator dictionary
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/operators/operator-dictionary-symmetric-005.html b/testing/web-platform/tests/mathml/presentation-markup/operators/operator-dictionary-symmetric-005.html
new file mode 100644
index 0000000000..9303b9a482
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/operators/operator-dictionary-symmetric-005.html
@@ -0,0 +1,33 @@
+
+
+
+
+Operator dictionary
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/operators/operator-dictionary-symmetric-006.html b/testing/web-platform/tests/mathml/presentation-markup/operators/operator-dictionary-symmetric-006.html
new file mode 100644
index 0000000000..90a812786a
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/operators/operator-dictionary-symmetric-006.html
@@ -0,0 +1,33 @@
+
+
+
+
+Operator dictionary
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/operators/painting-stretchy-operator-001-ref.html b/testing/web-platform/tests/mathml/presentation-markup/operators/painting-stretchy-operator-001-ref.html
new file mode 100644
index 0000000000..0c7642a20a
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/operators/painting-stretchy-operator-001-ref.html
@@ -0,0 +1,22 @@
+
+
+
+
+Painting of vertical assembly (reference)
+
+
+ This test passes if you see a green rectangle and no red.
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/operators/painting-stretchy-operator-001.html b/testing/web-platform/tests/mathml/presentation-markup/operators/painting-stretchy-operator-001.html
new file mode 100644
index 0000000000..2a9578badc
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/operators/painting-stretchy-operator-001.html
@@ -0,0 +1,73 @@
+
+
+
+
+Painting of vertical assembly
+
+
+
+
+
+
+
+
+ This test passes if you see a green rectangle and no red.
+
+
+
+
+ ⥜
+
+
+
+
+ ⥜
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/operators/support/operator-dictionary-tests.css b/testing/web-platform/tests/mathml/presentation-markup/operators/support/operator-dictionary-tests.css
new file mode 100644
index 0000000000..4f80ad7f8d
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/operators/support/operator-dictionary-tests.css
@@ -0,0 +1,10 @@
+@font-face {
+ font-family: operators;
+ src: url("/fonts/math/operators.woff");
+}
+math, math * {
+ font-family: operators;
+ /* Use large enough font-size so that 1/18em = 2.77px > epsilon and
+ one can really distinguish lspace/rspace values. */
+ font-size: 50px;
+}
diff --git a/testing/web-platform/tests/mathml/presentation-markup/operators/support/operator-dictionary-tests.js b/testing/web-platform/tests/mathml/presentation-markup/operators/support/operator-dictionary-tests.js
new file mode 100644
index 0000000000..35efc2ecb9
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/operators/support/operator-dictionary-tests.js
@@ -0,0 +1,226 @@
+var OperatorDictionaryTests = {
+ "lspace/rspace": function(json, key) {
+ let parsedKey = splitKey(key);
+ let entry = json.dictionary[key];
+ let epsilon = 1;
+
+ document.body.insertAdjacentHTML("beforeend", `\
+lspace/rspace for "${parsedKey.characters}" (${parsedKey.form}): \
+\
+ \
+ \
+ ${parsedKey.characters} \
+ \
+ \
+ \
+ VS \
+\
+ \
+ \
+ ${parsedKey.characters} \
+ \
+ \
+ \
+
`);
+ var div = document.body.lastElementChild;
+ var mrows = div.getElementsByTagName("mrow");
+ function spaceBetween(element, i, j) {
+ return element.children[j].getBoundingClientRect().left -
+ element.children[i].getBoundingClientRect().right;
+ }
+ var lspace = spaceBetween(mrows[0], 0, 1);
+ var rspace = spaceBetween(mrows[0], 1, 2);
+ var lspaceRef = spaceBetween(mrows[1], 0, 1);
+ var rspaceRef = spaceBetween(mrows[1], 1, 2);
+ assert_approx_equals(lspace, lspaceRef, epsilon, `lspace (${key})`);
+ assert_approx_equals(rspace, rspaceRef, epsilon, `rspace (${key})`);
+ div.style.display = "none";
+ },
+
+ "movablelimits": function(json, key) {
+ let parsedKey = splitKey(key);
+ let entry = json.dictionary[key];
+ let epsilon = 1;
+
+ var defaultValue = defaultPropertyValue(entry, "movablelimits");
+ document.body.insertAdjacentHTML("beforeend", `\
+movablelimits for "${parsedKey.characters}" (${parsedKey.form}): \
+\
+ \
+ ${parsedKey.characters} \
+ \
+ \
+ \
+ VS \
+\
+ \
+ ${parsedKey.characters} \
+ \
+ \
+ \
+
`);
+ var div = document.body.lastElementChild;
+ var munders = div.getElementsByTagName("munder");
+ munder = munders[0].getBoundingClientRect()
+ munderRef = munders[1].getBoundingClientRect()
+ assert_approx_equals(munder.height, munderRef.height, epsilon, `Movablelimits property for ${key} should be '${defaultValue}'`);
+ div.style.display = "none";
+ },
+
+ "largeop": function(json, key) {
+ let parsedKey = splitKey(key);
+ let entry = json.dictionary[key];
+ let epsilon = 1;
+
+ var defaultValue = defaultPropertyValue(entry, "largeop");
+ document.body.insertAdjacentHTML("beforeend", `\
+largeop for "${parsedKey.characters}" (${parsedKey.form}): \
+\
+ ${parsedKey.characters} \
+ \
+ VS \
+\
+ ${parsedKey.characters} \
+ \
+
`);
+ var div = document.body.lastElementChild;
+ var mos = div.getElementsByTagName("mo");
+ mo = mos[0].getBoundingClientRect()
+ moRef = mos[1].getBoundingClientRect()
+ assert_approx_equals(mo.height, moRef.height, epsilon, `Largeop property for ${key} should be '${defaultValue}'`);
+ div.style.display = "none";
+ },
+
+ "stretchy": function(json, key) {
+ let parsedKey = splitKey(key);
+ let entry = json.dictionary[key];
+ let epsilon = 1;
+
+ if (entry.horizontal) {
+ // FIXME: Should really do a MathMLFeatureDetection to verify
+ // support for *horizontal* stretching.
+ var defaultValue = defaultPropertyValue(entry, "stretchy");
+ document.body.insertAdjacentHTML("beforeend", `\
+stretchy for "${parsedKey.characters}" (${parsedKey.form}): \
+\
+ \
+ \
+ ${parsedKey.characters} \
+ \
+ \
+ VS \
+\
+ \
+ \
+ ${parsedKey.characters} \
+ \
+ \
+
`);
+ var div = document.body.lastElementChild;
+ var mos = div.getElementsByTagName("mo");
+ mo = mos[0].getBoundingClientRect()
+ moRef = mos[1].getBoundingClientRect()
+ assert_approx_equals(mo.width, moRef.width, epsilon, `Stretchy property for ${key} should be '${defaultValue}'`);
+ div.style.display = "none";
+ } else {
+ var defaultValue = defaultPropertyValue(entry, "stretchy");
+ document.body.insertAdjacentHTML("beforeend", `\
+stretchy for "${parsedKey.characters}" (${parsedKey.form}): \
+\
+ \
+ ${parsedKey.characters} \
+ \
+ \
+ \
+ VS \
+\
+ \
+ ${parsedKey.characters} \
+ \
+ \
+ \
+
`);
+ var div = document.body.lastElementChild;
+ var mos = div.getElementsByTagName("mo");
+ mo = mos[0].getBoundingClientRect()
+ moRef = mos[1].getBoundingClientRect()
+ assert_approx_equals(mo.height, moRef.height, epsilon, `Stretchy property for ${key} should be '${defaultValue}'`);
+ div.style.display = "none";
+ }
+ },
+
+ "symmetric": function(json, key) {
+ let parsedKey = splitKey(key);
+ let entry = json.dictionary[key];
+ let epsilon = 1;
+
+ var defaultValue = defaultPropertyValue(entry, "symmetric");
+ document.body.insertAdjacentHTML("beforeend", `\
+symmetric for "${parsedKey.characters}" (${parsedKey.form}): \
+\
+ \
+ ${parsedKey.characters} \
+ \
+ \
+ \
+ VS \
+\
+ \
+ ${parsedKey.characters} \
+ \
+ \
+ \
+
`);
+ var div = document.body.lastElementChild;
+ var mos = div.getElementsByTagName("mo");
+ mo = mos[0].getBoundingClientRect()
+ moRef = mos[1].getBoundingClientRect()
+ assert_approx_equals(mo.height, moRef.height, epsilon, `Symmetric property for ${key} should be '${defaultValue}'`);
+ div.style.display = "none";
+ },
+
+ run: async function(json, name, fileIndex) {
+ let has_required_feature_for_testing =
+ await MathMLFeatureDetection[`has_operator_${name}`]();
+
+ // The operator dictionary has more than one thousand of entries so the
+ // tests are grouped in chunks so that these don't get much more
+ // importance than other MathML tests. For easy debugging, one can set the
+ // chunk size to 1. Also, note that the test div will remain visible for
+ // failed tests.
+ const entryPerChunk = 50
+ const filesPerProperty = 6
+
+ var counter = 0;
+ var test;
+
+ for (key in json.dictionary) {
+
+ // Skip this key if it does not belong to that test file.
+ if (counter % filesPerProperty != fileIndex) {
+ counter++;
+ continue;
+ }
+
+ var counterInFile = (counter - fileIndex) / filesPerProperty;
+ if (counterInFile % entryPerChunk === 0) {
+ // Start of a new chunk.
+ // Complete current async tests and create new ones for the next chunk.
+ if (test) test.done();
+ test = async_test(`Operator dictionary chunk ${1 + counterInFile / entryPerChunk} - ${name}`);
+
+ test.step(function() {
+ assert_true(has_required_feature_for_testing, `${name} is supported`);
+ });
+ }
+ test.step(function() {
+ OperatorDictionaryTests[name](json, key);
+ });
+
+ counter++;
+ }
+
+ // Complete current async test.
+ if (test) test.done();
+ }
+};
diff --git a/testing/web-platform/tests/mathml/presentation-markup/radicals/dynamic-radical-paint-invalidation-001-ref.html b/testing/web-platform/tests/mathml/presentation-markup/radicals/dynamic-radical-paint-invalidation-001-ref.html
new file mode 100644
index 0000000000..632d6739db
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/radicals/dynamic-radical-paint-invalidation-001-ref.html
@@ -0,0 +1,125 @@
+
+
+
+
+Dynamic radical: paint invalidation (expectation)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/radicals/dynamic-radical-paint-invalidation-001.html b/testing/web-platform/tests/mathml/presentation-markup/radicals/dynamic-radical-paint-invalidation-001.html
new file mode 100644
index 0000000000..4e9375842d
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/radicals/dynamic-radical-paint-invalidation-001.html
@@ -0,0 +1,167 @@
+
+
+
+
+Dynamic radical: paint invalidation
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/radicals/radical-rendering-from-in-flow-ref.html b/testing/web-platform/tests/mathml/presentation-markup/radicals/radical-rendering-from-in-flow-ref.html
new file mode 100644
index 0000000000..e1b8c3d161
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/radicals/radical-rendering-from-in-flow-ref.html
@@ -0,0 +1,18 @@
+
+
+
+
+ radicals rendering from in-flow children
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/radicals/radical-rendering-from-in-flow.html b/testing/web-platform/tests/mathml/presentation-markup/radicals/radical-rendering-from-in-flow.html
new file mode 100644
index 0000000000..7a5de3811b
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/radicals/radical-rendering-from-in-flow.html
@@ -0,0 +1,49 @@
+
+
+
+
+ radicals rendering from in-flow children
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/radicals/root-parameters-1.html b/testing/web-platform/tests/mathml/presentation-markup/radicals/root-parameters-1.html
new file mode 100644
index 0000000000..7600c35c59
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/radicals/root-parameters-1.html
@@ -0,0 +1,222 @@
+
+
+
+
+Radical parameters
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/radicals/root-parameters-2.html b/testing/web-platform/tests/mathml/presentation-markup/radicals/root-parameters-2.html
new file mode 100644
index 0000000000..01d636b522
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/radicals/root-parameters-2.html
@@ -0,0 +1,79 @@
+
+
+
+
+Radical parameters
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/scripts/cramped-001.html b/testing/web-platform/tests/mathml/presentation-markup/scripts/cramped-001.html
new file mode 100644
index 0000000000..e03b4d968d
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/scripts/cramped-001.html
@@ -0,0 +1,627 @@
+
+
+
+
+Cramped elements
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0
+ 1
+
+
+
+
+ 3
+ 4
+
+
+
+
+
+
+ 0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1
+
+
+
+
+
+
+
+
+
+
+ 1
+
+
+
+
+
+
+ 0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1
+
+
+
+
+
+
+ 0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1
+
+
+
+
+
+
+ 0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1
+ 2
+
+
+
+
+
+
+ 0
+
+
+
+
+ 2
+
+
+
+
+
+
+ 0
+ 1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1
+
+
+
+
+
+
+ 0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1
+
+
+
+
+
+
+ 0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1
+
+
+
+
+
+
+ 0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1
+ 2
+
+
+
+
+
+
+ 0
+
+
+
+
+ 2
+
+
+
+
+
+
+ 0
+ 1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1
+ 2
+
+
+
+
+
+
+ 0
+
+
+
+
+ 2
+
+
+
+
+
+
+ 0
+ 1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1
+ 2
+ 3
+ 4
+ 5
+ 6
+
+ 7
+ 8
+ 9
+ 10
+ 11
+ 12
+
+
+
+
+
+
+ 0
+ 1
+ 2
+
+
+
+
+ 4
+ 5
+ 6
+
+ 7
+ 8
+ 9
+ 10
+ 11
+ 12
+
+
+
+
+
+
+ 0
+ 1
+ 2
+ 3
+
+
+
+
+ 5
+ 6
+
+ 7
+ 8
+ 9
+ 10
+ 11
+ 12
+
+
+
+
+
+
+ 0
+ 1
+ 2
+ 3
+ 4
+ 5
+ 6
+
+ 7
+ 8
+
+
+
+
+ 10
+ 11
+ 12
+
+
+
+
+
+
+ 0
+ 1
+ 2
+ 3
+ 4
+ 5
+ 6
+
+ 7
+ 8
+ 9
+
+
+
+
+ 11
+ 12
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/scripts/empty-underover.html b/testing/web-platform/tests/mathml/presentation-markup/scripts/empty-underover.html
new file mode 100644
index 0000000000..b5fcc9c4ca
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/scripts/empty-underover.html
@@ -0,0 +1,68 @@
+
+
+
+
+Test Script and Limit Schemata
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/scripts/mover-accent-dynamic-change-ref.html b/testing/web-platform/tests/mathml/presentation-markup/scripts/mover-accent-dynamic-change-ref.html
new file mode 100644
index 0000000000..a4f16aa07f
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/scripts/mover-accent-dynamic-change-ref.html
@@ -0,0 +1,9 @@
+
+MathML Reference
+The 1's below should have the same size
+
+
+ 1
+ 1
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/scripts/mover-accent-dynamic-change.html b/testing/web-platform/tests/mathml/presentation-markup/scripts/mover-accent-dynamic-change.html
new file mode 100644
index 0000000000..a744149e60
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/scripts/mover-accent-dynamic-change.html
@@ -0,0 +1,16 @@
+
+MathML: Dynamically change accent on mover
+
+
+
+The 1's below should have the same size
+
+
+ 1
+ 1
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/scripts/mprescripts-001-ref.html b/testing/web-platform/tests/mathml/presentation-markup/scripts/mprescripts-001-ref.html
new file mode 100644
index 0000000000..f8631539c0
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/scripts/mprescripts-001-ref.html
@@ -0,0 +1,19 @@
+
+
+
+
+ mprescripts should render as an mrow (reference)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/scripts/mprescripts-001.html b/testing/web-platform/tests/mathml/presentation-markup/scripts/mprescripts-001.html
new file mode 100644
index 0000000000..2435b6291d
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/scripts/mprescripts-001.html
@@ -0,0 +1,26 @@
+
+
+
+
+ mprescripts should render as an mrow
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/scripts/none-001-ref.html b/testing/web-platform/tests/mathml/presentation-markup/scripts/none-001-ref.html
new file mode 100644
index 0000000000..55add01415
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/scripts/none-001-ref.html
@@ -0,0 +1,19 @@
+
+
+
+
+ none should render as an mrow (reference)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/scripts/none-001.html b/testing/web-platform/tests/mathml/presentation-markup/scripts/none-001.html
new file mode 100644
index 0000000000..f1bfb442f7
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/scripts/none-001.html
@@ -0,0 +1,26 @@
+
+
+
+
+ none should render as an mrow
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/scripts/none-002-ref.html b/testing/web-platform/tests/mathml/presentation-markup/scripts/none-002-ref.html
new file mode 100644
index 0000000000..dac4dab553
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/scripts/none-002-ref.html
@@ -0,0 +1,73 @@
+
+
+
+
+ none used at other places than mmultiscripts' script (reference)
+
+
+
+
+
+
+
+
+ 2
+
+
+
+
+ 1
+
+
+
+
+
+
+
+
+ 2
+
+
+
+
+ 1
+
+
+
+
+
+
+
+
+ 2
+ 3
+
+
+
+
+ 1
+
+ 3
+
+
+
+
+ 1
+ 2
+
+
+
+
+
+
+
+
+ 2
+ 3
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/scripts/none-002.html b/testing/web-platform/tests/mathml/presentation-markup/scripts/none-002.html
new file mode 100644
index 0000000000..d1f3a3a0e1
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/scripts/none-002.html
@@ -0,0 +1,76 @@
+
+
+
+
+ none used at other places than mmultiscripts' script
+
+
+
+
+
+
+
+
+
+
+
+ 2
+
+
+
+
+ 1
+
+
+
+
+
+
+
+
+ 2
+
+
+
+
+ 1
+
+
+
+
+
+
+
+
+ 2
+ 3
+
+
+
+
+ 1
+
+ 3
+
+
+
+
+ 1
+ 2
+
+
+
+
+
+
+
+
+ 2
+ 3
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/scripts/subsup-1.html b/testing/web-platform/tests/mathml/presentation-markup/scripts/subsup-1.html
new file mode 100644
index 0000000000..1117e1008e
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/scripts/subsup-1.html
@@ -0,0 +1,114 @@
+
+
+
+
+Subscripts and Superscripts metrics
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/scripts/subsup-2.html b/testing/web-platform/tests/mathml/presentation-markup/scripts/subsup-2.html
new file mode 100644
index 0000000000..9c89dd3727
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/scripts/subsup-2.html
@@ -0,0 +1,173 @@
+
+
+
+
+Subscripts and Superscripts metrics
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/scripts/subsup-3.html b/testing/web-platform/tests/mathml/presentation-markup/scripts/subsup-3.html
new file mode 100644
index 0000000000..28db9b70cc
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/scripts/subsup-3.html
@@ -0,0 +1,192 @@
+
+
+
+
+Subscripts and Superscripts metrics
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/scripts/subsup-4.html b/testing/web-platform/tests/mathml/presentation-markup/scripts/subsup-4.html
new file mode 100644
index 0000000000..cdf6cbe20e
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/scripts/subsup-4.html
@@ -0,0 +1,129 @@
+
+
+
+
+Subscripts and Superscripts metrics
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/scripts/subsup-5.html b/testing/web-platform/tests/mathml/presentation-markup/scripts/subsup-5.html
new file mode 100644
index 0000000000..1743c2e499
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/scripts/subsup-5.html
@@ -0,0 +1,97 @@
+
+
+
+
+Subscripts and Superscripts metrics
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/scripts/subsup-6.html b/testing/web-platform/tests/mathml/presentation-markup/scripts/subsup-6.html
new file mode 100644
index 0000000000..9666c80f9f
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/scripts/subsup-6.html
@@ -0,0 +1,120 @@
+
+
+
+
+mprescripts
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/scripts/subsup-legacy-scriptshift-attributes-001.tentative-ref.html b/testing/web-platform/tests/mathml/presentation-markup/scripts/subsup-legacy-scriptshift-attributes-001.tentative-ref.html
new file mode 100644
index 0000000000..c1bf2e4695
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/scripts/subsup-legacy-scriptshift-attributes-001.tentative-ref.html
@@ -0,0 +1,35 @@
+
+
+
+
+ msub/msup/msubsup/mmultiscripts subscriptshift and superscriptshift attributes (reference)
+
+
+ Test passes if the green squares are not about 300px away from the blue squares.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/scripts/subsup-legacy-scriptshift-attributes-001.tentative.html b/testing/web-platform/tests/mathml/presentation-markup/scripts/subsup-legacy-scriptshift-attributes-001.tentative.html
new file mode 100644
index 0000000000..2f29db401d
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/scripts/subsup-legacy-scriptshift-attributes-001.tentative.html
@@ -0,0 +1,48 @@
+
+
+
+
+ msub/msup/msubsup/mmultiscripts subscriptshift and superscriptshift attributes
+
+
+
+
+
+
+
+
+
+ Test passes if the green squares are not about 300px away from the blue squares.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/scripts/subsup-parameters-1.html b/testing/web-platform/tests/mathml/presentation-markup/scripts/subsup-parameters-1.html
new file mode 100644
index 0000000000..3f49b1d53b
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/scripts/subsup-parameters-1.html
@@ -0,0 +1,354 @@
+
+
+
+
+Subscripts and Superscripts parameters
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/scripts/subsup-parameters-2.html b/testing/web-platform/tests/mathml/presentation-markup/scripts/subsup-parameters-2.html
new file mode 100644
index 0000000000..205697f4e4
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/scripts/subsup-parameters-2.html
@@ -0,0 +1,181 @@
+
+
+
+
+Subscripts and Superscripts parameters
+
+
+
+
+
+
+
+
+
+
+
+ Null Italic Correction
+
+
+
+ ⫿
+
+
+
+
+
+ ⫿
+
+
+
+
+
+ ⫿
+
+
+
+
+
+
+ ⫿
+
+
+
+
+
+
+
+
+ NonNull Italic Correction (MathGlyphVariantRecord)
+
+
+
+ ⫿
+
+
+
+
+
+ ⫿
+
+
+
+
+
+ ⫿
+
+
+
+
+
+
+ ⫿
+
+
+
+
+
+
+
+
+ NonNull Italic Correction (GlyphAssembly)
+
+
+
+ ⫿
+
+
+
+
+
+ ⫿
+
+
+
+
+
+ ⫿
+
+
+
+
+
+
+ ⫿
+
+
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/scripts/underover-1.html b/testing/web-platform/tests/mathml/presentation-markup/scripts/underover-1.html
new file mode 100644
index 0000000000..ae4a945404
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/scripts/underover-1.html
@@ -0,0 +1,175 @@
+
+
+
+
+Underscripts and Overscripts parameters
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/scripts/underover-legacy-align-attribute-001-ref.html b/testing/web-platform/tests/mathml/presentation-markup/scripts/underover-legacy-align-attribute-001-ref.html
new file mode 100644
index 0000000000..a9545c60f4
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/scripts/underover-legacy-align-attribute-001-ref.html
@@ -0,0 +1,61 @@
+
+
+
+
+ munder/mover/munderover align (reference)
+
+
+ Test passes if the center of the following rectangles is aligned
+ on the same vertical axis.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/scripts/underover-legacy-align-attribute-001.html b/testing/web-platform/tests/mathml/presentation-markup/scripts/underover-legacy-align-attribute-001.html
new file mode 100644
index 0000000000..aa2460e062
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/scripts/underover-legacy-align-attribute-001.html
@@ -0,0 +1,72 @@
+
+
+
+
+ munder/mover/munderover align
+
+
+
+
+
+
+
+
+ Test passes if the center of the following rectangles is aligned
+ on the same vertical axis.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/scripts/underover-parameters-1.html b/testing/web-platform/tests/mathml/presentation-markup/scripts/underover-parameters-1.html
new file mode 100644
index 0000000000..eb2e0512e0
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/scripts/underover-parameters-1.html
@@ -0,0 +1,151 @@
+
+
+
+
+Underscripts and Overscripts parameters
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ∑
+
+
+
+ ∑
+
+
+
+
+
+
+
+
+
+
+ ∑
+
+
+
+ ∑
+
+
+
+
+
+
+
+
+
+
+ ∑
+
+
+
+ ∑
+
+
+
+
+
+
+
+
+
+
+ ∑
+
+
+
+ ∑
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/scripts/underover-parameters-2.html b/testing/web-platform/tests/mathml/presentation-markup/scripts/underover-parameters-2.html
new file mode 100644
index 0000000000..aad03a3863
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/scripts/underover-parameters-2.html
@@ -0,0 +1,151 @@
+
+
+
+
+Underscripts and Overscripts parameters
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ →
+
+
+
+ →
+
+
+
+
+
+
+
+
+
+
+ →
+
+
+
+ →
+
+
+
+
+
+
+
+
+
+
+ →
+
+
+
+ →
+
+
+
+
+
+
+
+
+
+
+ →
+
+
+
+ →
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/scripts/underover-parameters-3.html b/testing/web-platform/tests/mathml/presentation-markup/scripts/underover-parameters-3.html
new file mode 100644
index 0000000000..9ec9dbf47e
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/scripts/underover-parameters-3.html
@@ -0,0 +1,452 @@
+
+
+
+
+Underscripts and Overscripts parameters
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/scripts/underover-parameters-4.tentative.html b/testing/web-platform/tests/mathml/presentation-markup/scripts/underover-parameters-4.tentative.html
new file mode 100644
index 0000000000..5000d24f18
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/scripts/underover-parameters-4.tentative.html
@@ -0,0 +1,335 @@
+
+
+
+
+Underscripts and Overscripts parameters
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ °
+
+
+
+ ˘
+
+
+
+ ˘
+
+
+
+ °
+ °
+
+
+
+ ˘
+ ˘
+
+
+
+ ˘
+ ˘
+
+
+
+
+
+
+
+
+
+ ˘
+
+
+
+ ˘
+
+
+
+ °
+
+
+
+ ˘
+ ˘
+
+
+
+ ˘
+ ˘
+
+
+
+ ˘
+ ˘
+
+
+
+
+
+
+
+
+
+ °
+
+
+
+ °
+
+
+
+ ˘
+
+
+
+ °
+ ˘
+
+
+
+ ˘
+ ˘
+
+
+
+ ˘
+ ˘
+
+
+
+
+
+
+
+
+
+ °
+
+
+
+ °
+
+
+
+ ˘
+
+
+
+ °
+ ˘
+
+
+
+ ˘
+ ˘
+
+
+
+ ˘
+ ˘
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/scripts/underover-parameters-and-embellished-operator-1.html b/testing/web-platform/tests/mathml/presentation-markup/scripts/underover-parameters-and-embellished-operator-1.html
new file mode 100644
index 0000000000..1c236eabed
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/scripts/underover-parameters-and-embellished-operator-1.html
@@ -0,0 +1,151 @@
+
+
+
+
+Underscripts and Overscripts parameters (embellished operators)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ∑
+
+
+
+ ∑
+
+
+
+
+
+
+
+
+
+
+ ∑
+
+
+
+ ∑
+
+
+
+
+
+
+
+
+
+
+ ∑
+
+
+
+ ∑
+
+
+
+
+
+
+
+
+
+
+ ∑
+
+
+
+ ∑
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/scripts/underover-parameters-and-embellished-operator-2.html b/testing/web-platform/tests/mathml/presentation-markup/scripts/underover-parameters-and-embellished-operator-2.html
new file mode 100644
index 0000000000..04a97786c4
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/scripts/underover-parameters-and-embellished-operator-2.html
@@ -0,0 +1,151 @@
+
+
+
+
+Underscripts and Overscripts parameters (embellished operators)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ →
+
+
+
+ →
+
+
+
+
+
+
+
+
+
+
+ →
+
+
+
+ →
+
+
+
+
+
+
+
+
+
+
+ →
+
+
+
+ →
+
+
+
+
+
+
+
+
+
+
+ →
+
+
+
+ →
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/scripts/underover-stretchy-001-ref.html b/testing/web-platform/tests/mathml/presentation-markup/scripts/underover-stretchy-001-ref.html
new file mode 100644
index 0000000000..89ac9c6324
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/scripts/underover-stretchy-001-ref.html
@@ -0,0 +1,167 @@
+
+
+
+
+Horizontal stretchy operator (reference)
+
+
+ This test passes if you see green rectangles and no red.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ⥚
+
+ ⥚
+
+
+
+
+
+
+
+
+
+
+ ⥚
+
+ ⥚
+
+
+
+
+
+
+
+
+
+
+
+ ⥚
+ ⥚
+
+
+
+
+
+
+
+
+
+
+ ⥚
+ ⥚
+ ⥚
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/scripts/underover-stretchy-001.html b/testing/web-platform/tests/mathml/presentation-markup/scripts/underover-stretchy-001.html
new file mode 100644
index 0000000000..6b0f99ec11
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/scripts/underover-stretchy-001.html
@@ -0,0 +1,270 @@
+
+
+
+
+Horizontal stretchy operator
+
+
+
+
+
+
+
+
+ This test passes if you see green rectangles and no red.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ⥚
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ⥚
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ⥚
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ⥚
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ⥚
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ⥚
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ⥚
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ⥚
+
+ ⥚
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ⥚
+
+ ⥚
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ⥚
+ ⥚
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ⥚
+ ⥚
+ ⥚
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/scripts/underover-stretchy-002-ref.html b/testing/web-platform/tests/mathml/presentation-markup/scripts/underover-stretchy-002-ref.html
new file mode 100644
index 0000000000..c12c74d654
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/scripts/underover-stretchy-002-ref.html
@@ -0,0 +1,167 @@
+
+
+
+
+Horizontal stretchy operator, embellished with two nested mrows (reference)
+
+
+ This test passes if you see green rectangles and no red.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ⥚
+
+ ⥚
+
+
+
+
+
+
+
+
+
+
+ ⥚
+
+ ⥚
+
+
+
+
+
+
+
+
+
+
+
+ ⥚
+ ⥚
+
+
+
+
+
+
+
+
+
+
+ ⥚
+ ⥚
+ ⥚
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/scripts/underover-stretchy-002.html b/testing/web-platform/tests/mathml/presentation-markup/scripts/underover-stretchy-002.html
new file mode 100644
index 0000000000..a1cfa20bb4
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/scripts/underover-stretchy-002.html
@@ -0,0 +1,272 @@
+
+
+
+
+Horizontal stretchy operator, embellished with two nested mrows
+
+
+
+
+
+
+
+
+
+
+ This test passes if you see green rectangles and no red.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ⥚
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ⥚
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ⥚
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ⥚
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ⥚
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ⥚
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ⥚
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ⥚
+
+ ⥚
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ⥚
+
+ ⥚
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ⥚
+ ⥚
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ⥚
+ ⥚
+ ⥚
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/scripts/underover-stretchy-003-ref.html b/testing/web-platform/tests/mathml/presentation-markup/scripts/underover-stretchy-003-ref.html
new file mode 100644
index 0000000000..02c7ce2efb
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/scripts/underover-stretchy-003-ref.html
@@ -0,0 +1,167 @@
+
+
+
+
+Horizontal stretchy operator, embellished with an munderover (reference)
+
+
+ This test passes if you see green rectangles and no red.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ⥚
+
+ ⥚
+
+
+
+
+
+
+
+
+
+
+ ⥚
+
+ ⥚
+
+
+
+
+
+
+
+
+
+
+
+ ⥚
+ ⥚
+
+
+
+
+
+
+
+
+
+
+ ⥚
+ ⥚
+ ⥚
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/scripts/underover-stretchy-003.html b/testing/web-platform/tests/mathml/presentation-markup/scripts/underover-stretchy-003.html
new file mode 100644
index 0000000000..735fcab63e
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/scripts/underover-stretchy-003.html
@@ -0,0 +1,272 @@
+
+
+
+
+Horizontal stretchy operator, embellished with an munderover
+
+
+
+
+
+
+
+
+
+
+ This test passes if you see green rectangles and no red.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ⥚
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ⥚
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ⥚
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ⥚
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ⥚
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ⥚
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ⥚
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ⥚
+
+ ⥚
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ⥚
+
+ ⥚
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ⥚
+ ⥚
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ⥚
+ ⥚
+ ⥚
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/spaces/mspace-children-ref.html b/testing/web-platform/tests/mathml/presentation-markup/spaces/mspace-children-ref.html
new file mode 100644
index 0000000000..ae74024c2f
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/spaces/mspace-children-ref.html
@@ -0,0 +1,11 @@
+
+
+
+
+space (reference)
+
+
+ Test passes if you see a green square and no text.
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/spaces/mspace-children.html b/testing/web-platform/tests/mathml/presentation-markup/spaces/mspace-children.html
new file mode 100644
index 0000000000..8520f83d24
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/spaces/mspace-children.html
@@ -0,0 +1,13 @@
+
+
+
+space
+
+
+
+
+
+ Test passes if you see a green square and no text.
+ Text Node x
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/spaces/mspace-percentage-001-ref.html b/testing/web-platform/tests/mathml/presentation-markup/spaces/mspace-percentage-001-ref.html
new file mode 100644
index 0000000000..da4f1dd397
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/spaces/mspace-percentage-001-ref.html
@@ -0,0 +1,18 @@
+
+
+
+
+ mspace percentages (reference)
+
+
+
+ This test passes if there is a green square with no red.
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/spaces/mspace-percentage-001.html b/testing/web-platform/tests/mathml/presentation-markup/spaces/mspace-percentage-001.html
new file mode 100644
index 0000000000..758429e1db
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/spaces/mspace-percentage-001.html
@@ -0,0 +1,33 @@
+
+
+
+
+ mspace percentages
+
+
+
+
+
+
+ This test passes if there is a green square with no red.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/spaces/mspace-width-height-001.html b/testing/web-platform/tests/mathml/presentation-markup/spaces/mspace-width-height-001.html
new file mode 100644
index 0000000000..52b3eaa190
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/spaces/mspace-width-height-001.html
@@ -0,0 +1,113 @@
+
+
+
+
+Space
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/spaces/space-1.html b/testing/web-platform/tests/mathml/presentation-markup/spaces/space-1.html
new file mode 100644
index 0000000000..4cb2a58a3c
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/spaces/space-1.html
@@ -0,0 +1,150 @@
+
+
+
+
+Space
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/spaces/space-2-ref.html b/testing/web-platform/tests/mathml/presentation-markup/spaces/space-2-ref.html
new file mode 100644
index 0000000000..5a8b39e189
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/spaces/space-2-ref.html
@@ -0,0 +1,15 @@
+
+
+
+
+space (reference)
+
+
+ Test passes if you see a green square and no red.
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/spaces/space-2.html b/testing/web-platform/tests/mathml/presentation-markup/spaces/space-2.html
new file mode 100644
index 0000000000..640afb204f
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/spaces/space-2.html
@@ -0,0 +1,42 @@
+
+
+
+
+space
+
+
+
+
+
+ Test passes if you see a green square and no red.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/spaces/space-like-001.html b/testing/web-platform/tests/mathml/presentation-markup/spaces/space-like-001.html
new file mode 100644
index 0000000000..60e81095ad
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/spaces/space-like-001.html
@@ -0,0 +1,340 @@
+
+
+
+
+Space-like elements
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ X
+
+
+ X
+ X
+
+ X
+
+
+
+
+ X
+
+
+
+ X
+
+ X
+
+
+
+
+ X
+
+
+
+ X
+
+
+ X
+
+ X
+
+
+
+
+ X
+
+
+
+ X
+
+
+ X
+
+ X
+
+
+
+
+ X
+
+
+
+ X
+
+
+ X
+
+ X
+
+
+
+
+ X
+
+
+
+ X
+
+
+ X
+
+ X
+
+
+
+
+ X
+
+
+
+ X
+
+
+ X
+
+ X
+
+
+
+
+ X
+
+
+
+ X
+
+
+ X
+
+ X
+
+
+
+
+ X
+
+
+
+ X
+
+
+ X
+
+ X
+
+
+
+
+ X
+
+
+
+ X
+
+
+ X
+
+ X
+
+
+
+
+ X
+
+
+
+ X
+
+
+ X
+
+ X
+
+
+
+
+ X
+
+
+
+ X
+
+
+ X
+
+ X
+
+
+
+
+ X
+
+
+
+ X
+
+
+ X
+
+ X
+
+
+
+
+ X
+
+
+
+ X
+
+
+ X
+
+ X
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/spaces/space-like-002.html b/testing/web-platform/tests/mathml/presentation-markup/spaces/space-like-002.html
new file mode 100644
index 0000000000..fba92adf23
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/spaces/space-like-002.html
@@ -0,0 +1,174 @@
+
+
+
+
+Space-like elements
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ X
+
+
+
+ X
+ STATUS MESSAGE
+
+ X
+
+ X
+
+
+
+
+ X
+
+
+
+
+ X
+
+ X
+
+
+
+
+ X
+
+
+
+ 1
+ STATUS MESSAGE
+
+ X
+
+ X
+
+
+
+
+ X
+
+
+
+ X
+ TEXT ANNOTATION
+
+ X
+
+ X
+
+
+
+
+ X
+
+
+
+
+ X
+
+ X
+
+
+
+
+ X
+
+
+
+ 1
+ TEXT ANNOTATION
+
+ X
+
+ X
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/spaces/space-like-003.html b/testing/web-platform/tests/mathml/presentation-markup/spaces/space-like-003.html
new file mode 100644
index 0000000000..5b693fb3c9
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/spaces/space-like-003.html
@@ -0,0 +1,252 @@
+
+
+
+
+Non space-like elements
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ X
+
+
+ X
+ X
+
+ X
+
+ X
+
+
+
+
+ X
+
+
+ X
+ X
+
+ X
+
+ X
+
+
+
+
+ X
+
+ X
+ X
+
+ X
+
+
+
+
+ X
+
+
+ X
+ X
+ X
+
+ X
+
+ X
+
+
+
+
+ X
+
+ X
+ X
+
+ X
+
+
+
+
+ X
+
+ X
+ X
+
+ X
+
+
+
+
+ X
+
+
+ X
+ X
+
+ X
+
+ X
+
+
+
+
+ X
+
+
+ X
+ X
+
+ X
+
+ X
+
+
+
+
+ X
+
+ X
+ X
+
+ X
+
+
+
+
+ X
+
+
+ X
+ X
+ X
+
+ X
+
+ X
+
+
+
+
+ X
+
+
+ X
+ X
+
+ X
+
+ X
+
+
+
+
+ X
+
+
+ X
+ X
+
+ X
+
+ X
+
+
+
+
+ X
+
+
+ X
+ X
+ X
+
+ X
+
+ X
+
+
+
+
+ X
+
+
+ X
+
+ X
+
+ X
+
+
+
+
+ X
+
+
+
+
+ X
+
+
+
+ X
+
+ X
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/spaces/space-like-004.html b/testing/web-platform/tests/mathml/presentation-markup/spaces/space-like-004.html
new file mode 100644
index 0000000000..1e8cfaaaca
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/spaces/space-like-004.html
@@ -0,0 +1,446 @@
+
+
+
+
+Space-like elements
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ X
+
+
+
+ X
+
+
+ X
+ X
+
+ X
+
+
+ X
+
+ X
+
+
+ X
+
+
+
+ X
+ X
+
+
+
+
+ X
+
+
+
+ X
+
+
+ X
+ X
+
+ X
+ X
+
+
+ X
+
+
+ X
+ X
+
+
+
+
+
+ X
+
+ X
+
+
+
+
+ 0 1 2
+ X
+ 0 1 2
+
+
+
+ 0 1 2
+ X
+ 0 1 2
+
+ 0 1 2
+
+ 0 1 2
+ X
+ 0 1 2
+ X
+ 0 1 2
+
+ 0 1 2
+ X
+ 0 1 2
+
+ 0 1 2
+
+ 0 1 2
+ X
+ 0 1 2
+
+ 0 1 2
+ X
+ 0 1 2
+
+ 0 1 2
+
+ 0 1 2
+ X
+ 0 1 2
+
+ 0 1 2
+
+ 0 1 2
+
+ 0 1 2
+ X
+ 0 1 2
+ X
+ 0 1 2
+
+ 0 1 2
+
+ 0 1 2
+
+ 0 1 2
+
+ 0 1 2
+ X
+ 0 1 2
+
+ 0 1 2
+
+ 0 1 2
+
+ 0 1 2
+ X
+ 0 1 2
+
+ 0 1 2
+
+ 0 1 2
+ X
+ 0 1 2
+ X
+ 0 1 2
+
+ 0 1 2
+ X
+ 0 1 2
+ X
+ 0 1 2
+
+ 0 1 2
+
+ 0 1 2
+ X
+ 0 1 2
+
+ 0 1 2
+
+ 0 1 2
+ X
+ 0 1 2
+ X
+ 0 1 2
+
+ 0 1 2
+
+ 0 1 2
+
+ 0 1 2
+
+ 0 1 2
+
+ 0 1 2
+ X
+ 0 1 2
+
+ 0 1 2
+ X
+ 0 1 2
+
+
+
+
+ X
+
+
+
+ X
+
+
+ X
+ X
+
+ X
+
+
+ X
+
+ X
+
+
+ X
+
+
+
+ X
+ X
+
+
+
+
+ X
+
+
+
+ X
+
+
+ X
+ X
+
+ X
+ X
+
+
+ X
+
+
+ X
+ X
+
+
+
+
+
+ X
+
+ X
+
+
+
+
+ 0 1 2
+ X
+ 0 1 2
+
+
+
+ 0 1 2
+ X
+ 0 1 2
+
+ 0 1 2
+
+ 0 1 2
+ X
+ 0 1 2
+ X
+ 0 1 2
+
+ 0 1 2
+ X
+ 0 1 2
+
+ 0 1 2
+
+ 0 1 2
+ X
+ 0 1 2
+
+ 0 1 2
+ X
+ 0 1 2
+
+ 0 1 2
+
+ 0 1 2
+ X
+ 0 1 2
+
+ 0 1 2
+
+ 0 1 2
+
+ 0 1 2
+ X
+ 0 1 2
+ X
+ 0 1 2
+
+ 0 1 2
+
+ 0 1 2
+
+ 0 1 2
+
+ 0 1 2
+ X
+ 0 1 2
+
+ 0 1 2
+
+ 0 1 2
+
+ 0 1 2
+ X
+ 0 1 2
+
+ 0 1 2
+
+ 0 1 2
+ X
+ 0 1 2
+ X
+ 0 1 2
+
+ 0 1 2
+ X
+ 0 1 2
+ X
+ 0 1 2
+
+ 0 1 2
+
+ 0 1 2
+ X
+ 0 1 2
+
+ 0 1 2
+
+ 0 1 2
+ X
+ 0 1 2
+ X
+ 0 1 2
+
+ 0 1 2
+
+ 0 1 2
+
+ 0 1 2
+
+ 0 1 2
+
+ 0 1 2
+ X
+ 0 1 2
+
+ 0 1 2
+ X
+ 0 1 2
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/spaces/space-vertical-align.tentative-ref.html b/testing/web-platform/tests/mathml/presentation-markup/spaces/space-vertical-align.tentative-ref.html
new file mode 100644
index 0000000000..ed30edde96
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/spaces/space-vertical-align.tentative-ref.html
@@ -0,0 +1,15 @@
+
+
+
+
+space and vertical-align (reference)
+
+
+ Test passes if you see a green square.
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/spaces/space-vertical-align.tentative.html b/testing/web-platform/tests/mathml/presentation-markup/spaces/space-vertical-align.tentative.html
new file mode 100644
index 0000000000..359b12aa34
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/spaces/space-vertical-align.tentative.html
@@ -0,0 +1,22 @@
+
+
+
+
+space and vertical-align
+
+
+
+
+
+ Test passes if you see a green square.
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/tables/dynamic-table-001.html b/testing/web-platform/tests/mathml/presentation-markup/tables/dynamic-table-001.html
new file mode 100644
index 0000000000..a07ef94d27
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/tables/dynamic-table-001.html
@@ -0,0 +1,301 @@
+
+
+
+
+Dynamic tabular elements
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/tables/table-001.html b/testing/web-platform/tests/mathml/presentation-markup/tables/table-001.html
new file mode 100644
index 0000000000..91e99184df
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/tables/table-001.html
@@ -0,0 +1,286 @@
+
+
+
+
+Basic table layout
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/tables/table-002.html b/testing/web-platform/tests/mathml/presentation-markup/tables/table-002.html
new file mode 100644
index 0000000000..b1d75db0c0
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/tables/table-002.html
@@ -0,0 +1,146 @@
+
+
+
+
+Basic table alignment
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/tables/table-003.html b/testing/web-platform/tests/mathml/presentation-markup/tables/table-003.html
new file mode 100644
index 0000000000..323cb03c8a
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/tables/table-003.html
@@ -0,0 +1,146 @@
+
+
+
+
+Basic table alignment
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/tables/table-axis-height.html b/testing/web-platform/tests/mathml/presentation-markup/tables/table-axis-height.html
new file mode 100644
index 0000000000..58f9d64c21
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/tables/table-axis-height.html
@@ -0,0 +1,55 @@
+
+
+
+
+table axis height
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/tables/table-cell-mrow-layout.html b/testing/web-platform/tests/mathml/presentation-markup/tables/table-cell-mrow-layout.html
new file mode 100644
index 0000000000..1e76e3949a
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/tables/table-cell-mrow-layout.html
@@ -0,0 +1,74 @@
+
+
+
+
+Table cell mrow layout
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/tables/table-default-styles-001.html b/testing/web-platform/tests/mathml/presentation-markup/tables/table-default-styles-001.html
new file mode 100644
index 0000000000..495cdc000a
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/tables/table-default-styles-001.html
@@ -0,0 +1,49 @@
+
+
+Tabular math elements default styles
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/tokens/dynamic-mtext-like-001-ref.html b/testing/web-platform/tests/mathml/presentation-markup/tokens/dynamic-mtext-like-001-ref.html
new file mode 100644
index 0000000000..a145a8eb51
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/tokens/dynamic-mtext-like-001-ref.html
@@ -0,0 +1,43 @@
+
+
+
+
+Dynamic mtext-like elements (reference)
+
+
+
+
+
+ É
+ pX
+ Xp
+ É
+ pX
+ Xp
+ É
+ pX
+ Xp
+ É
+ pX
+ Xp
+ É
+ pX
+ Xp
+ É
+ pX
+ Xp
+ É
+ pX
+ É
+ pX
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/tokens/dynamic-mtext-like-001.html b/testing/web-platform/tests/mathml/presentation-markup/tokens/dynamic-mtext-like-001.html
new file mode 100644
index 0000000000..8e42f7fa17
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/tokens/dynamic-mtext-like-001.html
@@ -0,0 +1,70 @@
+
+
+
+
+Dynamic mtext-like elements
+
+
+
+
+
+
+
+
+
+
+
+ X
+ p
+
+ X
+ p
+
+ X
+ p
+
+ X
+ p
+
+ X
+ p
+
+ X
+ p
+
+
+ X
+
+ X
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/tokens/ms-001-ref.html b/testing/web-platform/tests/mathml/presentation-markup/tokens/ms-001-ref.html
new file mode 100644
index 0000000000..bbd42a93ee
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/tokens/ms-001-ref.html
@@ -0,0 +1,22 @@
+
+
+
+
+ ms legacy lquote and rquote attributes (reference)
+
+
+
+
+
+
+
+ X
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/presentation-markup/tokens/ms-001.html b/testing/web-platform/tests/mathml/presentation-markup/tokens/ms-001.html
new file mode 100644
index 0000000000..abac0c8b2e
--- /dev/null
+++ b/testing/web-platform/tests/mathml/presentation-markup/tokens/ms-001.html
@@ -0,0 +1,30 @@
+
+
+
+
+ ms legacy lquote and rquote attributes
+
+
+
+
+
+
+
+
+
+
+
+
+ X
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/relations/css-styling/attribute-mapping-001.html b/testing/web-platform/tests/mathml/relations/css-styling/attribute-mapping-001.html
new file mode 100644
index 0000000000..e423b16fd7
--- /dev/null
+++ b/testing/web-platform/tests/mathml/relations/css-styling/attribute-mapping-001.html
@@ -0,0 +1,111 @@
+
+
+
+
+Attribute mapping
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/relations/css-styling/attribute-mapping-002.html b/testing/web-platform/tests/mathml/relations/css-styling/attribute-mapping-002.html
new file mode 100644
index 0000000000..baf136f358
--- /dev/null
+++ b/testing/web-platform/tests/mathml/relations/css-styling/attribute-mapping-002.html
@@ -0,0 +1,118 @@
+
+
+
+
+Attribute mapping
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/relations/css-styling/blur-filter-ref.html b/testing/web-platform/tests/mathml/relations/css-styling/blur-filter-ref.html
new file mode 100644
index 0000000000..21fc165b7d
--- /dev/null
+++ b/testing/web-platform/tests/mathml/relations/css-styling/blur-filter-ref.html
@@ -0,0 +1,13 @@
+
+
+
+
+Blur filter (reference)
+
+
+ Rectangles should be blurred.
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/relations/css-styling/blur-filter.html b/testing/web-platform/tests/mathml/relations/css-styling/blur-filter.html
new file mode 100644
index 0000000000..92a894bf34
--- /dev/null
+++ b/testing/web-platform/tests/mathml/relations/css-styling/blur-filter.html
@@ -0,0 +1,21 @@
+
+
+
+
+Blur filter
+
+
+
+
+
+ Rectangles should be blurred.
+
+
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/relations/css-styling/clip-path-ref.html b/testing/web-platform/tests/mathml/relations/css-styling/clip-path-ref.html
new file mode 100644
index 0000000000..57935564bf
--- /dev/null
+++ b/testing/web-platform/tests/mathml/relations/css-styling/clip-path-ref.html
@@ -0,0 +1,13 @@
+
+
+
+
+Clip property (reference)
+
+
+ Rectangles should be clipped to a polygon.
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/relations/css-styling/clip-path.html b/testing/web-platform/tests/mathml/relations/css-styling/clip-path.html
new file mode 100644
index 0000000000..abe58e2261
--- /dev/null
+++ b/testing/web-platform/tests/mathml/relations/css-styling/clip-path.html
@@ -0,0 +1,21 @@
+
+
+
+
+Clip property
+
+
+
+
+
+ Rectangles should be clipped to a polygon.
+
+
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/relations/css-styling/clip-ref.html b/testing/web-platform/tests/mathml/relations/css-styling/clip-ref.html
new file mode 100644
index 0000000000..7882ac8c31
--- /dev/null
+++ b/testing/web-platform/tests/mathml/relations/css-styling/clip-ref.html
@@ -0,0 +1,13 @@
+
+
+
+
+Clip property (reference)
+
+
+ Rectangles should be clipped.
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/relations/css-styling/clip.html b/testing/web-platform/tests/mathml/relations/css-styling/clip.html
new file mode 100644
index 0000000000..48b7753fd8
--- /dev/null
+++ b/testing/web-platform/tests/mathml/relations/css-styling/clip.html
@@ -0,0 +1,21 @@
+
+
+
+
+Clip property
+
+
+
+
+
+ Rectangles should be clipped.
+
+
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/relations/css-styling/color-001-ref.html b/testing/web-platform/tests/mathml/relations/css-styling/color-001-ref.html
new file mode 100644
index 0000000000..0efca480ee
--- /dev/null
+++ b/testing/web-platform/tests/mathml/relations/css-styling/color-001-ref.html
@@ -0,0 +1,12 @@
+
+
+
+
+color (reference)
+
+
+ Test passes if you see a green square.
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/relations/css-styling/color-001.html b/testing/web-platform/tests/mathml/relations/css-styling/color-001.html
new file mode 100644
index 0000000000..76d65f579c
--- /dev/null
+++ b/testing/web-platform/tests/mathml/relations/css-styling/color-001.html
@@ -0,0 +1,34 @@
+
+
+
+
+color
+
+
+
+
+
+
+ Test passes if you see a green square.
+
+
1
+
2
+
3
+
4
+
5
+
+ 1
+ 2
+ 3
+ 4
+ 5
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/relations/css-styling/color-002-ref.html b/testing/web-platform/tests/mathml/relations/css-styling/color-002-ref.html
new file mode 100644
index 0000000000..0efca480ee
--- /dev/null
+++ b/testing/web-platform/tests/mathml/relations/css-styling/color-002-ref.html
@@ -0,0 +1,12 @@
+
+
+
+
+color (reference)
+
+
+ Test passes if you see a green square.
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/relations/css-styling/color-002.html b/testing/web-platform/tests/mathml/relations/css-styling/color-002.html
new file mode 100644
index 0000000000..bce24f54c8
--- /dev/null
+++ b/testing/web-platform/tests/mathml/relations/css-styling/color-002.html
@@ -0,0 +1,29 @@
+
+
+
+
+color
+
+
+
+
+
+
+
+ Test passes if you see a green square.
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/relations/css-styling/color-003-ref.html b/testing/web-platform/tests/mathml/relations/css-styling/color-003-ref.html
new file mode 100644
index 0000000000..0efca480ee
--- /dev/null
+++ b/testing/web-platform/tests/mathml/relations/css-styling/color-003-ref.html
@@ -0,0 +1,12 @@
+
+
+
+
+color (reference)
+
+
+ Test passes if you see a green square.
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/relations/css-styling/color-003.html b/testing/web-platform/tests/mathml/relations/css-styling/color-003.html
new file mode 100644
index 0000000000..dd04b61054
--- /dev/null
+++ b/testing/web-platform/tests/mathml/relations/css-styling/color-003.html
@@ -0,0 +1,31 @@
+
+
+
+
+color
+
+
+
+
+
+
+
+ Test passes if you see a green square.
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/relations/css-styling/color-004.tentative-ref.html b/testing/web-platform/tests/mathml/relations/css-styling/color-004.tentative-ref.html
new file mode 100644
index 0000000000..0efca480ee
--- /dev/null
+++ b/testing/web-platform/tests/mathml/relations/css-styling/color-004.tentative-ref.html
@@ -0,0 +1,12 @@
+
+
+
+
+color (reference)
+
+
+ Test passes if you see a green square.
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/relations/css-styling/color-004.tentative.html b/testing/web-platform/tests/mathml/relations/css-styling/color-004.tentative.html
new file mode 100644
index 0000000000..4bd15e62a0
--- /dev/null
+++ b/testing/web-platform/tests/mathml/relations/css-styling/color-004.tentative.html
@@ -0,0 +1,55 @@
+
+
+
+
+color
+
+
+
+
+
+
+
+ Test passes if you see a green square.
+
+
1
+
2
+
3
+
4
+
5
+
6
+
7
+
8
+
9
+
10
+
11
+
12
+
13
+
14
+
+ 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+ 10
+ 11
+ 12
+ 13
+ 14
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/relations/css-styling/color-005-ref.html b/testing/web-platform/tests/mathml/relations/css-styling/color-005-ref.html
new file mode 100644
index 0000000000..0efca480ee
--- /dev/null
+++ b/testing/web-platform/tests/mathml/relations/css-styling/color-005-ref.html
@@ -0,0 +1,12 @@
+
+
+
+
+color (reference)
+
+
+ Test passes if you see a green square.
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/relations/css-styling/color-005.html b/testing/web-platform/tests/mathml/relations/css-styling/color-005.html
new file mode 100644
index 0000000000..f2660c9e62
--- /dev/null
+++ b/testing/web-platform/tests/mathml/relations/css-styling/color-005.html
@@ -0,0 +1,88 @@
+
+
+
+
+color
+
+
+
+
+
+
+
+
+ Test passes if you see a green square.
+
+
+
+ ⥯
+ +
+ -
+
+
+
+ ⥯
+
+
+
+
+
+ ⥯
+
+
+
+
+
+
+ ⥯
+
+
+
+
+
+ ⥯
+ +
+ -
+
+
+
+ ⥯
+
+
+
+
+
+ ⥯
+
+
+
+
+
+
+ ⥯
+
+
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/relations/css-styling/default-font-family.html b/testing/web-platform/tests/mathml/relations/css-styling/default-font-family.html
new file mode 100644
index 0000000000..c471b0fc9d
--- /dev/null
+++ b/testing/web-platform/tests/mathml/relations/css-styling/default-font-family.html
@@ -0,0 +1,36 @@
+
+
+
+
+Default font-family on the <math> root
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/relations/css-styling/default-properties-on-semantics-and-maction.html b/testing/web-platform/tests/mathml/relations/css-styling/default-properties-on-semantics-and-maction.html
new file mode 100644
index 0000000000..23f8b62dfa
--- /dev/null
+++ b/testing/web-platform/tests/mathml/relations/css-styling/default-properties-on-semantics-and-maction.html
@@ -0,0 +1,47 @@
+
+
+
+
+Default properties on <semantics> and <maction>
+
+
+
+
+
+
+
+
+
+
+
+
+ 1
+ 2
+ 3
+ 4
+ 5
+
+
+ 1
+ 2
+ 3
+ 4
+ 5
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/relations/css-styling/default-properties-on-the-math-root.html b/testing/web-platform/tests/mathml/relations/css-styling/default-properties-on-the-math-root.html
new file mode 100644
index 0000000000..c329935f2e
--- /dev/null
+++ b/testing/web-platform/tests/mathml/relations/css-styling/default-properties-on-the-math-root.html
@@ -0,0 +1,57 @@
+
+
+
+
+Default properties on the <math> root
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/relations/css-styling/display-1-ref.html b/testing/web-platform/tests/mathml/relations/css-styling/display-1-ref.html
new file mode 100644
index 0000000000..ce65aba18c
--- /dev/null
+++ b/testing/web-platform/tests/mathml/relations/css-styling/display-1-ref.html
@@ -0,0 +1,12 @@
+
+
+
+
+display (reference)
+
+
+ Test passes if you see a green square.
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/relations/css-styling/display-1.html b/testing/web-platform/tests/mathml/relations/css-styling/display-1.html
new file mode 100644
index 0000000000..5a9e4db687
--- /dev/null
+++ b/testing/web-platform/tests/mathml/relations/css-styling/display-1.html
@@ -0,0 +1,18 @@
+
+
+
+
+display
+
+
+
+
+
+ Test passes if you see a green square.
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/relations/css-styling/display-2.html b/testing/web-platform/tests/mathml/relations/css-styling/display-2.html
new file mode 100644
index 0000000000..36a02952eb
--- /dev/null
+++ b/testing/web-platform/tests/mathml/relations/css-styling/display-2.html
@@ -0,0 +1,139 @@
+
+
+
+
+Verify that one can override the layout of MathML elements with the CSS display property
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/relations/css-styling/display-contents.html b/testing/web-platform/tests/mathml/relations/css-styling/display-contents.html
new file mode 100644
index 0000000000..b18fdd6c8b
--- /dev/null
+++ b/testing/web-platform/tests/mathml/relations/css-styling/display-contents.html
@@ -0,0 +1,36 @@
+
+
+
+
+display: contents
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/relations/css-styling/display-with-overflow-ref.html b/testing/web-platform/tests/mathml/relations/css-styling/display-with-overflow-ref.html
new file mode 100644
index 0000000000..b359414dc2
--- /dev/null
+++ b/testing/web-platform/tests/mathml/relations/css-styling/display-with-overflow-ref.html
@@ -0,0 +1,20 @@
+
+
+
+
+ text
+
+
+
+
+ text
+
+
diff --git a/testing/web-platform/tests/mathml/relations/css-styling/display-with-overflow.html b/testing/web-platform/tests/mathml/relations/css-styling/display-with-overflow.html
new file mode 100644
index 0000000000..33df26c3ee
--- /dev/null
+++ b/testing/web-platform/tests/mathml/relations/css-styling/display-with-overflow.html
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+ text
+
+
+ text
+
diff --git a/testing/web-platform/tests/mathml/relations/css-styling/displaystyle-011-ref.html b/testing/web-platform/tests/mathml/relations/css-styling/displaystyle-011-ref.html
new file mode 100644
index 0000000000..400c46a245
--- /dev/null
+++ b/testing/web-platform/tests/mathml/relations/css-styling/displaystyle-011-ref.html
@@ -0,0 +1,155 @@
+
+
+
+ displaystyle
+
+
+
+
+
+
+
+
+
+ O O
+
+
+ O O
+
+
+
+
+
+
+
+ O O
+ O O
+
+
+
+
+
+
+
+
+ O O
+ O O
+
+
+ O O
+
+
+
+
+
+
+
+
+ O O
+ O O
+
+
+ O O
+ O O
+
+
+ O O
+ O O
+ O O
+
+
+ O O
+ O O
+ O O
+
+ O O
+ O O
+
+
+
+
+
+
+
+
+ O O
+ O O
+
+
+ O O
+ O O
+
+
+ O O
+ O O
+ O O
+
+
+
+
+
+
+
+
+
+
+ O O
+
+
+
+
+
+
+
+
+ O O
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/relations/css-styling/displaystyle-011.html b/testing/web-platform/tests/mathml/relations/css-styling/displaystyle-011.html
new file mode 100644
index 0000000000..a0bfc29ae5
--- /dev/null
+++ b/testing/web-platform/tests/mathml/relations/css-styling/displaystyle-011.html
@@ -0,0 +1,168 @@
+
+
+
+ displaystyle
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ O O
+
+
+ O O
+
+
+
+
+
+
+
+ O O
+ O O
+
+
+
+
+
+
+
+
+ O O
+ O O
+
+
+ O O
+
+
+
+
+
+
+
+
+ O O
+ O O
+
+
+ O O
+ O O
+
+
+ O O
+ O O
+ O O
+
+
+ O O
+ O O
+ O O
+
+ O O
+ O O
+
+
+
+
+
+
+
+
+ O O
+ O O
+
+
+ O O
+ O O
+
+
+ O O
+ O O
+ O O
+
+
+
+
+
+
+
+
+
+
+ O O
+
+
+
+
+
+
+
+
+ O O
+
+
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/relations/css-styling/displaystyle-012-ref.html b/testing/web-platform/tests/mathml/relations/css-styling/displaystyle-012-ref.html
new file mode 100644
index 0000000000..96042b696f
--- /dev/null
+++ b/testing/web-platform/tests/mathml/relations/css-styling/displaystyle-012-ref.html
@@ -0,0 +1,30 @@
+
+
+
+ displaystyle
+
+
+
+
+
+
+
+
+
+ O O
+ O O
+ O O O
+
+
+ O O
+ O O
+ O O O
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/relations/css-styling/displaystyle-012.html b/testing/web-platform/tests/mathml/relations/css-styling/displaystyle-012.html
new file mode 100644
index 0000000000..9fd4c784dd
--- /dev/null
+++ b/testing/web-platform/tests/mathml/relations/css-styling/displaystyle-012.html
@@ -0,0 +1,37 @@
+
+
+
+ displaystyle
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ O O
+ O O
+ O O O
+
+
+ O O
+ O O
+ O O O
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/relations/css-styling/displaystyle-013-ref.html b/testing/web-platform/tests/mathml/relations/css-styling/displaystyle-013-ref.html
new file mode 100644
index 0000000000..9a580350de
--- /dev/null
+++ b/testing/web-platform/tests/mathml/relations/css-styling/displaystyle-013-ref.html
@@ -0,0 +1,58 @@
+
+
+
+ displaystyle
+
+
+
+
+
+
+
+
+ O O
+ 1 2
+
+
+
+ O O
+ 1 2
+
+
+
+
+
+
+ O O
+ 1 2
+
+
+
+
+
+ O O
+ 1 2
+
+
+
+ O O
+ 1 2
+
+
+
+
+
+
+ O O
+ 1 2
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/relations/css-styling/displaystyle-013.html b/testing/web-platform/tests/mathml/relations/css-styling/displaystyle-013.html
new file mode 100644
index 0000000000..3ce9fff062
--- /dev/null
+++ b/testing/web-platform/tests/mathml/relations/css-styling/displaystyle-013.html
@@ -0,0 +1,80 @@
+
+
+
+ displaystyle
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ O O
+ 1 2
+
+
+
+ O O
+ 1 2
+
+
+
+
+
+
+ O O
+ 1 2
+
+
+
+
+
+ O O
+ 1 2
+
+
+
+ O O
+ 1 2
+
+
+
+
+
+
+ O O
+ 1 2
+
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/relations/css-styling/displaystyle-014-ref.html b/testing/web-platform/tests/mathml/relations/css-styling/displaystyle-014-ref.html
new file mode 100644
index 0000000000..085e2c429d
--- /dev/null
+++ b/testing/web-platform/tests/mathml/relations/css-styling/displaystyle-014-ref.html
@@ -0,0 +1,35 @@
+
+
+
+ displaystyle
+
+
+
+
+
+
+
+
+
+
+
+ X
+ +
+
+ X
+ X
+
+
+
+ X
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/relations/css-styling/displaystyle-014.html b/testing/web-platform/tests/mathml/relations/css-styling/displaystyle-014.html
new file mode 100644
index 0000000000..a4f1208e35
--- /dev/null
+++ b/testing/web-platform/tests/mathml/relations/css-styling/displaystyle-014.html
@@ -0,0 +1,55 @@
+
+
+
+ displaystyle
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ X
+ +
+
+ X
+ X
+
+
+
+ X
+
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/relations/css-styling/displaystyle-015-ref.html b/testing/web-platform/tests/mathml/relations/css-styling/displaystyle-015-ref.html
new file mode 100644
index 0000000000..2e375c6886
--- /dev/null
+++ b/testing/web-platform/tests/mathml/relations/css-styling/displaystyle-015-ref.html
@@ -0,0 +1,58 @@
+
+
+
+
+ displaystyle and display
+
+
+
+
+ ∑
+ b
+ c
+
+
+
+
+ ∑
+ b
+ c
+
+
+
+
+ ∑
+ b
+ c
+
+
+
+
+ ∑
+ b
+ c
+
+
+
+
+ ∑
+ b
+ c
+
+
+
+
+ ∑
+ b
+ c
+
+
+
+
+ ∑
+ b
+ c
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/relations/css-styling/displaystyle-015.html b/testing/web-platform/tests/mathml/relations/css-styling/displaystyle-015.html
new file mode 100644
index 0000000000..e4a747fb20
--- /dev/null
+++ b/testing/web-platform/tests/mathml/relations/css-styling/displaystyle-015.html
@@ -0,0 +1,83 @@
+
+
+
+
+ displaystyle and display
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ∑
+ b
+ c
+
+
+
+
+
+
+ ∑
+ b
+ c
+
+
+
+
+
+
+ ∑
+ b
+ c
+
+
+
+
+
+
+ ∑
+ b
+ c
+
+
+
+
+
+
+ ∑
+ b
+ c
+
+
+
+
+
+
+ ∑
+ b
+ c
+
+
+
+
+
+
+ ∑
+ b
+ c
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/relations/css-styling/displaystyle-1.html b/testing/web-platform/tests/mathml/relations/css-styling/displaystyle-1.html
new file mode 100644
index 0000000000..26aed81d03
--- /dev/null
+++ b/testing/web-platform/tests/mathml/relations/css-styling/displaystyle-1.html
@@ -0,0 +1,136 @@
+
+
+
+
+displaystyle
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ⫿
+ ⫿
+ ⫿
+ ⫿
+ ⫿
+
+ ⫿
+
+
+ ⫿
+
+
+ ⫿
+
+
+ ⫿
+
+ ⫿
+ ⫿
+ ⫿
+ ⫿
+ ⫿
+ ⫿ ⫿ ⫿
+ ⫿ ⫿
+ ⫿ ⫿
+ ⫿ ⫿
+ ⫿ ⫿ ⫿
+ ⫿ ⫿ ⫿ ⫿ ⫿
+ ⫿ ⫿
+ ⫿ ⫿
+ ⫿ ⫿ ⫿
+
+
diff --git a/testing/web-platform/tests/mathml/relations/css-styling/displaystyle-2.html b/testing/web-platform/tests/mathml/relations/css-styling/displaystyle-2.html
new file mode 100644
index 0000000000..68566cfc25
--- /dev/null
+++ b/testing/web-platform/tests/mathml/relations/css-styling/displaystyle-2.html
@@ -0,0 +1,208 @@
+
+
+
+
+displaystyle
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ⫿
+
+
+
+
+ ⫿
+
+
+
+
+
+
+
+
+ ⫿
+
+
+ ⫿
+
+
+
+
+
+
+ ⫿
+
+
+ ⫿
+
+
+
+
+
+
+ ⫿
+
+
+ ⫿
+
+
+
+
+
+
+ ⫿
+
+
+ ⫿
+
+
+
+
+
+
+ ⫿
+
+
+ ⫿
+
+
+ ⫿
+
+
+
+
+
+
+ ⫿
+
+
+ ⫿
+
+
+ ⫿
+
+
+
+ ⫿
+
+
+ ⫿
+
+
+
+
+
+
+ ⫿
+
+
+ ⫿
+
+
+
+
+
+
+ ⫿
+
+
+ ⫿
+
+
+
+
+
+
+ ⫿
+
+
+ ⫿
+
+
+ ⫿
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/relations/css-styling/displaystyle-3.html b/testing/web-platform/tests/mathml/relations/css-styling/displaystyle-3.html
new file mode 100644
index 0000000000..a5bcab2aaa
--- /dev/null
+++ b/testing/web-platform/tests/mathml/relations/css-styling/displaystyle-3.html
@@ -0,0 +1,84 @@
+
+
+
+
+displaystyle
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ XX
+ X
+
+
+
+
+ XX
+ X
+
+
+
+
+ XX
+ X
+ X
+
+
+
+
+ XX
+ X
+
+
+
+
+ XX
+ X
+
+
+
+
+ XX
+ X
+ X
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/relations/css-styling/dynamic-dir-1-ref.html b/testing/web-platform/tests/mathml/relations/css-styling/dynamic-dir-1-ref.html
new file mode 100644
index 0000000000..111ea79e24
--- /dev/null
+++ b/testing/web-platform/tests/mathml/relations/css-styling/dynamic-dir-1-ref.html
@@ -0,0 +1,75 @@
+
+
+
+
+ Test dynamically changing dir attribute
+
+
+
+ math:
+
+ a
+ b
+ c
+
+
+ a
+ b
+ c
+
+
+ a
+ b
+ c
+
+
+
+ mstyle:
+
+
+ a
+ b
+ c
+
+
+
+
+ a
+ b
+ c
+
+
+
+
+ a
+ b
+ c
+
+
+
+
+ mrow:
+
+
+ a
+ b
+ c
+
+
+
+
+ a
+ b
+ c
+
+
+
+
+ a
+ b
+ c
+
+
+
+
+
\ No newline at end of file
diff --git a/testing/web-platform/tests/mathml/relations/css-styling/dynamic-dir-1.html b/testing/web-platform/tests/mathml/relations/css-styling/dynamic-dir-1.html
new file mode 100644
index 0000000000..d97505eff1
--- /dev/null
+++ b/testing/web-platform/tests/mathml/relations/css-styling/dynamic-dir-1.html
@@ -0,0 +1,105 @@
+
+
+
+
+ Test dynamically changing dir attribute
+
+
+
+
+
+
+
+
+
+ math:
+
+ a
+ b
+ c
+
+
+ a
+ b
+ c
+
+
+ a
+ b
+ c
+
+
+
+ mstyle:
+
+
+ a
+ b
+ c
+
+
+
+
+ a
+ b
+ c
+
+
+
+
+ a
+ b
+ c
+
+
+
+
+ mrow:
+
+
+ a
+ b
+ c
+
+
+
+
+ a
+ b
+ c
+
+
+
+
+ a
+ b
+ c
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/relations/css-styling/floats/floating-inside-mathml-with-block-display-ref.html b/testing/web-platform/tests/mathml/relations/css-styling/floats/floating-inside-mathml-with-block-display-ref.html
new file mode 100644
index 0000000000..8f25c9db06
--- /dev/null
+++ b/testing/web-platform/tests/mathml/relations/css-styling/floats/floating-inside-mathml-with-block-display-ref.html
@@ -0,0 +1,15 @@
+
+
+
+
+floating inside display: block MathML (reference)
+
+
+ Test passes if you see a blue square on the left and a smaller magenta square on the right.
+
+
+
diff --git a/testing/web-platform/tests/mathml/relations/css-styling/floats/floating-inside-mathml-with-block-display.html b/testing/web-platform/tests/mathml/relations/css-styling/floats/floating-inside-mathml-with-block-display.html
new file mode 100644
index 0000000000..f398094e15
--- /dev/null
+++ b/testing/web-platform/tests/mathml/relations/css-styling/floats/floating-inside-mathml-with-block-display.html
@@ -0,0 +1,20 @@
+
+
+
+
+floating inside display: block MathML
+
+
+
+
+
+ Test passes if you see a blue square on the left and a smaller magenta square on the right.
+
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/relations/css-styling/floats/floating-math-ref.html b/testing/web-platform/tests/mathml/relations/css-styling/floats/floating-math-ref.html
new file mode 100644
index 0000000000..c82f395644
--- /dev/null
+++ b/testing/web-platform/tests/mathml/relations/css-styling/floats/floating-math-ref.html
@@ -0,0 +1,14 @@
+
+
+
+
+floating math (reference)
+
+
+ Test passes if you see a blue square on the left and a smaller magenta square on the right.
+
+
+
diff --git a/testing/web-platform/tests/mathml/relations/css-styling/floats/floating-math.html b/testing/web-platform/tests/mathml/relations/css-styling/floats/floating-math.html
new file mode 100644
index 0000000000..1de54ccdcf
--- /dev/null
+++ b/testing/web-platform/tests/mathml/relations/css-styling/floats/floating-math.html
@@ -0,0 +1,19 @@
+
+
+
+
+floating math
+
+
+
+
+
+ Test passes if you see a blue square on the left and a smaller magenta square on the right.
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/relations/css-styling/floats/not-floating-001.html b/testing/web-platform/tests/mathml/relations/css-styling/floats/not-floating-001.html
new file mode 100644
index 0000000000..7166dea5f8
--- /dev/null
+++ b/testing/web-platform/tests/mathml/relations/css-styling/floats/not-floating-001.html
@@ -0,0 +1,74 @@
+
+
+
+
+float property in math layout
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/relations/css-styling/ignored-properties-001.html b/testing/web-platform/tests/mathml/relations/css-styling/ignored-properties-001.html
new file mode 100644
index 0000000000..34de5836ea
--- /dev/null
+++ b/testing/web-platform/tests/mathml/relations/css-styling/ignored-properties-001.html
@@ -0,0 +1,79 @@
+
+
+
+
+Ignored CSS properties
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/relations/css-styling/legacy-scriptminsize-attribute-ref.html b/testing/web-platform/tests/mathml/relations/css-styling/legacy-scriptminsize-attribute-ref.html
new file mode 100644
index 0000000000..8e3d7b1c21
--- /dev/null
+++ b/testing/web-platform/tests/mathml/relations/css-styling/legacy-scriptminsize-attribute-ref.html
@@ -0,0 +1,27 @@
+
+
+
+
+legacy scriptminsize attribute (reference)
+
+
+
+
+ Test passes if you see a square of size 71px.
+
+
+
+
+ X
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/relations/css-styling/legacy-scriptminsize-attribute.html b/testing/web-platform/tests/mathml/relations/css-styling/legacy-scriptminsize-attribute.html
new file mode 100644
index 0000000000..0ce87b6147
--- /dev/null
+++ b/testing/web-platform/tests/mathml/relations/css-styling/legacy-scriptminsize-attribute.html
@@ -0,0 +1,32 @@
+
+
+
+
+legacy scriptminsize attribute
+
+
+
+
+
+
+
+
+
+ Test passes if you see a square of size 71px.
+
+
+
+
+ X
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/relations/css-styling/legacy-scriptsizemultiplier-attribute-ref.html b/testing/web-platform/tests/mathml/relations/css-styling/legacy-scriptsizemultiplier-attribute-ref.html
new file mode 100644
index 0000000000..422325da28
--- /dev/null
+++ b/testing/web-platform/tests/mathml/relations/css-styling/legacy-scriptsizemultiplier-attribute-ref.html
@@ -0,0 +1,27 @@
+
+
+
+
+legacy scriptsizemultiplier attribute (reference)
+
+
+
+
+ Test passes if you see a square of size 71px.
+
+
+
+
+ X
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/relations/css-styling/legacy-scriptsizemultiplier-attribute.html b/testing/web-platform/tests/mathml/relations/css-styling/legacy-scriptsizemultiplier-attribute.html
new file mode 100644
index 0000000000..9a955612bc
--- /dev/null
+++ b/testing/web-platform/tests/mathml/relations/css-styling/legacy-scriptsizemultiplier-attribute.html
@@ -0,0 +1,32 @@
+
+
+
+
+legacy scriptsizemultiplier attribute
+
+
+
+
+
+
+
+
+
+ Test passes if you see a square of size 71px.
+
+
+
+
+ X
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/relations/css-styling/lengths-1-ref.html b/testing/web-platform/tests/mathml/relations/css-styling/lengths-1-ref.html
new file mode 100644
index 0000000000..9fca6f4963
--- /dev/null
+++ b/testing/web-platform/tests/mathml/relations/css-styling/lengths-1-ref.html
@@ -0,0 +1,14 @@
+
+
+
+
+MathML lengths (reference)
+
+
+ Test passes if there is a green square and no red.
+
+
+
diff --git a/testing/web-platform/tests/mathml/relations/css-styling/lengths-1.html b/testing/web-platform/tests/mathml/relations/css-styling/lengths-1.html
new file mode 100644
index 0000000000..896f08d111
--- /dev/null
+++ b/testing/web-platform/tests/mathml/relations/css-styling/lengths-1.html
@@ -0,0 +1,122 @@
+
+
+
+
+MathML lengths
+
+
+
+
+
+
+
+
+
+ Test passes if there is a green square and no red.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/relations/css-styling/lengths-2.html b/testing/web-platform/tests/mathml/relations/css-styling/lengths-2.html
new file mode 100644
index 0000000000..942611a8da
--- /dev/null
+++ b/testing/web-platform/tests/mathml/relations/css-styling/lengths-2.html
@@ -0,0 +1,266 @@
+
+
+
+
+MathML lengths
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/relations/css-styling/mathbackground-001-notref.html b/testing/web-platform/tests/mathml/relations/css-styling/mathbackground-001-notref.html
new file mode 100644
index 0000000000..65e2781c5e
--- /dev/null
+++ b/testing/web-platform/tests/mathml/relations/css-styling/mathbackground-001-notref.html
@@ -0,0 +1,9 @@
+
+
+mathbackground on mrow (reference)
+
+
+ □■□■□■□
+
+
+
diff --git a/testing/web-platform/tests/mathml/relations/css-styling/mathbackground-001.html b/testing/web-platform/tests/mathml/relations/css-styling/mathbackground-001.html
new file mode 100644
index 0000000000..e71fc53eaa
--- /dev/null
+++ b/testing/web-platform/tests/mathml/relations/css-styling/mathbackground-001.html
@@ -0,0 +1,14 @@
+
+
+mathbackground on mrow
+
+
+
+
+
+
+
+ □■□■□■□
+
+
+
diff --git a/testing/web-platform/tests/mathml/relations/css-styling/mathbackground-002-notref.html b/testing/web-platform/tests/mathml/relations/css-styling/mathbackground-002-notref.html
new file mode 100644
index 0000000000..8c984c2619
--- /dev/null
+++ b/testing/web-platform/tests/mathml/relations/css-styling/mathbackground-002-notref.html
@@ -0,0 +1,9 @@
+
+
+mathbackground on mstyle (reference)
+
+
+ □■□■□■□
+
+
+
diff --git a/testing/web-platform/tests/mathml/relations/css-styling/mathbackground-002.html b/testing/web-platform/tests/mathml/relations/css-styling/mathbackground-002.html
new file mode 100644
index 0000000000..09407d9269
--- /dev/null
+++ b/testing/web-platform/tests/mathml/relations/css-styling/mathbackground-002.html
@@ -0,0 +1,14 @@
+
+
+mathbackground on mstyle
+
+
+
+
+
+
+
+ □■□■□■□
+
+
+
diff --git a/testing/web-platform/tests/mathml/relations/css-styling/mathbackground-003-notref.html b/testing/web-platform/tests/mathml/relations/css-styling/mathbackground-003-notref.html
new file mode 100644
index 0000000000..b6adaa8d4e
--- /dev/null
+++ b/testing/web-platform/tests/mathml/relations/css-styling/mathbackground-003-notref.html
@@ -0,0 +1,7 @@
+
+
+mathbackground on mtext (reference)
+
+ □■□■□■□
+
+
diff --git a/testing/web-platform/tests/mathml/relations/css-styling/mathbackground-003.html b/testing/web-platform/tests/mathml/relations/css-styling/mathbackground-003.html
new file mode 100644
index 0000000000..8cb11889db
--- /dev/null
+++ b/testing/web-platform/tests/mathml/relations/css-styling/mathbackground-003.html
@@ -0,0 +1,11 @@
+
+
+mathbackground on mtext
+
+
+
+
+
+ □■□■□■□
+
+
diff --git a/testing/web-platform/tests/mathml/relations/css-styling/mathbackground-004-notref.html b/testing/web-platform/tests/mathml/relations/css-styling/mathbackground-004-notref.html
new file mode 100644
index 0000000000..75465a6c38
--- /dev/null
+++ b/testing/web-platform/tests/mathml/relations/css-styling/mathbackground-004-notref.html
@@ -0,0 +1,9 @@
+
+
+mathbackground on semantics (reference)
+
+
+ □■□■□■□
+
+
+
diff --git a/testing/web-platform/tests/mathml/relations/css-styling/mathbackground-004.html b/testing/web-platform/tests/mathml/relations/css-styling/mathbackground-004.html
new file mode 100644
index 0000000000..be174cdbde
--- /dev/null
+++ b/testing/web-platform/tests/mathml/relations/css-styling/mathbackground-004.html
@@ -0,0 +1,14 @@
+
+
+mathbackground on semantics
+
+
+
+
+
+
+
+ □■□■□■□
+
+
+
diff --git a/testing/web-platform/tests/mathml/relations/css-styling/mathcolor-001-notref.html b/testing/web-platform/tests/mathml/relations/css-styling/mathcolor-001-notref.html
new file mode 100644
index 0000000000..9bc1ba5436
--- /dev/null
+++ b/testing/web-platform/tests/mathml/relations/css-styling/mathcolor-001-notref.html
@@ -0,0 +1,9 @@
+
+
+mathcolor on mrow (reference)
+
+
+ □■□■□■□
+
+
+
diff --git a/testing/web-platform/tests/mathml/relations/css-styling/mathcolor-001.html b/testing/web-platform/tests/mathml/relations/css-styling/mathcolor-001.html
new file mode 100644
index 0000000000..2c463cac87
--- /dev/null
+++ b/testing/web-platform/tests/mathml/relations/css-styling/mathcolor-001.html
@@ -0,0 +1,13 @@
+
+
+mathcolor on mrow
+
+
+
+
+
+
+
+ □■□■□■□
+
+
diff --git a/testing/web-platform/tests/mathml/relations/css-styling/mathcolor-002-notref.html b/testing/web-platform/tests/mathml/relations/css-styling/mathcolor-002-notref.html
new file mode 100644
index 0000000000..5f9fd2bb9b
--- /dev/null
+++ b/testing/web-platform/tests/mathml/relations/css-styling/mathcolor-002-notref.html
@@ -0,0 +1,9 @@
+
+
+mathcolor on mstyle (reference)
+
+
+ □■□■□■□
+
+
+
diff --git a/testing/web-platform/tests/mathml/relations/css-styling/mathcolor-002.html b/testing/web-platform/tests/mathml/relations/css-styling/mathcolor-002.html
new file mode 100644
index 0000000000..147d41b46d
--- /dev/null
+++ b/testing/web-platform/tests/mathml/relations/css-styling/mathcolor-002.html
@@ -0,0 +1,14 @@
+
+
+mathcolor on mstyle
+
+
+
+
+
+
+
+ □■□■□■□
+
+
+
diff --git a/testing/web-platform/tests/mathml/relations/css-styling/mathcolor-003-notref.html b/testing/web-platform/tests/mathml/relations/css-styling/mathcolor-003-notref.html
new file mode 100644
index 0000000000..11e018ebc1
--- /dev/null
+++ b/testing/web-platform/tests/mathml/relations/css-styling/mathcolor-003-notref.html
@@ -0,0 +1,7 @@
+
+
+mathcolor on mtext (reference)
+
+ □■□■□■□
+
+
diff --git a/testing/web-platform/tests/mathml/relations/css-styling/mathcolor-003.html b/testing/web-platform/tests/mathml/relations/css-styling/mathcolor-003.html
new file mode 100644
index 0000000000..5565b0d837
--- /dev/null
+++ b/testing/web-platform/tests/mathml/relations/css-styling/mathcolor-003.html
@@ -0,0 +1,11 @@
+
+
+mathcolor on mtext
+
+
+
+
+
+ □■□■□■□
+
+
diff --git a/testing/web-platform/tests/mathml/relations/css-styling/mathcolor-004-notref.html b/testing/web-platform/tests/mathml/relations/css-styling/mathcolor-004-notref.html
new file mode 100644
index 0000000000..67a45249e5
--- /dev/null
+++ b/testing/web-platform/tests/mathml/relations/css-styling/mathcolor-004-notref.html
@@ -0,0 +1,9 @@
+
+
+mathcolor on semantics (reference)
+
+
+ □■□■□■□
+
+
+
diff --git a/testing/web-platform/tests/mathml/relations/css-styling/mathcolor-004.html b/testing/web-platform/tests/mathml/relations/css-styling/mathcolor-004.html
new file mode 100644
index 0000000000..3ea37fecdb
--- /dev/null
+++ b/testing/web-platform/tests/mathml/relations/css-styling/mathcolor-004.html
@@ -0,0 +1,14 @@
+
+
+mathcolor on semantics
+
+
+
+
+
+
+
+ □■□■□■□
+
+
+
diff --git a/testing/web-platform/tests/mathml/relations/css-styling/mathcolor-mathbackground-css-ref.html b/testing/web-platform/tests/mathml/relations/css-styling/mathcolor-mathbackground-css-ref.html
new file mode 100644
index 0000000000..682fa64233
--- /dev/null
+++ b/testing/web-platform/tests/mathml/relations/css-styling/mathcolor-mathbackground-css-ref.html
@@ -0,0 +1,23 @@
+
+
+
+
+CSS color (reference)
+
+
+
+
+
+ Test passes if you see a green rectangle:
+
+
+ X X
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/relations/css-styling/mathcolor-mathbackground-css.html b/testing/web-platform/tests/mathml/relations/css-styling/mathcolor-mathbackground-css.html
new file mode 100644
index 0000000000..2f53215346
--- /dev/null
+++ b/testing/web-platform/tests/mathml/relations/css-styling/mathcolor-mathbackground-css.html
@@ -0,0 +1,27 @@
+
+
+
+
+CSS color
+
+
+
+
+
+
+
+
+
+ Test passes if you see a green rectangle:
+
+
+ X X
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/relations/css-styling/mathsize-attribute-css-keywords-ref.html b/testing/web-platform/tests/mathml/relations/css-styling/mathsize-attribute-css-keywords-ref.html
new file mode 100644
index 0000000000..ebb12a6c6c
--- /dev/null
+++ b/testing/web-platform/tests/mathml/relations/css-styling/mathsize-attribute-css-keywords-ref.html
@@ -0,0 +1,26 @@
+
+
+
+
+ mathsize and css keywords
+
+
+ Test passes if you see 14 "A" of equal size:
+
+ A
+ A
+ A
+ A
+ A
+ A
+ A
+ A
+ A
+ A
+ A
+ A
+ A
+ A
+
+
+
diff --git a/testing/web-platform/tests/mathml/relations/css-styling/mathsize-attribute-css-keywords.html b/testing/web-platform/tests/mathml/relations/css-styling/mathsize-attribute-css-keywords.html
new file mode 100644
index 0000000000..2daed4cdea
--- /dev/null
+++ b/testing/web-platform/tests/mathml/relations/css-styling/mathsize-attribute-css-keywords.html
@@ -0,0 +1,33 @@
+
+
+
+
+ mathsize and css keywords
+
+
+
+
+
+
+
+ Test passes if you see 14 "A" of equal size:
+
+ A
+ A
+ A
+ A
+ A
+ A
+ A
+ A
+ A
+ A
+ A
+ A
+ A
+ A
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/relations/css-styling/mathsize-attribute-legacy-values-ref.html b/testing/web-platform/tests/mathml/relations/css-styling/mathsize-attribute-legacy-values-ref.html
new file mode 100644
index 0000000000..687efa49be
--- /dev/null
+++ b/testing/web-platform/tests/mathml/relations/css-styling/mathsize-attribute-legacy-values-ref.html
@@ -0,0 +1,16 @@
+
+
+
+
+ Legacy mathsize values
+
+
+ Test passes if you see four "A" of equal size:
+
+ A
+ A
+ A
+ A
+
+
+
diff --git a/testing/web-platform/tests/mathml/relations/css-styling/mathsize-attribute-legacy-values.html b/testing/web-platform/tests/mathml/relations/css-styling/mathsize-attribute-legacy-values.html
new file mode 100644
index 0000000000..aebf09f9b8
--- /dev/null
+++ b/testing/web-platform/tests/mathml/relations/css-styling/mathsize-attribute-legacy-values.html
@@ -0,0 +1,23 @@
+
+
+
+
+ Legacy mathsize values
+
+
+
+
+
+
+
+ Test passes if you see four "A" of equal size:
+
+ A
+ A
+ A
+ A
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/relations/css-styling/mathsize-attribute-ref.html b/testing/web-platform/tests/mathml/relations/css-styling/mathsize-attribute-ref.html
new file mode 100644
index 0000000000..7a0450e51e
--- /dev/null
+++ b/testing/web-platform/tests/mathml/relations/css-styling/mathsize-attribute-ref.html
@@ -0,0 +1,19 @@
+
+
+
+
+ Verify mathsize attribute
+
+
+
+
+
+
+ x
+ x
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/relations/css-styling/mathsize-attribute.html b/testing/web-platform/tests/mathml/relations/css-styling/mathsize-attribute.html
new file mode 100644
index 0000000000..66bcb6dd25
--- /dev/null
+++ b/testing/web-platform/tests/mathml/relations/css-styling/mathsize-attribute.html
@@ -0,0 +1,22 @@
+
+
+
+
+ Verify mathsize attribute
+
+
+
+
+
+
+
+
+
+
+ x
+ x
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/relations/css-styling/mathvariant-auto-ref.html b/testing/web-platform/tests/mathml/relations/css-styling/mathvariant-auto-ref.html
new file mode 100644
index 0000000000..105ba412e6
--- /dev/null
+++ b/testing/web-platform/tests/mathml/relations/css-styling/mathvariant-auto-ref.html
@@ -0,0 +1,139 @@
+
+
+
+
+mathvariant auto (reference)
+
+
+
+ Test passes if all the equalities below are true.
+ 𝐴 =1D434
+ 𝐵 =1D435
+ 𝐶 =1D436
+ 𝐷 =1D437
+ 𝐸 =1D438
+ 𝐹 =1D439
+ 𝐺 =1D43A
+ 𝐻 =1D43B
+ 𝐼 =1D43C
+ 𝐽 =1D43D
+ 𝐾 =1D43E
+ 𝐿 =1D43F
+ 𝑀 =1D440
+ 𝑁 =1D441
+ 𝑂 =1D442
+ 𝑃 =1D443
+ 𝑄 =1D444
+ 𝑅 =1D445
+ 𝑆 =1D446
+ 𝑇 =1D447
+ 𝑈 =1D448
+ 𝑉 =1D449
+ 𝑊 =1D44A
+ 𝑋 =1D44B
+ 𝑌 =1D44C
+ 𝑍 =1D44D
+ 𝑎 =1D44E
+ 𝑏 =1D44F
+ 𝑐 =1D450
+ 𝑑 =1D451
+ 𝑒 =1D452
+ 𝑓 =1D453
+ 𝑔 =1D454
+ ℎ =0210E
+ 𝑖 =1D456
+ 𝑗 =1D457
+ 𝑘 =1D458
+ 𝑙 =1D459
+ 𝑚 =1D45A
+ 𝑛 =1D45B
+ 𝑜 =1D45C
+ 𝑝 =1D45D
+ 𝑞 =1D45E
+ 𝑟 =1D45F
+ 𝑠 =1D460
+ 𝑡 =1D461
+ 𝑢 =1D462
+ 𝑣 =1D463
+ 𝑤 =1D464
+ 𝑥 =1D465
+ 𝑦 =1D466
+ 𝑧 =1D467
+ 𝚤 =1D6A4
+ 𝚥 =1D6A5
+ 𝛢 =1D6E2
+ 𝛣 =1D6E3
+ 𝛤 =1D6E4
+ 𝛥 =1D6E5
+ 𝛦 =1D6E6
+ 𝛧 =1D6E7
+ 𝛨 =1D6E8
+ 𝛩 =1D6E9
+ 𝛪 =1D6EA
+ 𝛫 =1D6EB
+ 𝛬 =1D6EC
+ 𝛭 =1D6ED
+ 𝛮 =1D6EE
+ 𝛯 =1D6EF
+ 𝛰 =1D6F0
+ 𝛱 =1D6F1
+ 𝛲 =1D6F2
+ 𝛳 =1D6F3
+ 𝛴 =1D6F4
+ 𝛵 =1D6F5
+ 𝛶 =1D6F6
+ 𝛷 =1D6F7
+ 𝛸 =1D6F8
+ 𝛹 =1D6F9
+ 𝛺 =1D6FA
+ 𝛻 =1D6FB
+ 𝛼 =1D6FC
+ 𝛽 =1D6FD
+ 𝛾 =1D6FE
+ 𝛿 =1D6FF
+ 𝜀 =1D700
+ 𝜁 =1D701
+ 𝜂 =1D702
+ 𝜃 =1D703
+ 𝜄 =1D704
+ 𝜅 =1D705
+ 𝜆 =1D706
+ 𝜇 =1D707
+ 𝜈 =1D708
+ 𝜉 =1D709
+ 𝜊 =1D70A
+ 𝜋 =1D70B
+ 𝜌 =1D70C
+ 𝜍 =1D70D
+ 𝜎 =1D70E
+ 𝜏 =1D70F
+ 𝜐 =1D710
+ 𝜑 =1D711
+ 𝜒 =1D712
+ 𝜓 =1D713
+ 𝜔 =1D714
+ 𝜕 =1D715
+ 𝜖 =1D716
+ 𝜗 =1D717
+ 𝜘 =1D718
+ 𝜙 =1D719
+ 𝜚 =1D71A
+ 𝜛 =1D71B
+
+
diff --git a/testing/web-platform/tests/mathml/relations/css-styling/mathvariant-auto.html b/testing/web-platform/tests/mathml/relations/css-styling/mathvariant-auto.html
new file mode 100644
index 0000000000..affb02f0c9
--- /dev/null
+++ b/testing/web-platform/tests/mathml/relations/css-styling/mathvariant-auto.html
@@ -0,0 +1,145 @@
+
+
+
+
+mathvariant auto
+
+
+
+
+
+
+
+
+
+ Test passes if all the equalities below are true.
+ A =1D434
+ B =1D435
+ C =1D436
+ D =1D437
+ E =1D438
+ F =1D439
+ G =1D43A
+ H =1D43B
+ I =1D43C
+ J =1D43D
+ K =1D43E
+ L =1D43F
+ M =1D440
+ N =1D441
+ O =1D442
+ P =1D443
+ Q =1D444
+ R =1D445
+ S =1D446
+ T =1D447
+ U =1D448
+ V =1D449
+ W =1D44A
+ X =1D44B
+ Y =1D44C
+ Z =1D44D
+ a =1D44E
+ b =1D44F
+ c =1D450
+ d =1D451
+ e =1D452
+ f =1D453
+ g =1D454
+ h =0210E
+ i =1D456
+ j =1D457
+ k =1D458
+ l =1D459
+ m =1D45A
+ n =1D45B
+ o =1D45C
+ p =1D45D
+ q =1D45E
+ r =1D45F
+ s =1D460
+ t =1D461
+ u =1D462
+ v =1D463
+ w =1D464
+ x =1D465
+ y =1D466
+ z =1D467
+ ı =1D6A4
+ ȷ =1D6A5
+ Α =1D6E2
+ Β =1D6E3
+ Γ =1D6E4
+ Δ =1D6E5
+ Ε =1D6E6
+ Ζ =1D6E7
+ Η =1D6E8
+ Θ =1D6E9
+ Ι =1D6EA
+ Κ =1D6EB
+ Λ =1D6EC
+ Μ =1D6ED
+ Ν =1D6EE
+ Ξ =1D6EF
+ Ο =1D6F0
+ Π =1D6F1
+ Ρ =1D6F2
+ ϴ =1D6F3
+ Σ =1D6F4
+ Τ =1D6F5
+ Υ =1D6F6
+ Φ =1D6F7
+ Χ =1D6F8
+ Ψ =1D6F9
+ Ω =1D6FA
+ ∇ =1D6FB
+ α =1D6FC
+ β =1D6FD
+ γ =1D6FE
+ δ =1D6FF
+ ε =1D700
+ ζ =1D701
+ η =1D702
+ θ =1D703
+ ι =1D704
+ κ =1D705
+ λ =1D706
+ μ =1D707
+ ν =1D708
+ ξ =1D709
+ ο =1D70A
+ π =1D70B
+ ρ =1D70C
+ ς =1D70D
+ σ =1D70E
+ τ =1D70F
+ υ =1D710
+ φ =1D711
+ χ =1D712
+ ψ =1D713
+ ω =1D714
+ ∂ =1D715
+ ϵ =1D716
+ ϑ =1D717
+ ϰ =1D718
+ ϕ =1D719
+ ϱ =1D71A
+ ϖ =1D71B
+
+
diff --git a/testing/web-platform/tests/mathml/relations/css-styling/mathvariant-font-style-font-weight-ref.html b/testing/web-platform/tests/mathml/relations/css-styling/mathvariant-font-style-font-weight-ref.html
new file mode 100644
index 0000000000..c3e586f4dd
--- /dev/null
+++ b/testing/web-platform/tests/mathml/relations/css-styling/mathvariant-font-style-font-weight-ref.html
@@ -0,0 +1,44 @@
+
+
+
+
+ mathvariant attribute and font-style/font-weight (reference)
+
+
+
+ This test passes if you see six lines of text (italic, italic, bold, bold, bold italic and bold italic) with the corresponding style applied:
+
+
+ italic
+
+
+
+
+ italic
+
+
+
+
+ bold
+
+
+
+
+ bold
+
+
+
+
+ bold italic
+
+
+
+
+ bold italic
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/relations/css-styling/mathvariant-font-style-font-weight.html b/testing/web-platform/tests/mathml/relations/css-styling/mathvariant-font-style-font-weight.html
new file mode 100644
index 0000000000..793c687b09
--- /dev/null
+++ b/testing/web-platform/tests/mathml/relations/css-styling/mathvariant-font-style-font-weight.html
@@ -0,0 +1,49 @@
+
+
+
+
+ mathvariant attribute and font-style/font-weight
+
+
+
+
+
+
+
+
+ This test passes if you see six lines of text (italic, italic, bold, bold, bold italic and bold italic) with the corresponding style applied:
+
+
+ italic
+
+
+
+
+ italic
+
+
+
+
+ bold
+
+
+
+
+ bold
+
+
+
+
+ bold italic
+
+
+
+
+ bold italic
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/relations/css-styling/mi-fontstyle-fontweight-ref.html b/testing/web-platform/tests/mathml/relations/css-styling/mi-fontstyle-fontweight-ref.html
new file mode 100644
index 0000000000..63e6e2ba9c
--- /dev/null
+++ b/testing/web-platform/tests/mathml/relations/css-styling/mi-fontstyle-fontweight-ref.html
@@ -0,0 +1,22 @@
+
+
+
+
+ single-char mi and fontstyle/fontweight attributes (reference)
+
+
+
+ Test passes if you see 𝜕 rendered twice, without any bold or italic style applied:
+ 𝜕
+ 𝜕
+
+
diff --git a/testing/web-platform/tests/mathml/relations/css-styling/mi-fontstyle-fontweight.html b/testing/web-platform/tests/mathml/relations/css-styling/mi-fontstyle-fontweight.html
new file mode 100644
index 0000000000..b6dd05ea20
--- /dev/null
+++ b/testing/web-platform/tests/mathml/relations/css-styling/mi-fontstyle-fontweight.html
@@ -0,0 +1,27 @@
+
+
+
+
+ single-char mi and fontstyle/fontweight attributes
+
+
+
+
+
+
+
+
+ Test passes if you see 𝜕 rendered twice, without any bold or italic style applied:
+ ∂
+ ∂
+
+
diff --git a/testing/web-platform/tests/mathml/relations/css-styling/multi-column-layout.html b/testing/web-platform/tests/mathml/relations/css-styling/multi-column-layout.html
new file mode 100644
index 0000000000..88db5047e9
--- /dev/null
+++ b/testing/web-platform/tests/mathml/relations/css-styling/multi-column-layout.html
@@ -0,0 +1,56 @@
+
+
+
+
+MathML inside multi-column
+
+
+
+
+
+
+
+
+
+
+
+ blah
+
+
+
+
+
+
+
+ blah
+ blah
+ blah
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/relations/css-styling/not-participating-to-parent-layout.html b/testing/web-platform/tests/mathml/relations/css-styling/not-participating-to-parent-layout.html
new file mode 100644
index 0000000000..0952679c62
--- /dev/null
+++ b/testing/web-platform/tests/mathml/relations/css-styling/not-participating-to-parent-layout.html
@@ -0,0 +1,77 @@
+
+
+
+
+Elements not participating to the layout of their parent
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/relations/css-styling/out-of-flow/absolutely-positioned-001-ref.html b/testing/web-platform/tests/mathml/relations/css-styling/out-of-flow/absolutely-positioned-001-ref.html
new file mode 100644
index 0000000000..447c5b722a
--- /dev/null
+++ b/testing/web-platform/tests/mathml/relations/css-styling/out-of-flow/absolutely-positioned-001-ref.html
@@ -0,0 +1,18 @@
+
+
+
+
+Absolutely positioned (reference)
+
+ Test passes if you see a green square and no red.
+
+
+
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/relations/css-styling/out-of-flow/absolutely-positioned-001.html b/testing/web-platform/tests/mathml/relations/css-styling/out-of-flow/absolutely-positioned-001.html
new file mode 100644
index 0000000000..9a7851ba23
--- /dev/null
+++ b/testing/web-platform/tests/mathml/relations/css-styling/out-of-flow/absolutely-positioned-001.html
@@ -0,0 +1,25 @@
+
+
+
+
+Absolutely positioned
+
+
+
+
+
+ Test passes if you see a green square and no red.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/relations/css-styling/out-of-flow/all-mathml-containers.html b/testing/web-platform/tests/mathml/relations/css-styling/out-of-flow/all-mathml-containers.html
new file mode 100644
index 0000000000..9069b92637
--- /dev/null
+++ b/testing/web-platform/tests/mathml/relations/css-styling/out-of-flow/all-mathml-containers.html
@@ -0,0 +1,103 @@
+
+
+
+
+absolutely positioned in all MathML elements
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/relations/css-styling/out-of-flow/fixed-positioned-001-ref.html b/testing/web-platform/tests/mathml/relations/css-styling/out-of-flow/fixed-positioned-001-ref.html
new file mode 100644
index 0000000000..03b9f56698
--- /dev/null
+++ b/testing/web-platform/tests/mathml/relations/css-styling/out-of-flow/fixed-positioned-001-ref.html
@@ -0,0 +1,28 @@
+
+
+
+
+Fixed positioned (reference)
+
+
+
+
+
+
+
+
+
+
+
Test passes if you see a green square and no red.
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/relations/css-styling/out-of-flow/fixed-positioned-001.html b/testing/web-platform/tests/mathml/relations/css-styling/out-of-flow/fixed-positioned-001.html
new file mode 100644
index 0000000000..994174162c
--- /dev/null
+++ b/testing/web-platform/tests/mathml/relations/css-styling/out-of-flow/fixed-positioned-001.html
@@ -0,0 +1,35 @@
+
+
+
+
+Fixed positioned
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Test passes if you see a green square and no red.
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/relations/css-styling/overflow/computed-value-001.html b/testing/web-platform/tests/mathml/relations/css-styling/overflow/computed-value-001.html
new file mode 100644
index 0000000000..0510f1da6d
--- /dev/null
+++ b/testing/web-platform/tests/mathml/relations/css-styling/overflow/computed-value-001.html
@@ -0,0 +1,45 @@
+
+
+
+
+overflow on MathML elements
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/relations/css-styling/padding-border-margin/border-001.html b/testing/web-platform/tests/mathml/relations/css-styling/padding-border-margin/border-001.html
new file mode 100644
index 0000000000..fd86388ccd
--- /dev/null
+++ b/testing/web-platform/tests/mathml/relations/css-styling/padding-border-margin/border-001.html
@@ -0,0 +1,179 @@
+
+
+
+
+border
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/relations/css-styling/padding-border-margin/border-002.html b/testing/web-platform/tests/mathml/relations/css-styling/padding-border-margin/border-002.html
new file mode 100644
index 0000000000..bfb7f76adc
--- /dev/null
+++ b/testing/web-platform/tests/mathml/relations/css-styling/padding-border-margin/border-002.html
@@ -0,0 +1,72 @@
+
+
+
+
+border
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/relations/css-styling/padding-border-margin/margin-001.html b/testing/web-platform/tests/mathml/relations/css-styling/padding-border-margin/margin-001.html
new file mode 100644
index 0000000000..eabb6f46c7
--- /dev/null
+++ b/testing/web-platform/tests/mathml/relations/css-styling/padding-border-margin/margin-001.html
@@ -0,0 +1,179 @@
+
+
+
+
+margin
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/relations/css-styling/padding-border-margin/margin-002.html b/testing/web-platform/tests/mathml/relations/css-styling/padding-border-margin/margin-002.html
new file mode 100644
index 0000000000..b560ed125c
--- /dev/null
+++ b/testing/web-platform/tests/mathml/relations/css-styling/padding-border-margin/margin-002.html
@@ -0,0 +1,86 @@
+
+
+
+
+margin
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/relations/css-styling/padding-border-margin/margin-003.html b/testing/web-platform/tests/mathml/relations/css-styling/padding-border-margin/margin-003.html
new file mode 100644
index 0000000000..3b6b2a38db
--- /dev/null
+++ b/testing/web-platform/tests/mathml/relations/css-styling/padding-border-margin/margin-003.html
@@ -0,0 +1,93 @@
+
+
+
+
+margin
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/relations/css-styling/padding-border-margin/padding-001.html b/testing/web-platform/tests/mathml/relations/css-styling/padding-border-margin/padding-001.html
new file mode 100644
index 0000000000..b6d4901f36
--- /dev/null
+++ b/testing/web-platform/tests/mathml/relations/css-styling/padding-border-margin/padding-001.html
@@ -0,0 +1,179 @@
+
+
+
+
+padding
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/relations/css-styling/padding-border-margin/padding-002.html b/testing/web-platform/tests/mathml/relations/css-styling/padding-border-margin/padding-002.html
new file mode 100644
index 0000000000..89d3bdc7ef
--- /dev/null
+++ b/testing/web-platform/tests/mathml/relations/css-styling/padding-border-margin/padding-002.html
@@ -0,0 +1,71 @@
+
+
+
+
+padding
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/relations/css-styling/padding-border-margin/padding-border-margin-001-ref.html b/testing/web-platform/tests/mathml/relations/css-styling/padding-border-margin/padding-border-margin-001-ref.html
new file mode 100644
index 0000000000..150a650bc2
--- /dev/null
+++ b/testing/web-platform/tests/mathml/relations/css-styling/padding-border-margin/padding-border-margin-001-ref.html
@@ -0,0 +1,17 @@
+
+
+
+
+Padding/border/margin
+
+ This test passes if you see a purple square of side 100px, surrounded by a
+ 10px blue padding, surrounded by a 10px blue/yellow dashed border, itself
+ surrounded by a 10px pink margin.
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/relations/css-styling/padding-border-margin/padding-border-margin-001.html b/testing/web-platform/tests/mathml/relations/css-styling/padding-border-margin/padding-border-margin-001.html
new file mode 100644
index 0000000000..b0fb17c7d2
--- /dev/null
+++ b/testing/web-platform/tests/mathml/relations/css-styling/padding-border-margin/padding-border-margin-001.html
@@ -0,0 +1,22 @@
+
+
+
+
+Padding/border/margin
+
+
+
+
+
+ This test passes if you see a purple square of side 100px, surrounded by a
+ 10px blue padding, surrounded by a 10px blue/yellow dashed border, itself
+ surrounded by a 10px pink margin.
+
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/relations/css-styling/padding-border-margin/padding-border-margin-002-ref.html b/testing/web-platform/tests/mathml/relations/css-styling/padding-border-margin/padding-border-margin-002-ref.html
new file mode 100644
index 0000000000..e13a9f47ff
--- /dev/null
+++ b/testing/web-platform/tests/mathml/relations/css-styling/padding-border-margin/padding-border-margin-002-ref.html
@@ -0,0 +1,18 @@
+
+
+
+
+Padding/border/margin on largeop (reference)
+
+ This test passes if you see a cyan rectangle of width 300px and
+ height 1500px, surrounded by a 10px blue padding, surrounded by a 10px
+ blue/yellow dashed border, itself
+ surrounded by a 10px pink margin.
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/relations/css-styling/padding-border-margin/padding-border-margin-002.html b/testing/web-platform/tests/mathml/relations/css-styling/padding-border-margin/padding-border-margin-002.html
new file mode 100644
index 0000000000..4559fc49ce
--- /dev/null
+++ b/testing/web-platform/tests/mathml/relations/css-styling/padding-border-margin/padding-border-margin-002.html
@@ -0,0 +1,34 @@
+
+
+
+
+Padding/border/margin on largeop
+
+
+
+
+
+
+
+ This test passes if you see a cyan rectangle of width 300px and
+ height 1500px, surrounded by a 10px blue padding, surrounded by a 10px
+ blue/yellow dashed border, itself
+ surrounded by a 10px pink margin.
+
+
+ ⫿
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/relations/css-styling/padding-border-margin/padding-border-margin-003-ref.html b/testing/web-platform/tests/mathml/relations/css-styling/padding-border-margin/padding-border-margin-003-ref.html
new file mode 100644
index 0000000000..275494ddd8
--- /dev/null
+++ b/testing/web-platform/tests/mathml/relations/css-styling/padding-border-margin/padding-border-margin-003-ref.html
@@ -0,0 +1,18 @@
+
+
+
+
+Padding/border/margin on an operator, stretchy along the block axis (reference)
+
+ This test passes if you see a cyan rectangle of width 300px and
+ height 1500px, surrounded by a 10px blue padding, surrounded by a 10px
+ blue/yellow dashed border, itself
+ surrounded by a 10px pink margin.
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/relations/css-styling/padding-border-margin/padding-border-margin-003.html b/testing/web-platform/tests/mathml/relations/css-styling/padding-border-margin/padding-border-margin-003.html
new file mode 100644
index 0000000000..c54682f309
--- /dev/null
+++ b/testing/web-platform/tests/mathml/relations/css-styling/padding-border-margin/padding-border-margin-003.html
@@ -0,0 +1,33 @@
+
+
+
+
+Padding/border/margin on an operator, stretchy along the block axis
+
+
+
+
+
+
+
+ This test passes if you see a cyan rectangle of width 300px and
+ height 1500px, surrounded by a 10px blue padding, surrounded by a 10px
+ blue/yellow dashed border, itself
+ surrounded by a 10px pink margin.
+
+
+
+ ⥜
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/relations/css-styling/presentational-hints-001-ref.html b/testing/web-platform/tests/mathml/relations/css-styling/presentational-hints-001-ref.html
new file mode 100644
index 0000000000..ca539440f8
--- /dev/null
+++ b/testing/web-platform/tests/mathml/relations/css-styling/presentational-hints-001-ref.html
@@ -0,0 +1,62 @@
+
+
+
+
+presentational hints
+
+
+
+ dir:
+
+ X
+ p
+
+
+ mathcolor:
+
+ X
+ p
+
+
+ mathbackground:
+
+ X
+ p
+
+ mathsize:
+
+ X
+
+
+ mathvariant:
+
+ sin
+
+
+ displaystyle:
+
+
+ X
+ X
+
+
+
+ scriptlevel:
+
+ X
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/relations/css-styling/presentational-hints-001.html b/testing/web-platform/tests/mathml/relations/css-styling/presentational-hints-001.html
new file mode 100644
index 0000000000..96ee69541b
--- /dev/null
+++ b/testing/web-platform/tests/mathml/relations/css-styling/presentational-hints-001.html
@@ -0,0 +1,63 @@
+
+
+
+
+presentational hints
+
+
+
+
+
+
+
+
+
+
+
+
+ dir:
+
+ X
+ p
+
+
+ mathcolor:
+
+ X
+ p
+
+
+ mathbackground:
+
+ X
+ p
+
+ mathsize:
+
+ X
+
+
+ mathvariant:
+
+ sin
+
+
+ displaystyle:
+
+
+ X
+ X
+
+
+
+ scriptlevel:
+
+ X
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/relations/css-styling/presentational-hints-002-ref.html b/testing/web-platform/tests/mathml/relations/css-styling/presentational-hints-002-ref.html
new file mode 100644
index 0000000000..fa22741efe
--- /dev/null
+++ b/testing/web-platform/tests/mathml/relations/css-styling/presentational-hints-002-ref.html
@@ -0,0 +1,59 @@
+
+
+
+
+presentational hints (dynamic)
+
+
+
+
+ dir:
+
+ X
+ p
+
+
+ mathcolor:
+
+ X
+ p
+
+
+ mathbackground:
+
+ X
+ p
+
+ mathsize:
+
+ X
+
+
+ mathvariant:
+
+ X
+
+
+ displaystyle:
+
+
+ X
+ X
+
+
+
+ scriptlevel:
+
+ X
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/relations/css-styling/presentational-hints-002.html b/testing/web-platform/tests/mathml/relations/css-styling/presentational-hints-002.html
new file mode 100644
index 0000000000..8bb9153b86
--- /dev/null
+++ b/testing/web-platform/tests/mathml/relations/css-styling/presentational-hints-002.html
@@ -0,0 +1,84 @@
+
+
+
+
+presentational hints (dynamic)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ dir:
+
+ X
+ p
+
+
+ mathcolor:
+
+ X
+ p
+
+
+ mathbackground:
+
+ X
+ p
+
+ mathsize:
+
+ X
+
+
+ mathvariant:
+
+ X
+
+
+ displaystyle:
+
+
+ X
+ X
+
+
+
+ scriptlevel:
+
+ X
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/relations/css-styling/scriptlevel-001.html b/testing/web-platform/tests/mathml/relations/css-styling/scriptlevel-001.html
new file mode 100644
index 0000000000..e9be1f2965
--- /dev/null
+++ b/testing/web-platform/tests/mathml/relations/css-styling/scriptlevel-001.html
@@ -0,0 +1,219 @@
+
+
+
+
+Automatic scriptlevel
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0
+ 1
+
+
+
+
+
+ 0
+ 1
+
+
+
+
+
+
+ 0
+ 1
+
+
+
+
+
+
+ 0
+ 1
+
+
+
+
+ 0
+ 1
+
+
+
+
+ 0
+ 1
+ 2
+
+
+
+
+ 0
+ 1
+
+
+
+
+ 0
+ 1
+
+
+
+
+ 0
+ 1
+ 2
+
+
+
+
+ 0
+ 1
+ 2
+ 3
+ 4
+
+ 6
+ 7
+ 8
+ 9
+
+
+
+
+
+
+ 0
+ 1
+
+
+
+
+ 0
+ 1
+
+
+
+
+ 0
+ 1
+ 2
+
+
+
+
+ 0
+ 1
+ 2
+
+
+
+
+
+
+ 0
+ 1
+ 2
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/relations/css-styling/transform-ref.html b/testing/web-platform/tests/mathml/relations/css-styling/transform-ref.html
new file mode 100644
index 0000000000..005e8a7882
--- /dev/null
+++ b/testing/web-platform/tests/mathml/relations/css-styling/transform-ref.html
@@ -0,0 +1,13 @@
+
+
+
+
+Transform property (reference)
+
+
+ Rectangles should be rotated.
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/relations/css-styling/transform.html b/testing/web-platform/tests/mathml/relations/css-styling/transform.html
new file mode 100644
index 0000000000..c45fda3469
--- /dev/null
+++ b/testing/web-platform/tests/mathml/relations/css-styling/transform.html
@@ -0,0 +1,21 @@
+
+
+
+
+Transform property
+
+
+
+
+
+ Rectangles should be rotated.
+
+
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/relations/css-styling/visibility-001-ref.html b/testing/web-platform/tests/mathml/relations/css-styling/visibility-001-ref.html
new file mode 100644
index 0000000000..fcaf5fe85b
--- /dev/null
+++ b/testing/web-platform/tests/mathml/relations/css-styling/visibility-001-ref.html
@@ -0,0 +1,12 @@
+
+
+
+
+visibility (reference)
+
+
+ Test passes if you see a green square.
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/relations/css-styling/visibility-001.html b/testing/web-platform/tests/mathml/relations/css-styling/visibility-001.html
new file mode 100644
index 0000000000..56bf7b7da2
--- /dev/null
+++ b/testing/web-platform/tests/mathml/relations/css-styling/visibility-001.html
@@ -0,0 +1,34 @@
+
+
+
+
+visibility
+
+
+
+
+
+
+ Test passes if you see a green square.
+
+
1
+
2
+
3
+
4
+
5
+
+ 1
+ 2
+ 3
+ 4
+ 5
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/relations/css-styling/visibility-002-ref.html b/testing/web-platform/tests/mathml/relations/css-styling/visibility-002-ref.html
new file mode 100644
index 0000000000..fcaf5fe85b
--- /dev/null
+++ b/testing/web-platform/tests/mathml/relations/css-styling/visibility-002-ref.html
@@ -0,0 +1,12 @@
+
+
+
+
+visibility (reference)
+
+
+ Test passes if you see a green square.
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/relations/css-styling/visibility-002.html b/testing/web-platform/tests/mathml/relations/css-styling/visibility-002.html
new file mode 100644
index 0000000000..f92d0faf6d
--- /dev/null
+++ b/testing/web-platform/tests/mathml/relations/css-styling/visibility-002.html
@@ -0,0 +1,29 @@
+
+
+
+
+visibility
+
+
+
+
+
+
+
+ Test passes if you see a green square.
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/relations/css-styling/visibility-003-ref.html b/testing/web-platform/tests/mathml/relations/css-styling/visibility-003-ref.html
new file mode 100644
index 0000000000..fcaf5fe85b
--- /dev/null
+++ b/testing/web-platform/tests/mathml/relations/css-styling/visibility-003-ref.html
@@ -0,0 +1,12 @@
+
+
+
+
+visibility (reference)
+
+
+ Test passes if you see a green square.
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/relations/css-styling/visibility-003.html b/testing/web-platform/tests/mathml/relations/css-styling/visibility-003.html
new file mode 100644
index 0000000000..4bf4d45c81
--- /dev/null
+++ b/testing/web-platform/tests/mathml/relations/css-styling/visibility-003.html
@@ -0,0 +1,31 @@
+
+
+
+
+visibility
+
+
+
+
+
+
+
+ Test passes if you see a green square.
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/relations/css-styling/visibility-004.tentative-ref.html b/testing/web-platform/tests/mathml/relations/css-styling/visibility-004.tentative-ref.html
new file mode 100644
index 0000000000..fcaf5fe85b
--- /dev/null
+++ b/testing/web-platform/tests/mathml/relations/css-styling/visibility-004.tentative-ref.html
@@ -0,0 +1,12 @@
+
+
+
+
+visibility (reference)
+
+
+ Test passes if you see a green square.
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/relations/css-styling/visibility-004.tentative.html b/testing/web-platform/tests/mathml/relations/css-styling/visibility-004.tentative.html
new file mode 100644
index 0000000000..28678eaf0c
--- /dev/null
+++ b/testing/web-platform/tests/mathml/relations/css-styling/visibility-004.tentative.html
@@ -0,0 +1,55 @@
+
+
+
+
+visibility
+
+
+
+
+
+
+
+ Test passes if you see a green square.
+
+
1
+
2
+
3
+
4
+
5
+
6
+
7
+
8
+
9
+
10
+
11
+
12
+
13
+
14
+
+ 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+ 10
+ 11
+ 12
+ 13
+ 14
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/relations/css-styling/visibility-005-ref.html b/testing/web-platform/tests/mathml/relations/css-styling/visibility-005-ref.html
new file mode 100644
index 0000000000..fcaf5fe85b
--- /dev/null
+++ b/testing/web-platform/tests/mathml/relations/css-styling/visibility-005-ref.html
@@ -0,0 +1,12 @@
+
+
+
+
+visibility (reference)
+
+
+ Test passes if you see a green square.
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/relations/css-styling/visibility-005.html b/testing/web-platform/tests/mathml/relations/css-styling/visibility-005.html
new file mode 100644
index 0000000000..a3af376fea
--- /dev/null
+++ b/testing/web-platform/tests/mathml/relations/css-styling/visibility-005.html
@@ -0,0 +1,88 @@
+
+
+
+
+visibility
+
+
+
+
+
+
+
+
+ Test passes if you see a green square.
+
+
+
+ ⥯
+ +
+ -
+
+
+
+ ⥯
+
+
+
+
+
+ ⥯
+
+
+
+
+
+
+ ⥯
+
+
+
+
+
+ ⥯
+ +
+ -
+
+
+
+ ⥯
+
+
+
+
+
+ ⥯
+
+
+
+
+
+
+ ⥯
+
+
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/relations/css-styling/width-height-001.html b/testing/web-platform/tests/mathml/relations/css-styling/width-height-001.html
new file mode 100644
index 0000000000..2deedc3f0b
--- /dev/null
+++ b/testing/web-platform/tests/mathml/relations/css-styling/width-height-001.html
@@ -0,0 +1,62 @@
+
+
+
+
+width, height, inline-size and block-size
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/relations/css-styling/width-height-002-ref.html b/testing/web-platform/tests/mathml/relations/css-styling/width-height-002-ref.html
new file mode 100644
index 0000000000..ed5125e952
--- /dev/null
+++ b/testing/web-platform/tests/mathml/relations/css-styling/width-height-002-ref.html
@@ -0,0 +1,162 @@
+
+
+
+
+content position with width/height (reference)
+
+
+
+
+
+
+
+ X
+
+
+
+
+ X
+
+
+
+
+
+
+
+
+ X
+ X
+ X
+
+
+
+
+
+
+ X
+ X
+ X
+
+
+
+
+
+
+
+
+
+ X
+ X
+ X
+
+
+
+
+
+
+ X
+ X
+ X
+
+
+
+
+
+
+
+
+
+ X
+ X
+ X
+
+
+
+
+
+
+ X
+ X
+ X
+
+
+
+
+
+
+
+
+
+ X
+ X
+
+
+
+
+
+
+ X
+ X
+
+
+
+
+
+
+
+
+
+ X
+
+
+
+
+
+
+ X
+
+
+
+
+
+
+
+
+
+ X
+ X
+
+
+
+
+
+
+ X
+ X
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/relations/css-styling/width-height-002.html b/testing/web-platform/tests/mathml/relations/css-styling/width-height-002.html
new file mode 100644
index 0000000000..99822c1ed9
--- /dev/null
+++ b/testing/web-platform/tests/mathml/relations/css-styling/width-height-002.html
@@ -0,0 +1,135 @@
+
+
+
+
+content position with width/height
+
+
+
+
+
+
+
+
+
+
+
+ X
+
+
+ X
+
+
+
+
+
+
+ X
+ X
+ X
+
+
+
+
+ X
+ X
+ X
+
+
+
+
+
+
+
+ X
+ X
+ X
+
+
+
+
+ X
+ X
+ X
+
+
+
+
+
+
+
+ X
+ X
+ X
+
+
+
+
+ X
+ X
+ X
+
+
+
+
+
+
+
+ X
+ X
+
+
+
+
+ X
+ X
+
+
+
+
+
+
+
+ X
+
+
+
+
+ X
+
+
+
+
+
+
+
+ X
+ X
+
+
+
+
+ X
+ X
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/relations/css-styling/width-height-003-ref.html b/testing/web-platform/tests/mathml/relations/css-styling/width-height-003-ref.html
new file mode 100644
index 0000000000..84eb2cd089
--- /dev/null
+++ b/testing/web-platform/tests/mathml/relations/css-styling/width-height-003-ref.html
@@ -0,0 +1,178 @@
+
+
+
+
+content position with width/height (reference)
+
+
+
+
+
+
+
+
+
+ X
+ X
+
+
+
+
+
+
+ X
+ X
+
+
+
+
+
+
+
+
+
+ X
+ X
+
+
+
+
+
+
+ X
+ X
+
+
+
+
+
+
+
+
+
+ X
+ X
+ X
+
+
+
+
+
+
+ X
+ X
+ X
+
+
+
+
+
+
+
+
+
+ X
+ X
+
+
+
+
+
+
+ X
+ X
+
+
+
+
+
+
+
+
+
+ X
+ X
+
+
+
+
+
+
+ X
+ X
+
+
+
+
+
+
+
+
+
+ X
+ X
+ X
+
+
+
+
+
+
+ X
+ X
+ X
+
+
+
+
+
+
+
+
+
+ X
+ X
+ X
+ X
+ X
+
+ X
+ X
+
+
+
+
+
+
+ X
+ X
+ X
+ X
+ X
+
+ X
+ X
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/relations/css-styling/width-height-003.html b/testing/web-platform/tests/mathml/relations/css-styling/width-height-003.html
new file mode 100644
index 0000000000..05e00f4759
--- /dev/null
+++ b/testing/web-platform/tests/mathml/relations/css-styling/width-height-003.html
@@ -0,0 +1,150 @@
+
+
+
+
+content position with width/height
+
+
+
+
+
+
+
+
+
+
+
+
+ X
+ X
+
+
+
+
+ X
+ X
+
+
+
+
+
+
+
+ X
+ X
+
+
+
+
+ X
+ X
+
+
+
+
+
+
+
+ X
+ X
+ X
+
+
+
+
+ X
+ X
+ X
+
+
+
+
+
+
+
+ X
+ X
+
+
+
+
+ X
+ X
+
+
+
+
+
+
+
+ X
+ X
+
+
+
+
+ X
+ X
+
+
+
+
+
+
+
+ X
+ X
+ X
+
+
+
+
+ X
+ X
+ X
+
+
+
+
+
+
+
+ X
+ X
+ X
+ X
+ X
+
+ X
+ X
+
+
+
+
+ X
+ X
+ X
+ X
+ X
+
+ X
+ X
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/relations/css-styling/width-height-004.html b/testing/web-platform/tests/mathml/relations/css-styling/width-height-004.html
new file mode 100644
index 0000000000..7133573b04
--- /dev/null
+++ b/testing/web-platform/tests/mathml/relations/css-styling/width-height-004.html
@@ -0,0 +1,133 @@
+
+
+
+
+content position with width/height
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ X
+ X
+
+
+
+
+ X
+ X
+
+
+
+
+
+
+
+ X
+ X
+
+
+
+
+ X
+ X
+
+
+
+
+
+
+
+ X
+ X
+
+
+
+
+ X
+ X
+
+
+
+
+
+
+
+ X
+ X
+
+
+
+
+ X
+ X
+
+
+
+
+
+
+
+ X
+ X
+ X
+
+
+
+
+ X
+ X
+ X
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/relations/css-styling/writing-mode/force-horizontal-tb.html b/testing/web-platform/tests/mathml/relations/css-styling/writing-mode/force-horizontal-tb.html
new file mode 100644
index 0000000000..e239cdca5a
--- /dev/null
+++ b/testing/web-platform/tests/mathml/relations/css-styling/writing-mode/force-horizontal-tb.html
@@ -0,0 +1,50 @@
+
+
+
+
+Forced writing-mode on MathML elements
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/relations/css-styling/writing-mode/reset-and-logicial-property-ref.html b/testing/web-platform/tests/mathml/relations/css-styling/writing-mode/reset-and-logicial-property-ref.html
new file mode 100644
index 0000000000..6eae88efb1
--- /dev/null
+++ b/testing/web-platform/tests/mathml/relations/css-styling/writing-mode/reset-and-logicial-property-ref.html
@@ -0,0 +1,15 @@
+
+
+
+
+ Reset writing-mode and logical property (reference)
+
+
+ Test passes if you see a green square.
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/relations/css-styling/writing-mode/reset-and-logicial-property.html b/testing/web-platform/tests/mathml/relations/css-styling/writing-mode/reset-and-logicial-property.html
new file mode 100644
index 0000000000..939cfc5ba6
--- /dev/null
+++ b/testing/web-platform/tests/mathml/relations/css-styling/writing-mode/reset-and-logicial-property.html
@@ -0,0 +1,20 @@
+
+
+
+
+ Reset writing-mode and logical property
+
+
+
+
+
+ Test passes if you see a green square.
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/relations/css-styling/writing-mode/writing-mode-001.html b/testing/web-platform/tests/mathml/relations/css-styling/writing-mode/writing-mode-001.html
new file mode 100644
index 0000000000..b751caf90d
--- /dev/null
+++ b/testing/web-platform/tests/mathml/relations/css-styling/writing-mode/writing-mode-001.html
@@ -0,0 +1,69 @@
+
+
+
+
+writing mode
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/relations/css-styling/writing-mode/writing-mode-002.html b/testing/web-platform/tests/mathml/relations/css-styling/writing-mode/writing-mode-002.html
new file mode 100644
index 0000000000..c0b64a917a
--- /dev/null
+++ b/testing/web-platform/tests/mathml/relations/css-styling/writing-mode/writing-mode-002.html
@@ -0,0 +1,82 @@
+
+
+
+
+writing mode
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/relations/html5-tree/class-1-ref.html b/testing/web-platform/tests/mathml/relations/html5-tree/class-1-ref.html
new file mode 100644
index 0000000000..5afa59ecf2
--- /dev/null
+++ b/testing/web-platform/tests/mathml/relations/html5-tree/class-1-ref.html
@@ -0,0 +1,15 @@
+
+
+
+
+Class (reference)
+
+
+
+ Test passes if you see the text "PASS".
+
+ PASS
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/relations/html5-tree/class-1.html b/testing/web-platform/tests/mathml/relations/html5-tree/class-1.html
new file mode 100644
index 0000000000..fd1678d440
--- /dev/null
+++ b/testing/web-platform/tests/mathml/relations/html5-tree/class-1.html
@@ -0,0 +1,24 @@
+
+
+
+
+Class
+
+
+
+
+
+
+
+
+ Test passes if you see the text "PASS".
+
+ FAIL
+ PASS
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/relations/html5-tree/class-2.html b/testing/web-platform/tests/mathml/relations/html5-tree/class-2.html
new file mode 100644
index 0000000000..e694b063a6
--- /dev/null
+++ b/testing/web-platform/tests/mathml/relations/html5-tree/class-2.html
@@ -0,0 +1,42 @@
+
+
+
+
+Class
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/relations/html5-tree/clipboard-event-handlers.tentative.html b/testing/web-platform/tests/mathml/relations/html5-tree/clipboard-event-handlers.tentative.html
new file mode 100644
index 0000000000..bf2f8d11ed
--- /dev/null
+++ b/testing/web-platform/tests/mathml/relations/html5-tree/clipboard-event-handlers.tentative.html
@@ -0,0 +1,119 @@
+
+clipboard event handlers for MathML
+
+
+
+
+
+
+
+
+
+
+
+ E
+
+
diff --git a/testing/web-platform/tests/mathml/relations/html5-tree/color-attributes-1-ref.html b/testing/web-platform/tests/mathml/relations/html5-tree/color-attributes-1-ref.html
new file mode 100644
index 0000000000..71ee8cea9d
--- /dev/null
+++ b/testing/web-platform/tests/mathml/relations/html5-tree/color-attributes-1-ref.html
@@ -0,0 +1,26 @@
+
+
+
+
+Color Attributes (reference)
+
+
+
+
+ Test passes if you see the text below is written in white on a green
+ background.
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/relations/html5-tree/color-attributes-1.html b/testing/web-platform/tests/mathml/relations/html5-tree/color-attributes-1.html
new file mode 100644
index 0000000000..211bda7f85
--- /dev/null
+++ b/testing/web-platform/tests/mathml/relations/html5-tree/color-attributes-1.html
@@ -0,0 +1,38 @@
+
+
+
+
+Color Attributes
+
+
+
+
+
+
+
+
+ Test passes if you see the text below is written in white on a green
+ background.
+
+
+
+
+ Hello World!
+
+
+
+
+ Hello World!
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/relations/html5-tree/content-editable.html b/testing/web-platform/tests/mathml/relations/html5-tree/content-editable.html
new file mode 100644
index 0000000000..28e8630829
--- /dev/null
+++ b/testing/web-platform/tests/mathml/relations/html5-tree/content-editable.html
@@ -0,0 +1,51 @@
+
+
+
+
+MathML inside content-editable
+
+
+
+
+
+
+
+
+
+
+ This is
+
+
+
+
+
+
+ a content editable div
+
+
+
diff --git a/testing/web-platform/tests/mathml/relations/html5-tree/css-inline-style-dynamic.tentative-ref.html b/testing/web-platform/tests/mathml/relations/html5-tree/css-inline-style-dynamic.tentative-ref.html
new file mode 100644
index 0000000000..19f3e6c82a
--- /dev/null
+++ b/testing/web-platform/tests/mathml/relations/html5-tree/css-inline-style-dynamic.tentative-ref.html
@@ -0,0 +1,18 @@
+
+
+
+
+MathML 'ElementCSSInlineStyle` Dynamic Tests
+
+
+
+ This tests that `ElementCSSInlineStyle` interface changes update rendering.
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/relations/html5-tree/css-inline-style-dynamic.tentative.html b/testing/web-platform/tests/mathml/relations/html5-tree/css-inline-style-dynamic.tentative.html
new file mode 100644
index 0000000000..5d27d6a7e6
--- /dev/null
+++ b/testing/web-platform/tests/mathml/relations/html5-tree/css-inline-style-dynamic.tentative.html
@@ -0,0 +1,46 @@
+
+
+
+
+ MathML 'ElementCSSInlineStyle` Dynamic Tests
+
+
+
+
+
+
+
+
+ This tests that `ElementCSSInlineStyle` interface changes update rendering.
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/relations/html5-tree/css-inline-style-interface.tentative.html b/testing/web-platform/tests/mathml/relations/html5-tree/css-inline-style-interface.tentative.html
new file mode 100644
index 0000000000..f8348c15b2
--- /dev/null
+++ b/testing/web-platform/tests/mathml/relations/html5-tree/css-inline-style-interface.tentative.html
@@ -0,0 +1,54 @@
+
+
+
+
+ MathML 'ElementCSSInlineStyle` Mixin Tests
+
+
+
+
+
+
+
+
+ This tests the presence and functionality of features of the
+ `ElementCSSInlineStyle` interface for MathMLElements
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/relations/html5-tree/display-1.html b/testing/web-platform/tests/mathml/relations/html5-tree/display-1.html
new file mode 100644
index 0000000000..fa92771fac
--- /dev/null
+++ b/testing/web-platform/tests/mathml/relations/html5-tree/display-1.html
@@ -0,0 +1,175 @@
+
+
+
+
+MathML display attribute
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/relations/html5-tree/display-2-ref.html b/testing/web-platform/tests/mathml/relations/html5-tree/display-2-ref.html
new file mode 100644
index 0000000000..7864c04099
--- /dev/null
+++ b/testing/web-platform/tests/mathml/relations/html5-tree/display-2-ref.html
@@ -0,0 +1,31 @@
+
+
+
+
+display attribute VS legacy mode attribute (reference)
+
+
+ Test passes if you see four green squares, the last one
+ centered and the others left-aligned.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/relations/html5-tree/display-2.html b/testing/web-platform/tests/mathml/relations/html5-tree/display-2.html
new file mode 100644
index 0000000000..b4e79395a1
--- /dev/null
+++ b/testing/web-platform/tests/mathml/relations/html5-tree/display-2.html
@@ -0,0 +1,37 @@
+
+
+
+
+display attribute VS legacy mode attribute
+
+
+
+
+
+
+ Test passes if you see four green squares, the last one
+ centered and the others left-aligned.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/relations/html5-tree/dynamic-1-ref.html b/testing/web-platform/tests/mathml/relations/html5-tree/dynamic-1-ref.html
new file mode 100644
index 0000000000..5fa90e9d2f
--- /dev/null
+++ b/testing/web-platform/tests/mathml/relations/html5-tree/dynamic-1-ref.html
@@ -0,0 +1,16 @@
+
+
+
+
+Dynamic MathML DOM (reference)
+
+
+
+ Test passes if you see the text "PASS".
+
+ PASS
+
+
+
diff --git a/testing/web-platform/tests/mathml/relations/html5-tree/dynamic-1.html b/testing/web-platform/tests/mathml/relations/html5-tree/dynamic-1.html
new file mode 100644
index 0000000000..59403196a8
--- /dev/null
+++ b/testing/web-platform/tests/mathml/relations/html5-tree/dynamic-1.html
@@ -0,0 +1,30 @@
+
+
+
+
+Dynamic MathML DOM
+
+
+
+
+
+
+
+ Test passes if you see the text "PASS".
+
+ FAIL
+
+
+
diff --git a/testing/web-platform/tests/mathml/relations/html5-tree/dynamic-2-ref.html b/testing/web-platform/tests/mathml/relations/html5-tree/dynamic-2-ref.html
new file mode 100644
index 0000000000..272e8b33ca
--- /dev/null
+++ b/testing/web-platform/tests/mathml/relations/html5-tree/dynamic-2-ref.html
@@ -0,0 +1,16 @@
+
+
+
+
+Dynamic id and style (reference)
+
+
+
+ Test passes if you see the text "PASS".
+
+ PASS
+
+
+
diff --git a/testing/web-platform/tests/mathml/relations/html5-tree/dynamic-2.html b/testing/web-platform/tests/mathml/relations/html5-tree/dynamic-2.html
new file mode 100644
index 0000000000..8ad47c5cd9
--- /dev/null
+++ b/testing/web-platform/tests/mathml/relations/html5-tree/dynamic-2.html
@@ -0,0 +1,27 @@
+
+
+
+
+Dynamic id and style
+
+
+
+
+
+
+
+ Test passes if you see the text "PASS".
+
+ FAIL
+ PASS
+
+
+
diff --git a/testing/web-platform/tests/mathml/relations/html5-tree/dynamic-childlist-001.html b/testing/web-platform/tests/mathml/relations/html5-tree/dynamic-childlist-001.html
new file mode 100644
index 0000000000..ffd0ae239f
--- /dev/null
+++ b/testing/web-platform/tests/mathml/relations/html5-tree/dynamic-childlist-001.html
@@ -0,0 +1,630 @@
+
+
+
+
+Dynamic childlist of MathML elements
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/relations/html5-tree/dynamic-childlist-002.html b/testing/web-platform/tests/mathml/relations/html5-tree/dynamic-childlist-002.html
new file mode 100644
index 0000000000..099401eacc
--- /dev/null
+++ b/testing/web-platform/tests/mathml/relations/html5-tree/dynamic-childlist-002.html
@@ -0,0 +1,119 @@
+
+
+
+
+Dynamic childlist of MathML elements
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/relations/html5-tree/href-click-1-ref.html b/testing/web-platform/tests/mathml/relations/html5-tree/href-click-1-ref.html
new file mode 100644
index 0000000000..86952567c7
--- /dev/null
+++ b/testing/web-platform/tests/mathml/relations/html5-tree/href-click-1-ref.html
@@ -0,0 +1,15 @@
+
+
+
+
+href click (reference)
+
+
+
+ This test passes if you see a green square.
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/relations/html5-tree/href-click-1.html b/testing/web-platform/tests/mathml/relations/html5-tree/href-click-1.html
new file mode 100644
index 0000000000..c3e605cb72
--- /dev/null
+++ b/testing/web-platform/tests/mathml/relations/html5-tree/href-click-1.html
@@ -0,0 +1,36 @@
+
+
+
+
+href click
+
+
+
+
+
+
+
+
+ This test passes if you see a green square.
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/relations/html5-tree/href-click-2-ref.html b/testing/web-platform/tests/mathml/relations/html5-tree/href-click-2-ref.html
new file mode 100644
index 0000000000..86952567c7
--- /dev/null
+++ b/testing/web-platform/tests/mathml/relations/html5-tree/href-click-2-ref.html
@@ -0,0 +1,15 @@
+
+
+
+
+href click (reference)
+
+
+
+ This test passes if you see a green square.
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/relations/html5-tree/href-click-2.html b/testing/web-platform/tests/mathml/relations/html5-tree/href-click-2.html
new file mode 100644
index 0000000000..8ffec61cc7
--- /dev/null
+++ b/testing/web-platform/tests/mathml/relations/html5-tree/href-click-2.html
@@ -0,0 +1,40 @@
+
+
+
+
+href click
+
+
+
+
+
+
+
+
+ This test passes if you see a green square.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/relations/html5-tree/href-click-3.html b/testing/web-platform/tests/mathml/relations/html5-tree/href-click-3.html
new file mode 100644
index 0000000000..f6f1ada6d7
--- /dev/null
+++ b/testing/web-platform/tests/mathml/relations/html5-tree/href-click-3.html
@@ -0,0 +1,38 @@
+
+
+
+
+href click
+
+
+
+
+
+
+
+
+ To test manually, click the blue rectangle.
+
+
+
+
+
+
+
+ DON'T CLICK ME
+
+
+
diff --git a/testing/web-platform/tests/mathml/relations/html5-tree/html-or-foreign-element-interfaces.tentative.html b/testing/web-platform/tests/mathml/relations/html5-tree/html-or-foreign-element-interfaces.tentative.html
new file mode 100644
index 0000000000..028428cd75
--- /dev/null
+++ b/testing/web-platform/tests/mathml/relations/html5-tree/html-or-foreign-element-interfaces.tentative.html
@@ -0,0 +1,111 @@
+
+
+
+
+ MathML 'HTMLOrForeignElement` Mixin Tests
+
+
+
+
+
+
+
+ This tests the presence and functionality of features of
+ `HTMLOrForeignElement` (currently `HTMLOrSVGElement`)
+
+ E
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/relations/html5-tree/integration-point-1-ref.html b/testing/web-platform/tests/mathml/relations/html5-tree/integration-point-1-ref.html
new file mode 100644
index 0000000000..4987754967
--- /dev/null
+++ b/testing/web-platform/tests/mathml/relations/html5-tree/integration-point-1-ref.html
@@ -0,0 +1,13 @@
+
+
+
+
+MathML inside foreignObject (reference)
+
+
+ Test passes if there is a green square and no red.
+
+
+
diff --git a/testing/web-platform/tests/mathml/relations/html5-tree/integration-point-1.html b/testing/web-platform/tests/mathml/relations/html5-tree/integration-point-1.html
new file mode 100644
index 0000000000..bc725e9d19
--- /dev/null
+++ b/testing/web-platform/tests/mathml/relations/html5-tree/integration-point-1.html
@@ -0,0 +1,25 @@
+
+
+
+
+MathML inside foreignObject
+
+
+
+
+
+ Test passes if there is a green square and no red.
+
+
+
diff --git a/testing/web-platform/tests/mathml/relations/html5-tree/integration-point-2-ref.html b/testing/web-platform/tests/mathml/relations/html5-tree/integration-point-2-ref.html
new file mode 100644
index 0000000000..33c4b7e910
--- /dev/null
+++ b/testing/web-platform/tests/mathml/relations/html5-tree/integration-point-2-ref.html
@@ -0,0 +1,15 @@
+
+
+
+
+MathML as a phrasing content (reference)
+
+
+ Test passes if there is a green square and no red.
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/relations/html5-tree/integration-point-2.html b/testing/web-platform/tests/mathml/relations/html5-tree/integration-point-2.html
new file mode 100644
index 0000000000..7e6c11a5ac
--- /dev/null
+++ b/testing/web-platform/tests/mathml/relations/html5-tree/integration-point-2.html
@@ -0,0 +1,72 @@
+
+
+
+
+MathML as a phrasing content
+
+
+
+
+
+
+ Test passes if there is a green square and no red.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/relations/html5-tree/integration-point-3-ref.html b/testing/web-platform/tests/mathml/relations/html5-tree/integration-point-3-ref.html
new file mode 100644
index 0000000000..8362ed28e3
--- /dev/null
+++ b/testing/web-platform/tests/mathml/relations/html5-tree/integration-point-3-ref.html
@@ -0,0 +1,17 @@
+
+
+
+
+phrasing content inside mtext (reference)
+
+
+ Test passes if there is a green square and no red.
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/relations/html5-tree/integration-point-3.html b/testing/web-platform/tests/mathml/relations/html5-tree/integration-point-3.html
new file mode 100644
index 0000000000..4c6f89ee93
--- /dev/null
+++ b/testing/web-platform/tests/mathml/relations/html5-tree/integration-point-3.html
@@ -0,0 +1,63 @@
+
+
+
+
+phrasing content inside mtext
+
+
+
+
+
+
+ Test passes if there is a green square and no red.
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/relations/html5-tree/integration-point-4.html b/testing/web-platform/tests/mathml/relations/html5-tree/integration-point-4.html
new file mode 100644
index 0000000000..c3bc95d1ef
--- /dev/null
+++ b/testing/web-platform/tests/mathml/relations/html5-tree/integration-point-4.html
@@ -0,0 +1,59 @@
+
+
+
+
+MathML inside foreignObject
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/relations/html5-tree/integration-point-5.html b/testing/web-platform/tests/mathml/relations/html5-tree/integration-point-5.html
new file mode 100644
index 0000000000..b63ab7a63c
--- /dev/null
+++ b/testing/web-platform/tests/mathml/relations/html5-tree/integration-point-5.html
@@ -0,0 +1,57 @@
+
+
+
+
+MathML sibling of SVG with foreignObject[overflow=visible]
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ This is a foreignObject
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/relations/html5-tree/math-global-event-handlers.tentative.html b/testing/web-platform/tests/mathml/relations/html5-tree/math-global-event-handlers.tentative.html
new file mode 100644
index 0000000000..b924eefa7d
--- /dev/null
+++ b/testing/web-platform/tests/mathml/relations/html5-tree/math-global-event-handlers.tentative.html
@@ -0,0 +1,155 @@
+
+MathMLElement GlobalEventHandlers
+
+
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/relations/html5-tree/required-extensions-2-ref.html b/testing/web-platform/tests/mathml/relations/html5-tree/required-extensions-2-ref.html
new file mode 100644
index 0000000000..dcc5b2b7d3
--- /dev/null
+++ b/testing/web-platform/tests/mathml/relations/html5-tree/required-extensions-2-ref.html
@@ -0,0 +1,13 @@
+
+
+
+
+SVG requiredExtensions (reference)
+
+
+ Test passes if there is a green square and no red.
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/relations/html5-tree/required-extensions-2.html b/testing/web-platform/tests/mathml/relations/html5-tree/required-extensions-2.html
new file mode 100644
index 0000000000..738f125507
--- /dev/null
+++ b/testing/web-platform/tests/mathml/relations/html5-tree/required-extensions-2.html
@@ -0,0 +1,23 @@
+
+
+
+
+SVG requiredExtensions
+
+
+
+
+
+ Test passes if there is a green square and no red.
+
+
+
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/relations/html5-tree/tabindex-001.html b/testing/web-platform/tests/mathml/relations/html5-tree/tabindex-001.html
new file mode 100644
index 0000000000..3aaf0d955a
--- /dev/null
+++ b/testing/web-platform/tests/mathml/relations/html5-tree/tabindex-001.html
@@ -0,0 +1,58 @@
+
+
+
+
+MathML tabIndex attribute
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/relations/html5-tree/tabindex-002.html b/testing/web-platform/tests/mathml/relations/html5-tree/tabindex-002.html
new file mode 100644
index 0000000000..d2144e3d01
--- /dev/null
+++ b/testing/web-platform/tests/mathml/relations/html5-tree/tabindex-002.html
@@ -0,0 +1,71 @@
+
+
+MathML tabindex attribute
+
+
+
+
+
+
+
+
+
+tabindex(html,href)
+
+ tabindex(omitted)
+ tabindex(empty)
+ tabindex(a)
+ tabindex(-1)
+ tabindex(0)
+ tabindex(href)
+ tabindex(3)
+ tabindex(2)
+ tabindex(2)
+ tabindex(2)
+ tabindex(1)
+
+
diff --git a/testing/web-platform/tests/mathml/relations/html5-tree/unique-identifier-1-iframe-1.html b/testing/web-platform/tests/mathml/relations/html5-tree/unique-identifier-1-iframe-1.html
new file mode 100644
index 0000000000..6b3ab07f1a
--- /dev/null
+++ b/testing/web-platform/tests/mathml/relations/html5-tree/unique-identifier-1-iframe-1.html
@@ -0,0 +1,18 @@
+
+
+
+
+Unique Identifier (iframe)
+
+
+
+
+ FAIL
+
+
+ PASS
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/relations/html5-tree/unique-identifier-1-iframe-2.html b/testing/web-platform/tests/mathml/relations/html5-tree/unique-identifier-1-iframe-2.html
new file mode 100644
index 0000000000..ade0110a27
--- /dev/null
+++ b/testing/web-platform/tests/mathml/relations/html5-tree/unique-identifier-1-iframe-2.html
@@ -0,0 +1,15 @@
+
+
+
+
+Unique Identifier (iframe reference)
+
+
+
+
+ PASS
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/relations/html5-tree/unique-identifier-1-ref.html b/testing/web-platform/tests/mathml/relations/html5-tree/unique-identifier-1-ref.html
new file mode 100644
index 0000000000..a219b2c870
--- /dev/null
+++ b/testing/web-platform/tests/mathml/relations/html5-tree/unique-identifier-1-ref.html
@@ -0,0 +1,16 @@
+
+
+
+
+Unique identifier (reference)
+
+
+
+ Test passes if you see the text "PASS".
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/relations/html5-tree/unique-identifier-1.html b/testing/web-platform/tests/mathml/relations/html5-tree/unique-identifier-1.html
new file mode 100644
index 0000000000..f5de2757c3
--- /dev/null
+++ b/testing/web-platform/tests/mathml/relations/html5-tree/unique-identifier-1.html
@@ -0,0 +1,19 @@
+
+
+
+
+Unique identifier
+
+
+
+
+
+
+ Test passes if you see the text "PASS".
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/relations/html5-tree/unique-identifier-2.html b/testing/web-platform/tests/mathml/relations/html5-tree/unique-identifier-2.html
new file mode 100644
index 0000000000..d4e69df324
--- /dev/null
+++ b/testing/web-platform/tests/mathml/relations/html5-tree/unique-identifier-2.html
@@ -0,0 +1,30 @@
+
+
+
+
+Unique Identifier
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/relations/html5-tree/unique-identifier-3-ref.html b/testing/web-platform/tests/mathml/relations/html5-tree/unique-identifier-3-ref.html
new file mode 100644
index 0000000000..ef056e0082
--- /dev/null
+++ b/testing/web-platform/tests/mathml/relations/html5-tree/unique-identifier-3-ref.html
@@ -0,0 +1,15 @@
+
+
+
+
+Unique identifier 3 (reference)
+
+
+
+ Test passes if you see the text "PASS".
+
+ PASS
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/relations/html5-tree/unique-identifier-3.html b/testing/web-platform/tests/mathml/relations/html5-tree/unique-identifier-3.html
new file mode 100644
index 0000000000..306ce41e25
--- /dev/null
+++ b/testing/web-platform/tests/mathml/relations/html5-tree/unique-identifier-3.html
@@ -0,0 +1,24 @@
+
+
+
+
+Unique Identifier
+
+
+
+
+
+
+
+
+ Test passes if you see the text "PASS".
+
+ FAIL
+ PASS
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/relations/text-and-math/basic-mathematical-alphanumeric-symbols-with-default-font.html b/testing/web-platform/tests/mathml/relations/text-and-math/basic-mathematical-alphanumeric-symbols-with-default-font.html
new file mode 100644
index 0000000000..c1e8d409b9
--- /dev/null
+++ b/testing/web-platform/tests/mathml/relations/text-and-math/basic-mathematical-alphanumeric-symbols-with-default-font.html
@@ -0,0 +1,39 @@
+
+
+
+
+ Basic mathematical alphanumeric symbols with default font
+
+
+
+
+
+
+
+ 𝔩
+
+ 𝐖
+ 𝑊
+ 𝑾
+
+
+
diff --git a/testing/web-platform/tests/mathml/relations/text-and-math/use-typo-metrics-1-ref.html b/testing/web-platform/tests/mathml/relations/text-and-math/use-typo-metrics-1-ref.html
new file mode 100644
index 0000000000..3f7f764045
--- /dev/null
+++ b/testing/web-platform/tests/mathml/relations/text-and-math/use-typo-metrics-1-ref.html
@@ -0,0 +1,19 @@
+
+
+Open Font Format: USE_TYPO_METRICS (reference)
+
+
+ Test passes if there is a green square and no red.
+
+
+
diff --git a/testing/web-platform/tests/mathml/relations/text-and-math/use-typo-metrics-1.html b/testing/web-platform/tests/mathml/relations/text-and-math/use-typo-metrics-1.html
new file mode 100644
index 0000000000..1af8fdfde1
--- /dev/null
+++ b/testing/web-platform/tests/mathml/relations/text-and-math/use-typo-metrics-1.html
@@ -0,0 +1,51 @@
+
+
+Open Font Format: USE_TYPO_METRICS
+
+
+
+
+
+ Test passes if there is a green square and no red.
+
+
+
diff --git a/testing/web-platform/tests/mathml/support/attribute-values.js b/testing/web-platform/tests/mathml/support/attribute-values.js
new file mode 100644
index 0000000000..8408124f49
--- /dev/null
+++ b/testing/web-platform/tests/mathml/support/attribute-values.js
@@ -0,0 +1,31 @@
+AttributeValueTransforms = {
+ lowercase: function(value) { return value.toLowerCase(); },
+ uppercase: function(value) { return value.toUpperCase(); },
+ alternate_case: function(value) {
+ var transformedValue = "";
+ for (var i = 0; i < value.length; i++) {
+ transformedValue += i % 2 ?
+ value.charAt(i).toLowerCase() :
+ value.charAt(i).toUpperCase();
+ }
+ return transformedValue;
+ },
+ // TODO: Should we perform this transform too?
+ // https://github.com/mathml-refresh/mathml/issues/122
+ // add_leading_and_trimming_whitespace: function(value) {
+ // var space = "\0020\0009\000A\000D";
+ // return `${space}${space}${value}${space}${space}`;
+ // },
+};
+
+function TransformAttributeValues(transform, attributeNames) {
+ if (typeof attributeNames === "string")
+ attributeNames = [attributeNames];
+ attributeNames.forEach(name => {
+ Array.from(document.querySelectorAll(`[${name}]`)).forEach(element => {
+ var value = element.getAttribute(name);
+ var transformedValue = AttributeValueTransforms[transform](value);
+ element.setAttribute(name, transformedValue);
+ });
+ });
+}
diff --git a/testing/web-platform/tests/mathml/support/box-comparison.js b/testing/web-platform/tests/mathml/support/box-comparison.js
new file mode 100644
index 0000000000..b30ad279df
--- /dev/null
+++ b/testing/web-platform/tests/mathml/support/box-comparison.js
@@ -0,0 +1,107 @@
+function spaceBetween(childBox, parentBox) {
+ return {
+ left: childBox.left - parentBox.left,
+ right: parentBox.right - childBox.right,
+ top: childBox.top - parentBox.top,
+ bottom: parentBox.bottom - childBox.bottom
+ };
+}
+
+function measureSpaceAround(id) {
+ var mrow = document.getElementById(id);
+ var mrowBox = mrow.getBoundingClientRect();
+ var parentBox = mrow.parentNode.getBoundingClientRect();
+ var childBox = mrow.firstElementChild.getBoundingClientRect();
+ return spaceBetween(childBox, parentBox);
+}
+
+function compareSpaceWithAndWithoutStyle(tag, style, parentStyle, direction) {
+ if (!FragmentHelper.isValidChildOfMrow(tag) ||
+ FragmentHelper.isEmpty(tag))
+ throw `Invalid argument: ${tag}`;
+
+ if (!direction)
+ direction = "ltr";
+ document.body.insertAdjacentHTML("beforeend", `\
+
${MathMLFragments[tag]}
\
+
${MathMLFragments[tag]}
\
+
`);
+ var div = document.body.lastElementChild;
+
+ var styleDiv = div.firstElementChild;
+ var styleMath = styleDiv.firstElementChild;
+ var styleParent = styleMath.firstElementChild;
+ if (parentStyle)
+ styleParent.setAttribute("style", parentStyle);
+ var styleElement = FragmentHelper.element(styleMath);
+ styleElement.setAttribute("style", style);
+ var styleChild = FragmentHelper.forceNonEmptyElement(styleElement);
+ var styleMathBox = styleMath.getBoundingClientRect();
+ var styleElementBox = styleElement.getBoundingClientRect();
+ var styleChildBox = styleChild.getBoundingClientRect();
+ var styleSpace = spaceBetween(styleChildBox, styleMathBox);
+
+ var noStyleDiv = div.lastElementChild;
+ var noStyleMath = noStyleDiv.firstElementChild;
+ var noStyleElement = FragmentHelper.element(noStyleMath);
+ var noStyleChild = FragmentHelper.forceNonEmptyElement(noStyleElement);
+ var noStyleMathBox = noStyleMath.getBoundingClientRect();
+ var noStyleElementBox = noStyleElement.getBoundingClientRect();
+ var noStyleChildBox = noStyleChild.getBoundingClientRect();
+ var noStyleSpace = spaceBetween(noStyleChildBox, noStyleMathBox);
+
+ var preferredWidthDelta =
+ styleDiv.getBoundingClientRect().width -
+ noStyleDiv.getBoundingClientRect().width;
+
+ div.style = "display: none;"; // Hide the div after measurement.
+
+ return {
+ preferred_width_delta: preferredWidthDelta,
+ left_delta: styleSpace.left - noStyleSpace.left,
+ right_delta: styleSpace.right - noStyleSpace.right,
+ top_delta: styleSpace.top - noStyleSpace.top,
+ bottom_delta: styleSpace.bottom - noStyleSpace.bottom,
+ element_width_delta: styleElementBox.width - noStyleElementBox.width,
+ element_height_delta: styleElementBox.height - noStyleElementBox.height
+ };
+}
+
+function compareSizeWithAndWithoutStyle(tag, style) {
+ if (!FragmentHelper.isValidChildOfMrow(tag))
+ throw `Invalid argument: ${tag}`;
+
+ // FIXME only needed as workaround for https://bugzilla.mozilla.org/show_bug.cgi?id=1658135
+ document.body.insertAdjacentHTML("beforeend", `\
+
${MathMLFragments[tag]}
\
+
${MathMLFragments[tag]}
\
+
`);
+ var div = document.body.lastElementChild;
+
+ var styleDiv = div.firstElementChild;
+ var styleParent = styleDiv.firstElementChild.firstElementChild;
+ var styleElement = FragmentHelper.element(styleParent);
+ styleElement.setAttribute("style", style);
+ var styleParentBox = styleParent.getBoundingClientRect();
+ var styleElementBox = styleElement.getBoundingClientRect();
+
+ var noStyleDiv = div.lastElementChild;
+ var noStyleParent = noStyleDiv.firstElementChild.firstElementChild;
+ var noStyleElement = FragmentHelper.element(noStyleParent);
+ var noStyleParentBox = noStyleParent.getBoundingClientRect();
+ var noStyleElementBox = noStyleElement.getBoundingClientRect();
+
+ var preferredWidthDelta =
+ styleDiv.getBoundingClientRect().width -
+ noStyleDiv.getBoundingClientRect().width;
+
+ div.style = "display: none;"; // Hide the div after measurement.
+
+ return {
+ preferred_width_delta: preferredWidthDelta,
+ width_delta: styleParentBox.width - noStyleParentBox.width,
+ height_delta: styleParentBox.height - noStyleParentBox.height,
+ element_width_delta: styleElementBox.width - noStyleElementBox.width,
+ element_height_delta: styleElementBox.height - noStyleElementBox.height
+ };
+};
diff --git a/testing/web-platform/tests/mathml/support/box-navigation.js b/testing/web-platform/tests/mathml/support/box-navigation.js
new file mode 100644
index 0000000000..f4897cfe99
--- /dev/null
+++ b/testing/web-platform/tests/mathml/support/box-navigation.js
@@ -0,0 +1,29 @@
+function IsInFlow(element) {
+ var style = window.getComputedStyle(element);
+ return style.getPropertyValue("display") !== "none" &&
+ style.getPropertyValue("position") !== "absolute" &&
+ style.getPropertyValue("position") !== "fixed";
+}
+
+function firstInFlowChild(element) {
+ var child = element.firstElementChild;
+ if (!child || IsInFlow(child))
+ return child;
+ return nextInFlowSibling(child);
+}
+
+function nextInFlowSibling(element) {
+ var child = element;
+ do {
+ child = child.nextElementSibling;
+ } while (child && !IsInFlow(child));
+ return child;
+}
+
+function previousInFlowSibling(element) {
+ var child = element;
+ do {
+ child = child.previousElementSibling;
+ } while (child && !IsInFlow(child));
+ return child;
+}
diff --git a/testing/web-platform/tests/mathml/support/feature-detection-operators.js b/testing/web-platform/tests/mathml/support/feature-detection-operators.js
new file mode 100644
index 0000000000..25dae40258
--- /dev/null
+++ b/testing/web-platform/tests/mathml/support/feature-detection-operators.js
@@ -0,0 +1,86 @@
+// This is a helper for MathML feature detection.
+// It is indented to be used to prevent false negative test results.
+// This adds operator-specific feature detections.
+
+Object.assign(MathMLFeatureDetection, {
+ "has_operator_lspace/rspace": async function() {
+ return this.has_operator_spacing();
+ },
+
+ "has_operator_movablelimits": async function() {
+ return this.has_movablelimits();
+ },
+
+ "has_operator_largeop": async function() {
+ if (!this.hasOwnProperty("_has_operator_largeop")) {
+ document.body.insertAdjacentHTML("beforeend", "\
+\
+ ⫿ \
+ ⫿ \
+ ");
+ let font_face = new FontFace('HasOperatorLargeopTestFont',
+ 'url(/fonts/math/largeop-displayoperatorminheight5000.woff)');
+ document.fonts.add(font_face);
+ await font_face.load();
+ var math = document.body.lastElementChild;
+ var mo = math.getElementsByTagName("mo");
+ this._has_operator_largeop =
+ (mo[1].getBoundingClientRect().height >
+ mo[0].getBoundingClientRect().height);
+ document.body.removeChild(math);
+ document.fonts.delete(font_face);
+ }
+ return this._has_operator_largeop;
+ },
+
+ "has_operator_stretchy": async function() {
+ if (!this.hasOwnProperty("_has_operator_stretchy")) {
+ document.body.insertAdjacentHTML("beforeend", "\
+\
+ \
+ ⫿ \
+ ⫿ \
+ \
+ \
+ ");
+ let font_face = new FontFace('HasOperatorLargeopTestFont',
+ 'url(/fonts/math/largeop-displayoperatorminheight5000.woff)');
+ document.fonts.add(font_face);
+ await font_face.load();
+ var math = document.body.lastElementChild;
+ var mo = math.getElementsByTagName("mo");
+ this._has_operator_stretchy =
+ (mo[1].getBoundingClientRect().height >
+ mo[0].getBoundingClientRect().height);
+ document.body.removeChild(math);
+ document.fonts.delete(font_face);
+ }
+ return this._has_operator_stretchy;
+ },
+
+ "has_operator_symmetric": async function() {
+ if (!this.hasOwnProperty("_has_operator_symmetric")) {
+ document.body.insertAdjacentHTML("beforeend", "\
+\
+ \
+ ⫿ \
+ ⫿ \
+ \
+ \
+ ");
+ let font_face = new FontFace('HasOperatorLargeopTestFont',
+ 'url(/fonts/math/largeop-displayoperatorminheight5000.woff)');
+ document.fonts.add(font_face);
+ await font_face.load();
+ var math = document.body.lastElementChild;
+ var mo = math.getElementsByTagName("mo");
+ this._has_operator_symmetric =
+ (mo[1].getBoundingClientRect().height >
+ mo[0].getBoundingClientRect().height);
+ document.body.removeChild(math);
+ document.fonts.delete(font_face);
+ }
+ return this._has_operator_symmetric;
+ },
+});
diff --git a/testing/web-platform/tests/mathml/support/feature-detection.js b/testing/web-platform/tests/mathml/support/feature-detection.js
new file mode 100644
index 0000000000..8b3f227d44
--- /dev/null
+++ b/testing/web-platform/tests/mathml/support/feature-detection.js
@@ -0,0 +1,325 @@
+// This is a helper for MathML feature detection.
+// It is indented to be used to prevent false negative test results.
+
+var MathMLFeatureDetection = {
+
+ "has_annotation": function() {
+ // FIXME: Improve feature detection.
+ return this.has_mspace();
+ },
+
+ "has_annotation-xml": function() {
+ // FIXME: Improve feature detection.
+ return this.has_mspace();
+ },
+
+ "has_maction": function() {
+ // FIXME: Improve feature detection.
+ return this.has_mspace();
+ },
+
+ "has_math": function() {
+ // FIXME: Improve feature detection.
+ return this.has_mspace();
+ },
+
+ "has_menclose": function() {
+ // Just check whether is supported because discussion on this is
+ // still open ( https://github.com/mathml-refresh/mathml/issues/105 )
+ // and it would have to behave at least like an mrow, even if it becomes
+ // an unknown element at the end.
+ return this.has_mrow();
+ },
+
+ "has_merror": function() {
+ // FIXME: Improve feature detection.
+ return this.has_mspace();
+ },
+
+ "has_mfrac": function() {
+ if (!this.hasOwnProperty("_has_mfrac")) {
+ // Use tall enough fraction to avoid side effect of min num/denum shifts.
+ document.body.insertAdjacentHTML("beforeend", "\
+\
+ \
+ \
+ \
+\
+ \
+ \
+ \
+ ");
+ var math = document.body.lastElementChild;
+ var mfrac = math.getElementsByTagName("mfrac");
+ // height/depth will add 40px per MathML, 20px if mfrac does not stack its children and none if mspace is not supported.
+ this._has_mfrac =
+ mfrac[1].getBoundingClientRect().height -
+ mfrac[0].getBoundingClientRect().height > 30;
+ document.body.removeChild(math);
+ }
+ return this._has_mfrac;
+ },
+
+ "has_mi": function() {
+ // FIXME: Improve feature detection.
+ return this.has_mspace();
+ },
+
+ "has_mmultiscripts": function() {
+ // FIXME: Improve feature detection.
+ return this.has_mspace();
+ },
+
+ "has_mn": function() {
+ // FIXME: Improve feature detection.
+ return this.has_mspace();
+ },
+
+ "has_mo": function() {
+ // FIXME: Improve feature detection.
+ return this.has_mspace();
+ },
+
+ "has_mover": function() {
+ // FIXME: Improve feature detection.
+ return this.has_munderover();
+ },
+
+ "has_mpadded": function() {
+ // FIXME: Improve feature detection.
+ return this.has_mspace();
+ },
+
+ "has_mphantom": function() {
+ // FIXME: Improve feature detection.
+ return this.has_mspace();
+ },
+
+ "has_mprescripts": function() {
+ // FIXME: Improve feature detection.
+ return this.has_mspace();
+ },
+
+ "has_mroot": function() {
+ // FIXME: Improve feature detection.
+ return this.has_msqrt();
+ },
+
+ "has_mrow": function() {
+ // FIXME: Improve feature detection.
+ return this.has_mspace();
+ },
+
+ "has_ms": function() {
+ // FIXME: Improve feature detection.
+ return this.has_mspace();
+ },
+
+ "has_mspace": function() {
+ // https://w3c.github.io/mathml-core/#space-mspace
+ if (!this.hasOwnProperty("_has_mspace")) {
+ document.body.insertAdjacentHTML("beforeend", "\
+ \
+ \
+ ");
+ var math = document.body.lastElementChild;
+ // The width attribute will add 20px per MathML and none if not supported.
+ this._has_mspace =
+ math.lastChild.getBoundingClientRect().width -
+ math.firstChild.getBoundingClientRect().width > 10;
+ document.body.removeChild(math);
+ }
+ return this._has_mspace;
+ },
+
+ "has_msqrt": function() {
+ if (!this.hasOwnProperty("_has_msqrt")) {
+ document.body.insertAdjacentHTML("beforeend", "\
+\
+ A \
+ \
+\
+ A \
+ \
+ ");
+ var math = document.body.lastElementChild;
+ // The radical symbol will make msqrt wider than mrow, if the former is supported.
+ this._has_msqrt =
+ math.lastElementChild.getBoundingClientRect().width -
+ math.firstElementChild.getBoundingClientRect().width > 5;
+ document.body.removeChild(math);
+ }
+ return this._has_msqrt;
+ },
+
+ "has_mstyle": function() {
+ // FIXME: Improve feature detection.
+ return this.has_mspace();
+ },
+
+ "has_msub": function() {
+ // FIXME: Improve feature detection.
+ return this.has_mspace();
+ },
+
+ "has_msubsup": function() {
+ // FIXME: Improve feature detection.
+ return this.has_mspace();
+ },
+
+ "has_msup": function() {
+ // FIXME: Improve feature detection.
+ return this.has_mspace();
+ },
+
+ "has_mtable": function() {
+ // FIXME: Improve feature detection.
+ return this.has_mspace();
+ },
+
+ "has_mtd": function() {
+ // FIXME: Improve feature detection.
+ return this.has_mspace();
+ },
+
+ "has_mtext": function() {
+ // FIXME: Improve feature detection.
+ return this.has_mspace();
+ },
+
+ "has_mtr": function() {
+ // FIXME: Improve feature detection.
+ return this.has_mspace();
+ },
+
+ "has_munder": function() {
+ // FIXME: Improve feature detection.
+ return this.has_munderover();
+ },
+
+ "has_munderover": function() {
+ if (!this.hasOwnProperty("_has_munderover")) {
+ document.body.insertAdjacentHTML("beforeend", "\
+\
+ \
+ \
+ \
+ \
+\
+ \
+ \
+ \
+ \
+ ");
+ var math = document.body.lastElementChild;
+ var munderover = math.getElementsByTagName("munderover");
+ // width_delta will be 20px per MathML, 3 * 20 = 60px if mundeover does not stack its children and 0px if mspace is not supported.
+ var width_delta =
+ munderover[1].getBoundingClientRect().width -
+ munderover[0].getBoundingClientRect().width;
+ this._has_munderover = width_delta > 10 && width_delta < 30;
+ document.body.removeChild(math);
+ }
+ return this._has_munderover;
+ },
+
+ "has_none": function() {
+ // FIXME: Improve feature detection.
+ return this.has_mspace();
+ },
+
+ "has_semantics": function() {
+ // FIXME: Improve feature detection.
+ return this.has_mspace();
+ },
+
+ "has_dir": function() {
+ if (!this.hasOwnProperty("_has_dir")) {
+ document.body.insertAdjacentHTML("beforeend", "\
+ \
+ ");
+ var math = document.body.lastElementChild;
+ this._has_dir =
+ window.getComputedStyle(math.firstElementChild).
+ getPropertyValue('direction') === 'rtl';
+ document.body.removeChild(math);
+ }
+ return this._has_dir;
+ },
+
+ "has_mathsize": function() {
+ if (!this.hasOwnProperty("_has_mathsize")) {
+ document.body.insertAdjacentHTML("beforeend", "\
+ \
+ ");
+ var math = document.body.lastElementChild;
+ this._has_mathsize =
+ window.getComputedStyle(math.firstElementChild).
+ getPropertyValue('font-size') === '32px';
+ document.body.removeChild(math);
+ }
+ return this._has_mathsize;
+ },
+
+ "has_movablelimits": function() {
+ if (!this.hasOwnProperty("_has_movablelimits")) {
+ document.body.insertAdjacentHTML("beforeend", "\
+\
+ A \
+ \
+ \
+\
+ A \
+ \
+ \
+ ");
+ var math = document.body.lastElementChild;
+ var munder = math.getElementsByTagName("munder");
+ // If movablelimits is supported, the will be placed next
+ // to rather than below it, so width_delta is about the width
+ // of the .
+ var width_delta =
+ munder[1].getBoundingClientRect().width -
+ munder[0].getBoundingClientRect().width;
+ this._has_movablelimits = this.has_munder() && width_delta > 20;
+ document.body.removeChild(math);
+ }
+ return this._has_movablelimits;
+ },
+
+ "has_operator_spacing": function() {
+ // https://w3c.github.io/mathml-core/#dfn-lspace
+ // https://w3c.github.io/mathml-core/#layout-of-mrow
+ if (!this.hasOwnProperty("_has_operator_spacing")) {
+ document.body.insertAdjacentHTML("beforeend", "\
+\
+ 1 + 2 \
+ \
+\
+ 1 + 2 \
+ \
+ ");
+ var math = document.body.lastElementChild;
+ var mrow = math.getElementsByTagName("mrow");
+ // lspace/rspace will add 40px per MathML and none if not supported.
+ this._has_operator_spacing =
+ mrow[1].getBoundingClientRect().width -
+ mrow[0].getBoundingClientRect().width > 30;
+ document.body.removeChild(math);
+ }
+ return this._has_operator_spacing;
+ },
+
+ ensure_for_match_reftest: function(has_function) {
+ if (!document.querySelector("link[rel='match']"))
+ throw "This function must only be used for match reftest";
+ // Add a little red square at the top left corner if the feature is not supported in order to make match reftest fail.
+ if (!this[has_function]()) {
+ document.body.insertAdjacentHTML("beforeend", "\
+
");
+ }
+ }
+};
diff --git a/testing/web-platform/tests/mathml/support/fonts.js b/testing/web-platform/tests/mathml/support/fonts.js
new file mode 100644
index 0000000000..f05d7278ad
--- /dev/null
+++ b/testing/web-platform/tests/mathml/support/fonts.js
@@ -0,0 +1,9 @@
+function loadAllFonts() {
+ // Use this to wait for all fonts in a testcase to load rather than just using
+ // `document.fonts.ready.then(...)` in the load event, since there are compat
+ // issues between browsers as to whether content initiated font loads are
+ // guaranteed to have been started by this point.
+
+ // FIXME: Use Promise.all() to cause an obvious failure when a font fails to load.
+ return Promise.allSettled([...document.fonts].map(f => f.load()));
+}
diff --git a/testing/web-platform/tests/mathml/support/layout-comparison.js b/testing/web-platform/tests/mathml/support/layout-comparison.js
new file mode 100644
index 0000000000..452b45006e
--- /dev/null
+++ b/testing/web-platform/tests/mathml/support/layout-comparison.js
@@ -0,0 +1,112 @@
+function getWritingMode(element, reference) {
+ var style = window.getComputedStyle(reference);
+ if (style.getPropertyValue("writing-mode") !== "horizontal-tb" ||
+ style.getPropertyValue("direction") !== "ltr")
+ throw "Reference should have writing mode horizontal-tb and ltr";
+
+ style = window.getComputedStyle(element);
+ var param = {
+ rtl: style.getPropertyValue("direction") === "rtl",
+ mode: style.getPropertyValue("writing-mode")
+ };
+
+ return param;
+}
+
+function compareSize(element, reference, epsilon) {
+ var param = getWritingMode(element, reference);
+ var elementBox = element.getBoundingClientRect();
+ var referenceBox = reference.getBoundingClientRect();
+
+ switch(param.mode) {
+ case "horizontal-tb":
+ assert_approx_equals(elementBox.width, referenceBox.width, epsilon,
+ "inline size");
+ assert_approx_equals(elementBox.height, referenceBox.height, epsilon,
+ "block size");
+ break;
+ case "vertical-lr":
+ case "vertical-rl":
+ assert_approx_equals(elementBox.width, referenceBox.height, epsilon,
+ "inline size");
+ assert_approx_equals(elementBox.height, referenceBox.width, epsilon,
+ "block size");
+ break;
+ default:
+ throw "compareSize: Unrecognized writing-mode value";
+ }
+}
+
+function childrenHaveEmptyBoundingClientRects(element) {
+ Array.from(element.children).forEach(child => {
+ var childBox = child.getBoundingClientRect();
+ assert_true(childBox.left == 0 && childBox.right == 0 && childBox.top == 0 && childBox.bottom == 0);
+ })
+}
+
+function participateToParentLayout(child) {
+ var style = window.getComputedStyle(child);
+ return style.getPropertyValue("display") !== "none" &&
+ style.getPropertyValue("position") !== "absolute" &&
+ style.getPropertyValue("position") !== "fixed";
+}
+
+function childrenParticipatingToLayout(element) {
+ var children = [];
+ Array.from(element.children).forEach(child => {
+ if (participateToParentLayout(child))
+ children.push(child);
+ })
+ return children;
+}
+
+function compareLayout(element, reference, epsilon) {
+ // Compare sizes of elements and children.
+ var param = getWritingMode(element, reference);
+
+ compareSize(element, reference, epsilon);
+ var elementBox = element.getBoundingClientRect();
+ var referenceBox = reference.getBoundingClientRect();
+
+ var elementChildren = childrenParticipatingToLayout(element);
+ var referenceChildren = childrenParticipatingToLayout(reference);
+ if (elementChildren.length != referenceChildren.length)
+ throw "Reference should have the same number of children participating to layout."
+
+ for (var i = 0; i < elementChildren.length; i++) {
+ compareSize(elementChildren[i], referenceChildren[i], epsilon);
+
+ var childBox = elementChildren[i].getBoundingClientRect();
+ var referenceChildBox = referenceChildren[i].getBoundingClientRect();
+
+ switch(param.mode) {
+ case "horizontal-tb":
+ assert_approx_equals(param.rtl ?
+ elementBox.right - childBox.right :
+ childBox.left - elementBox.left,
+ referenceChildBox.left - referenceBox.left,
+ epsilon,
+ `inline position (child ${i})`);
+ assert_approx_equals(childBox.top - elementBox.top,
+ referenceChildBox.top - referenceBox.top,
+ epsilon,
+ `block position (child ${i})`);
+ break;
+ case "vertical-lr":
+ case "vertical-rl":
+ assert_approx_equals(param.rtl ?
+ elementBox.bottom - childBox.bottom :
+ childBox.top - elementBox.top,
+ referenceChildBox.left - referenceBox.left,
+ epsilon,
+ `inline position (child ${i})`);
+ assert_approx_equals(elementBox.right - childBox.right,
+ referenceChildBox.top - referenceBox.top,
+ epsilon,
+ `block position (child ${i})`);
+ break;
+ default:
+ throw "compareLayout: Unrecognized writing-mode value";
+ }
+ }
+}
diff --git a/testing/web-platform/tests/mathml/support/mathml-fragments.js b/testing/web-platform/tests/mathml/support/mathml-fragments.js
new file mode 100644
index 0000000000..7e2113e95b
--- /dev/null
+++ b/testing/web-platform/tests/mathml/support/mathml-fragments.js
@@ -0,0 +1,189 @@
+var MathMLFragments = {
+ "annotation": "\
+\
+ \
+ \
+ ",
+ "annotation-xml": "\
+\
+ \
+ \
+ ",
+ "maction": "\
+\
+ \
+ \
+ ",
+ "menclose": " ",
+ "merror": " ",
+ "mfrac": "\
+\
+ \
+ \
+ ",
+ "mi": " ",
+ "mmultiscripts": "\
+\
+ \
+ \
+ \
+ ",
+ "mn": " ",
+ "mo": " ",
+ "mover": "\
+\
+ \
+ \
+ ",
+ "mpadded": " ",
+ "mphantom": " ",
+ "mprescripts": "\
+\
+ \
+ \
+ \
+ \
+ ",
+ "mroot": "\
+\
+ \
+ \
+ ",
+ "mrow": " ",
+ "ms": " ",
+ "mspace": " ",
+ "msqrt": " ",
+ "mstyle": " ",
+ "msub": "\
+\
+ \
+ \
+ ",
+ "msubsup": "\
+\
+ \
+ \
+ \
+ ",
+ "msup": "\
+\
+ \
+ \
+ ",
+ "mtable": "\
+\
+ \
+ \
+ \
+ \
+ ",
+ "mtd": "\
+\
+ \
+ \
+ \
+ \
+ ",
+ "mtext": " ",
+ "mtr": "\
+\
+ \
+ \
+ \
+ \
+ ",
+ "munder": "\
+\
+ \
+ \
+ ",
+ "munderover": "\
+\
+ \
+ \
+ \
+ ",
+ "none": "\
+\
+ \
+ \
+ \
+ ",
+ "semantics": "\
+\
+ \
+ \
+ "
+};
+
+var FragmentHelper = {
+ mathml_namespace: "http://www.w3.org/1998/Math/MathML",
+
+ createElement: function(tag) {
+ return document.createElementNS(this.mathml_namespace, tag);
+ },
+
+ isValidChildOfMrow: function(tag) {
+ return !(tag == "annotation" ||
+ tag == "annotation-xml" ||
+ tag == "mprescripts" ||
+ tag == "none" ||
+ tag == "mtr" ||
+ tag == "mtd");
+ },
+
+ isTokenElement: function(tag) {
+ return (tag == "mi" ||
+ tag == "mtext" ||
+ tag == "mo" ||
+ tag == "mn" ||
+ tag == "ms")
+ },
+
+ isEmpty: function(tag) {
+ return tag === "mspace" || tag == "mprescripts" || tag == "none";
+ },
+
+ element: function(fragment) {
+ return fragment.getElementsByClassName('element')[0];
+ },
+
+ appendChild: function(fragment, allowInvalid) {
+ var element = this.element(fragment) || fragment;
+ if (element.classList.contains("foreign-container")) {
+ var el = document.createElement("span");
+ el.textContent = "a";
+ return element.appendChild(el);
+ }
+ if (element.classList.contains("mathml-container") || allowInvalid) {
+ var el = this.createElement("mi");
+ el.textContent = "a";
+ return element.appendChild(el);
+ }
+ throw "Cannot append child to the element";
+ },
+
+ forceNonEmptyElement: function(fragment) {
+ var element = this.element(fragment) || fragment;
+ if (element.firstElementChild)
+ return element.firstElementChild;
+ return this.appendChild(fragment);
+ },
+
+ forceNonEmptyDescendants: function(fragment) {
+ var element = this.element(fragment) || fragment;
+ if (element.classList.contains("mathml-container") ||
+ element.classList.contains("foreign-container")) {
+ for (var i = 0; i < 10; i++)
+ this.appendChild(element);
+ return;
+ }
+ var child = element.firstElementChild;
+ if (child) {
+ for (; child; child = child.nextElementSibling) {
+ this.forceNonEmptyDescendants(child);
+ }
+ return;
+ }
+ },
+}
diff --git a/testing/web-platform/tests/mathml/support/operator-dictionary.js b/testing/web-platform/tests/mathml/support/operator-dictionary.js
new file mode 100644
index 0000000000..ee1de102fe
--- /dev/null
+++ b/testing/web-platform/tests/mathml/support/operator-dictionary.js
@@ -0,0 +1,42 @@
+async function fetchOperatorDictionary() {
+ let response = await fetch(`/mathml/support/operator-dictionary.json`);
+ return response.json();
+}
+
+function splitKey(key) {
+ var value = key.split(" ")
+ return {
+ characters: value[0],
+ form: value[1]
+ };
+}
+
+function spaceIndexToLength(index) {
+ // See https://w3c.github.io/mathml-core/#operator-dictionary
+ return ["0",
+ "0.05555555555555555em",
+ "0.1111111111111111em",
+ "0.16666666666666666em",
+ "0.2222222222222222em",
+ "0.2777777777777778em",
+ "0.3333333333333333em",
+ "0.3888888888888889em"
+ ][index];
+}
+
+function defaultPropertyValue(entry, name) {
+ switch (name) {
+ case "lspace":
+ case "rspace":
+ return spaceIndexToLength(entry.hasOwnProperty(name) ? entry[name] : 5);
+ break
+ case "largeop":
+ case "movablelimits":
+ case "stretchy":
+ case "symmetric":
+ case "accent":
+ return entry[name];
+ default:
+ throw `Unknown property ${name}`;
+ }
+}
diff --git a/testing/web-platform/tests/mathml/support/operator-dictionary.json b/testing/web-platform/tests/mathml/support/operator-dictionary.json
new file mode 100644
index 0000000000..0008f5114e
--- /dev/null
+++ b/testing/web-platform/tests/mathml/support/operator-dictionary.json
@@ -0,0 +1 @@
+{"comment": "This file was automatically generated by operator-dictionary.py. Do not edit.", "dictionary": {"! postfix": {"lspace": 0, "rspace": 0}, "! prefix": {"lspace": 0, "rspace": 0}, "!! postfix": {"lspace": 0, "rspace": 0}, "!= infix": {"lspace": 5, "rspace": 5}, "\" postfix": {"lspace": 0, "rspace": 0}, "% infix": {"lspace": 3, "rspace": 3}, "% postfix": {"lspace": 0, "rspace": 0}, "& postfix": {"lspace": 0, "rspace": 0}, "&& infix": {"lspace": 4, "rspace": 4}, "' postfix": {"lspace": 0, "rspace": 0}, "( prefix": {"lspace": 0, "rspace": 0, "stretchy": true, "symmetric": true}, ") postfix": {"lspace": 0, "rspace": 0, "stretchy": true, "symmetric": true}, "* infix": {"lspace": 3, "rspace": 3}, "** infix": {"lspace": 3, "rspace": 3}, "*= infix": {"lspace": 5, "rspace": 5}, "+ infix": {"lspace": 4, "rspace": 4}, "+ prefix": {"lspace": 0, "rspace": 0}, "++ postfix": {"lspace": 0, "rspace": 0}, "+= infix": {"lspace": 5, "rspace": 5}, ", infix": {"lspace": 0, "rspace": 3}, "- infix": {"lspace": 4, "rspace": 4}, "- prefix": {"lspace": 0, "rspace": 0}, "-- postfix": {"lspace": 0, "rspace": 0}, "-= infix": {"lspace": 5, "rspace": 5}, "-> infix": {"lspace": 5, "rspace": 5}, ". infix": {"lspace": 3, "rspace": 3}, "/ infix": {"lspace": 4, "rspace": 4}, "// infix": {"lspace": 5, "rspace": 5}, "/= infix": {"lspace": 5, "rspace": 5}, ": infix": {"lspace": 0, "rspace": 3}, ":= infix": {"lspace": 5, "rspace": 5}, "; infix": {"lspace": 0, "rspace": 3}, "< infix": {"lspace": 5, "rspace": 5}, "<= infix": {"lspace": 5, "rspace": 5}, "<> infix": {"lspace": 3, "rspace": 3}, "= infix": {"horizontal": true, "lspace": 5, "rspace": 5}, "== infix": {"lspace": 5, "rspace": 5}, "> infix": {"lspace": 5, "rspace": 5}, ">= infix": {"lspace": 5, "rspace": 5}, "? infix": {"lspace": 3, "rspace": 3}, "@ infix": {"lspace": 3, "rspace": 3}, "[ prefix": {"lspace": 0, "rspace": 0, "stretchy": true, "symmetric": true}, "\\ infix": {"lspace": 0, "rspace": 0}, "] postfix": {"lspace": 0, "rspace": 0, "stretchy": true, "symmetric": true}, "^ infix": {"horizontal": true, "lspace": 3, "rspace": 3}, "^ postfix": {"horizontal": true, "lspace": 0, "rspace": 0, "stretchy": true}, "_ infix": {"horizontal": true, "lspace": 0, "rspace": 0}, "_ postfix": {"horizontal": true, "lspace": 0, "rspace": 0, "stretchy": true}, "` postfix": {"lspace": 0, "rspace": 0}, "{ prefix": {"lspace": 0, "rspace": 0, "stretchy": true, "symmetric": true}, "| infix": {"lspace": 5, "rspace": 5}, "| postfix": {"lspace": 0, "rspace": 0, "stretchy": true, "symmetric": true}, "| prefix": {"lspace": 0, "rspace": 0, "stretchy": true, "symmetric": true}, "|| infix": {"lspace": 5, "rspace": 5}, "|| postfix": {"lspace": 0, "rspace": 0}, "|| prefix": {"lspace": 0, "rspace": 0}, "} postfix": {"lspace": 0, "rspace": 0, "stretchy": true, "symmetric": true}, "~ postfix": {"horizontal": true, "lspace": 0, "rspace": 0, "stretchy": true}, "\u00a0 infix": {}, "\u00a0 prefix": {}, "\u00a0 suffix": {}, "\u00a8 postfix": {"lspace": 0, "rspace": 0}, "\u00ac prefix": {"lspace": 0, "rspace": 0}, "\u00af postfix": {"horizontal": true, "lspace": 0, "rspace": 0, "stretchy": true}, "\u00b0 postfix": {"lspace": 0, "rspace": 0}, "\u00b1 infix": {"lspace": 4, "rspace": 4}, "\u00b1 prefix": {"lspace": 0, "rspace": 0}, "\u00b2 postfix": {"lspace": 0, "rspace": 0}, "\u00b3 postfix": {"lspace": 0, "rspace": 0}, "\u00b4 postfix": {"lspace": 0, "rspace": 0}, "\u00b7 infix": {"lspace": 3, "rspace": 3}, "\u00b8 postfix": {"lspace": 0, "rspace": 0}, "\u00b9 postfix": {"lspace": 0, "rspace": 0}, "\u00d7 infix": {"lspace": 3, "rspace": 3}, "\u00f7 infix": {"lspace": 4, "rspace": 4}, "\u02c6 postfix": {"horizontal": true, "lspace": 0, "rspace": 0, "stretchy": true}, "\u02c7 postfix": {"horizontal": true, "lspace": 0, "rspace": 0, "stretchy": true}, "\u02c9 postfix": {"horizontal": true, "lspace": 0, "rspace": 0, "stretchy": true}, "\u02ca postfix": {"lspace": 0, "rspace": 0}, "\u02cb postfix": {"lspace": 0, "rspace": 0}, "\u02cd postfix": {"horizontal": true, "lspace": 0, "rspace": 0, "stretchy": true}, "\u02d8 postfix": {"lspace": 0, "rspace": 0}, "\u02d9 postfix": {"lspace": 0, "rspace": 0}, "\u02da postfix": {"lspace": 0, "rspace": 0}, "\u02dc postfix": {"horizontal": true, "lspace": 0, "rspace": 0, "stretchy": true}, "\u02dd postfix": {"lspace": 0, "rspace": 0}, "\u02f7 postfix": {"horizontal": true, "lspace": 0, "rspace": 0, "stretchy": true}, "\u0302 postfix": {"horizontal": true, "lspace": 0, "rspace": 0, "stretchy": true}, "\u0311 postfix": {"lspace": 0, "rspace": 0}, "\u2016 postfix": {"lspace": 0, "rspace": 0, "stretchy": true, "symmetric": true}, "\u2016 prefix": {"lspace": 0, "rspace": 0, "stretchy": true, "symmetric": true}, "\u2018 prefix": {"lspace": 0, "rspace": 0}, "\u2019 postfix": {"lspace": 0, "rspace": 0}, "\u201a postfix": {"lspace": 0, "rspace": 0}, "\u201b postfix": {"lspace": 0, "rspace": 0}, "\u201c prefix": {"lspace": 0, "rspace": 0}, "\u201d postfix": {"lspace": 0, "rspace": 0}, "\u201e postfix": {"lspace": 0, "rspace": 0}, "\u201f postfix": {"lspace": 0, "rspace": 0}, "\u2022 infix": {"lspace": 3, "rspace": 3}, "\u2032 postfix": {"lspace": 0, "rspace": 0}, "\u2033 postfix": {"lspace": 0, "rspace": 0}, "\u2034 postfix": {"lspace": 0, "rspace": 0}, "\u2035 postfix": {"lspace": 0, "rspace": 0}, "\u2036 postfix": {"lspace": 0, "rspace": 0}, "\u2037 postfix": {"lspace": 0, "rspace": 0}, "\u203e postfix": {"horizontal": true, "lspace": 0, "rspace": 0, "stretchy": true}, "\u2043 infix": {"lspace": 3, "rspace": 3}, "\u2044 infix": {"lspace": 4, "rspace": 4}, "\u2057 postfix": {"lspace": 0, "rspace": 0}, "\u2061 infix": {"lspace": 0, "rspace": 0}, "\u2062 infix": {"lspace": 0, "rspace": 0}, "\u2063 infix": {"lspace": 0, "rspace": 0}, "\u2064 infix": {"lspace": 0, "rspace": 0}, "\u20db postfix": {"lspace": 0, "rspace": 0}, "\u20dc postfix": {"lspace": 0, "rspace": 0}, "\u2145 prefix": {"lspace": 3, "rspace": 0}, "\u2146 prefix": {"lspace": 3, "rspace": 0}, "\u2190 infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u2191 infix": {"lspace": 5, "rspace": 5, "stretchy": true}, "\u2192 infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u2193 infix": {"lspace": 5, "rspace": 5, "stretchy": true}, "\u2194 infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u2195 infix": {"lspace": 5, "rspace": 5, "stretchy": true}, "\u2196 infix": {"lspace": 5, "rspace": 5}, "\u2197 infix": {"lspace": 5, "rspace": 5}, "\u2198 infix": {"horizontal": true, "lspace": 5, "rspace": 5}, "\u2199 infix": {"horizontal": true, "lspace": 5, "rspace": 5}, "\u219a infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u219b infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u219c infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u219d infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u219e infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u219f infix": {"lspace": 5, "rspace": 5, "stretchy": true}, "\u21a0 infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u21a1 infix": {"lspace": 5, "rspace": 5, "stretchy": true}, "\u21a2 infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u21a3 infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u21a4 infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u21a5 infix": {"lspace": 5, "rspace": 5, "stretchy": true}, "\u21a6 infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u21a7 infix": {"lspace": 5, "rspace": 5, "stretchy": true}, "\u21a8 infix": {"lspace": 5, "rspace": 5, "stretchy": true}, "\u21a9 infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u21aa infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u21ab infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u21ac infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u21ad infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u21ae infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u21af infix": {"lspace": 5, "rspace": 5}, "\u21b0 infix": {"lspace": 5, "rspace": 5, "stretchy": true}, "\u21b1 infix": {"lspace": 5, "rspace": 5, "stretchy": true}, "\u21b2 infix": {"lspace": 5, "rspace": 5, "stretchy": true}, "\u21b3 infix": {"lspace": 5, "rspace": 5, "stretchy": true}, "\u21b4 infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u21b5 infix": {"lspace": 5, "rspace": 5, "stretchy": true}, "\u21b6 infix": {"lspace": 5, "rspace": 5}, "\u21b7 infix": {"lspace": 5, "rspace": 5}, "\u21b8 infix": {"lspace": 5, "rspace": 5}, "\u21b9 infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u21ba infix": {"lspace": 5, "rspace": 5}, "\u21bb infix": {"lspace": 5, "rspace": 5}, "\u21bc infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u21bd infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u21be infix": {"lspace": 5, "rspace": 5, "stretchy": true}, "\u21bf infix": {"lspace": 5, "rspace": 5, "stretchy": true}, "\u21c0 infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u21c1 infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u21c2 infix": {"lspace": 5, "rspace": 5, "stretchy": true}, "\u21c3 infix": {"lspace": 5, "rspace": 5, "stretchy": true}, "\u21c4 infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u21c5 infix": {"lspace": 5, "rspace": 5, "stretchy": true}, "\u21c6 infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u21c7 infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u21c8 infix": {"lspace": 5, "rspace": 5, "stretchy": true}, "\u21c9 infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u21ca infix": {"lspace": 5, "rspace": 5, "stretchy": true}, "\u21cb infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u21cc infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u21cd infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u21ce infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u21cf infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u21d0 infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u21d1 infix": {"lspace": 5, "rspace": 5, "stretchy": true}, "\u21d2 infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u21d3 infix": {"lspace": 5, "rspace": 5, "stretchy": true}, "\u21d4 infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u21d5 infix": {"lspace": 5, "rspace": 5, "stretchy": true}, "\u21d6 infix": {"lspace": 5, "rspace": 5}, "\u21d7 infix": {"lspace": 5, "rspace": 5}, "\u21d8 infix": {"lspace": 5, "rspace": 5}, "\u21d9 infix": {"lspace": 5, "rspace": 5}, "\u21da infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u21db infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u21dc infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u21dd infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u21de infix": {"lspace": 5, "rspace": 5, "stretchy": true}, "\u21df infix": {"lspace": 5, "rspace": 5, "stretchy": true}, "\u21e0 infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u21e1 infix": {"lspace": 5, "rspace": 5, "stretchy": true}, "\u21e2 infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u21e3 infix": {"lspace": 5, "rspace": 5, "stretchy": true}, "\u21e4 infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u21e5 infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u21e6 infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u21e7 infix": {"lspace": 5, "rspace": 5, "stretchy": true}, "\u21e8 infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u21e9 infix": {"lspace": 5, "rspace": 5, "stretchy": true}, "\u21ea infix": {"lspace": 5, "rspace": 5, "stretchy": true}, "\u21eb infix": {"lspace": 5, "rspace": 5, "stretchy": true}, "\u21ec infix": {"lspace": 5, "rspace": 5, "stretchy": true}, "\u21ed infix": {"lspace": 5, "rspace": 5, "stretchy": true}, "\u21ee infix": {"lspace": 5, "rspace": 5, "stretchy": true}, "\u21ef infix": {"lspace": 5, "rspace": 5, "stretchy": true}, "\u21f0 infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u21f1 infix": {"lspace": 5, "rspace": 5}, "\u21f2 infix": {"lspace": 5, "rspace": 5}, "\u21f3 infix": {"lspace": 5, "rspace": 5, "stretchy": true}, "\u21f4 infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u21f5 infix": {"lspace": 5, "rspace": 5, "stretchy": true}, "\u21f6 infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u21f7 infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u21f8 infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u21f9 infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u21fa infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u21fb infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u21fc infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u21fd infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u21fe infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u21ff infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u2200 prefix": {"lspace": 0, "rspace": 0}, "\u2201 prefix": {"lspace": 0, "rspace": 0}, "\u2202 prefix": {"lspace": 3, "rspace": 0}, "\u2203 prefix": {"lspace": 0, "rspace": 0}, "\u2204 prefix": {"lspace": 0, "rspace": 0}, "\u2206 infix": {"lspace": 0, "rspace": 0}, "\u2207 prefix": {"lspace": 0, "rspace": 0}, "\u2208 infix": {"lspace": 5, "rspace": 5}, "\u2209 infix": {"lspace": 5, "rspace": 5}, "\u220a infix": {"lspace": 5, "rspace": 5}, "\u220b infix": {"lspace": 5, "rspace": 5}, "\u220c infix": {"lspace": 5, "rspace": 5}, "\u220d infix": {"lspace": 5, "rspace": 5}, "\u220f prefix": {"largeop": true, "lspace": 3, "movablelimits": true, "rspace": 3, "symmetric": true}, "\u2210 prefix": {"largeop": true, "lspace": 3, "movablelimits": true, "rspace": 3, "symmetric": true}, "\u2211 prefix": {"largeop": true, "lspace": 3, "movablelimits": true, "rspace": 3, "symmetric": true}, "\u2212 infix": {"lspace": 4, "rspace": 4}, "\u2212 prefix": {"lspace": 0, "rspace": 0}, "\u2213 infix": {"lspace": 4, "rspace": 4}, "\u2213 prefix": {"lspace": 0, "rspace": 0}, "\u2214 infix": {"lspace": 4, "rspace": 4}, "\u2215 infix": {"lspace": 4, "rspace": 4}, "\u2216 infix": {"lspace": 4, "rspace": 4}, "\u2217 infix": {"lspace": 3, "rspace": 3}, "\u2218 infix": {"lspace": 3, "rspace": 3}, "\u2219 infix": {"lspace": 3, "rspace": 3}, "\u221a prefix": {"lspace": 3, "rspace": 0}, "\u221b prefix": {"lspace": 3, "rspace": 0}, "\u221c prefix": {"lspace": 3, "rspace": 0}, "\u221d infix": {"lspace": 5, "rspace": 5}, "\u221f prefix": {"lspace": 0, "rspace": 0}, "\u2220 prefix": {"lspace": 0, "rspace": 0}, "\u2221 prefix": {"lspace": 0, "rspace": 0}, "\u2222 prefix": {"lspace": 0, "rspace": 0}, "\u2223 infix": {"lspace": 5, "rspace": 5}, "\u2224 infix": {"lspace": 5, "rspace": 5}, "\u2225 infix": {"lspace": 5, "rspace": 5}, "\u2226 infix": {"lspace": 5, "rspace": 5}, "\u2227 infix": {"lspace": 4, "rspace": 4}, "\u2228 infix": {"lspace": 4, "rspace": 4}, "\u2229 infix": {"lspace": 4, "rspace": 4}, "\u222a infix": {"lspace": 4, "rspace": 4}, "\u222b prefix": {"largeop": true, "lspace": 3, "rspace": 3, "symmetric": true}, "\u222c prefix": {"largeop": true, "lspace": 3, "rspace": 3, "symmetric": true}, "\u222d prefix": {"largeop": true, "lspace": 3, "rspace": 3, "symmetric": true}, "\u222e prefix": {"largeop": true, "lspace": 3, "rspace": 3, "symmetric": true}, "\u222f prefix": {"largeop": true, "lspace": 3, "rspace": 3, "symmetric": true}, "\u2230 prefix": {"largeop": true, "lspace": 3, "rspace": 3, "symmetric": true}, "\u2231 prefix": {"largeop": true, "lspace": 3, "rspace": 3, "symmetric": true}, "\u2232 prefix": {"largeop": true, "lspace": 3, "rspace": 3, "symmetric": true}, "\u2233 prefix": {"largeop": true, "lspace": 3, "rspace": 3, "symmetric": true}, "\u2234 prefix": {"lspace": 0, "rspace": 0}, "\u2235 prefix": {"lspace": 0, "rspace": 0}, "\u2236 infix": {"lspace": 4, "rspace": 4}, "\u2237 infix": {"lspace": 5, "rspace": 5}, "\u2238 infix": {"lspace": 4, "rspace": 4}, "\u2239 infix": {"lspace": 5, "rspace": 5}, "\u223a infix": {"lspace": 5, "rspace": 5}, "\u223b infix": {"lspace": 5, "rspace": 5}, "\u223c infix": {"lspace": 5, "rspace": 5}, "\u223c prefix": {"lspace": 0, "rspace": 0}, "\u223d infix": {"lspace": 5, "rspace": 5}, "\u223e infix": {"lspace": 5, "rspace": 5}, "\u2240 infix": {"lspace": 3, "rspace": 3}, "\u2241 infix": {"lspace": 5, "rspace": 5}, "\u2242 infix": {"lspace": 5, "rspace": 5}, "\u2243 infix": {"lspace": 5, "rspace": 5}, "\u2244 infix": {"lspace": 5, "rspace": 5}, "\u2245 infix": {"lspace": 5, "rspace": 5}, "\u2246 infix": {"lspace": 5, "rspace": 5}, "\u2247 infix": {"lspace": 5, "rspace": 5}, "\u2248 infix": {"lspace": 5, "rspace": 5}, "\u2249 infix": {"lspace": 5, "rspace": 5}, "\u224a infix": {"lspace": 5, "rspace": 5}, "\u224b infix": {"lspace": 5, "rspace": 5}, "\u224c infix": {"lspace": 5, "rspace": 5}, "\u224d infix": {"lspace": 5, "rspace": 5}, "\u224e infix": {"lspace": 5, "rspace": 5}, "\u224f infix": {"lspace": 5, "rspace": 5}, "\u2250 infix": {"lspace": 5, "rspace": 5}, "\u2251 infix": {"lspace": 5, "rspace": 5}, "\u2252 infix": {"lspace": 5, "rspace": 5}, "\u2253 infix": {"lspace": 5, "rspace": 5}, "\u2254 infix": {"lspace": 5, "rspace": 5}, "\u2255 infix": {"lspace": 5, "rspace": 5}, "\u2256 infix": {"lspace": 5, "rspace": 5}, "\u2257 infix": {"lspace": 5, "rspace": 5}, "\u2258 infix": {"lspace": 5, "rspace": 5}, "\u2259 infix": {"lspace": 5, "rspace": 5}, "\u225a infix": {"lspace": 5, "rspace": 5}, "\u225b infix": {"lspace": 5, "rspace": 5}, "\u225c infix": {"lspace": 5, "rspace": 5}, "\u225d infix": {"lspace": 5, "rspace": 5}, "\u225e infix": {"lspace": 5, "rspace": 5}, "\u225f infix": {"lspace": 5, "rspace": 5}, "\u2260 infix": {"lspace": 5, "rspace": 5}, "\u2261 infix": {"lspace": 5, "rspace": 5}, "\u2262 infix": {"lspace": 5, "rspace": 5}, "\u2263 infix": {"lspace": 5, "rspace": 5}, "\u2264 infix": {"lspace": 5, "rspace": 5}, "\u2265 infix": {"lspace": 5, "rspace": 5}, "\u2266 infix": {"lspace": 5, "rspace": 5}, "\u2267 infix": {"lspace": 5, "rspace": 5}, "\u2268 infix": {"lspace": 5, "rspace": 5}, "\u2269 infix": {"lspace": 5, "rspace": 5}, "\u226a infix": {"lspace": 5, "rspace": 5}, "\u226b infix": {"lspace": 5, "rspace": 5}, "\u226c infix": {"lspace": 5, "rspace": 5}, "\u226d infix": {"lspace": 5, "rspace": 5}, "\u226e infix": {"lspace": 5, "rspace": 5}, "\u226f infix": {"lspace": 5, "rspace": 5}, "\u2270 infix": {"lspace": 5, "rspace": 5}, "\u2271 infix": {"lspace": 5, "rspace": 5}, "\u2272 infix": {"lspace": 5, "rspace": 5}, "\u2273 infix": {"lspace": 5, "rspace": 5}, "\u2274 infix": {"lspace": 5, "rspace": 5}, "\u2275 infix": {"lspace": 5, "rspace": 5}, "\u2276 infix": {"lspace": 5, "rspace": 5}, "\u2277 infix": {"lspace": 5, "rspace": 5}, "\u2278 infix": {"lspace": 5, "rspace": 5}, "\u2279 infix": {"lspace": 5, "rspace": 5}, "\u227a infix": {"lspace": 5, "rspace": 5}, "\u227b infix": {"lspace": 5, "rspace": 5}, "\u227c infix": {"lspace": 5, "rspace": 5}, "\u227d infix": {"lspace": 5, "rspace": 5}, "\u227e infix": {"lspace": 5, "rspace": 5}, "\u227f infix": {"lspace": 5, "rspace": 5}, "\u2280 infix": {"lspace": 5, "rspace": 5}, "\u2281 infix": {"lspace": 5, "rspace": 5}, "\u2282 infix": {"lspace": 5, "rspace": 5}, "\u2283 infix": {"lspace": 5, "rspace": 5}, "\u2284 infix": {"lspace": 5, "rspace": 5}, "\u2285 infix": {"lspace": 5, "rspace": 5}, "\u2286 infix": {"lspace": 5, "rspace": 5}, "\u2287 infix": {"lspace": 5, "rspace": 5}, "\u2288 infix": {"lspace": 5, "rspace": 5}, "\u2289 infix": {"lspace": 5, "rspace": 5}, "\u228a infix": {"lspace": 5, "rspace": 5}, "\u228b infix": {"lspace": 5, "rspace": 5}, "\u228c infix": {"lspace": 4, "rspace": 4}, "\u228d infix": {"lspace": 4, "rspace": 4}, "\u228e infix": {"lspace": 4, "rspace": 4}, "\u228f infix": {"lspace": 5, "rspace": 5}, "\u2290 infix": {"lspace": 5, "rspace": 5}, "\u2291 infix": {"lspace": 5, "rspace": 5}, "\u2292 infix": {"lspace": 5, "rspace": 5}, "\u2293 infix": {"lspace": 4, "rspace": 4}, "\u2294 infix": {"lspace": 4, "rspace": 4}, "\u2295 infix": {"lspace": 4, "rspace": 4}, "\u2296 infix": {"lspace": 4, "rspace": 4}, "\u2297 infix": {"lspace": 3, "rspace": 3}, "\u2298 infix": {"lspace": 4, "rspace": 4}, "\u2299 infix": {"lspace": 3, "rspace": 3}, "\u229a infix": {"lspace": 3, "rspace": 3}, "\u229b infix": {"lspace": 3, "rspace": 3}, "\u229c infix": {"lspace": 5, "rspace": 5}, "\u229d infix": {"lspace": 4, "rspace": 4}, "\u229e infix": {"lspace": 4, "rspace": 4}, "\u229f infix": {"lspace": 4, "rspace": 4}, "\u22a0 infix": {"lspace": 3, "rspace": 3}, "\u22a1 infix": {"lspace": 3, "rspace": 3}, "\u22a2 infix": {"lspace": 5, "rspace": 5}, "\u22a3 infix": {"lspace": 5, "rspace": 5}, "\u22a6 infix": {"lspace": 5, "rspace": 5}, "\u22a7 infix": {"lspace": 5, "rspace": 5}, "\u22a8 infix": {"lspace": 5, "rspace": 5}, "\u22a9 infix": {"lspace": 5, "rspace": 5}, "\u22aa infix": {"lspace": 5, "rspace": 5}, "\u22ab infix": {"lspace": 5, "rspace": 5}, "\u22ac infix": {"lspace": 5, "rspace": 5}, "\u22ad infix": {"lspace": 5, "rspace": 5}, "\u22ae infix": {"lspace": 5, "rspace": 5}, "\u22af infix": {"lspace": 5, "rspace": 5}, "\u22b0 infix": {"lspace": 5, "rspace": 5}, "\u22b1 infix": {"lspace": 5, "rspace": 5}, "\u22b2 infix": {"lspace": 5, "rspace": 5}, "\u22b3 infix": {"lspace": 5, "rspace": 5}, "\u22b4 infix": {"lspace": 5, "rspace": 5}, "\u22b5 infix": {"lspace": 5, "rspace": 5}, "\u22b6 infix": {"lspace": 5, "rspace": 5}, "\u22b7 infix": {"lspace": 5, "rspace": 5}, "\u22b8 infix": {"lspace": 5, "rspace": 5}, "\u22ba infix": {"lspace": 3, "rspace": 3}, "\u22bb infix": {"lspace": 4, "rspace": 4}, "\u22bc infix": {"lspace": 4, "rspace": 4}, "\u22bd infix": {"lspace": 4, "rspace": 4}, "\u22be prefix": {"lspace": 0, "rspace": 0}, "\u22bf prefix": {"lspace": 0, "rspace": 0}, "\u22c0 prefix": {"largeop": true, "lspace": 3, "movablelimits": true, "rspace": 3, "symmetric": true}, "\u22c1 prefix": {"largeop": true, "lspace": 3, "movablelimits": true, "rspace": 3, "symmetric": true}, "\u22c2 prefix": {"largeop": true, "lspace": 3, "movablelimits": true, "rspace": 3, "symmetric": true}, "\u22c3 prefix": {"largeop": true, "lspace": 3, "movablelimits": true, "rspace": 3, "symmetric": true}, "\u22c4 infix": {"lspace": 3, "rspace": 3}, "\u22c5 infix": {"lspace": 3, "rspace": 3}, "\u22c6 infix": {"lspace": 3, "rspace": 3}, "\u22c7 infix": {"lspace": 3, "rspace": 3}, "\u22c8 infix": {"lspace": 5, "rspace": 5}, "\u22c9 infix": {"lspace": 3, "rspace": 3}, "\u22ca infix": {"lspace": 3, "rspace": 3}, "\u22cb infix": {"lspace": 3, "rspace": 3}, "\u22cc infix": {"lspace": 3, "rspace": 3}, "\u22cd infix": {"lspace": 5, "rspace": 5}, "\u22ce infix": {"lspace": 4, "rspace": 4}, "\u22cf infix": {"lspace": 4, "rspace": 4}, "\u22d0 infix": {"lspace": 5, "rspace": 5}, "\u22d1 infix": {"lspace": 5, "rspace": 5}, "\u22d2 infix": {"lspace": 4, "rspace": 4}, "\u22d3 infix": {"lspace": 4, "rspace": 4}, "\u22d4 infix": {"lspace": 5, "rspace": 5}, "\u22d5 infix": {"lspace": 5, "rspace": 5}, "\u22d6 infix": {"lspace": 5, "rspace": 5}, "\u22d7 infix": {"lspace": 5, "rspace": 5}, "\u22d8 infix": {"lspace": 5, "rspace": 5}, "\u22d9 infix": {"lspace": 5, "rspace": 5}, "\u22da infix": {"lspace": 5, "rspace": 5}, "\u22db infix": {"lspace": 5, "rspace": 5}, "\u22dc infix": {"lspace": 5, "rspace": 5}, "\u22dd infix": {"lspace": 5, "rspace": 5}, "\u22de infix": {"lspace": 5, "rspace": 5}, "\u22df infix": {"lspace": 5, "rspace": 5}, "\u22e0 infix": {"lspace": 5, "rspace": 5}, "\u22e1 infix": {"lspace": 5, "rspace": 5}, "\u22e2 infix": {"lspace": 5, "rspace": 5}, "\u22e3 infix": {"lspace": 5, "rspace": 5}, "\u22e4 infix": {"lspace": 5, "rspace": 5}, "\u22e5 infix": {"lspace": 5, "rspace": 5}, "\u22e6 infix": {"lspace": 5, "rspace": 5}, "\u22e7 infix": {"lspace": 5, "rspace": 5}, "\u22e8 infix": {"lspace": 5, "rspace": 5}, "\u22e9 infix": {"lspace": 5, "rspace": 5}, "\u22ea infix": {"lspace": 5, "rspace": 5}, "\u22eb infix": {"lspace": 5, "rspace": 5}, "\u22ec infix": {"lspace": 5, "rspace": 5}, "\u22ed infix": {"lspace": 5, "rspace": 5}, "\u22f2 infix": {"lspace": 5, "rspace": 5}, "\u22f3 infix": {"lspace": 5, "rspace": 5}, "\u22f4 infix": {"lspace": 5, "rspace": 5}, "\u22f5 infix": {"lspace": 5, "rspace": 5}, "\u22f6 infix": {"lspace": 5, "rspace": 5}, "\u22f7 infix": {"lspace": 5, "rspace": 5}, "\u22f8 infix": {"lspace": 5, "rspace": 5}, "\u22f9 infix": {"lspace": 5, "rspace": 5}, "\u22fa infix": {"lspace": 5, "rspace": 5}, "\u22fb infix": {"lspace": 5, "rspace": 5}, "\u22fc infix": {"lspace": 5, "rspace": 5}, "\u22fd infix": {"lspace": 5, "rspace": 5}, "\u22fe infix": {"lspace": 5, "rspace": 5}, "\u22ff infix": {"lspace": 5, "rspace": 5}, "\u2301 infix": {"lspace": 5, "rspace": 5}, "\u2305 infix": {"lspace": 3, "rspace": 3}, "\u2306 infix": {"lspace": 3, "rspace": 3}, "\u2308 prefix": {"lspace": 0, "rspace": 0, "stretchy": true, "symmetric": true}, "\u2309 postfix": {"lspace": 0, "rspace": 0, "stretchy": true, "symmetric": true}, "\u230a prefix": {"lspace": 0, "rspace": 0, "stretchy": true, "symmetric": true}, "\u230b postfix": {"lspace": 0, "rspace": 0, "stretchy": true, "symmetric": true}, "\u2310 prefix": {"lspace": 0, "rspace": 0}, "\u2319 prefix": {"lspace": 0, "rspace": 0}, "\u2322 postfix": {"horizontal": true, "lspace": 0, "rspace": 0, "stretchy": true}, "\u2323 postfix": {"horizontal": true, "lspace": 0, "rspace": 0, "stretchy": true}, "\u2329 prefix": {"lspace": 0, "rspace": 0, "stretchy": true, "symmetric": true}, "\u232a postfix": {"lspace": 0, "rspace": 0, "stretchy": true, "symmetric": true}, "\u237c infix": {"lspace": 5, "rspace": 5}, "\u238b infix": {"lspace": 5, "rspace": 5}, "\u23b4 postfix": {"horizontal": true, "lspace": 0, "rspace": 0, "stretchy": true}, "\u23b5 postfix": {"horizontal": true, "lspace": 0, "rspace": 0, "stretchy": true}, "\u23cd postfix": {"lspace": 0, "rspace": 0}, "\u23dc postfix": {"horizontal": true, "lspace": 0, "rspace": 0, "stretchy": true}, "\u23dd postfix": {"horizontal": true, "lspace": 0, "rspace": 0, "stretchy": true}, "\u23de postfix": {"horizontal": true, "lspace": 0, "rspace": 0, "stretchy": true}, "\u23df postfix": {"horizontal": true, "lspace": 0, "rspace": 0, "stretchy": true}, "\u23e0 postfix": {"horizontal": true, "lspace": 0, "rspace": 0, "stretchy": true}, "\u23e1 postfix": {"horizontal": true, "lspace": 0, "rspace": 0, "stretchy": true}, "\u2772 prefix": {"lspace": 0, "rspace": 0, "stretchy": true, "symmetric": true}, "\u2773 postfix": {"lspace": 0, "rspace": 0, "stretchy": true, "symmetric": true}, "\u2794 infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u2795 infix": {"lspace": 4, "rspace": 4}, "\u2795 prefix": {"lspace": 0, "rspace": 0}, "\u2796 infix": {"lspace": 4, "rspace": 4}, "\u2796 prefix": {"lspace": 0, "rspace": 0}, "\u2797 infix": {"lspace": 4, "rspace": 4}, "\u2798 infix": {"lspace": 5, "rspace": 5}, "\u2799 infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u279a infix": {"lspace": 5, "rspace": 5}, "\u279b infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u279c infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u279d infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u279e infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u279f infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u27a0 infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u27a1 infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u27a5 infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u27a6 infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u27a7 infix": {"lspace": 5, "rspace": 5}, "\u27a8 infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u27a9 infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u27aa infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u27ab infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u27ac infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u27ad infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u27ae infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u27af infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u27b1 infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u27b2 infix": {"lspace": 5, "rspace": 5}, "\u27b3 infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u27b4 infix": {"lspace": 5, "rspace": 5}, "\u27b5 infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u27b6 infix": {"lspace": 5, "rspace": 5}, "\u27b7 infix": {"lspace": 5, "rspace": 5}, "\u27b8 infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u27b9 infix": {"lspace": 5, "rspace": 5}, "\u27ba infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u27bb infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u27bc infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u27bd infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u27be infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u27c0 prefix": {"lspace": 0, "rspace": 0}, "\u27c2 infix": {"lspace": 5, "rspace": 5}, "\u27cb infix": {"lspace": 3, "rspace": 3}, "\u27cd infix": {"lspace": 3, "rspace": 3}, "\u27e6 prefix": {"lspace": 0, "rspace": 0, "stretchy": true, "symmetric": true}, "\u27e7 postfix": {"lspace": 0, "rspace": 0, "stretchy": true, "symmetric": true}, "\u27e8 prefix": {"lspace": 0, "rspace": 0, "stretchy": true, "symmetric": true}, "\u27e9 postfix": {"lspace": 0, "rspace": 0, "stretchy": true, "symmetric": true}, "\u27ea prefix": {"lspace": 0, "rspace": 0, "stretchy": true, "symmetric": true}, "\u27eb postfix": {"lspace": 0, "rspace": 0, "stretchy": true, "symmetric": true}, "\u27ec prefix": {"lspace": 0, "rspace": 0, "stretchy": true, "symmetric": true}, "\u27ed postfix": {"lspace": 0, "rspace": 0, "stretchy": true, "symmetric": true}, "\u27ee prefix": {"lspace": 0, "rspace": 0, "stretchy": true, "symmetric": true}, "\u27ef postfix": {"lspace": 0, "rspace": 0, "stretchy": true, "symmetric": true}, "\u27f0 infix": {"lspace": 5, "rspace": 5, "stretchy": true}, "\u27f1 infix": {"lspace": 5, "rspace": 5, "stretchy": true}, "\u27f2 infix": {"lspace": 5, "rspace": 5}, "\u27f3 infix": {"lspace": 5, "rspace": 5}, "\u27f4 infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u27f5 infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u27f6 infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u27f7 infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u27f8 infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u27f9 infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u27fa infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u27fb infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u27fc infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u27fd infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u27fe infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u27ff infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u2900 infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u2901 infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u2902 infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u2903 infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u2904 infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u2905 infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u2906 infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u2907 infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u2908 infix": {"lspace": 5, "rspace": 5, "stretchy": true}, "\u2909 infix": {"lspace": 5, "rspace": 5, "stretchy": true}, "\u290a infix": {"lspace": 5, "rspace": 5, "stretchy": true}, "\u290b infix": {"lspace": 5, "rspace": 5, "stretchy": true}, "\u290c infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u290d infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u290e infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u290f infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u2910 infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u2911 infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u2912 infix": {"lspace": 5, "rspace": 5, "stretchy": true}, "\u2913 infix": {"lspace": 5, "rspace": 5, "stretchy": true}, "\u2914 infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u2915 infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u2916 infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u2917 infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u2918 infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u2919 infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u291a infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u291b infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u291c infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u291d infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u291e infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u291f infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u2920 infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u2921 infix": {"lspace": 5, "rspace": 5}, "\u2922 infix": {"lspace": 5, "rspace": 5}, "\u2923 infix": {"lspace": 5, "rspace": 5}, "\u2924 infix": {"lspace": 5, "rspace": 5}, "\u2925 infix": {"lspace": 5, "rspace": 5}, "\u2926 infix": {"lspace": 5, "rspace": 5}, "\u2927 infix": {"lspace": 5, "rspace": 5}, "\u2928 infix": {"lspace": 5, "rspace": 5}, "\u2929 infix": {"lspace": 5, "rspace": 5}, "\u292a infix": {"lspace": 5, "rspace": 5}, "\u292b infix": {"lspace": 5, "rspace": 5}, "\u292c infix": {"lspace": 5, "rspace": 5}, "\u292d infix": {"lspace": 5, "rspace": 5}, "\u292e infix": {"lspace": 5, "rspace": 5}, "\u292f infix": {"lspace": 5, "rspace": 5}, "\u2930 infix": {"lspace": 5, "rspace": 5}, "\u2931 infix": {"lspace": 5, "rspace": 5}, "\u2932 infix": {"lspace": 5, "rspace": 5}, "\u2933 infix": {"lspace": 5, "rspace": 5}, "\u2934 infix": {"lspace": 5, "rspace": 5, "stretchy": true}, "\u2935 infix": {"lspace": 5, "rspace": 5, "stretchy": true}, "\u2936 infix": {"lspace": 5, "rspace": 5, "stretchy": true}, "\u2937 infix": {"lspace": 5, "rspace": 5, "stretchy": true}, "\u2938 infix": {"lspace": 5, "rspace": 5}, "\u2939 infix": {"lspace": 5, "rspace": 5}, "\u293a infix": {"lspace": 5, "rspace": 5}, "\u293b infix": {"lspace": 5, "rspace": 5}, "\u293c infix": {"lspace": 5, "rspace": 5}, "\u293d infix": {"lspace": 5, "rspace": 5}, "\u293e infix": {"lspace": 5, "rspace": 5}, "\u293f infix": {"lspace": 5, "rspace": 5}, "\u2940 infix": {"lspace": 5, "rspace": 5}, "\u2941 infix": {"lspace": 5, "rspace": 5}, "\u2942 infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u2943 infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u2944 infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u2945 infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u2946 infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u2947 infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u2948 infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u2949 infix": {"lspace": 5, "rspace": 5, "stretchy": true}, "\u294a infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u294b infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u294c infix": {"lspace": 5, "rspace": 5, "stretchy": true}, "\u294d infix": {"lspace": 5, "rspace": 5, "stretchy": true}, "\u294e infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u294f infix": {"lspace": 5, "rspace": 5, "stretchy": true}, "\u2950 infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u2951 infix": {"lspace": 5, "rspace": 5, "stretchy": true}, "\u2952 infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u2953 infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u2954 infix": {"lspace": 5, "rspace": 5, "stretchy": true}, "\u2955 infix": {"lspace": 5, "rspace": 5, "stretchy": true}, "\u2956 infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u2957 infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u2958 infix": {"lspace": 5, "rspace": 5, "stretchy": true}, "\u2959 infix": {"lspace": 5, "rspace": 5, "stretchy": true}, "\u295a infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u295b infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u295c infix": {"lspace": 5, "rspace": 5, "stretchy": true}, "\u295d infix": {"lspace": 5, "rspace": 5, "stretchy": true}, "\u295e infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u295f infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u2960 infix": {"lspace": 5, "rspace": 5, "stretchy": true}, "\u2961 infix": {"lspace": 5, "rspace": 5, "stretchy": true}, "\u2962 infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u2963 infix": {"lspace": 5, "rspace": 5, "stretchy": true}, "\u2964 infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u2965 infix": {"lspace": 5, "rspace": 5, "stretchy": true}, "\u2966 infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u2967 infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u2968 infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u2969 infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u296a infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u296b infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u296c infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u296d infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u296e infix": {"lspace": 5, "rspace": 5, "stretchy": true}, "\u296f infix": {"lspace": 5, "rspace": 5, "stretchy": true}, "\u2970 infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u2971 infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u2972 infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u2973 infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u2974 infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u2975 infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u2976 infix": {"lspace": 5, "rspace": 5}, "\u2977 infix": {"lspace": 5, "rspace": 5}, "\u2978 infix": {"lspace": 5, "rspace": 5}, "\u2979 infix": {"lspace": 5, "rspace": 5}, "\u297a infix": {"lspace": 5, "rspace": 5}, "\u297b infix": {"lspace": 5, "rspace": 5}, "\u297c infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u297d infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u297e infix": {"lspace": 5, "rspace": 5, "stretchy": true}, "\u297f infix": {"lspace": 5, "rspace": 5, "stretchy": true}, "\u2980 postfix": {"lspace": 0, "rspace": 0, "stretchy": true, "symmetric": true}, "\u2980 prefix": {"lspace": 0, "rspace": 0, "stretchy": true, "symmetric": true}, "\u2981 infix": {"lspace": 5, "rspace": 5}, "\u2982 infix": {"lspace": 5, "rspace": 5}, "\u2983 prefix": {"lspace": 0, "rspace": 0, "stretchy": true, "symmetric": true}, "\u2984 postfix": {"lspace": 0, "rspace": 0, "stretchy": true, "symmetric": true}, "\u2985 prefix": {"lspace": 0, "rspace": 0, "stretchy": true, "symmetric": true}, "\u2986 postfix": {"lspace": 0, "rspace": 0, "stretchy": true, "symmetric": true}, "\u2987 prefix": {"lspace": 0, "rspace": 0, "stretchy": true, "symmetric": true}, "\u2988 postfix": {"lspace": 0, "rspace": 0, "stretchy": true, "symmetric": true}, "\u2989 prefix": {"lspace": 0, "rspace": 0, "stretchy": true, "symmetric": true}, "\u298a postfix": {"lspace": 0, "rspace": 0, "stretchy": true, "symmetric": true}, "\u298b prefix": {"lspace": 0, "rspace": 0, "stretchy": true, "symmetric": true}, "\u298c postfix": {"lspace": 0, "rspace": 0, "stretchy": true, "symmetric": true}, "\u298d prefix": {"lspace": 0, "rspace": 0, "stretchy": true, "symmetric": true}, "\u298e postfix": {"lspace": 0, "rspace": 0, "stretchy": true, "symmetric": true}, "\u298f prefix": {"lspace": 0, "rspace": 0, "stretchy": true, "symmetric": true}, "\u2990 postfix": {"lspace": 0, "rspace": 0, "stretchy": true, "symmetric": true}, "\u2991 prefix": {"lspace": 0, "rspace": 0, "stretchy": true, "symmetric": true}, "\u2992 postfix": {"lspace": 0, "rspace": 0, "stretchy": true, "symmetric": true}, "\u2993 prefix": {"lspace": 0, "rspace": 0, "stretchy": true, "symmetric": true}, "\u2994 postfix": {"lspace": 0, "rspace": 0, "stretchy": true, "symmetric": true}, "\u2995 prefix": {"lspace": 0, "rspace": 0, "stretchy": true, "symmetric": true}, "\u2996 postfix": {"lspace": 0, "rspace": 0, "stretchy": true, "symmetric": true}, "\u2997 prefix": {"lspace": 0, "rspace": 0, "stretchy": true, "symmetric": true}, "\u2998 postfix": {"lspace": 0, "rspace": 0, "stretchy": true, "symmetric": true}, "\u2999 postfix": {"lspace": 0, "rspace": 0, "stretchy": true, "symmetric": true}, "\u2999 prefix": {"lspace": 0, "rspace": 0, "stretchy": true, "symmetric": true}, "\u299b prefix": {"lspace": 0, "rspace": 0}, "\u299c prefix": {"lspace": 0, "rspace": 0}, "\u299d prefix": {"lspace": 0, "rspace": 0}, "\u299e prefix": {"lspace": 0, "rspace": 0}, "\u299f prefix": {"lspace": 0, "rspace": 0}, "\u29a0 prefix": {"lspace": 0, "rspace": 0}, "\u29a1 prefix": {"lspace": 0, "rspace": 0}, "\u29a2 prefix": {"lspace": 0, "rspace": 0}, "\u29a3 prefix": {"lspace": 0, "rspace": 0}, "\u29a4 prefix": {"lspace": 0, "rspace": 0}, "\u29a5 prefix": {"lspace": 0, "rspace": 0}, "\u29a6 prefix": {"lspace": 0, "rspace": 0}, "\u29a7 prefix": {"lspace": 0, "rspace": 0}, "\u29a8 prefix": {"lspace": 0, "rspace": 0}, "\u29a9 prefix": {"lspace": 0, "rspace": 0}, "\u29aa prefix": {"lspace": 0, "rspace": 0}, "\u29ab prefix": {"lspace": 0, "rspace": 0}, "\u29ac prefix": {"lspace": 0, "rspace": 0}, "\u29ad prefix": {"lspace": 0, "rspace": 0}, "\u29ae prefix": {"lspace": 0, "rspace": 0}, "\u29af prefix": {"lspace": 0, "rspace": 0}, "\u29b6 infix": {"lspace": 5, "rspace": 5}, "\u29b7 infix": {"lspace": 5, "rspace": 5}, "\u29b8 infix": {"lspace": 4, "rspace": 4}, "\u29b9 infix": {"lspace": 5, "rspace": 5}, "\u29bc infix": {"lspace": 4, "rspace": 4}, "\u29c0 infix": {"lspace": 5, "rspace": 5}, "\u29c1 infix": {"lspace": 5, "rspace": 5}, "\u29c4 infix": {"lspace": 4, "rspace": 4}, "\u29c5 infix": {"lspace": 4, "rspace": 4}, "\u29c6 infix": {"lspace": 3, "rspace": 3}, "\u29c7 infix": {"lspace": 3, "rspace": 3}, "\u29c8 infix": {"lspace": 3, "rspace": 3}, "\u29ce infix": {"lspace": 5, "rspace": 5}, "\u29cf infix": {"lspace": 5, "rspace": 5}, "\u29d0 infix": {"lspace": 5, "rspace": 5}, "\u29d1 infix": {"lspace": 5, "rspace": 5}, "\u29d2 infix": {"lspace": 5, "rspace": 5}, "\u29d3 infix": {"lspace": 5, "rspace": 5}, "\u29d4 infix": {"lspace": 3, "rspace": 3}, "\u29d5 infix": {"lspace": 3, "rspace": 3}, "\u29d6 infix": {"lspace": 3, "rspace": 3}, "\u29d7 infix": {"lspace": 3, "rspace": 3}, "\u29d8 prefix": {"lspace": 0, "rspace": 0, "stretchy": true, "symmetric": true}, "\u29d9 postfix": {"lspace": 0, "rspace": 0, "stretchy": true, "symmetric": true}, "\u29da prefix": {"lspace": 0, "rspace": 0, "stretchy": true, "symmetric": true}, "\u29db postfix": {"lspace": 0, "rspace": 0, "stretchy": true, "symmetric": true}, "\u29df infix": {"lspace": 5, "rspace": 5}, "\u29e1 infix": {"lspace": 5, "rspace": 5}, "\u29e2 infix": {"lspace": 3, "rspace": 3}, "\u29e3 infix": {"lspace": 5, "rspace": 5}, "\u29e4 infix": {"lspace": 5, "rspace": 5}, "\u29e5 infix": {"lspace": 5, "rspace": 5}, "\u29e6 infix": {"lspace": 5, "rspace": 5}, "\u29f4 infix": {"lspace": 5, "rspace": 5}, "\u29f5 infix": {"lspace": 4, "rspace": 4}, "\u29f6 infix": {"lspace": 4, "rspace": 4}, "\u29f7 infix": {"lspace": 4, "rspace": 4}, "\u29f8 infix": {"lspace": 4, "rspace": 4}, "\u29f9 infix": {"lspace": 4, "rspace": 4}, "\u29fa infix": {"lspace": 4, "rspace": 4}, "\u29fb infix": {"lspace": 4, "rspace": 4}, "\u29fc prefix": {"lspace": 0, "rspace": 0, "stretchy": true, "symmetric": true}, "\u29fd postfix": {"lspace": 0, "rspace": 0, "stretchy": true, "symmetric": true}, "\u2a00 prefix": {"largeop": true, "lspace": 3, "movablelimits": true, "rspace": 3, "symmetric": true}, "\u2a01 prefix": {"largeop": true, "lspace": 3, "movablelimits": true, "rspace": 3, "symmetric": true}, "\u2a02 prefix": {"largeop": true, "lspace": 3, "movablelimits": true, "rspace": 3, "symmetric": true}, "\u2a03 prefix": {"largeop": true, "lspace": 3, "movablelimits": true, "rspace": 3, "symmetric": true}, "\u2a04 prefix": {"largeop": true, "lspace": 3, "movablelimits": true, "rspace": 3, "symmetric": true}, "\u2a05 prefix": {"largeop": true, "lspace": 3, "movablelimits": true, "rspace": 3, "symmetric": true}, "\u2a06 prefix": {"largeop": true, "lspace": 3, "movablelimits": true, "rspace": 3, "symmetric": true}, "\u2a07 prefix": {"largeop": true, "lspace": 3, "movablelimits": true, "rspace": 3, "symmetric": true}, "\u2a08 prefix": {"largeop": true, "lspace": 3, "movablelimits": true, "rspace": 3, "symmetric": true}, "\u2a09 prefix": {"largeop": true, "lspace": 3, "movablelimits": true, "rspace": 3, "symmetric": true}, "\u2a0a prefix": {"largeop": true, "lspace": 3, "movablelimits": true, "rspace": 3, "symmetric": true}, "\u2a0b prefix": {"largeop": true, "lspace": 3, "rspace": 3, "symmetric": true}, "\u2a0c prefix": {"largeop": true, "lspace": 3, "rspace": 3, "symmetric": true}, "\u2a0d prefix": {"largeop": true, "lspace": 3, "rspace": 3, "symmetric": true}, "\u2a0e prefix": {"largeop": true, "lspace": 3, "rspace": 3, "symmetric": true}, "\u2a0f prefix": {"largeop": true, "lspace": 3, "rspace": 3, "symmetric": true}, "\u2a10 prefix": {"largeop": true, "lspace": 3, "rspace": 3, "symmetric": true}, "\u2a11 prefix": {"largeop": true, "lspace": 3, "rspace": 3, "symmetric": true}, "\u2a12 prefix": {"largeop": true, "lspace": 3, "rspace": 3, "symmetric": true}, "\u2a13 prefix": {"largeop": true, "lspace": 3, "rspace": 3, "symmetric": true}, "\u2a14 prefix": {"largeop": true, "lspace": 3, "rspace": 3, "symmetric": true}, "\u2a15 prefix": {"largeop": true, "lspace": 3, "rspace": 3, "symmetric": true}, "\u2a16 prefix": {"largeop": true, "lspace": 3, "rspace": 3, "symmetric": true}, "\u2a17 prefix": {"largeop": true, "lspace": 3, "rspace": 3, "symmetric": true}, "\u2a18 prefix": {"largeop": true, "lspace": 3, "rspace": 3, "symmetric": true}, "\u2a19 prefix": {"largeop": true, "lspace": 3, "rspace": 3, "symmetric": true}, "\u2a1a prefix": {"largeop": true, "lspace": 3, "rspace": 3, "symmetric": true}, "\u2a1b prefix": {"largeop": true, "lspace": 3, "rspace": 3, "symmetric": true}, "\u2a1c prefix": {"largeop": true, "lspace": 3, "rspace": 3, "symmetric": true}, "\u2a1d infix": {"lspace": 3, "rspace": 3}, "\u2a1d prefix": {"largeop": true, "lspace": 3, "movablelimits": true, "rspace": 3, "symmetric": true}, "\u2a1e infix": {"lspace": 3, "rspace": 3}, "\u2a1e prefix": {"largeop": true, "lspace": 3, "movablelimits": true, "rspace": 3, "symmetric": true}, "\u2a1f infix": {"lspace": 4, "rspace": 4}, "\u2a20 infix": {"lspace": 4, "rspace": 4}, "\u2a21 infix": {"lspace": 4, "rspace": 4}, "\u2a22 infix": {"lspace": 4, "rspace": 4}, "\u2a23 infix": {"lspace": 4, "rspace": 4}, "\u2a24 infix": {"lspace": 4, "rspace": 4}, "\u2a25 infix": {"lspace": 4, "rspace": 4}, "\u2a26 infix": {"lspace": 4, "rspace": 4}, "\u2a27 infix": {"lspace": 4, "rspace": 4}, "\u2a28 infix": {"lspace": 4, "rspace": 4}, "\u2a29 infix": {"lspace": 4, "rspace": 4}, "\u2a2a infix": {"lspace": 4, "rspace": 4}, "\u2a2b infix": {"lspace": 4, "rspace": 4}, "\u2a2c infix": {"lspace": 4, "rspace": 4}, "\u2a2d infix": {"lspace": 4, "rspace": 4}, "\u2a2e infix": {"lspace": 4, "rspace": 4}, "\u2a2f infix": {"lspace": 3, "rspace": 3}, "\u2a30 infix": {"lspace": 3, "rspace": 3}, "\u2a31 infix": {"lspace": 3, "rspace": 3}, "\u2a32 infix": {"lspace": 3, "rspace": 3}, "\u2a33 infix": {"lspace": 3, "rspace": 3}, "\u2a34 infix": {"lspace": 3, "rspace": 3}, "\u2a35 infix": {"lspace": 3, "rspace": 3}, "\u2a36 infix": {"lspace": 3, "rspace": 3}, "\u2a37 infix": {"lspace": 3, "rspace": 3}, "\u2a38 infix": {"lspace": 4, "rspace": 4}, "\u2a39 infix": {"lspace": 4, "rspace": 4}, "\u2a3a infix": {"lspace": 4, "rspace": 4}, "\u2a3b infix": {"lspace": 3, "rspace": 3}, "\u2a3c infix": {"lspace": 3, "rspace": 3}, "\u2a3d infix": {"lspace": 3, "rspace": 3}, "\u2a3e infix": {"lspace": 4, "rspace": 4}, "\u2a3f infix": {"lspace": 3, "rspace": 3}, "\u2a40 infix": {"lspace": 4, "rspace": 4}, "\u2a41 infix": {"lspace": 4, "rspace": 4}, "\u2a42 infix": {"lspace": 4, "rspace": 4}, "\u2a43 infix": {"lspace": 4, "rspace": 4}, "\u2a44 infix": {"lspace": 4, "rspace": 4}, "\u2a45 infix": {"lspace": 4, "rspace": 4}, "\u2a46 infix": {"lspace": 4, "rspace": 4}, "\u2a47 infix": {"lspace": 4, "rspace": 4}, "\u2a48 infix": {"lspace": 4, "rspace": 4}, "\u2a49 infix": {"lspace": 4, "rspace": 4}, "\u2a4a infix": {"lspace": 4, "rspace": 4}, "\u2a4b infix": {"lspace": 4, "rspace": 4}, "\u2a4c infix": {"lspace": 4, "rspace": 4}, "\u2a4d infix": {"lspace": 4, "rspace": 4}, "\u2a4e infix": {"lspace": 4, "rspace": 4}, "\u2a4f infix": {"lspace": 4, "rspace": 4}, "\u2a50 infix": {"lspace": 3, "rspace": 3}, "\u2a51 infix": {"lspace": 4, "rspace": 4}, "\u2a52 infix": {"lspace": 4, "rspace": 4}, "\u2a53 infix": {"lspace": 4, "rspace": 4}, "\u2a54 infix": {"lspace": 4, "rspace": 4}, "\u2a55 infix": {"lspace": 4, "rspace": 4}, "\u2a56 infix": {"lspace": 4, "rspace": 4}, "\u2a57 infix": {"lspace": 4, "rspace": 4}, "\u2a58 infix": {"lspace": 4, "rspace": 4}, "\u2a59 infix": {"lspace": 4, "rspace": 4}, "\u2a5a infix": {"lspace": 4, "rspace": 4}, "\u2a5b infix": {"lspace": 4, "rspace": 4}, "\u2a5c infix": {"lspace": 4, "rspace": 4}, "\u2a5d infix": {"lspace": 4, "rspace": 4}, "\u2a5e infix": {"lspace": 4, "rspace": 4}, "\u2a5f infix": {"lspace": 4, "rspace": 4}, "\u2a60 infix": {"lspace": 4, "rspace": 4}, "\u2a61 infix": {"lspace": 4, "rspace": 4}, "\u2a62 infix": {"lspace": 4, "rspace": 4}, "\u2a63 infix": {"lspace": 4, "rspace": 4}, "\u2a64 infix": {"lspace": 3, "rspace": 3}, "\u2a65 infix": {"lspace": 3, "rspace": 3}, "\u2a66 infix": {"lspace": 5, "rspace": 5}, "\u2a67 infix": {"lspace": 5, "rspace": 5}, "\u2a68 infix": {"lspace": 5, "rspace": 5}, "\u2a69 infix": {"lspace": 5, "rspace": 5}, "\u2a6a infix": {"lspace": 5, "rspace": 5}, "\u2a6b infix": {"lspace": 5, "rspace": 5}, "\u2a6c infix": {"lspace": 5, "rspace": 5}, "\u2a6d infix": {"lspace": 5, "rspace": 5}, "\u2a6e infix": {"lspace": 5, "rspace": 5}, "\u2a6f infix": {"lspace": 5, "rspace": 5}, "\u2a70 infix": {"lspace": 5, "rspace": 5}, "\u2a71 infix": {"lspace": 5, "rspace": 5}, "\u2a72 infix": {"lspace": 5, "rspace": 5}, "\u2a73 infix": {"lspace": 5, "rspace": 5}, "\u2a74 infix": {"lspace": 5, "rspace": 5}, "\u2a75 infix": {"lspace": 5, "rspace": 5}, "\u2a76 infix": {"lspace": 5, "rspace": 5}, "\u2a77 infix": {"lspace": 5, "rspace": 5}, "\u2a78 infix": {"lspace": 5, "rspace": 5}, "\u2a79 infix": {"lspace": 5, "rspace": 5}, "\u2a7a infix": {"lspace": 5, "rspace": 5}, "\u2a7b infix": {"lspace": 5, "rspace": 5}, "\u2a7c infix": {"lspace": 5, "rspace": 5}, "\u2a7d infix": {"lspace": 5, "rspace": 5}, "\u2a7e infix": {"lspace": 5, "rspace": 5}, "\u2a7f infix": {"lspace": 5, "rspace": 5}, "\u2a80 infix": {"lspace": 5, "rspace": 5}, "\u2a81 infix": {"lspace": 5, "rspace": 5}, "\u2a82 infix": {"lspace": 5, "rspace": 5}, "\u2a83 infix": {"lspace": 5, "rspace": 5}, "\u2a84 infix": {"lspace": 5, "rspace": 5}, "\u2a85 infix": {"lspace": 5, "rspace": 5}, "\u2a86 infix": {"lspace": 5, "rspace": 5}, "\u2a87 infix": {"lspace": 5, "rspace": 5}, "\u2a88 infix": {"lspace": 5, "rspace": 5}, "\u2a89 infix": {"lspace": 5, "rspace": 5}, "\u2a8a infix": {"lspace": 5, "rspace": 5}, "\u2a8b infix": {"lspace": 5, "rspace": 5}, "\u2a8c infix": {"lspace": 5, "rspace": 5}, "\u2a8d infix": {"lspace": 5, "rspace": 5}, "\u2a8e infix": {"lspace": 5, "rspace": 5}, "\u2a8f infix": {"lspace": 5, "rspace": 5}, "\u2a90 infix": {"lspace": 5, "rspace": 5}, "\u2a91 infix": {"lspace": 5, "rspace": 5}, "\u2a92 infix": {"lspace": 5, "rspace": 5}, "\u2a93 infix": {"lspace": 5, "rspace": 5}, "\u2a94 infix": {"lspace": 5, "rspace": 5}, "\u2a95 infix": {"lspace": 5, "rspace": 5}, "\u2a96 infix": {"lspace": 5, "rspace": 5}, "\u2a97 infix": {"lspace": 5, "rspace": 5}, "\u2a98 infix": {"lspace": 5, "rspace": 5}, "\u2a99 infix": {"lspace": 5, "rspace": 5}, "\u2a9a infix": {"lspace": 5, "rspace": 5}, "\u2a9b infix": {"lspace": 5, "rspace": 5}, "\u2a9c infix": {"lspace": 5, "rspace": 5}, "\u2a9d infix": {"lspace": 5, "rspace": 5}, "\u2a9e infix": {"lspace": 5, "rspace": 5}, "\u2a9f infix": {"lspace": 5, "rspace": 5}, "\u2aa0 infix": {"lspace": 5, "rspace": 5}, "\u2aa1 infix": {"lspace": 5, "rspace": 5}, "\u2aa2 infix": {"lspace": 5, "rspace": 5}, "\u2aa3 infix": {"lspace": 5, "rspace": 5}, "\u2aa4 infix": {"lspace": 5, "rspace": 5}, "\u2aa5 infix": {"lspace": 5, "rspace": 5}, "\u2aa6 infix": {"lspace": 5, "rspace": 5}, "\u2aa7 infix": {"lspace": 5, "rspace": 5}, "\u2aa8 infix": {"lspace": 5, "rspace": 5}, "\u2aa9 infix": {"lspace": 5, "rspace": 5}, "\u2aaa infix": {"lspace": 5, "rspace": 5}, "\u2aab infix": {"lspace": 5, "rspace": 5}, "\u2aac infix": {"lspace": 5, "rspace": 5}, "\u2aad infix": {"lspace": 5, "rspace": 5}, "\u2aae infix": {"lspace": 5, "rspace": 5}, "\u2aaf infix": {"lspace": 5, "rspace": 5}, "\u2ab0 infix": {"lspace": 5, "rspace": 5}, "\u2ab1 infix": {"lspace": 5, "rspace": 5}, "\u2ab2 infix": {"lspace": 5, "rspace": 5}, "\u2ab3 infix": {"lspace": 5, "rspace": 5}, "\u2ab4 infix": {"lspace": 5, "rspace": 5}, "\u2ab5 infix": {"lspace": 5, "rspace": 5}, "\u2ab6 infix": {"lspace": 5, "rspace": 5}, "\u2ab7 infix": {"lspace": 5, "rspace": 5}, "\u2ab8 infix": {"lspace": 5, "rspace": 5}, "\u2ab9 infix": {"lspace": 5, "rspace": 5}, "\u2aba infix": {"lspace": 5, "rspace": 5}, "\u2abb infix": {"lspace": 5, "rspace": 5}, "\u2abc infix": {"lspace": 5, "rspace": 5}, "\u2abd infix": {"lspace": 5, "rspace": 5}, "\u2abe infix": {"lspace": 5, "rspace": 5}, "\u2abf infix": {"lspace": 5, "rspace": 5}, "\u2ac0 infix": {"lspace": 5, "rspace": 5}, "\u2ac1 infix": {"lspace": 5, "rspace": 5}, "\u2ac2 infix": {"lspace": 5, "rspace": 5}, "\u2ac3 infix": {"lspace": 5, "rspace": 5}, "\u2ac4 infix": {"lspace": 5, "rspace": 5}, "\u2ac5 infix": {"lspace": 5, "rspace": 5}, "\u2ac6 infix": {"lspace": 5, "rspace": 5}, "\u2ac7 infix": {"lspace": 5, "rspace": 5}, "\u2ac8 infix": {"lspace": 5, "rspace": 5}, "\u2ac9 infix": {"lspace": 5, "rspace": 5}, "\u2aca infix": {"lspace": 5, "rspace": 5}, "\u2acb infix": {"lspace": 5, "rspace": 5}, "\u2acc infix": {"lspace": 5, "rspace": 5}, "\u2acd infix": {"lspace": 5, "rspace": 5}, "\u2ace infix": {"lspace": 5, "rspace": 5}, "\u2acf infix": {"lspace": 5, "rspace": 5}, "\u2ad0 infix": {"lspace": 5, "rspace": 5}, "\u2ad1 infix": {"lspace": 5, "rspace": 5}, "\u2ad2 infix": {"lspace": 5, "rspace": 5}, "\u2ad3 infix": {"lspace": 5, "rspace": 5}, "\u2ad4 infix": {"lspace": 5, "rspace": 5}, "\u2ad5 infix": {"lspace": 5, "rspace": 5}, "\u2ad6 infix": {"lspace": 5, "rspace": 5}, "\u2ad7 infix": {"lspace": 5, "rspace": 5}, "\u2ad8 infix": {"lspace": 5, "rspace": 5}, "\u2ad9 infix": {"lspace": 5, "rspace": 5}, "\u2ada infix": {"lspace": 5, "rspace": 5}, "\u2adb infix": {"lspace": 4, "rspace": 4}, "\u2adc infix": {"lspace": 3, "rspace": 3}, "\u2add infix": {"lspace": 3, "rspace": 3}, "\u2ade infix": {"lspace": 5, "rspace": 5}, "\u2adf infix": {"lspace": 5, "rspace": 5}, "\u2ae0 infix": {"lspace": 5, "rspace": 5}, "\u2ae1 infix": {"lspace": 5, "rspace": 5}, "\u2ae2 infix": {"lspace": 5, "rspace": 5}, "\u2ae3 infix": {"lspace": 5, "rspace": 5}, "\u2ae4 infix": {"lspace": 5, "rspace": 5}, "\u2ae5 infix": {"lspace": 5, "rspace": 5}, "\u2ae6 infix": {"lspace": 5, "rspace": 5}, "\u2ae7 infix": {"lspace": 5, "rspace": 5}, "\u2ae8 infix": {"lspace": 5, "rspace": 5}, "\u2ae9 infix": {"lspace": 5, "rspace": 5}, "\u2aea infix": {"lspace": 5, "rspace": 5}, "\u2aeb infix": {"lspace": 5, "rspace": 5}, "\u2aec prefix": {"lspace": 0, "rspace": 0}, "\u2aed prefix": {"lspace": 0, "rspace": 0}, "\u2aee infix": {"lspace": 5, "rspace": 5}, "\u2af2 infix": {"lspace": 5, "rspace": 5}, "\u2af3 infix": {"lspace": 5, "rspace": 5}, "\u2af4 infix": {"lspace": 5, "rspace": 5}, "\u2af5 infix": {"lspace": 5, "rspace": 5}, "\u2af6 infix": {"lspace": 4, "rspace": 4}, "\u2af7 infix": {"lspace": 5, "rspace": 5}, "\u2af8 infix": {"lspace": 5, "rspace": 5}, "\u2af9 infix": {"lspace": 5, "rspace": 5}, "\u2afa infix": {"lspace": 5, "rspace": 5}, "\u2afb infix": {"lspace": 4, "rspace": 4}, "\u2afc prefix": {"largeop": true, "lspace": 3, "movablelimits": true, "rspace": 3, "symmetric": true}, "\u2afd infix": {"lspace": 4, "rspace": 4}, "\u2afe infix": {"lspace": 3, "rspace": 3}, "\u2aff prefix": {"largeop": true, "lspace": 3, "movablelimits": true, "rspace": 3, "symmetric": true}, "\u2b00 infix": {"lspace": 5, "rspace": 5}, "\u2b01 infix": {"lspace": 5, "rspace": 5}, "\u2b02 infix": {"lspace": 5, "rspace": 5}, "\u2b03 infix": {"lspace": 5, "rspace": 5}, "\u2b04 infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u2b05 infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u2b06 infix": {"lspace": 5, "rspace": 5, "stretchy": true}, "\u2b07 infix": {"lspace": 5, "rspace": 5, "stretchy": true}, "\u2b08 infix": {"lspace": 5, "rspace": 5}, "\u2b09 infix": {"lspace": 5, "rspace": 5}, "\u2b0a infix": {"lspace": 5, "rspace": 5}, "\u2b0b infix": {"lspace": 5, "rspace": 5}, "\u2b0c infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u2b0d infix": {"lspace": 5, "rspace": 5, "stretchy": true}, "\u2b0e infix": {"lspace": 5, "rspace": 5, "stretchy": true}, "\u2b0f infix": {"lspace": 5, "rspace": 5, "stretchy": true}, "\u2b10 infix": {"lspace": 5, "rspace": 5, "stretchy": true}, "\u2b11 infix": {"lspace": 5, "rspace": 5, "stretchy": true}, "\u2b30 infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u2b31 infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u2b32 infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u2b33 infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u2b34 infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u2b35 infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u2b36 infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u2b37 infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u2b38 infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u2b39 infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u2b3a infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u2b3b infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u2b3c infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u2b3d infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u2b3e infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u2b3f infix": {"lspace": 5, "rspace": 5}, "\u2b40 infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u2b41 infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u2b42 infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u2b43 infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u2b44 infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u2b45 infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u2b46 infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u2b47 infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u2b48 infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u2b49 infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u2b4a infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u2b4b infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u2b4c infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u2b4d infix": {"lspace": 5, "rspace": 5}, "\u2b4e infix": {"lspace": 5, "rspace": 5}, "\u2b4f infix": {"lspace": 5, "rspace": 5}, "\u2b5a infix": {"lspace": 5, "rspace": 5}, "\u2b5b infix": {"lspace": 5, "rspace": 5}, "\u2b5c infix": {"lspace": 5, "rspace": 5}, "\u2b5d infix": {"lspace": 5, "rspace": 5}, "\u2b5e infix": {"lspace": 5, "rspace": 5}, "\u2b5f infix": {"lspace": 5, "rspace": 5}, "\u2b60 infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u2b61 infix": {"lspace": 5, "rspace": 5, "stretchy": true}, "\u2b62 infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u2b63 infix": {"lspace": 5, "rspace": 5, "stretchy": true}, "\u2b64 infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u2b65 infix": {"lspace": 5, "rspace": 5, "stretchy": true}, "\u2b66 infix": {"lspace": 5, "rspace": 5}, "\u2b67 infix": {"lspace": 5, "rspace": 5}, "\u2b68 infix": {"lspace": 5, "rspace": 5}, "\u2b69 infix": {"lspace": 5, "rspace": 5}, "\u2b6a infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u2b6b infix": {"lspace": 5, "rspace": 5, "stretchy": true}, "\u2b6c infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u2b6d infix": {"lspace": 5, "rspace": 5, "stretchy": true}, "\u2b6e infix": {"lspace": 5, "rspace": 5}, "\u2b6f infix": {"lspace": 5, "rspace": 5}, "\u2b70 infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u2b71 infix": {"lspace": 5, "rspace": 5, "stretchy": true}, "\u2b72 infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u2b73 infix": {"lspace": 5, "rspace": 5, "stretchy": true}, "\u2b76 infix": {"lspace": 5, "rspace": 5}, "\u2b77 infix": {"lspace": 5, "rspace": 5}, "\u2b78 infix": {"lspace": 5, "rspace": 5}, "\u2b79 infix": {"lspace": 5, "rspace": 5}, "\u2b7a infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u2b7b infix": {"lspace": 5, "rspace": 5, "stretchy": true}, "\u2b7c infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u2b7d infix": {"lspace": 5, "rspace": 5, "stretchy": true}, "\u2b80 infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u2b81 infix": {"lspace": 5, "rspace": 5, "stretchy": true}, "\u2b82 infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u2b83 infix": {"lspace": 5, "rspace": 5, "stretchy": true}, "\u2b84 infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u2b85 infix": {"lspace": 5, "rspace": 5, "stretchy": true}, "\u2b86 infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u2b87 infix": {"lspace": 5, "rspace": 5, "stretchy": true}, "\u2b88 infix": {"lspace": 5, "rspace": 5}, "\u2b89 infix": {"lspace": 5, "rspace": 5}, "\u2b8a infix": {"lspace": 5, "rspace": 5}, "\u2b8b infix": {"lspace": 5, "rspace": 5}, "\u2b8c infix": {"lspace": 5, "rspace": 5}, "\u2b8d infix": {"lspace": 5, "rspace": 5}, "\u2b8e infix": {"lspace": 5, "rspace": 5}, "\u2b8f infix": {"lspace": 5, "rspace": 5}, "\u2b94 infix": {"lspace": 5, "rspace": 5}, "\u2b95 infix": {"horizontal": true, "lspace": 5, "rspace": 5, "stretchy": true}, "\u2ba0 infix": {"lspace": 5, "rspace": 5, "stretchy": true}, "\u2ba1 infix": {"lspace": 5, "rspace": 5, "stretchy": true}, "\u2ba2 infix": {"lspace": 5, "rspace": 5, "stretchy": true}, "\u2ba3 infix": {"lspace": 5, "rspace": 5, "stretchy": true}, "\u2ba4 infix": {"lspace": 5, "rspace": 5, "stretchy": true}, "\u2ba5 infix": {"lspace": 5, "rspace": 5, "stretchy": true}, "\u2ba6 infix": {"lspace": 5, "rspace": 5, "stretchy": true}, "\u2ba7 infix": {"lspace": 5, "rspace": 5, "stretchy": true}, "\u2ba8 infix": {"lspace": 5, "rspace": 5, "stretchy": true}, "\u2ba9 infix": {"lspace": 5, "rspace": 5, "stretchy": true}, "\u2baa infix": {"lspace": 5, "rspace": 5, "stretchy": true}, "\u2bab infix": {"lspace": 5, "rspace": 5, "stretchy": true}, "\u2bac infix": {"lspace": 5, "rspace": 5, "stretchy": true}, "\u2bad infix": {"lspace": 5, "rspace": 5, "stretchy": true}, "\u2bae infix": {"lspace": 5, "rspace": 5, "stretchy": true}, "\u2baf infix": {"lspace": 5, "rspace": 5, "stretchy": true}, "\u2bb0 infix": {"lspace": 5, "rspace": 5}, "\u2bb1 infix": {"lspace": 5, "rspace": 5}, "\u2bb2 infix": {"lspace": 5, "rspace": 5}, "\u2bb3 infix": {"lspace": 5, "rspace": 5}, "\u2bb4 infix": {"lspace": 5, "rspace": 5}, "\u2bb5 infix": {"lspace": 5, "rspace": 5}, "\u2bb6 infix": {"lspace": 5, "rspace": 5}, "\u2bb7 infix": {"lspace": 5, "rspace": 5}, "\u2bb8 infix": {"lspace": 5, "rspace": 5, "stretchy": true}, "\u2bd1 infix": {"lspace": 5, "rspace": 5}, "\ud83b\udef0 postfix": {"horizontal": true, "lspace": 0, "rspace": 0, "stretchy": true}, "\ud83b\udef1 postfix": {"horizontal": true, "lspace": 0, "rspace": 0, "stretchy": true}}}
\ No newline at end of file
diff --git a/testing/web-platform/tests/mathml/tools/axisheight.py b/testing/web-platform/tests/mathml/tools/axisheight.py
new file mode 100755
index 0000000000..7640c4f789
--- /dev/null
+++ b/testing/web-platform/tests/mathml/tools/axisheight.py
@@ -0,0 +1,27 @@
+#!/usr/bin/env python3
+
+from utils import mathfont
+import fontforge
+
+verticalArrowCodePoint = 0x21A8
+v1 = 5 * mathfont.em
+v2 = 14 * mathfont.em
+f = mathfont.create("axisheight%d-verticalarrow%d" % (v1, v2),
+ "Copyright (c) 2016 MathML Association")
+f.math.AxisHeight = v1
+f.math.MinConnectorOverlap = 0
+mathfont.createSquareGlyph(f, verticalArrowCodePoint)
+g = f.createChar(-1, "size1")
+mathfont.drawRectangleGlyph(g, mathfont.em, v2 / 2, 0)
+g = f.createChar(-1, "size2")
+mathfont.drawRectangleGlyph(g, mathfont.em, v2, 0)
+g = f.createChar(-1, "bot")
+mathfont.drawRectangleGlyph(g, mathfont.em, v2 + v1, 0)
+g = f.createChar(-1, "ext")
+mathfont.drawRectangleGlyph(g, mathfont.em, mathfont.em, 0)
+f[verticalArrowCodePoint].verticalVariants = "uni21A8 size1 size2"
+# Part: (glyphName, isExtender, startConnector, endConnector, fullAdvance)
+f[verticalArrowCodePoint].verticalComponents = \
+ (("bot", False, 0, mathfont.em, v2 + v1),
+ ("ext", True, mathfont.em, mathfont.em, mathfont.em))
+mathfont.save(f)
diff --git a/testing/web-platform/tests/mathml/tools/fractions.py b/testing/web-platform/tests/mathml/tools/fractions.py
new file mode 100755
index 0000000000..bd39fc2fdb
--- /dev/null
+++ b/testing/web-platform/tests/mathml/tools/fractions.py
@@ -0,0 +1,163 @@
+#!/usr/bin/env python3
+
+from utils import mathfont
+import fontforge
+
+v1 = 7 * mathfont.em
+v2 = 1 * mathfont.em
+f = mathfont.create("fraction-axisheight%d-rulethickness%d" % (v1, v2),
+ "Copyright (c) 2016 MathML Association")
+f.math.AxisHeight = v1
+f.math.FractionDenominatorDisplayStyleGapMin = 0
+f.math.FractionDenominatorDisplayStyleShiftDown = 0
+f.math.FractionDenominatorGapMin = 0
+f.math.FractionDenominatorShiftDown = 0
+f.math.FractionNumeratorDisplayStyleGapMin = 0
+f.math.FractionNumeratorDisplayStyleShiftUp = 0
+f.math.FractionNumeratorGapMin = 0
+f.math.FractionNumeratorShiftUp = 0
+f.math.FractionRuleThickness = v2
+mathfont.save(f)
+
+v1 = 5 * mathfont.em
+v2 = 1 * mathfont.em
+f = mathfont.create("fraction-denominatordisplaystylegapmin%d-rulethickness%d" % (v1, v2),
+ "Copyright (c) 2016 MathML Association")
+f.math.AxisHeight = 0
+f.math.FractionDenominatorDisplayStyleGapMin = v1
+f.math.FractionDenominatorDisplayStyleShiftDown = 0
+f.math.FractionDenominatorGapMin = 0
+f.math.FractionDenominatorShiftDown = 0
+f.math.FractionNumeratorDisplayStyleGapMin = 0
+f.math.FractionNumeratorDisplayStyleShiftUp = 0
+f.math.FractionNumeratorGapMin = 0
+f.math.FractionNumeratorShiftUp = 0
+f.math.FractionRuleThickness = v2
+mathfont.save(f)
+
+v1 = 6 * mathfont.em
+v2 = 1 * mathfont.em
+f = mathfont.create("fraction-denominatordisplaystyleshiftdown%d-axisheight%d-rulethickness%d" % (v1, v2, v2),
+ "Copyright (c) 2016 MathML Association")
+f.math.AxisHeight = v2
+f.math.FractionDenominatorDisplayStyleGapMin = 0
+f.math.FractionDenominatorDisplayStyleShiftDown = v1
+f.math.FractionDenominatorGapMin = 0
+f.math.FractionDenominatorShiftDown = 0
+f.math.FractionNumeratorDisplayStyleGapMin = 0
+f.math.FractionNumeratorDisplayStyleShiftUp = 0
+f.math.FractionNumeratorGapMin = 0
+f.math.FractionNumeratorShiftUp = 0
+f.math.FractionRuleThickness = v2
+mathfont.save(f)
+
+v1 = 4 * mathfont.em
+v2 = 1 * mathfont.em
+f = mathfont.create("fraction-denominatorgapmin%d-rulethickness%d" % (v1, v2),
+ "Copyright (c) 2016 MathML Association")
+f.math.AxisHeight = 0
+f.math.FractionDenominatorDisplayStyleGapMin = 0
+f.math.FractionDenominatorDisplayStyleShiftDown = 0
+f.math.FractionDenominatorGapMin = v1
+f.math.FractionDenominatorShiftDown = 0
+f.math.FractionNumeratorDisplayStyleGapMin = 0
+f.math.FractionNumeratorDisplayStyleShiftUp = 0
+f.math.FractionNumeratorGapMin = 0
+f.math.FractionNumeratorShiftUp = 0
+f.math.FractionRuleThickness = v2
+mathfont.save(f)
+
+v1 = 3 * mathfont.em
+v2 = 1 * mathfont.em
+f = mathfont.create("fraction-denominatorshiftdown%d-axisheight%d-rulethickness%d" % (v1, v2, v2),
+ "Copyright (c) 2016 MathML Association")
+f.math.AxisHeight = v2
+f.math.FractionDenominatorDisplayStyleGapMin = 0
+f.math.FractionDenominatorDisplayStyleShiftDown = 0
+f.math.FractionDenominatorGapMin = 0
+f.math.FractionDenominatorShiftDown = v1
+f.math.FractionNumeratorDisplayStyleGapMin = 0
+f.math.FractionNumeratorDisplayStyleShiftUp = 0
+f.math.FractionNumeratorGapMin = 0
+f.math.FractionNumeratorShiftUp = 0
+f.math.FractionRuleThickness = v2
+mathfont.save(f)
+
+v1 = 8 * mathfont.em
+v2 = 1 * mathfont.em
+f = mathfont.create("fraction-numeratordisplaystylegapmin%d-rulethickness%d" % (v1, v2),
+ "Copyright (c) 2016 MathML Association")
+f.math.AxisHeight = 0
+f.math.FractionDenominatorDisplayStyleGapMin = 0
+f.math.FractionDenominatorDisplayStyleShiftDown = 0
+f.math.FractionDenominatorGapMin = 0
+f.math.FractionDenominatorShiftDown = 0
+f.math.FractionNumeratorDisplayStyleGapMin = v1
+f.math.FractionNumeratorDisplayStyleShiftUp = 0
+f.math.FractionNumeratorGapMin = 0
+f.math.FractionNumeratorShiftUp = 0
+f.math.FractionRuleThickness = v2
+mathfont.save(f)
+
+v1 = 2 * mathfont.em
+v2 = 1 * mathfont.em
+f = mathfont.create("fraction-numeratordisplaystyleshiftup%d-axisheight%d-rulethickness%d" % (v1, v2, v2),
+ "Copyright (c) 2016 MathML Association")
+f.math.AxisHeight = v2
+f.math.FractionDenominatorDisplayStyleGapMin = 0
+f.math.FractionDenominatorDisplayStyleShiftDown = 0
+f.math.FractionDenominatorGapMin = 0
+f.math.FractionDenominatorShiftDown = 0
+f.math.FractionNumeratorDisplayStyleGapMin = 0
+f.math.FractionNumeratorDisplayStyleShiftUp = v1
+f.math.FractionNumeratorGapMin = 0
+f.math.FractionNumeratorShiftUp = 0
+f.math.FractionRuleThickness = v2
+mathfont.save(f)
+
+v1 = 9 * mathfont.em
+v2 = 1 * mathfont.em
+f = mathfont.create("fraction-numeratorgapmin%d-rulethickness%d" % (v1, v2),
+ "Copyright (c) 2016 MathML Association")
+f.math.AxisHeight = 0
+f.math.FractionDenominatorDisplayStyleGapMin = 0
+f.math.FractionDenominatorDisplayStyleShiftDown = 0
+f.math.FractionDenominatorGapMin = 0
+f.math.FractionDenominatorShiftDown = 0
+f.math.FractionNumeratorDisplayStyleGapMin = 0
+f.math.FractionNumeratorDisplayStyleShiftUp = 0
+f.math.FractionNumeratorGapMin = v1
+f.math.FractionNumeratorShiftUp = 0
+f.math.FractionRuleThickness = v2
+mathfont.save(f)
+
+v1 = 11 * mathfont.em
+v2 = 1 * mathfont.em
+f = mathfont.create("fraction-numeratorshiftup%d-axisheight%d-rulethickness%d" % (v1, v2, v2),
+ "Copyright (c) 2016 MathML Association")
+f.math.AxisHeight = v2
+f.math.FractionDenominatorDisplayStyleGapMin = 0
+f.math.FractionDenominatorDisplayStyleShiftDown = 0
+f.math.FractionDenominatorGapMin = 0
+f.math.FractionDenominatorShiftDown = 0
+f.math.FractionNumeratorDisplayStyleGapMin = 0
+f.math.FractionNumeratorDisplayStyleShiftUp = 0
+f.math.FractionNumeratorGapMin = 0
+f.math.FractionNumeratorShiftUp = v1
+f.math.FractionRuleThickness = v2
+mathfont.save(f)
+
+v1 = 10 * mathfont.em
+f = mathfont.create("fraction-rulethickness%d" % v1,
+ "Copyright (c) 2016 MathML Association")
+f.math.AxisHeight = 0
+f.math.FractionDenominatorDisplayStyleGapMin = 0
+f.math.FractionDenominatorDisplayStyleShiftDown = 0
+f.math.FractionDenominatorGapMin = 0
+f.math.FractionDenominatorShiftDown = 0
+f.math.FractionNumeratorDisplayStyleGapMin = 0
+f.math.FractionNumeratorDisplayStyleShiftUp = 0
+f.math.FractionNumeratorGapMin = 0
+f.math.FractionNumeratorShiftUp = 0
+f.math.FractionRuleThickness = v1
+mathfont.save(f)
diff --git a/testing/web-platform/tests/mathml/tools/largeop.py b/testing/web-platform/tests/mathml/tools/largeop.py
new file mode 100755
index 0000000000..9832ff0039
--- /dev/null
+++ b/testing/web-platform/tests/mathml/tools/largeop.py
@@ -0,0 +1,64 @@
+#!/usr/bin/env python3
+
+from utils import mathfont
+import fontforge
+
+nAryWhiteVerticalBarCodePoint = 0x2AFF
+v1 = 5 * mathfont.em
+f = mathfont.create("largeop-displayoperatorminheight%d" % v1,
+ "Copyright (c) 2016 MathML Association")
+f.math.DisplayOperatorMinHeight = v1
+mathfont.createSquareGlyph(f, nAryWhiteVerticalBarCodePoint)
+g = f.createChar(-1, "uni2AFF.display")
+mathfont.drawRectangleGlyph(g, mathfont.em, v1, 0)
+f[nAryWhiteVerticalBarCodePoint].verticalVariants = "uni2AFF uni2AFF.display"
+mathfont.save(f)
+
+v1 = 2 * mathfont.em
+v2 = 3 * mathfont.em
+f = mathfont.create("largeop-displayoperatorminheight%d-2AFF-italiccorrection%d" % (v1, v2),
+ "Copyright (c) 2018 Igalia S.L.")
+f.math.DisplayOperatorMinHeight = v1
+mathfont.createSquareGlyph(f, nAryWhiteVerticalBarCodePoint)
+g = f.createChar(-1, "uni2AFF.display")
+p = g.glyphPen()
+p.moveTo(0, 0)
+p.lineTo(v2, v1)
+p.lineTo(v2 + mathfont.em, v1)
+p.lineTo(mathfont.em, 0)
+p.closePath()
+g.width = mathfont.em + v2
+g.italicCorrection = v2
+f[nAryWhiteVerticalBarCodePoint].verticalVariants = "uni2AFF uni2AFF.display"
+mathfont.save(f)
+
+v1 = 7 * mathfont.em
+v2 = 5 * mathfont.em
+f = mathfont.create("largeop-displayoperatorminheight%d-2AFF-italiccorrection%d" % (v1, v2),
+ "Copyright (c) 2020 Igalia S.L.")
+f.math.DisplayOperatorMinHeight = v1
+f.math.MinConnectorOverlap = 0
+mathfont.createSquareGlyph(f, nAryWhiteVerticalBarCodePoint)
+g = f.createChar(-1, "uni2AFF.bot")
+mathfont.drawRectangleGlyph(g,
+ width=2 * mathfont.em,
+ ascent=mathfont.em)
+g = f.createChar(-1, "uni2AFF.ext")
+mathfont.drawRectangleGlyph(g,
+ width=mathfont.em,
+ ascent=2 * mathfont.em,
+ padding_left=mathfont.em)
+g = f.createChar(-1, "uni2AFF.top")
+mathfont.drawRectangleGlyph(g,
+ width=v2 + mathfont.em,
+ ascent=mathfont.em,
+ padding_left=mathfont.em)
+f[nAryWhiteVerticalBarCodePoint].verticalVariants = "uni2AFF"
+# Part: (glyphName, isExtender, startConnector, endConnector, fullAdvance)
+f[nAryWhiteVerticalBarCodePoint].verticalComponents = \
+ (("uni2AFF.bot", False, 0, mathfont.em // 2, mathfont.em),
+ ("uni2AFF.ext", True, mathfont.em // 2, mathfont.em // 2, 2 * mathfont.em),
+ ("uni2AFF.top", False, mathfont.em // 2, 0, mathfont.em)
+ )
+f[nAryWhiteVerticalBarCodePoint].verticalComponentItalicCorrection = v2
+mathfont.save(f)
diff --git a/testing/web-platform/tests/mathml/tools/limits.py b/testing/web-platform/tests/mathml/tools/limits.py
new file mode 100755
index 0000000000..db4437c1b0
--- /dev/null
+++ b/testing/web-platform/tests/mathml/tools/limits.py
@@ -0,0 +1,78 @@
+#!/usr/bin/env python3
+
+from utils import mathfont
+import fontforge
+
+nArySumCodePoint = 0x2211 # largeop operator
+
+v = 3 * mathfont.em
+f = mathfont.create("limits-lowerlimitbaselinedropmin%d" % v,
+ "Copyright (c) 2016 MathML Association")
+mathfont.createSquareGlyph(f, nArySumCodePoint)
+f.math.LowerLimitBaselineDropMin = v
+f.math.LowerLimitGapMin = 0
+f.math.OverbarExtraAscender = 0
+f.math.OverbarVerticalGap = 0
+f.math.StretchStackBottomShiftDown = 0
+f.math.StretchStackGapAboveMin = 0
+f.math.StretchStackGapBelowMin = 0
+f.math.StretchStackTopShiftUp = 0
+f.math.UnderbarExtraDescender = 0
+f.math.UnderbarVerticalGap = 0
+f.math.UpperLimitBaselineRiseMin = 0
+f.math.UpperLimitGapMin = 0
+mathfont.save(f)
+
+v = 11 * mathfont.em
+f = mathfont.create("limits-lowerlimitgapmin%d" % v,
+ "Copyright (c) 2016 MathML Association")
+mathfont.createSquareGlyph(f, nArySumCodePoint)
+f.math.LowerLimitBaselineDropMin = 0
+f.math.LowerLimitGapMin = v
+f.math.OverbarExtraAscender = 0
+f.math.OverbarVerticalGap = 0
+f.math.StretchStackBottomShiftDown = 0
+f.math.StretchStackGapAboveMin = 0
+f.math.StretchStackGapBelowMin = 0
+f.math.StretchStackTopShiftUp = 0
+f.math.UnderbarExtraDescender = 0
+f.math.UnderbarVerticalGap = 0
+f.math.UpperLimitBaselineRiseMin = 0
+f.math.UpperLimitGapMin = 0
+mathfont.save(f)
+
+v = 5 * mathfont.em
+f = mathfont.create("limits-upperlimitbaselinerisemin%d" % v,
+ "Copyright (c) 2016 MathML Association")
+mathfont.createSquareGlyph(f, nArySumCodePoint)
+f.math.LowerLimitBaselineDropMin = 0
+f.math.LowerLimitGapMin = 0
+f.math.OverbarExtraAscender = 0
+f.math.OverbarVerticalGap = 0
+f.math.StretchStackBottomShiftDown = 0
+f.math.StretchStackGapAboveMin = 0
+f.math.StretchStackGapBelowMin = 0
+f.math.StretchStackTopShiftUp = 0
+f.math.UnderbarExtraDescender = 0
+f.math.UnderbarVerticalGap = 0
+f.math.UpperLimitBaselineRiseMin = v
+f.math.UpperLimitGapMin = 0
+mathfont.save(f)
+
+v = 7 * mathfont.em
+f = mathfont.create("limits-upperlimitgapmin%d" % v,
+ "Copyright (c) 2016 MathML Association")
+mathfont.createSquareGlyph(f, nArySumCodePoint)
+f.math.LowerLimitBaselineDropMin = 0
+f.math.LowerLimitGapMin = 0
+f.math.OverbarExtraAscender = 0
+f.math.OverbarVerticalGap = 0
+f.math.StretchStackBottomShiftDown = 0
+f.math.StretchStackGapAboveMin = 0
+f.math.StretchStackGapBelowMin = 0
+f.math.StretchStackTopShiftUp = 0
+f.math.UnderbarExtraDescender = 0
+f.math.UnderbarVerticalGap = 0
+f.math.UpperLimitBaselineRiseMin = 0
+f.math.UpperLimitGapMin = v
+mathfont.save(f)
diff --git a/testing/web-platform/tests/mathml/tools/math-text.py b/testing/web-platform/tests/mathml/tools/math-text.py
new file mode 100755
index 0000000000..2c3e3257dc
--- /dev/null
+++ b/testing/web-platform/tests/mathml/tools/math-text.py
@@ -0,0 +1,64 @@
+#!/usr/bin/env python3
+
+import fontforge
+
+font = fontforge.font()
+font.em = 1000
+lineHeight = 5000
+name = "math-text"
+font.fontname = name
+font.familyname = name
+font.fullname = name
+font.copyright = "Copyright (c) 2019 Igalia"
+
+glyph = font.createChar(ord(" "), "space")
+glyph.width = 1000
+glyph = font.createChar(ord("A"))
+pen = glyph.glyphPen()
+pen.moveTo(0, -500)
+pen.lineTo(0, 500)
+pen.lineTo(1000, 500)
+pen.lineTo(1000, -500)
+pen.closePath()
+
+glyph = font.createChar(ord("B"))
+pen = glyph.glyphPen()
+pen.moveTo(0, 0)
+pen.lineTo(0, 1000)
+pen.lineTo(1000, 1000)
+pen.lineTo(1000, 0)
+pen.closePath()
+
+glyph = font.createChar(ord("C"))
+pen = glyph.glyphPen()
+pen.moveTo(0, -1000)
+pen.lineTo(0, 0)
+pen.lineTo(1000, 0)
+pen.lineTo(1000, -1000)
+pen.closePath()
+
+font.os2_typoascent_add = False
+font.os2_typoascent = lineHeight // 2
+font.os2_typodescent_add = False
+font.os2_typodescent = -lineHeight // 2
+font.os2_typolinegap = 0
+font.hhea_ascent = lineHeight // 2
+font.hhea_ascent_add = False
+font.hhea_descent = -lineHeight // 2
+font.hhea_descent_add = False
+font.hhea_linegap = 0
+font.os2_winascent = lineHeight // 2
+font.os2_winascent_add = False
+font.os2_windescent = lineHeight // 2
+font.os2_windescent_add = False
+
+font.os2_use_typo_metrics = True
+
+path = "../../fonts/math/math-text.woff"
+print("Generating %s..." % path, end="")
+font.generate(path)
+if font.validate() == 0:
+ print(" done.")
+else:
+ print(" validation error!")
+ exit(1)
diff --git a/testing/web-platform/tests/mathml/tools/mathvariant-transforms.py b/testing/web-platform/tests/mathml/tools/mathvariant-transforms.py
new file mode 100755
index 0000000000..e4857d2a3e
--- /dev/null
+++ b/testing/web-platform/tests/mathml/tools/mathvariant-transforms.py
@@ -0,0 +1,202 @@
+#!/usr/bin/env python3
+
+from lxml import etree
+from utils.misc import downloadWithProgressBar, UnicodeXMLURL
+from utils import mathfont
+
+# Retrieve the unicode.xml file if necessary.
+unicodeXML = downloadWithProgressBar(UnicodeXMLURL)
+
+# Extract the mathvariants transformation.
+xsltTransform = etree.XSLT(etree.XML('''\
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ '''))
+
+# Put the mathvariant transforms into a Python structure.
+mathvariantTransforms = {}
+root = xsltTransform(etree.parse(unicodeXML)).getroot()
+
+
+def parseCodePoint(aHexaString):
+ return int("0x%s" % aHexaString[1:], 16)
+
+
+for entry in root:
+ mathvariant = entry.get("mathvariant")
+ baseChar = parseCodePoint(entry.get("baseChar"))
+ transformedChar = parseCodePoint(entry.get("transformedChar"))
+ if mathvariant not in mathvariantTransforms:
+ mathvariantTransforms[mathvariant] = {}
+ mathvariantTransforms[mathvariant][baseChar] = transformedChar
+
+# There is no "isolated" mathvariant.
+del mathvariantTransforms["isolated"]
+
+# Automatic mathvariant uses the same transform as italic.
+# It is handled specially (see below).
+mathvariantTransforms["auto"] = mathvariantTransforms["italic"]
+
+# Create a WOFF font for each mathvariant.
+for mathvariant in mathvariantTransforms:
+ if mathvariant == "auto":
+ continue
+ font = mathfont.create("mathvariant-%s" % mathvariant,
+ "Copyright (c) 2016 MathML Association")
+ for baseChar in mathvariantTransforms[mathvariant]:
+ if baseChar not in font:
+ mathfont.createGlyphFromValue(font, baseChar)
+ transformedChar = mathvariantTransforms[mathvariant][baseChar]
+ mathfont.createGlyphFromValue(font, transformedChar)
+ mathfont.save(font)
+
+# Common function to generate test for MathML mathvariant / CSS text-transform.
+
+
+def generateTestFor(mathvariant, mathml):
+ assert mathml or mathvariant == "auto", "These tests have been removed!"
+ print("Generating tests for %s..." % mathvariant, end="")
+ if mathml:
+ reftest = open(
+ "../relations/css-styling/mathvariant-%s.html" % mathvariant, "w")
+ reftestReference = open(
+ "../relations/css-styling/mathvariant-%s-ref.html" % mathvariant, "w")
+ else:
+ reftest = open(
+ "../../css/css-text/text-transform/math/text-transform-math-%s-001.html" % mathvariant, "w")
+ reftestReference = open(
+ "../../css/css-text/text-transform/math/text-transform-math-%s-001-ref.html" % mathvariant, "w")
+ source = '\
+\n\
+\n\
+\n\
+ \n\
+%s \n'
+ if mathml:
+ reftest.write(source % ("mathvariant %s" % mathvariant))
+ reftestReference.write(
+ source % ("mathvariant %s (reference)" % mathvariant))
+ else:
+ reftest.write(source % ("text-transform math-%s" % mathvariant))
+ reftestReference.write(
+ source % ("text-transform math-%s (reference)" % mathvariant))
+ if mathvariant == "auto":
+ mathAssert = "Verify that a single-char is equivalent to an with the transformed italic unicode character."
+ mapping = "italic"
+ else:
+ mathAssert = "Verify that a single-char with a %s mathvariant is equivalent to an with the transformed unicode character." % mathvariant
+ mapping = mathvariant
+ if mathml:
+ source = '\
+ \n\
+ \n\
+ \n\
+ \n\
+ \n\
+ \n'
+ reftest.write(source % (mapping, mathvariant, mathAssert))
+ else:
+ source = '\
+ \n\
+ \n\
+ \n\
+ \n\
+ \n'
+ reftest.write(source % (mapping, mathvariant, mathvariant))
+ WOFFfont = "mathvariant-%s.woff" % mapping
+ source = '\
+\n\
+\n\
+ \n\
+ Test passes if all the equalities below are true.
\n' % WOFFfont
+ if mathml:
+ reftest.write(source)
+ reftestReference.write(source)
+ else:
+ reftest.write(source)
+ reftestReference.write(source)
+ charIndex = 0
+ for baseChar in mathvariantTransforms[mathvariant]:
+ transformedChar = mathvariantTransforms[mathvariant][baseChar]
+ if mathvariant == "auto":
+ tokenTag = '%0X; ' % baseChar
+ tokenTagRef = '%0X; ' % transformedChar
+ else:
+ tokenTag = '%0X; ' % (
+ mathvariant, baseChar)
+ tokenTagRef = '%0X; ' % transformedChar
+ if mathml:
+ reftest.write(' %s =%05X ' %
+ (tokenTag, transformedChar))
+ reftestReference.write(
+ ' %s =%05X ' % (tokenTagRef, transformedChar))
+ else:
+ reftest.write(' %0X; =%05X ' %
+ (mathvariant, baseChar, transformedChar))
+ reftestReference.write(
+ ' %0X; =%05X ' % (transformedChar, transformedChar))
+ charIndex += 1
+ if charIndex % 10 == 0:
+ reftest.write(' ')
+ reftestReference.write(' ')
+ reftest.write('\n')
+ reftestReference.write('\n')
+ source = '\n\n'
+ reftest.write(source)
+ reftestReference.write(source)
+ reftest.close()
+ reftestReference.close()
+ print(" done.")
+
+
+# Generate css/css-text/text-transform/math/text-transform-math-auto-001.html
+generateTestFor(mathvariant="auto", mathml=False)
+generateTestFor(mathvariant="auto", mathml=True)
+
+# Other mathvariant tests can be generated by the following command. They are
+# still use internally by browsers implementing full mathvariant support.
+# See https://github.com/w3c/mathml-core/issues/182
+# for mathvariant in mathvariantTransforms:
+# generateTestFor(mathvariant, mathml=True)
diff --git a/testing/web-platform/tests/mathml/tools/operator-dictionary.py b/testing/web-platform/tests/mathml/tools/operator-dictionary.py
new file mode 100755
index 0000000000..8de654df15
--- /dev/null
+++ b/testing/web-platform/tests/mathml/tools/operator-dictionary.py
@@ -0,0 +1,130 @@
+#!/usr/bin/env python3
+
+from lxml import etree
+from utils.misc import downloadWithProgressBar, UnicodeXMLURL, InlineAxisOperatorsURL
+import json
+import re
+from utils import mathfont
+
+NonBreakingSpace = 0x00A0
+
+
+def parseHexaNumber(string):
+ return int("0x%s" % string, 16)
+
+
+def parseHexaSequence(string):
+ return tuple(map(parseHexaNumber, string[1:].split("-")))
+
+
+def parseSpaces(value, entry, names):
+ for name in names:
+ attributeValue = entry.get(name)
+ if attributeValue is not None:
+ value[name] = int(attributeValue)
+
+
+def parseProperties(value, entry, names):
+ attributeValue = entry.get("properties")
+ if attributeValue is not None:
+ for name in names:
+ if attributeValue.find(name) >= 0:
+ value[name] = True
+
+
+def buildKeyAndValueFrom(characters, form):
+ # Concatenate characters and form to build the key.
+ key = ""
+ for c in characters:
+ key += chr(c)
+ key += " " + form
+ # But save characters as an individual property for easier manipulation in
+ # this Python script.
+ value = {
+ "characters": characters,
+ }
+ return key, value
+
+
+# Retrieve the spec files.
+inlineAxisOperatorsTXT = downloadWithProgressBar(InlineAxisOperatorsURL)
+unicodeXML = downloadWithProgressBar(UnicodeXMLURL)
+
+# Extract the operator dictionary.
+xsltTransform = etree.XSLT(etree.parse("./operator-dictionary.xsl"))
+
+# Put the operator dictionary into a Python structure.
+inlineAxisOperators = {}
+with open(inlineAxisOperatorsTXT, mode="r") as f:
+ for line in f:
+ hexaString = re.match(r"^U\+([0-9A-F]+)", line).group(1)
+ inlineAxisOperators[parseHexaNumber(hexaString)] = True
+
+operatorDictionary = {}
+root = xsltTransform(etree.parse(unicodeXML)).getroot()
+for entry in root:
+ characters = parseHexaSequence(entry.get("unicode"))
+ assert characters != (NonBreakingSpace)
+ key, value = buildKeyAndValueFrom(characters, entry.get("form"))
+ # There is no dictionary-specified minsize/maxsize values, so no need to
+ # parse them.
+ # The fence, separator and priority properties don't have any effect on math
+ # layout, so they are not added to the JSON file.
+ parseSpaces(value, entry, ["lspace", "rspace"])
+ parseProperties(value, entry, ["stretchy", "symmetric", "largeop",
+ "movablelimits", "accent"])
+ if (len(characters) == 1 and characters[0] in inlineAxisOperators):
+ value["horizontal"] = True
+ operatorDictionary[key] = value
+
+# Create entries for the non-breaking space in all forms in order to test the
+# default for operators outside the official dictionary.
+for form in ["infix", "prefix", "suffix"]:
+ key, value = buildKeyAndValueFrom(tuple([NonBreakingSpace]), form)
+ operatorDictionary[key] = value
+
+# Create a WOFF font with glyphs for all the operator strings.
+font = mathfont.create("operators", "Copyright (c) 2019 Igalia S.L.")
+
+# Set parameters for largeop and stretchy tests.
+font.math.DisplayOperatorMinHeight = 2 * mathfont.em
+font.math.MinConnectorOverlap = mathfont.em // 2
+
+# Set parameters for accent tests so that we only have large gap when
+# overscript is an accent.
+font.math.UpperLimitBaselineRiseMin = 0
+font.math.StretchStackTopShiftUp = 0
+font.math.AccentBaseHeight = 2 * mathfont.em
+font.math.OverbarVerticalGap = 0
+
+mathfont.createSizeVariants(font, True)
+
+# Ensure a glyph exists for the combining characters that are handled specially
+# in the specification:
+# U+0338 COMBINING LONG SOLIDUS OVERLAY
+# U+20D2 COMBINING LONG VERTICAL LINE OVERLAY
+for combining_character in [0x338, 0x20D2]:
+ mathfont.createSquareGlyph(font, combining_character)
+
+for key in operatorDictionary:
+ value = operatorDictionary[key]
+ for c in value["characters"]:
+ if c in font:
+ continue
+ if c == NonBreakingSpace:
+ g = font.createChar(c)
+ mathfont.drawRectangleGlyph(g, mathfont.em, mathfont.em // 3, 0)
+ else:
+ mathfont.createSquareGlyph(font, c)
+ mathfont.createStretchy(font, c, c in inlineAxisOperators)
+mathfont.save(font)
+
+# Generate the python file.
+for key in operatorDictionary:
+ del operatorDictionary[key]["characters"] # Remove this temporary value.
+JSON = {
+ "comment": "This file was automatically generated by operator-dictionary.py. Do not edit.",
+ "dictionary": operatorDictionary
+}
+with open('../support/operator-dictionary.json', 'w') as fp:
+ json.dump(JSON, fp, sort_keys=True, ensure_ascii=True)
diff --git a/testing/web-platform/tests/mathml/tools/operator-dictionary.xsl b/testing/web-platform/tests/mathml/tools/operator-dictionary.xsl
new file mode 100644
index 0000000000..8c75317672
--- /dev/null
+++ b/testing/web-platform/tests/mathml/tools/operator-dictionary.xsl
@@ -0,0 +1,73 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ mirrorable
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/testing/web-platform/tests/mathml/tools/percentscaledown.py b/testing/web-platform/tests/mathml/tools/percentscaledown.py
new file mode 100755
index 0000000000..ef40d1fd87
--- /dev/null
+++ b/testing/web-platform/tests/mathml/tools/percentscaledown.py
@@ -0,0 +1,24 @@
+#!/usr/bin/env python3
+
+from utils import mathfont
+import fontforge
+
+v1 = 80
+v2 = 40
+f = mathfont.create("scriptpercentscaledown%d-scriptscriptpercentscaledown%d" % (v1, v2),
+ "Copyright (c) 2019 Igalia S.L.")
+f.math.ScriptPercentScaleDown = v1
+f.math.ScriptScriptPercentScaleDown = v2
+mathfont.save(f)
+
+f = mathfont.create("scriptpercentscaledown0-scriptscriptpercentscaledown%d" % v2,
+ "Copyright (c) 2019 Igalia S.L.")
+f.math.ScriptPercentScaleDown = 0
+f.math.ScriptScriptPercentScaleDown = v2
+mathfont.save(f)
+
+f = mathfont.create("scriptpercentscaledown%d-scriptscriptpercentscaledown0" % v1,
+ "Copyright (c) 2019 Igalia S.L.")
+f.math.ScriptPercentScaleDown = v1
+f.math.ScriptScriptPercentScaleDown = 0
+mathfont.save(f)
diff --git a/testing/web-platform/tests/mathml/tools/radicals.py b/testing/web-platform/tests/mathml/tools/radicals.py
new file mode 100755
index 0000000000..c4d9ece813
--- /dev/null
+++ b/testing/web-platform/tests/mathml/tools/radicals.py
@@ -0,0 +1,133 @@
+#!/usr/bin/env python3
+
+from utils import mathfont
+import fontforge
+
+
+def createStretchyRadical(aFont):
+ radicalCodePoint = 0x221a
+ mathfont.createSquareGlyph(aFont, radicalCodePoint)
+ g = aFont.createChar(-1, "size1")
+ mathfont.drawRectangleGlyph(g, mathfont.em, 2 * mathfont.em, 0)
+ g = aFont.createChar(-1, "size2")
+ mathfont.drawRectangleGlyph(g, mathfont.em, 3 * mathfont.em, 0)
+ g = aFont.createChar(-1, "size3")
+ mathfont.drawRectangleGlyph(g, mathfont.em, 4 * mathfont.em, 0)
+ aFont[radicalCodePoint].verticalVariants = "radical size1 size2 size3"
+ # Part: (glyphName, isExtender, startConnector, endConnector, fullAdvance)
+ aFont.math.MinConnectorOverlap = 0
+ aFont[radicalCodePoint].verticalComponents = \
+ (("size2", False, 0, mathfont.em, 3 * mathfont.em),
+ ("size1", True, mathfont.em, mathfont.em, 2 * mathfont.em))
+
+
+v1 = 25
+v2 = 1 * mathfont.em
+f = mathfont.create("radical-degreebottomraisepercent%d-rulethickness%d" % (v1, v2),
+ "Copyright (c) 2016 MathML Association")
+createStretchyRadical(f)
+f.math.RadicalDegreeBottomRaisePercent = v1
+f.math.RadicalDisplayStyleVerticalGap = 0
+f.math.RadicalExtraAscender = 0
+f.math.RadicalKernAfterDegree = 0
+f.math.RadicalKernBeforeDegree = 0
+f.math.RadicalRuleThickness = v2
+f.math.RadicalVerticalGap = 0
+mathfont.save(f)
+
+v1 = 7 * mathfont.em
+v2 = 1 * mathfont.em
+f = mathfont.create("radical-displaystyleverticalgap%d-rulethickness%d" % (v1, v2),
+ "Copyright (c) 2016 MathML Association")
+createStretchyRadical(f)
+f.math.RadicalDegreeBottomRaisePercent = 0
+f.math.RadicalDisplayStyleVerticalGap = v1
+f.math.RadicalExtraAscender = 0
+f.math.RadicalKernAfterDegree = 0
+f.math.RadicalKernBeforeDegree = 0
+f.math.RadicalRuleThickness = v2
+f.math.RadicalVerticalGap = 0
+mathfont.save(f)
+
+v1 = 3 * mathfont.em
+v2 = 1 * mathfont.em
+f = mathfont.create("radical-extraascender%d-rulethickness%d" % (v1, v2),
+ "Copyright (c) 2016 MathML Association")
+createStretchyRadical(f)
+f.math.RadicalDegreeBottomRaisePercent = 0
+f.math.RadicalDisplayStyleVerticalGap = 0
+f.math.RadicalExtraAscender = v1
+f.math.RadicalKernAfterDegree = 0
+f.math.RadicalKernBeforeDegree = 0
+f.math.RadicalRuleThickness = v2
+f.math.RadicalVerticalGap = 0
+mathfont.save(f)
+
+v1 = 5 * mathfont.em
+v2 = 1 * mathfont.em
+f = mathfont.create("radical-kernafterdegreeminus%d-rulethickness%d" % (v1, v2),
+ "Copyright (c) 2016 MathML Association")
+createStretchyRadical(f)
+f.math.RadicalDegreeBottomRaisePercent = 0
+f.math.RadicalDisplayStyleVerticalGap = 0
+f.math.RadicalExtraAscender = 0
+f.math.RadicalKernAfterDegree = -v1
+f.math.RadicalKernBeforeDegree = 0
+f.math.RadicalRuleThickness = v2
+f.math.RadicalVerticalGap = 0
+mathfont.save(f)
+
+v1 = 4 * mathfont.em
+v2 = 1 * mathfont.em
+f = mathfont.create("radical-kernbeforedegree%d-rulethickness%d" % (v1, v2),
+ "Copyright (c) 2016 MathML Association")
+createStretchyRadical(f)
+f.math.RadicalDegreeBottomRaisePercent = 0
+f.math.RadicalDisplayStyleVerticalGap = 0
+f.math.RadicalExtraAscender = 0
+f.math.RadicalKernAfterDegree = 0
+f.math.RadicalKernBeforeDegree = v1
+f.math.RadicalRuleThickness = v2
+f.math.RadicalVerticalGap = 0
+mathfont.save(f)
+
+v = 8 * mathfont.em
+f = mathfont.create("radical-rulethickness%d" % v,
+ "Copyright (c) 2016 MathML Association")
+createStretchyRadical(f)
+f.math.RadicalDegreeBottomRaisePercent = 0
+f.math.RadicalDisplayStyleVerticalGap = 0
+f.math.RadicalExtraAscender = 0
+f.math.RadicalKernAfterDegree = 0
+f.math.RadicalKernBeforeDegree = 0
+f.math.RadicalRuleThickness = v
+f.math.RadicalVerticalGap = 0
+mathfont.save(f)
+
+v1 = 6 * mathfont.em
+v2 = 1 * mathfont.em
+f = mathfont.create("radical-verticalgap%d-rulethickness%d" % (v1, v2),
+ "Copyright (c) 2016 MathML Association")
+createStretchyRadical(f)
+f.math.RadicalDegreeBottomRaisePercent = 0
+f.math.RadicalDisplayStyleVerticalGap = 0
+f.math.RadicalExtraAscender = 0
+f.math.RadicalKernAfterDegree = 0
+f.math.RadicalKernBeforeDegree = 0
+f.math.RadicalRuleThickness = v2
+f.math.RadicalVerticalGap = v1
+mathfont.save(f)
+
+v1 = 1 * mathfont.em
+v2 = 1 * mathfont.em
+f = mathfont.create("radical-negativekernbeforedegree%d-rulethickness%d" %
+ (v1, v2), "Copyright (c) 2020 Igalia S.L.")
+createStretchyRadical(f)
+f.math.RadicalDegreeBottomRaisePercent = 0
+f.math.RadicalDisplayStyleVerticalGap = 0
+f.math.RadicalExtraAscender = 0
+f.math.RadicalKernAfterDegree = 0
+f.math.RadicalKernBeforeDegree = -v1
+f.math.RadicalRuleThickness = v2
+f.math.RadicalVerticalGap = 0
+mathfont.save(f)
diff --git a/testing/web-platform/tests/mathml/tools/scripts.py b/testing/web-platform/tests/mathml/tools/scripts.py
new file mode 100755
index 0000000000..e1da482a00
--- /dev/null
+++ b/testing/web-platform/tests/mathml/tools/scripts.py
@@ -0,0 +1,155 @@
+#!/usr/bin/env python3
+
+from utils import mathfont
+import fontforge
+
+v = 3 * mathfont.em
+f = mathfont.create("scripts-spaceafterscript%d" % v,
+ "Copyright (c) 2016 MathML Association")
+f.math.SpaceAfterScript = v
+f.math.SubSuperscriptGapMin = 0
+f.math.SubscriptBaselineDropMin = 0
+f.math.SubscriptShiftDown = 0
+f.math.SubscriptTopMax = 0
+f.math.SuperscriptBaselineDropMax = 0
+f.math.SuperscriptBottomMaxWithSubscript = 0
+f.math.SuperscriptBottomMin = 0
+f.math.SuperscriptShiftUp = 0
+f.math.SuperscriptShiftUpCramped = 0
+mathfont.save(f)
+
+v = 7 * mathfont.em
+f = mathfont.create("scripts-superscriptshiftup%d" % v,
+ "Copyright (c) 2016 MathML Association")
+f.math.SpaceAfterScript = 0
+f.math.SubSuperscriptGapMin = 0
+f.math.SubscriptBaselineDropMin = 0
+f.math.SubscriptShiftDown = 0
+f.math.SubscriptTopMax = 0
+f.math.SuperscriptBaselineDropMax = 0
+f.math.SuperscriptBottomMaxWithSubscript = 0
+f.math.SuperscriptBottomMin = 0
+f.math.SuperscriptShiftUp = v
+f.math.SuperscriptShiftUpCramped = 0
+mathfont.save(f)
+
+v = 5 * mathfont.em
+f = mathfont.create("scripts-superscriptshiftupcramped%d" % v,
+ "Copyright (c) 2016 MathML Association")
+f.math.SpaceAfterScript = 0
+f.math.SubSuperscriptGapMin = 0
+f.math.SubscriptBaselineDropMin = 0
+f.math.SubscriptShiftDown = 0
+f.math.SubscriptTopMax = 0
+f.math.SuperscriptBaselineDropMax = 0
+f.math.SuperscriptBottomMaxWithSubscript = 0
+f.math.SuperscriptBottomMin = 0
+f.math.SuperscriptShiftUp = 0
+f.math.SuperscriptShiftUpCramped = v
+mathfont.save(f)
+
+v = 6 * mathfont.em
+f = mathfont.create("scripts-subscriptshiftdown%d" % v,
+ "Copyright (c) 2016 MathML Association")
+f.math.SpaceAfterScript = 0
+f.math.SubSuperscriptGapMin = 0
+f.math.SubscriptBaselineDropMin = 0
+f.math.SubscriptShiftDown = v
+f.math.SubscriptTopMax = 0
+f.math.SuperscriptBaselineDropMax = 0
+f.math.SuperscriptBottomMaxWithSubscript = 0
+f.math.SuperscriptBottomMin = 0
+f.math.SuperscriptShiftUp = 0
+f.math.SuperscriptShiftUpCramped = 0
+mathfont.save(f)
+
+v = 11 * mathfont.em
+f = mathfont.create("scripts-subsuperscriptgapmin%d" % v,
+ "Copyright (c) 2016 MathML Association")
+f.math.SpaceAfterScript = 0
+f.math.SubSuperscriptGapMin = v
+f.math.SubscriptBaselineDropMin = 0
+f.math.SubscriptShiftDown = 0
+f.math.SubscriptTopMax = 0
+f.math.SuperscriptBaselineDropMax = 0
+f.math.SuperscriptBottomMaxWithSubscript = 0
+f.math.SuperscriptBottomMin = 0
+f.math.SuperscriptShiftUp = 0
+f.math.SuperscriptShiftUpCramped = 0
+mathfont.save(f)
+
+v1 = 11 * mathfont.em
+v2 = 3 * mathfont.em
+f = mathfont.create("scripts-subsuperscriptgapmin%d-superscriptbottommaxwithsubscript%d" % (v1, v2),
+ "Copyright (c) 2016 MathML Association")
+f.math.SpaceAfterScript = 0
+f.math.SubSuperscriptGapMin = v1
+f.math.SubscriptBaselineDropMin = 0
+f.math.SubscriptShiftDown = 0
+f.math.SubscriptTopMax = 0
+f.math.SuperscriptBaselineDropMax = 0
+f.math.SuperscriptBottomMaxWithSubscript = v2
+f.math.SuperscriptBottomMin = 0
+f.math.SuperscriptShiftUp = 0
+f.math.SuperscriptShiftUpCramped = 0
+mathfont.save(f)
+
+v = 4 * mathfont.em
+f = mathfont.create("scripts-subscripttopmax%d" % v,
+ "Copyright (c) 2016 MathML Association")
+f.math.SpaceAfterScript = 0
+f.math.SubSuperscriptGapMin = 0
+f.math.SubscriptBaselineDropMin = 0
+f.math.SubscriptShiftDown = 0
+f.math.SubscriptTopMax = v
+f.math.SuperscriptBaselineDropMax = 0
+f.math.SuperscriptBottomMaxWithSubscript = 0
+f.math.SuperscriptBottomMin = 0
+f.math.SuperscriptShiftUp = 0
+f.math.SuperscriptShiftUpCramped = 0
+mathfont.save(f)
+
+v = 8 * mathfont.em
+f = mathfont.create("scripts-superscriptbottommin%d" % v,
+ "Copyright (c) 2016 MathML Association")
+f.math.SpaceAfterScript = 0
+f.math.SubSuperscriptGapMin = 0
+f.math.SubscriptBaselineDropMin = 0
+f.math.SubscriptShiftDown = 0
+f.math.SubscriptTopMax = 0
+f.math.SuperscriptBaselineDropMax = 0
+f.math.SuperscriptBottomMaxWithSubscript = 0
+f.math.SuperscriptBottomMin = v
+f.math.SuperscriptShiftUp = 0
+f.math.SuperscriptShiftUpCramped = 0
+mathfont.save(f)
+
+v = 9 * mathfont.em
+f = mathfont.create("scripts-subscriptbaselinedropmin%d" % v,
+ "Copyright (c) 2016 MathML Association")
+f.math.SpaceAfterScript = 0
+f.math.SubSuperscriptGapMin = 0
+f.math.SubscriptBaselineDropMin = v
+f.math.SubscriptShiftDown = 0
+f.math.SubscriptTopMax = 0
+f.math.SuperscriptBaselineDropMax = 0
+f.math.SuperscriptBottomMaxWithSubscript = 0
+f.math.SuperscriptBottomMin = 0
+f.math.SuperscriptShiftUp = 0
+f.math.SuperscriptShiftUpCramped = 0
+mathfont.save(f)
+
+v = 10 * mathfont.em
+f = mathfont.create("scripts-superscriptbaselinedropmax%d" % v,
+ "Copyright (c) 2016 MathML Association")
+f.math.SpaceAfterScript = 0
+f.math.SubSuperscriptGapMin = 0
+f.math.SubscriptBaselineDropMin = 0
+f.math.SubscriptShiftDown = 0
+f.math.SubscriptTopMax = 0
+f.math.SuperscriptBaselineDropMax = v
+f.math.SuperscriptBottomMaxWithSubscript = 0
+f.math.SuperscriptBottomMin = 0
+f.math.SuperscriptShiftUp = 0
+f.math.SuperscriptShiftUpCramped = 0
+mathfont.save(f)
diff --git a/testing/web-platform/tests/mathml/tools/stacks.py b/testing/web-platform/tests/mathml/tools/stacks.py
new file mode 100755
index 0000000000..b2ecec5386
--- /dev/null
+++ b/testing/web-platform/tests/mathml/tools/stacks.py
@@ -0,0 +1,80 @@
+#!/usr/bin/env python3
+
+from utils import mathfont
+import fontforge
+
+v1 = 5 * mathfont.em
+v2 = 1 * mathfont.em
+f = mathfont.create("stack-bottomdisplaystyleshiftdown%d-axisheight%d" % (v1, v2),
+ "Copyright (c) 2016 MathML Association")
+f.math.AxisHeight = v2
+f.math.StackBottomDisplayStyleShiftDown = v1
+f.math.StackBottomShiftDown = 0
+f.math.StackDisplayStyleGapMin = 0
+f.math.StackGapMin = 0
+f.math.StackTopDisplayStyleShiftUp = 0
+f.math.StackTopShiftUp = 0
+mathfont.save(f)
+
+v1 = 6 * mathfont.em
+v2 = 1 * mathfont.em
+f = mathfont.create("stack-bottomshiftdown%d-axisheight%d" % (v1, v2),
+ "Copyright (c) 2016 MathML Association")
+f.math.AxisHeight = v2
+f.math.StackBottomDisplayStyleShiftDown = 0
+f.math.StackBottomShiftDown = v1
+f.math.StackDisplayStyleGapMin = 0
+f.math.StackGapMin = 0
+f.math.StackTopDisplayStyleShiftUp = 0
+f.math.StackTopShiftUp = 0
+mathfont.save(f)
+
+v = 4 * mathfont.em
+f = mathfont.create("stack-displaystylegapmin%d" % v,
+ "Copyright (c) 2016 MathML Association")
+f.math.AxisHeight = 0
+f.math.StackBottomDisplayStyleShiftDown = 0
+f.math.StackBottomShiftDown = 0
+f.math.StackDisplayStyleGapMin = v
+f.math.StackGapMin = 0
+f.math.StackTopDisplayStyleShiftUp = 0
+f.math.StackTopShiftUp = 0
+mathfont.save(f)
+
+v = 8 * mathfont.em
+f = mathfont.create("stack-gapmin%d" % v,
+ "Copyright (c) 2016 MathML Association")
+f.math.AxisHeight = 0
+f.math.StackBottomDisplayStyleShiftDown = 0
+f.math.StackBottomShiftDown = 0
+f.math.StackDisplayStyleGapMin = 0
+f.math.StackGapMin = v
+f.math.StackTopDisplayStyleShiftUp = 0
+f.math.StackTopShiftUp = 0
+mathfont.save(f)
+
+v1 = 3 * mathfont.em
+v2 = 1 * mathfont.em
+f = mathfont.create("stack-topdisplaystyleshiftup%d-axisheight%d" % (v1, v2),
+ "Copyright (c) 2016 MathML Association")
+f.math.AxisHeight = v2
+f.math.StackBottomDisplayStyleShiftDown = 0
+f.math.StackBottomShiftDown = 0
+f.math.StackDisplayStyleGapMin = 0
+f.math.StackGapMin = 0
+f.math.StackTopDisplayStyleShiftUp = v1
+f.math.StackTopShiftUp = 0
+mathfont.save(f)
+
+v1 = 9 * mathfont.em
+v2 = 1 * mathfont.em
+f = mathfont.create("stack-topshiftup%d-axisheight%d" % (v1, v2),
+ "Copyright (c) 2016 MathML Association")
+f.math.AxisHeight = v2
+f.math.StackBottomDisplayStyleShiftDown = 0
+f.math.StackBottomShiftDown = 0
+f.math.StackDisplayStyleGapMin = 0
+f.math.StackGapMin = 0
+f.math.StackTopDisplayStyleShiftUp = 0
+f.math.StackTopShiftUp = v1
+mathfont.save(f)
diff --git a/testing/web-platform/tests/mathml/tools/stretchstacks.py b/testing/web-platform/tests/mathml/tools/stretchstacks.py
new file mode 100755
index 0000000000..e6c0b8b4dd
--- /dev/null
+++ b/testing/web-platform/tests/mathml/tools/stretchstacks.py
@@ -0,0 +1,78 @@
+#!/usr/bin/env python3
+
+from utils import mathfont
+import fontforge
+
+arrowCodePoint = 0x2192 # horizontal stretch operator
+
+v = 3 * mathfont.em
+f = mathfont.create("stretchstack-bottomshiftdown%d" % v,
+ "Copyright (c) 2016 MathML Association")
+mathfont.createSquareGlyph(f, arrowCodePoint)
+f.math.LowerLimitBaselineDropMin = 0
+f.math.LowerLimitGapMin = 0
+f.math.OverbarExtraAscender = 0
+f.math.OverbarVerticalGap = 0
+f.math.StretchStackBottomShiftDown = v
+f.math.StretchStackGapAboveMin = 0
+f.math.StretchStackGapBelowMin = 0
+f.math.StretchStackTopShiftUp = 0
+f.math.UnderbarExtraDescender = 0
+f.math.UnderbarVerticalGap = 0
+f.math.UpperLimitBaselineRiseMin = 0
+f.math.UpperLimitGapMin = 0
+mathfont.save(f)
+
+v = 11 * mathfont.em
+f = mathfont.create("stretchstack-gapbelowmin%d" % v,
+ "Copyright (c) 2016 MathML Association")
+mathfont.createSquareGlyph(f, arrowCodePoint)
+f.math.LowerLimitBaselineDropMin = 0
+f.math.LowerLimitGapMin = 0
+f.math.OverbarExtraAscender = 0
+f.math.OverbarVerticalGap = 0
+f.math.StretchStackBottomShiftDown = 0
+f.math.StretchStackGapAboveMin = 0
+f.math.StretchStackGapBelowMin = v
+f.math.StretchStackTopShiftUp = 0
+f.math.UnderbarExtraDescender = 0
+f.math.UnderbarVerticalGap = 0
+f.math.UpperLimitBaselineRiseMin = 0
+f.math.UpperLimitGapMin = 0
+mathfont.save(f)
+
+v = 5 * mathfont.em
+f = mathfont.create("stretchstack-topshiftup%d" % v,
+ "Copyright (c) 2016 MathML Association")
+mathfont.createSquareGlyph(f, arrowCodePoint)
+f.math.LowerLimitBaselineDropMin = 0
+f.math.LowerLimitGapMin = 0
+f.math.OverbarExtraAscender = 0
+f.math.OverbarVerticalGap = 0
+f.math.StretchStackBottomShiftDown = 0
+f.math.StretchStackGapAboveMin = 0
+f.math.StretchStackGapBelowMin = 0
+f.math.StretchStackTopShiftUp = v
+f.math.UnderbarExtraDescender = 0
+f.math.UnderbarVerticalGap = 0
+f.math.UpperLimitBaselineRiseMin = 0
+f.math.UpperLimitGapMin = 0
+mathfont.save(f)
+
+v = 7 * mathfont.em
+f = mathfont.create("stretchstack-gapabovemin%d" % v,
+ "Copyright (c) 2016 MathML Association")
+mathfont.createSquareGlyph(f, arrowCodePoint)
+f.math.LowerLimitBaselineDropMin = 0
+f.math.LowerLimitGapMin = 0
+f.math.OverbarExtraAscender = 0
+f.math.OverbarVerticalGap = 0
+f.math.StretchStackBottomShiftDown = 0
+f.math.StretchStackGapAboveMin = v
+f.math.StretchStackGapBelowMin = 0
+f.math.StretchStackTopShiftUp = 0
+f.math.UnderbarExtraDescender = 0
+f.math.UnderbarVerticalGap = 0
+f.math.UpperLimitBaselineRiseMin = 0
+f.math.UpperLimitGapMin = 0
+mathfont.save(f)
diff --git a/testing/web-platform/tests/mathml/tools/stretchy-centered-on-baseline.py b/testing/web-platform/tests/mathml/tools/stretchy-centered-on-baseline.py
new file mode 100755
index 0000000000..5ccfca3f1e
--- /dev/null
+++ b/testing/web-platform/tests/mathml/tools/stretchy-centered-on-baseline.py
@@ -0,0 +1,44 @@
+#!/usr/bin/env python3
+
+from utils import mathfont
+import fontforge
+
+# Create a WOFF font with glyphs for all the operator strings.
+font = mathfont.create("stretchy-centered-on-baseline",
+ "Copyright (c) 2023 Igalia S.L.")
+
+# Set parameters for stretchy tests.
+font.math.MinConnectorOverlap = mathfont.em // 2
+
+# Make sure that underover parameters don't add extra spacing.
+font.math.LowerLimitBaselineDropMin = 0
+font.math.LowerLimitGapMin = 0
+font.math.StretchStackBottomShiftDown = 0
+font.math.StretchStackGapAboveMin = 0
+font.math.UnderbarVerticalGap = 0
+font.math.UnderbarExtraDescender = 0
+font.math.UpperLimitBaselineRiseMin = 0
+font.math.UpperLimitGapMin = 0
+font.math.StretchStackTopShiftUp = 0
+font.math.StretchStackGapBelowMin = 0
+font.math.OverbarVerticalGap = 0
+font.math.AccentBaseHeight = 0
+font.math.OverbarExtraAscender = 0
+
+# These two characters will be stretchable in both directions.
+horizontalArrow = 0x295A # LEFTWARDS HARPOON WITH BARB UP FROM BAR
+verticalArrow = 0x295C # UPWARDS HARPOON WITH BARB RIGHT FROM BAR
+
+mathfont.createSizeVariants(font, aUsePUA=True, aCenterOnBaseline=True)
+
+# Add stretchy vertical and horizontal constructions for the horizontal arrow.
+mathfont.createSquareGlyph(font, horizontalArrow)
+mathfont.createStretchy(font, horizontalArrow, True)
+mathfont.createStretchy(font, horizontalArrow, False)
+
+# Add stretchy vertical and horizontal constructions for the vertical arrow.
+mathfont.createSquareGlyph(font, verticalArrow)
+mathfont.createStretchy(font, verticalArrow, True)
+mathfont.createStretchy(font, verticalArrow, False)
+
+mathfont.save(font)
diff --git a/testing/web-platform/tests/mathml/tools/stretchy.py b/testing/web-platform/tests/mathml/tools/stretchy.py
new file mode 100755
index 0000000000..34530f5792
--- /dev/null
+++ b/testing/web-platform/tests/mathml/tools/stretchy.py
@@ -0,0 +1,43 @@
+#!/usr/bin/env python3
+
+from utils import mathfont
+import fontforge
+
+# Create a WOFF font with glyphs for all the operator strings.
+font = mathfont.create("stretchy", "Copyright (c) 2021 Igalia S.L.")
+
+# Set parameters for stretchy tests.
+font.math.MinConnectorOverlap = mathfont.em // 2
+
+# Make sure that underover parameters don't add extra spacing.
+font.math.LowerLimitBaselineDropMin = 0
+font.math.LowerLimitGapMin = 0
+font.math.StretchStackBottomShiftDown = 0
+font.math.StretchStackGapAboveMin = 0
+font.math.UnderbarVerticalGap = 0
+font.math.UnderbarExtraDescender = 0
+font.math.UpperLimitBaselineRiseMin = 0
+font.math.UpperLimitGapMin = 0
+font.math.StretchStackTopShiftUp = 0
+font.math.StretchStackGapBelowMin = 0
+font.math.OverbarVerticalGap = 0
+font.math.AccentBaseHeight = 0
+font.math.OverbarExtraAscender = 0
+
+# These two characters will be stretchable in both directions.
+horizontalArrow = 0x295A # LEFTWARDS HARPOON WITH BARB UP FROM BAR
+verticalArrow = 0x295C # UPWARDS HARPOON WITH BARB RIGHT FROM BAR
+
+mathfont.createSizeVariants(font, aUsePUA=True, aCenterOnBaseline=False)
+
+# Add stretchy vertical and horizontal constructions for the horizontal arrow.
+mathfont.createSquareGlyph(font, horizontalArrow)
+mathfont.createStretchy(font, horizontalArrow, True)
+mathfont.createStretchy(font, horizontalArrow, False)
+
+# Add stretchy vertical and horizontal constructions for the vertical arrow.
+mathfont.createSquareGlyph(font, verticalArrow)
+mathfont.createStretchy(font, verticalArrow, True)
+mathfont.createStretchy(font, verticalArrow, False)
+
+mathfont.save(font)
diff --git a/testing/web-platform/tests/mathml/tools/underover.py b/testing/web-platform/tests/mathml/tools/underover.py
new file mode 100755
index 0000000000..469829cba2
--- /dev/null
+++ b/testing/web-platform/tests/mathml/tools/underover.py
@@ -0,0 +1,88 @@
+#!/usr/bin/env python3
+
+from utils import mathfont
+import fontforge
+
+breveCodePoint = 0x2D8 # accent operator
+degreeCodePoint = 0xB0 # nonaccent operator
+accentBaseHeight = 4 * mathfont.em
+
+v = 3 * mathfont.em
+f = mathfont.create("underover-accentbaseheight%d-overbarextraascender%d" % (accentBaseHeight, v),
+ "Copyright (c) 2016 MathML Association")
+mathfont.createSquareGlyph(f, breveCodePoint)
+mathfont.createSquareGlyph(f, degreeCodePoint)
+f.math.AccentBaseHeight = accentBaseHeight
+f.math.LowerLimitBaselineDropMin = 0
+f.math.LowerLimitGapMin = 0
+f.math.OverbarExtraAscender = v
+f.math.OverbarVerticalGap = 0
+f.math.StretchStackBottomShiftDown = 0
+f.math.StretchStackGapAboveMin = 0
+f.math.StretchStackGapBelowMin = 0
+f.math.StretchStackTopShiftUp = 0
+f.math.UnderbarExtraDescender = 0
+f.math.UnderbarVerticalGap = 0
+f.math.UpperLimitBaselineRiseMin = 0
+f.math.UpperLimitGapMin = 0
+mathfont.save(f)
+
+v = 11 * mathfont.em
+f = mathfont.create("underover-accentbaseheight%d-overbarverticalgap%d" % (accentBaseHeight, v),
+ "Copyright (c) 2016 MathML Association")
+mathfont.createSquareGlyph(f, breveCodePoint)
+mathfont.createSquareGlyph(f, degreeCodePoint)
+f.math.AccentBaseHeight = accentBaseHeight
+f.math.LowerLimitBaselineDropMin = 0
+f.math.LowerLimitGapMin = 0
+f.math.OverbarExtraAscender = 0
+f.math.OverbarVerticalGap = v
+f.math.StretchStackBottomShiftDown = 0
+f.math.StretchStackGapAboveMin = 0
+f.math.StretchStackGapBelowMin = 0
+f.math.StretchStackTopShiftUp = 0
+f.math.UnderbarExtraDescender = 0
+f.math.UnderbarVerticalGap = 0
+f.math.UpperLimitBaselineRiseMin = 0
+f.math.UpperLimitGapMin = 0
+mathfont.save(f)
+
+v = 5 * mathfont.em
+f = mathfont.create("underover-accentbaseheight%d-underbarextradescender%d" % (accentBaseHeight, v),
+ "Copyright (c) 2016 MathML Association")
+mathfont.createSquareGlyph(f, breveCodePoint)
+mathfont.createSquareGlyph(f, degreeCodePoint)
+f.math.AccentBaseHeight = accentBaseHeight
+f.math.LowerLimitBaselineDropMin = 0
+f.math.LowerLimitGapMin = 0
+f.math.OverbarExtraAscender = 0
+f.math.OverbarVerticalGap = 0
+f.math.StretchStackBottomShiftDown = 0
+f.math.StretchStackGapAboveMin = 0
+f.math.StretchStackGapBelowMin = 0
+f.math.StretchStackTopShiftUp = 0
+f.math.UnderbarExtraDescender = v
+f.math.UnderbarVerticalGap = 0
+f.math.UpperLimitBaselineRiseMin = 0
+f.math.UpperLimitGapMin = 0
+mathfont.save(f)
+
+v = 7 * mathfont.em
+f = mathfont.create("underover-accentbaseheight%d-underbarverticalgap%d" % (accentBaseHeight, v),
+ "Copyright (c) 2016 MathML Association")
+mathfont.createSquareGlyph(f, breveCodePoint)
+mathfont.createSquareGlyph(f, degreeCodePoint)
+f.math.AccentBaseHeight = accentBaseHeight
+f.math.LowerLimitBaselineDropMin = 0
+f.math.LowerLimitGapMin = 0
+f.math.OverbarExtraAscender = 0
+f.math.OverbarVerticalGap = 0
+f.math.StretchStackBottomShiftDown = 0
+f.math.StretchStackGapAboveMin = 0
+f.math.StretchStackGapBelowMin = 0
+f.math.StretchStackTopShiftUp = 0
+f.math.UnderbarExtraDescender = 0
+f.math.UnderbarVerticalGap = v
+f.math.UpperLimitBaselineRiseMin = 0
+f.math.UpperLimitGapMin = 0
+mathfont.save(f)
diff --git a/testing/web-platform/tests/mathml/tools/use-typo-lineheight.py b/testing/web-platform/tests/mathml/tools/use-typo-lineheight.py
new file mode 100755
index 0000000000..6509a65175
--- /dev/null
+++ b/testing/web-platform/tests/mathml/tools/use-typo-lineheight.py
@@ -0,0 +1,53 @@
+#!/usr/bin/env python3
+
+import fontforge
+
+font = fontforge.font()
+font.em = 1000
+typoLineHeight = 2300
+winHeight = 5000
+name = "font-lineheight%d-typolineheight%d" % (winHeight, typoLineHeight)
+font.fontname = name
+font.familyname = name
+font.fullname = name
+font.copyright = "Copyright (c) 2016 MathML Association"
+
+glyph = font.createChar(ord(" "), "space")
+glyph.width = 1000
+glyph = font.createChar(ord("O"))
+pen = glyph.glyphPen()
+pen.moveTo(0, -200)
+pen.lineTo(0, 800)
+pen.lineTo(1000, 800)
+pen.lineTo(1000, -200)
+pen.closePath()
+
+font.os2_typoascent_add = False
+font.os2_typoascent = 800
+font.os2_typodescent_add = False
+font.os2_typodescent = -200
+font.os2_typolinegap = typoLineHeight - \
+ (font.os2_typoascent - font.os2_typodescent)
+
+font.hhea_ascent = winHeight // 2
+font.hhea_ascent_add = False
+font.hhea_descent = -winHeight // 2
+font.hhea_descent_add = False
+font.hhea_linegap = 0
+
+font.os2_winascent = winHeight // 2
+font.os2_winascent_add = False
+font.os2_windescent = winHeight // 2
+font.os2_windescent_add = False
+
+font.os2_use_typo_metrics = True
+
+path = "../../fonts/math/lineheight%d-typolineheight%d.woff" % (
+ winHeight, typoLineHeight)
+print("Generating %s..." % path, end="")
+font.generate(path)
+if font.validate() == 0:
+ print(" done.")
+else:
+ print(" validation error!")
+ exit(1)
diff --git a/testing/web-platform/tests/mathml/tools/utils/__init__.py b/testing/web-platform/tests/mathml/tools/utils/__init__.py
new file mode 100644
index 0000000000..c1e4c6d32e
--- /dev/null
+++ b/testing/web-platform/tests/mathml/tools/utils/__init__.py
@@ -0,0 +1 @@
+# This file is required for Python to search this directory for modules.
diff --git a/testing/web-platform/tests/mathml/tools/utils/mathfont.py b/testing/web-platform/tests/mathml/tools/utils/mathfont.py
new file mode 100644
index 0000000000..3eff0ac03d
--- /dev/null
+++ b/testing/web-platform/tests/mathml/tools/utils/mathfont.py
@@ -0,0 +1,232 @@
+import fontforge
+
+PUA_startCodePoint = 0xE000
+em = 1000
+
+
+def create(aName, aCopyRight):
+ print("Generating %s.woff..." % aName, end="")
+ mathFont = fontforge.font()
+ mathFont.fontname = aName
+ mathFont.familyname = aName
+ mathFont.fullname = aName
+ mathFont.copyright = aCopyRight
+ mathFont.encoding = "UnicodeFull"
+
+ # Create a space character. Also force the creation of some MATH subtables
+ # so that OTS will not reject the MATH table.
+ g = mathFont.createChar(ord(" "), "space")
+ g.width = em
+ g.italicCorrection = 0
+ g.topaccent = 0
+ g.mathKern.bottomLeft = tuple([(0, 0)])
+ g.mathKern.bottomRight = tuple([(0, 0)])
+ g.mathKern.topLeft = tuple([(0, 0)])
+ g.mathKern.topRight = tuple([(0, 0)])
+ mathFont[ord(" ")].horizontalVariants = "space"
+ mathFont[ord(" ")].verticalVariants = "space"
+ return mathFont
+
+
+def drawRectangleGlyph(glyph, width, ascent, descent=0, padding_left=0):
+ p = glyph.glyphPen()
+ p.moveTo(padding_left, -descent)
+ p.lineTo(padding_left, ascent)
+ p.lineTo(padding_left + width, ascent)
+ p.lineTo(padding_left + width, -descent)
+ p.closePath()
+ glyph.width = padding_left + width
+
+
+def createSquareGlyph(aFont, aCodePoint):
+ g = aFont.createChar(aCodePoint)
+ drawRectangleGlyph(g, em, em, 0)
+
+
+def drawHexaDigit(aGlyph, aX, aValue):
+ t = em / 10
+ p = aGlyph.glyphPen(replace=False)
+ if aValue == 0:
+ p.moveTo(aX + t, t)
+ p.lineTo(aX + t, em - t)
+ p.lineTo(aX + em / 2 - t, em - t)
+ p.lineTo(aX + em / 2 - t, t)
+ p.closePath()
+ elif aValue == 1:
+ p.moveTo(aX + em / 2 - t, em - t)
+ p.lineTo(aX + em / 2 - t, t)
+ p.endPath()
+ elif aValue == 2:
+ p.moveTo(aX + t, em - t)
+ p.lineTo(aX + em / 2 - t, em - t)
+ p.lineTo(aX + em / 2 - t, em / 2)
+ p.lineTo(aX + t, em / 2)
+ p.lineTo(aX + t, t)
+ p.lineTo(aX + em / 2 - t, t)
+ p.endPath()
+ elif aValue == 3:
+ p.moveTo(aX + t, em - t)
+ p.lineTo(aX + em / 2 - t, em - t)
+ p.lineTo(aX + em / 2 - t, t)
+ p.lineTo(aX + t, t)
+ p.endPath()
+ p.moveTo(aX + t, em / 2)
+ p.lineTo(aX + em / 2 - 2.5 * t, em / 2)
+ p.endPath()
+ elif aValue == 4:
+ p.moveTo(aX + em / 2 - t, em - t)
+ p.lineTo(aX + em / 2 - t, t)
+ p.endPath()
+ p.moveTo(aX + t, em - t)
+ p.lineTo(aX + t, em / 2)
+ p.lineTo(aX + em / 2 - 2.5 * t, em / 2)
+ p.endPath()
+ elif aValue == 5:
+ p.moveTo(aX + em / 2 - t, em - t)
+ p.lineTo(aX + t, em - t)
+ p.lineTo(aX + t, em / 2)
+ p.lineTo(aX + em / 2 - t, em / 2)
+ p.lineTo(aX + em / 2 - t, t)
+ p.lineTo(aX + t, t)
+ p.endPath()
+ elif aValue == 6:
+ p.moveTo(aX + em / 2 - t, em - t)
+ p.lineTo(aX + t, em - t)
+ p.lineTo(aX + t, t)
+ p.lineTo(aX + em / 2 - t, t)
+ p.lineTo(aX + em / 2 - t, em / 2)
+ p.lineTo(aX + 2.5 * t, em / 2)
+ p.endPath()
+ elif aValue == 7:
+ p.moveTo(aX + t, em - t)
+ p.lineTo(aX + em / 2 - t, em - t)
+ p.lineTo(aX + em / 2 - t, t)
+ p.endPath()
+ elif aValue == 8:
+ p.moveTo(aX + t, t)
+ p.lineTo(aX + t, em - t)
+ p.lineTo(aX + em / 2 - t, em - t)
+ p.lineTo(aX + em / 2 - t, t)
+ p.closePath()
+ p.moveTo(aX + 2.5 * t, em / 2)
+ p.lineTo(aX + em / 2 - 2.5 * t, em / 2)
+ p.endPath()
+ elif aValue == 9:
+ p.moveTo(aX + t, t)
+ p.lineTo(aX + em / 2 - t, t)
+ p.lineTo(aX + em / 2 - t, em - t)
+ p.lineTo(aX + t, em - t)
+ p.lineTo(aX + t, em / 2)
+ p.lineTo(aX + em / 2 - 2.5 * t, em / 2)
+ p.endPath()
+ elif aValue == 10: # A
+ p.moveTo(aX + t, t)
+ p.lineTo(aX + t, em - t)
+ p.lineTo(aX + em / 2 - t, em - t)
+ p.lineTo(aX + em / 2 - t, t)
+ p.endPath()
+ p.moveTo(aX + 2.5 * t, em / 2)
+ p.lineTo(aX + em / 2 - 2.5 * t, em / 2)
+ p.endPath()
+ elif aValue == 11: # b
+ p.moveTo(aX + t, em - t)
+ p.lineTo(aX + t, t)
+ p.lineTo(aX + em / 2 - t, t)
+ p.lineTo(aX + em / 2 - t, em / 2)
+ p.lineTo(aX + 2.5 * t, em / 2)
+ p.endPath()
+ elif aValue == 12: # C
+ p.moveTo(aX + em / 2 - t, em - t)
+ p.lineTo(aX + t, em - t)
+ p.lineTo(aX + t, t)
+ p.lineTo(aX + em / 2 - t, t)
+ p.endPath()
+ elif aValue == 13: # d
+ p.moveTo(aX + em / 2 - t, em - t)
+ p.lineTo(aX + em / 2 - t, t)
+ p.lineTo(aX + t, t)
+ p.lineTo(aX + t, em / 2)
+ p.lineTo(aX + em / 2 - 2.5 * t, em / 2)
+ p.endPath()
+ elif aValue == 14: # E
+ p.moveTo(aX + em / 2 - t, em - t)
+ p.lineTo(aX + t, em - t)
+ p.lineTo(aX + t, t)
+ p.lineTo(aX + em / 2 - t, t)
+ p.endPath()
+ p.moveTo(aX + em / 2 - t, em / 2)
+ p.lineTo(aX + 2.5 * t, em / 2)
+ p.endPath()
+ elif aValue == 15: # F
+ p.moveTo(aX + em / 2 - t, em - t)
+ p.lineTo(aX + t, em - t)
+ p.lineTo(aX + t, t)
+ p.endPath()
+ p.moveTo(aX + em / 2 - t, em / 2)
+ p.lineTo(aX + 2.5 * t, em / 2)
+ p.endPath()
+
+
+def createGlyphFromValue(aFont, aCodePoint):
+ g = aFont.createChar(aCodePoint)
+ value = aCodePoint
+ for i in range(0, 5):
+ drawHexaDigit(g, (5 - (i + 1)) * em / 2, value % 16)
+ value /= 16
+ g.width = 5 * em // 2
+ g.stroke("circular", em / 10, "square", "miter", "cleanup")
+
+
+def createSizeVariants(aFont, aUsePUA=False, aCenterOnBaseline=False):
+ if aUsePUA:
+ codePoint = PUA_startCodePoint
+ else:
+ codePoint = -1
+ for size in (0, 1, 2, 3):
+ g = aFont.createChar(codePoint, "v%d" % size)
+ if aCenterOnBaseline:
+ drawRectangleGlyph(g, em, (size + 1) * em / 2, (size + 1) * em / 2)
+ else:
+ drawRectangleGlyph(g, em, (size + 1) * em, 0)
+ if aUsePUA:
+ codePoint += 1
+ g = aFont.createChar(codePoint, "h%d" % size)
+ if aCenterOnBaseline:
+ drawRectangleGlyph(g, (size + 1) * em, em / 2, em / 2)
+ else:
+ drawRectangleGlyph(g, (size + 1) * em, em, 0)
+ if aUsePUA:
+ codePoint += 1
+
+
+def createStretchy(aFont, codePoint, isHorizontal):
+ if isHorizontal:
+ aFont[codePoint].horizontalVariants = "h0 h1 h2 h3"
+ # Part: (glyphName, isExtender, startConnector, endConnector, fullAdvance)
+ aFont[codePoint].horizontalComponents = \
+ (("h2", False, 0, em, 3 * em),
+ ("h1", True, em, em, 2 * em))
+ else:
+ aFont[codePoint].verticalVariants = "v0 v1 v2 v3"
+ # Part: (glyphName, isExtender, startConnector, endConnector, fullAdvance)
+ aFont[codePoint].verticalComponents = \
+ (("v2", False, 0, em, 3 * em),
+ ("v1", True, em, em, 2 * em))
+
+
+def save(aFont):
+ aFont.em = em
+ aFont.ascent = aFont.hhea_ascent = aFont.os2_typoascent = em
+ aFont.descent = aFont.hhea_descent = aFont.os2_typodescent = 0
+ # aFont.os2_winascent, aFont.os2_windescent should be the maximum of
+ # ascent/descent for all glyphs. Does fontforge compute them automatically?
+ aFont.hhea_ascent_add = aFont.hhea_descent_add = 0
+ aFont.os2_typoascent_add = aFont.os2_typodescent_add = 0
+ aFont.os2_winascent_add = aFont.os2_windescent_add = 0
+ aFont.os2_use_typo_metrics = True
+ aFont.generate("../../fonts/math/%s.woff" % aFont.fontname)
+ if aFont.validate() == 0:
+ print(" done.")
+ else:
+ print(" validation error!")
+ exit(1)
diff --git a/testing/web-platform/tests/mathml/tools/utils/misc.py b/testing/web-platform/tests/mathml/tools/utils/misc.py
new file mode 100644
index 0000000000..cc3b21906e
--- /dev/null
+++ b/testing/web-platform/tests/mathml/tools/utils/misc.py
@@ -0,0 +1,35 @@
+import os
+import progressbar
+from urllib.request import urlopen
+
+UnicodeXMLURL = "https://raw.githubusercontent.com/w3c/xml-entities/gh-pages/unicode.xml"
+InlineAxisOperatorsURL = "https://w3c.github.io/mathml-core/tables/inline-axis-operators.txt"
+
+
+def downloadWithProgressBar(url, outputDirectory="./", forceDownload=False):
+
+ baseName = os.path.basename(url)
+ fileName = os.path.join(outputDirectory, baseName)
+
+ if not forceDownload and os.path.exists(fileName):
+ return fileName
+
+ request = urlopen(url)
+ totalSize = int(request.info().get('Content-Length').strip())
+ bar = progressbar.ProgressBar(maxval=totalSize).start()
+
+ chunkSize = 16 * 1024
+ downloaded = 0
+ print("Downloading %s" % url)
+ os.umask(0o002)
+ with open(fileName, 'wb') as fp:
+ while True:
+ chunk = request.read(chunkSize)
+ downloaded += len(chunk)
+ bar.update(downloaded)
+ if not chunk:
+ break
+ fp.write(chunk)
+ bar.finish()
+
+ return fileName
diff --git a/testing/web-platform/tests/mathml/tools/xHeight.py b/testing/web-platform/tests/mathml/tools/xHeight.py
new file mode 100755
index 0000000000..ad0f8b9e02
--- /dev/null
+++ b/testing/web-platform/tests/mathml/tools/xHeight.py
@@ -0,0 +1,12 @@
+#!/usr/bin/env python3
+
+from utils import mathfont
+import fontforge
+
+v = mathfont.em / 2
+f = mathfont.create("xheight%d" % v,
+ "Copyright (c) 2016 MathML Association")
+g = f.createChar(ord('x'))
+mathfont.drawRectangleGlyph(g, mathfont.em, v, 0)
+assert f.xHeight == v, "Bad x-height value!"
+mathfont.save(f)
--
cgit v1.2.3