COMMIT_MESSAGE (17/19)

 1Bug 155756 - Use parameters from the OpenType MATH table for <munderover>
 2

LayoutTests/ChangeLog

 12016-03-23 Frederic Wang <fwang@igalia.com>
 2
 3 Use parameters from the OpenType MATH table for <munderover>
 4 https://bugs.webkit.org/show_bug.cgi?id=155756
 5
 6 Reviewed by NOBODY (OOPS!).
 7
 8 Import some tests from the MathML in HTML5 test suite to verify
 9 the layout of the <munderover> element. We also write a test to
 10 verify dynamic change of accent/accentunder attributes and adjust
 11 other tests.
 12
 13 * mathml/mathml-in-html5/fonts/limits-lowerlimitbaselinedropmin3000.woff: Added.
 14 * mathml/mathml-in-html5/fonts/limits-lowerlimitgapmin11000.woff: Added.
 15 * mathml/mathml-in-html5/fonts/limits-upperlimitbaselinerisemin5000.woff: Added.
 16 * mathml/mathml-in-html5/fonts/limits-upperlimitgapmin7000.woff: Added.
 17 * mathml/mathml-in-html5/fonts/stretchstack-bottomshiftdown3000.woff: Added.
 18 * mathml/mathml-in-html5/fonts/stretchstack-gapabovemin7000.woff: Added.
 19 * mathml/mathml-in-html5/fonts/stretchstack-gapbelowmin11000.woff: Added.
 20 * mathml/mathml-in-html5/fonts/stretchstack-topshiftup5000.woff: Added.
 21 * mathml/mathml-in-html5/fonts/underover-accentbaseheight4000-overbarextraascender3000.woff: Added.
 22 * mathml/mathml-in-html5/fonts/underover-accentbaseheight4000-overbarverticalgap11000.woff: Added.
 23 * mathml/mathml-in-html5/fonts/underover-accentbaseheight4000-underbarextradescender5000.woff: Added.
 24 * mathml/mathml-in-html5/fonts/underover-accentbaseheight4000-underbarverticalgap7000.woff: Added.
 25 * mathml/mathml-in-html5/underover-parameters-1-expected.txt: Added.
 26 * mathml/mathml-in-html5/underover-parameters-1.html: Added.
 27 * mathml/mathml-in-html5/underover-parameters-2-expected.txt: Added.
 28 * mathml/mathml-in-html5/underover-parameters-2.html: Added.
 29 * mathml/mathml-in-html5/underover-parameters-3-expected.txt: Added.
 30 * mathml/mathml-in-html5/underover-parameters-3.html: Added.
 31 * mathml/mathml-in-html5/underover-parameters-4-expected.txt: Added.
 32 * mathml/mathml-in-html5/underover-parameters-4.html: Added.
 33 * mathml/presentation/attributes-accent-accentunder-dynamic.html: Added.
 34 Test dynamic changes of accent and accentunder.
 35 * mathml/presentation/attributes-accent-accentunder-dynamic-expected.html: Added.
 36 * mathml/presentation/scripts-underover.html: Remove one of the test since munderover
 37 with an empty script is no longer equivalent to munder or mover.
 38 * mathml/presentation/scripts-underover-expected.html: Ditto.
 39 * platform/gtk/mathml/opentype/horizontal-expected.png: Updated due to change in
 40 vertical metrics of scripts.
 41 * platform/gtk/mathml/opentype/horizontal-expected.txt: Ditto.
 42 * platform/gtk/mathml/opentype/horizontal-munderover-expected.png: Ditto.
 43 * platform/gtk/mathml/opentype/horizontal-munderover-expected.txt: Ditto.
 44 * platform/gtk/mathml/presentation/roots-expected.txt: Udapted due to script baseline fix.
 45 * platform/gtk/mathml/presentation/roots-expected.png: ditto.
 46
1472016-03-21 Frederic Wang <fwang@igalia.com>
248
349 Use Stack* parameters from the OpenType MATH table

LayoutTests/imported/mathml-in-html5/fonts/math/limits-lowerlimitbaselinedropmin3000.woff

Binary file, nothing to see here

LayoutTests/imported/mathml-in-html5/fonts/math/limits-lowerlimitgapmin11000.woff

Binary file, nothing to see here

LayoutTests/imported/mathml-in-html5/fonts/math/limits-upperlimitbaselinerisemin5000.woff

Binary file, nothing to see here

LayoutTests/imported/mathml-in-html5/fonts/math/limits-upperlimitgapmin7000.woff

Binary file, nothing to see here

LayoutTests/imported/mathml-in-html5/fonts/math/stretchstack-bottomshiftdown3000.woff

Binary file, nothing to see here

LayoutTests/imported/mathml-in-html5/fonts/math/stretchstack-gapabovemin7000.woff

Binary file, nothing to see here

LayoutTests/imported/mathml-in-html5/fonts/math/stretchstack-gapbelowmin11000.woff

Binary file, nothing to see here

LayoutTests/imported/mathml-in-html5/fonts/math/stretchstack-topshiftup5000.woff

Binary file, nothing to see here

LayoutTests/imported/mathml-in-html5/fonts/math/underover-accentbaseheight4000-overbarextraascender3000.woff

Binary file, nothing to see here

LayoutTests/imported/mathml-in-html5/fonts/math/underover-accentbaseheight4000-overbarverticalgap11000.woff

Binary file, nothing to see here

LayoutTests/imported/mathml-in-html5/fonts/math/underover-accentbaseheight4000-underbarextradescender5000.woff

Binary file, nothing to see here

LayoutTests/imported/mathml-in-html5/fonts/math/underover-accentbaseheight4000-underbarverticalgap7000.woff

Binary file, nothing to see here

LayoutTests/imported/mathml-in-html5/mathml/presentation-markup/scripts/underover-parameters-1-expected.txt

 1
 2
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14PASS LowerLimitBaselineDropMin
 15PASS LowerLimitGapMin
 16PASS UpperLimitBaselineRiseMin
 17PASS UpperLimitGapMin
 18

LayoutTests/imported/mathml-in-html5/mathml/presentation-markup/scripts/underover-parameters-1.html

 1<!DOCTYPE html>
 2<html>
 3<head>
 4<meta charset="utf-8">
 5<title>Underscripts and Overscripts parameters</title>
 6<link rel="help" href="http://www.mathml-association.org/MathMLinHTML5/S3.html#SS4">
 7<meta name="assert" content="Elements munder, mover, munderover correctly use the limit parameters from the MATH table.">
 8<script src="../../../../../resources/testharness.js"></script>
 9<script src="../../../../../resources/testharnessreport.js"></script>
 10<style>
 11 math, mspace, mo {
 12 font-size: 10px;
 13 }
 14 @font-face {
 15 font-family: lowerlimitbaselinedropmin3000;
 16 src: url("../../../fonts/math/limits-lowerlimitbaselinedropmin3000.woff");
 17 }
 18 @font-face {
 19 font-family: lowerlimitgapmin11000;
 20 src: url("../../../fonts/math/limits-lowerlimitgapmin11000.woff");
 21 }
 22 @font-face {
 23 font-family: upperlimitbaselinerisemin5000;
 24 src: url("../../../fonts/math/limits-upperlimitbaselinerisemin5000.woff");
 25 }
 26 @font-face {
 27 font-family: upperlimitgapmin7000;
 28 src: url("../../../fonts/math/limits-upperlimitgapmin7000.woff");
 29 }
 30</style>
 31<script>
 32 var emToPx = 10 / 1000; // font-size: 10px, font.em = 1000
 33 var epsilon = 1;
 34
 35 function getBox(aId) {
 36 return document.getElementById(aId).getBoundingClientRect();
 37 }
 38
 39 setup({ explicit_done: true });
 40 window.addEventListener("load", function() {
 41 document.fonts.ready.then(function() {
 42 window.setTimeout(runTests, 250);
 43 });
 44 });
 45
 46 function runTests() {
 47 test(function() {
 48 var v = 3000 * emToPx;
 49 assert_approx_equals(getBox("under00011").top - getBox("ref0001").bottom,
 50 v, epsilon, "munder: under shift");
 51 assert_approx_equals(getBox("under00012").top - getBox("ref0001").bottom,
 52 v, epsilon, "munderover: under shift");
 53 }, "LowerLimitBaselineDropMin");
 54
 55 test(function() {
 56 var v = 11000 * emToPx;
 57 assert_approx_equals(getBox("under00021").top - getBox("ref0002").bottom,
 58 v, epsilon, "munder: under gap");
 59 assert_approx_equals(getBox("under00022").top - getBox("ref0002").bottom,
 60 v, epsilon, "munderover: under gap");
 61 }, "LowerLimitGapMin");
 62
 63 test(function() {
 64 var v = 5000 * emToPx;
 65 assert_approx_equals(getBox("ref0003").top - getBox("over00031").bottom,
 66 v, epsilon, "munder: over shift");
 67 assert_approx_equals(getBox("ref0003").top - getBox("over00032").bottom,
 68 v, epsilon, "munderover: over shift");
 69 }, "UpperLimitBaselineRiseMin");
 70
 71 test(function() {
 72 var v = 7000 * emToPx;
 73 assert_approx_equals(getBox("ref0004").top - getBox("over00041").bottom,
 74 v, epsilon, "munder: over shift");
 75 assert_approx_equals(getBox("ref0004").top - getBox("over00042").bottom,
 76 v, epsilon, "munderover: over shift");
 77 }, "UpperLimitGapMin");
 78
 79 done();
 80 }
 81</script>
 82</head>
 83<body>
 84 <p>
 85 <math style="font-family: lowerlimitbaselinedropmin3000;">
 86 <mspace id="ref0001" height="1em" width="3em" mathbackground="green"/>
 87 <munder>
 88 <mo movablelimits="false">&#x2211;</mo>
 89 <mspace id="under00011" depth="1em" width="3em" mathbackground="blue"/>
 90 </munder>
 91 <munderover>
 92 <mo movablelimits="false">&#x2211;</mo>
 93 <mspace id="under00012" depth="1em" width="3em" mathbackground="blue"/>
 94 <mspace height="1em" width="3em" mathbackground="black"/>
 95 </munderover>
 96 </math>
 97 </p>
 98 <hr/>
 99 <p>
 100 <math style="font-family: lowerlimitgapmin11000;">
 101 <mspace id="ref0002" height="1em" width="3em" mathbackground="green"/>
 102 <munder>
 103 <mo movablelimits="false">&#x2211;</mo>
 104 <mspace id="under00021" depth="1em" width="3em" mathbackground="blue"/>
 105 </munder>
 106 <munderover>
 107 <mo movablelimits="false">&#x2211;</mo>
 108 <mspace id="under00022" depth="1em" width="3em" mathbackground="blue"/>
 109 <mspace height="1em" width="3em" mathbackground="black"/>
 110 </munderover>
 111 </math>
 112 </p>
 113 <hr/>
 114 <p>
 115 <math style="font-family: upperlimitbaselinerisemin5000;">
 116 <mspace id="ref0003" height="1em" width="3em" mathbackground="green"/>
 117 <mover>
 118 <mo movablelimits="false">&#x2211;</mo>
 119 <mspace id="over00031" height="1em" width="3em" mathbackground="blue"/>
 120 </mover>
 121 <munderover>
 122 <mo movablelimits="false">&#x2211;</mo>
 123 <mspace height="1em" width="3em" mathbackground="black"/>
 124 <mspace id="over00032" height="1em" width="3em" mathbackground="blue"/>
 125 </munderover>
 126 </math>
 127 </p>
 128 <hr/>
 129 <p>
 130 <math style="font-family: upperlimitgapmin7000;">
 131 <mspace id="ref0004" height="1em" width="3em" mathbackground="green"/>
 132 <mover>
 133 <mo movablelimits="false">&#x2211;</mo>
 134 <mspace id="over00041" depth="1em" width="3em" mathbackground="blue"/>
 135 </mover>
 136 <munderover>
 137 <mo movablelimits="false">&#x2211;</mo>
 138 <mspace height="1em" width="3em" mathbackground="black"/>
 139 <mspace id="over00042" depth="1em" width="3em" mathbackground="blue"/>
 140 </munderover>
 141 </math>
 142 </p>
 143 <hr/>
 144</body>
 145</html>

LayoutTests/imported/mathml-in-html5/mathml/presentation-markup/scripts/underover-parameters-2-expected.txt

 1
 2
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14PASS StretchStackBottomShiftDown
 15PASS StretchStackGapBelowMin
 16PASS StretchStackTopShiftUp
 17PASS StretchStackGapAboveMin
 18

LayoutTests/imported/mathml-in-html5/mathml/presentation-markup/scripts/underover-parameters-2.html

 1<!DOCTYPE html>
 2<html>
 3<head>
 4<meta charset="utf-8">
 5<title>Underscripts and Overscripts parameters</title>
 6<link rel="help" href="http://www.mathml-association.org/MathMLinHTML5/S3.html#SS4">
 7<meta name="assert" content="Elements munder, mover, munderover correctly use the stretch stack parameters from the MATH table.">
 8<script src="../../../../../resources/testharness.js"></script>
 9<script src="../../../../../resources/testharnessreport.js"></script>
 10<style>
 11 math, mspace, mo {
 12 font-size: 10px;
 13 }
 14 @font-face {
 15 font-family: bottomshiftdown3000;
 16 src: url("../../../fonts/math/stretchstack-bottomshiftdown3000.woff");
 17 }
 18 @font-face {
 19 font-family: gapbelowmin11000;
 20 src: url("../../../fonts/math/stretchstack-gapbelowmin11000.woff");
 21 }
 22 @font-face {
 23 font-family: topshiftup5000;
 24 src: url("../../../fonts/math/stretchstack-topshiftup5000.woff");
 25 }
 26 @font-face {
 27 font-family: gapabovemin7000;
 28 src: url("../../../fonts/math/stretchstack-gapabovemin7000.woff");
 29 }
 30</style>
 31<script>
 32 var emToPx = 10 / 1000; // font-size: 10px, font.em = 1000
 33 var epsilon = 1;
 34
 35 function getBox(aId) {
 36 return document.getElementById(aId).getBoundingClientRect();
 37 }
 38
 39 setup({ explicit_done: true });
 40 window.addEventListener("load", function() {
 41 document.fonts.ready.then(function() {
 42 window.setTimeout(runTests, 250);
 43 });
 44 });
 45
 46 function runTests() {
 47 test(function() {
 48 var v = 3000 * emToPx;
 49 assert_approx_equals(getBox("under00011").top - getBox("ref0001").bottom,
 50 v, epsilon, "munder: under shift");
 51 assert_approx_equals(getBox("under00012").top - getBox("ref0001").bottom,
 52 v, epsilon, "munderover: under shift");
 53 }, "StretchStackBottomShiftDown");
 54
 55 test(function() {
 56 var v = 11000 * emToPx;
 57 assert_approx_equals(getBox("under00021").top - getBox("ref0002").bottom,
 58 v, epsilon, "munder: under gap");
 59 assert_approx_equals(getBox("under00022").top - getBox("ref0002").bottom,
 60 v, epsilon, "munderover: under gap");
 61 }, "StretchStackGapBelowMin");
 62
 63 test(function() {
 64 var v = 5000 * emToPx;
 65 assert_approx_equals(getBox("ref0003").top - getBox("over00031").bottom,
 66 v, epsilon, "mover: over shift");
 67 assert_approx_equals(getBox("ref0003").top - getBox("over00032").bottom,
 68 v, epsilon, "munderover: over shift");
 69 }, "StretchStackTopShiftUp");
 70
 71 test(function() {
 72 var v = 7000 * emToPx;
 73 assert_approx_equals(getBox("ref0004").top - getBox("over00041").bottom,
 74 v, epsilon, "mover: over shift");
 75 assert_approx_equals(getBox("ref0004").top - getBox("over00042").bottom,
 76 v, epsilon, "munderover: over shift");
 77 }, "StretchStackGapAboveMin");
 78
 79 done();
 80 }
 81</script>
 82</head>
 83<body>
 84 <p>
 85 <math style="font-family: bottomshiftdown3000;">
 86 <mspace id="ref0001" height="1em" width="3em" mathbackground="green"/>
 87 <munder>
 88 <mo>&#x2192;</mo>
 89 <mspace id="under00011" depth="1em" width="3em" mathbackground="blue"/>
 90 </munder>
 91 <munderover>
 92 <mo>&#x2192;</mo>
 93 <mspace id="under00012" depth="1em" width="3em" mathbackground="blue"/>
 94 <mspace height="1em" width="3em" mathbackground="black"/>
 95 </munderover>
 96 </math>
 97 </p>
 98 <hr/>
 99 <p>
 100 <math style="font-family: gapbelowmin11000;">
 101 <mspace id="ref0002" height="1em" width="3em" mathbackground="green"/>
 102 <munder>
 103 <mo>&#x2192;</mo>
 104 <mspace id="under00021" depth="1em" width="3em" mathbackground="blue"/>
 105 </munder>
 106 <munderover>
 107 <mo>&#x2192;</mo>
 108 <mspace id="under00022" depth="1em" width="3em" mathbackground="blue"/>
 109 <mspace height="1em" width="3em" mathbackground="black"/>
 110 </munderover>
 111 </math>
 112 </p>
 113 <hr/>
 114 <p>
 115 <math style="font-family: topshiftup5000;">
 116 <mspace id="ref0003" height="1em" width="3em" mathbackground="green"/>
 117 <mover>
 118 <mo>&#x2192;</mo>
 119 <mspace id="over00031" height="1em" width="3em" mathbackground="blue"/>
 120 </mover>
 121 <munderover>
 122 <mo>&#x2192;</mo>
 123 <mspace height="1em" width="3em" mathbackground="black"/>
 124 <mspace id="over00032" height="1em" width="3em" mathbackground="blue"/>
 125 </munderover>
 126 </math>
 127 </p>
 128 <hr/>
 129 <p>
 130 <math style="font-family: gapabovemin7000;">
 131 <mspace id="ref0004" height="1em" width="3em" mathbackground="green"/>
 132 <mover>
 133 <mo>&#x2192;</mo>
 134 <mspace id="over00041" depth="1em" width="3em" mathbackground="blue"/>
 135 </mover>
 136 <munderover>
 137 <mo>&#x2192;</mo>
 138 <mspace height="1em" width="3em" mathbackground="black"/>
 139 <mspace id="over00042" depth="1em" width="3em" mathbackground="blue"/>
 140 </munderover>
 141 </math>
 142 </p>
 143 <hr/>
 144</body>
 145</html>

LayoutTests/imported/mathml-in-html5/mathml/presentation-markup/scripts/underover-parameters-3-expected.txt

 1
 2PASS Baseline alignment
 3PASS Heights of bases
 4PASS AccentBaseHeight, UnderbarExtraDescender
 5PASS AccentBaseHeight, UnderbarVerticalGap
 6PASS AccentBaseHeight, OverbarExtraAscender
 7PASS AccentBaseHeight, OverbarVerticalGap
 8

LayoutTests/imported/mathml-in-html5/mathml/presentation-markup/scripts/underover-parameters-3.html

 1<!DOCTYPE html>
 2<html>
 3<head>
 4<meta charset="utf-8">
 5<title>Underscripts and Overscripts parameters</title>
 6<link rel="help" href="http://www.mathml-association.org/MathMLinHTML5/S3.html#SS4">
 7<meta name="assert" content="Elements munder, mover, munderover correctly use underbar/overbar and AccentBaseHeight parameters from the MATH table.">
 8<script src="../../../../../resources/testharness.js"></script>
 9<script src="../../../../../resources/testharnessreport.js"></script>
 10<style>
 11 math, mspace, mo {
 12 font-size: 10px;
 13 }
 14 @font-face {
 15 font-family: accentbaseheight4000underbarextradescender5000;
 16 src: url("../../../fonts/math/underover-accentbaseheight4000-underbarextradescender5000.woff");
 17 }
 18 @font-face {
 19 font-family: accentbaseheight4000underbarverticalgap7000;
 20 src: url("../../../fonts/math/underover-accentbaseheight4000-underbarverticalgap7000.woff");
 21 }
 22 @font-face {
 23 font-family: accentbaseheight4000overbarextraascender3000;
 24 src: url("../../../fonts/math/underover-accentbaseheight4000-overbarextraascender3000.woff");
 25 }
 26 @font-face {
 27 font-family: accentbaseheight4000overbarverticalgap11000;
 28 src: url("../../../fonts/math/underover-accentbaseheight4000-overbarverticalgap11000.woff");
 29 }
 30</style>
 31<script>
 32 var emToPx = 10 / 1000; // font-size: 10px, font.em = 1000
 33 var epsilon = 2;
 34 var axisBaseHeight = 4000 * emToPx;
 35 var shortBaseHeight = 3000 * emToPx; // shortBaseHeight < axisBaseHeight
 36 var tallBaseHeight = 5000 * emToPx; // tallBaseHeight > axisBaseHeight
 37
 38 function getBox(aId) {
 39 return document.getElementById(aId).getBoundingClientRect();
 40 }
 41
 42 setup({ explicit_done: true });
 43 window.addEventListener("load", function() {
 44 document.fonts.ready.then(function() {
 45 window.setTimeout(runTests, 250);
 46 });
 47 });
 48
 49 function runTests() {
 50 test(function() {
 51 for (var i = 1; i <= 4; i++) {
 52 for (var j = 1; j <= 6; j++) {
 53 var baseId = ("base00" + i) + j;
 54 assert_approx_equals(getBox("ref00" + i).bottom,
 55 getBox(baseId).bottom,
 56 epsilon,
 57 "alignment of " + baseId);
 58 }
 59 }
 60 }, "Baseline alignment");
 61
 62 test(function() {
 63 for (var i = 1; i <= 4; i++) {
 64 for (var j = 1; j <= 6; j++) {
 65 var baseId = ("base00" + i) + j;
 66 assert_approx_equals(getBox(baseId).height,
 67 j == 2 || j == 5 ?
 68 tallBaseHeight :shortBaseHeight,
 69 epsilon,
 70 "height of " + baseId);
 71 }
 72 }
 73 }, "Heights of bases");
 74
 75 test(function() {
 76 var v = 5000 * emToPx;
 77 assert_approx_equals(getBox("ref001").bottom - getBox("over0014").bottom,
 78 shortBaseHeight, epsilon,
 79 "munderover: nonaccent over short base");
 80 assert_approx_equals(getBox("ref001").bottom - getBox("over0015").bottom,
 81 tallBaseHeight, epsilon,
 82 "munderover: accent over tall base");
 83 assert_approx_equals(getBox("ref001").bottom - getBox("over0016").bottom,
 84 axisBaseHeight, epsilon,
 85 "munderover: accent over short base");
 86 for (var j = 1; j <= 6; j++) {
 87 var elId = "el001" + j;
 88 var baseId = "base001" + j;
 89 var underId = "under001" + j;
 90 assert_approx_equals(getBox(underId).top - getBox(baseId).bottom,
 91 0, epsilon,
 92 "gap between " + baseId + " and " + underId);
 93 assert_approx_equals(getBox(elId).bottom - getBox(underId).bottom,
 94 v, epsilon,
 95 "extra descender below " + underId);
 96 }
 97 }, "AccentBaseHeight, UnderbarExtraDescender");
 98
 99 test(function() {
 100 var v = 7000 * emToPx;
 101 assert_approx_equals(getBox("ref002").bottom - getBox("over0024").bottom,
 102 shortBaseHeight, epsilon,
 103 "munderover: nonaccent over short base");
 104 assert_approx_equals(getBox("ref002").bottom - getBox("over0025").bottom,
 105 tallBaseHeight, epsilon,
 106 "munderover: accent over tall base");
 107 assert_approx_equals(getBox("ref002").bottom - getBox("over0026").bottom,
 108 axisBaseHeight, epsilon,
 109 "munderover: accent over short base");
 110 for (var j = 1; j <= 6; j++) {
 111 var elId = "el002" + j;
 112 var baseId = "base002" + j;
 113 var underId = "under002" + j;
 114 var gap = document.getElementById(elId).getAttribute("accentunder") === "true" ? 0 : v;
 115 assert_approx_equals(getBox(underId).top - getBox(baseId).bottom,
 116 gap, epsilon,
 117 "gap between " + baseId + " and " + underId);
 118 }
 119 }, "AccentBaseHeight, UnderbarVerticalGap");
 120
 121 test(function() {
 122 var v = 3000 * emToPx;
 123 assert_approx_equals(getBox("ref003").bottom - getBox("over0031").bottom,
 124 shortBaseHeight, epsilon,
 125 "mover: nonaccent over short base");
 126 assert_approx_equals(getBox("ref003").bottom - getBox("over0032").bottom,
 127 tallBaseHeight, epsilon,
 128 "mover: accent over tall base");
 129 assert_approx_equals(getBox("ref003").bottom - getBox("over0033").bottom,
 130 axisBaseHeight, epsilon,
 131 "mover: accent over short base");
 132 assert_approx_equals(getBox("ref003").bottom - getBox("over0034").bottom,
 133 shortBaseHeight, epsilon,
 134 "munderover: nonaccent over short base");
 135 assert_approx_equals(getBox("ref003").bottom - getBox("over0035").bottom,
 136 tallBaseHeight, epsilon,
 137 "munderover: accent over tall base");
 138 assert_approx_equals(getBox("ref003").bottom - getBox("over0036").bottom,
 139 axisBaseHeight, epsilon,
 140 "munderover: accent over short base");
 141 for (var j = 1; j <= 6; j++) {
 142 var elId = "el003" + j;
 143 var baseId = "base003" + j;
 144 if (j >= 4) {
 145 var underId = "under003" + j;
 146 assert_approx_equals(getBox(underId).top - getBox(baseId).bottom,
 147 0, epsilon,
 148 "gap between " + baseId + " and " + underId);
 149 }
 150 var overId = "over003" + j;
 151 assert_approx_equals(getBox(overId).top - getBox(elId).top,
 152 v, epsilon,
 153 "extra ascender below " + overId);
 154 }
 155 }, "AccentBaseHeight, OverbarExtraAscender");
 156
 157 test(function() {
 158 v = 11000 * emToPx;
 159 assert_approx_equals(getBox("ref004").bottom - getBox("over0041").bottom,
 160 shortBaseHeight + v, epsilon,
 161 "mover: nonaccent over short base");
 162 assert_approx_equals(getBox("ref004").bottom - getBox("over0042").bottom,
 163 tallBaseHeight, epsilon,
 164 "mover: accent over tall base");
 165 assert_approx_equals(getBox("ref004").bottom - getBox("over0043").bottom,
 166 axisBaseHeight, epsilon,
 167 "mover: accent over short base");
 168 assert_approx_equals(getBox("ref004").bottom - getBox("over0044").bottom,
 169 shortBaseHeight + v, epsilon,
 170 "munderover: nonaccent over short base");
 171 assert_approx_equals(getBox("ref004").bottom - getBox("over0045").bottom,
 172 tallBaseHeight, epsilon,
 173 "munderover: accent over tall base");
 174 assert_approx_equals(getBox("ref004").bottom - getBox("over0046").bottom,
 175 axisBaseHeight, epsilon,
 176 "munderover: accent over short base");
 177 for (var j = 4; j <= 6; j++) {
 178 var baseId = "base004" + j;
 179 var underId = "under004" + j;
 180 assert_approx_equals(getBox(underId).top - getBox(baseId).bottom,
 181 0, epsilon,
 182 "gap between " + baseId + " and " + underId);
 183 }
 184 }, "AccentBaseHeight, OverbarVerticalGap");
 185
 186 done();
 187 }
 188</script>
 189</head>
 190<body>
 191 <p>
 192 <math style="font-family: accentbaseheight4000underbarextradescender5000;">
 193 <mspace id="ref001" height="1em" width="3em" mathbackground="green"/>
 194 <munder mathbackground="cyan" id="el0011">
 195 <mspace id="base0011" height="3em" width="1em" mathbackground="black"/>
 196 <mspace id="under0011" height="1em" width="3em" mathbackground="blue"/>
 197 </munder>
 198 <munder mathbackground="cyan" id="el0012" accentunder="true">
 199 <mspace id="base0012" height="5em" width="1em" mathbackground="black"/>
 200 <mspace id="under0012" height="1em" width="3em" mathbackground="blue"/>
 201 </munder>
 202 <munder mathbackground="cyan" id="el0013" accentunder="true">
 203 <mspace id="base0013" height="3em" width="1em" mathbackground="black"/>
 204 <mspace id="under0013" height="1em" width="3em" mathbackground="blue"/>
 205 </munder>
 206 <munderover mathbackground="cyan" id="el0014">
 207 <mspace id="base0014" height="3em" width="1em" mathbackground="black"/>
 208 <mspace id="under0014" height="1em" width="3em" mathbackground="blue"/>
 209 <mspace id="over0014" height="1em" width="3em" mathbackground="red"/>
 210 </munderover>
 211 <munderover mathbackground="cyan" id="el0015" accent="true">
 212 <mspace id="base0015" height="5em" width="1em" mathbackground="black"/>
 213 <mspace id="under0015" height="1em" width="3em" mathbackground="blue"/>
 214 <mspace id="over0015" height="1em" width="3em" mathbackground="red"/>
 215 </munderover>
 216 <munderover mathbackground="cyan" id="el0016" accent="true">
 217 <mspace id="base0016" height="3em" width="1em" mathbackground="black"/>
 218 <mspace id="under0016" height="1em" width="3em" mathbackground="blue"/>
 219 <mspace id="over0016" height="1em" width="3em" mathbackground="red"/>
 220 </munderover>
 221 </math>
 222 </p>
 223 <hr/>
 224 <p>
 225 <math style="font-family: accentbaseheight4000underbarverticalgap7000;">
 226 <mspace id="ref002" height="1em" width="3em" mathbackground="green"/>
 227 <munder mathbackground="cyan" id="el0021">
 228 <mspace id="base0021" height="3em" width="1em" mathbackground="black"/>
 229 <mspace id="under0021" height="1em" width="3em" mathbackground="blue"/>
 230 </munder>
 231 <munder mathbackground="cyan" id="el0022" accentunder="true">
 232 <mspace id="base0022" height="5em" width="1em" mathbackground="black"/>
 233 <mspace id="under0022" height="1em" width="3em" mathbackground="blue"/>
 234 </munder>
 235 <munder mathbackground="cyan" id="el0023" accentunder="true">
 236 <mspace id="base0023" height="3em" width="1em" mathbackground="black"/>
 237 <mspace id="under0023" height="1em" width="3em" mathbackground="blue"/>
 238 </munder>
 239 <munderover mathbackground="cyan" id="el0024">
 240 <mspace id="base0024" height="3em" width="1em" mathbackground="black"/>
 241 <mspace id="under0024" height="1em" width="3em" mathbackground="blue"/>
 242 <mspace id="over0024" height="1em" width="3em" mathbackground="red"/>
 243 </munderover>
 244 <munderover mathbackground="cyan" id="el0025" accent="true">
 245 <mspace id="base0025" height="5em" width="1em" mathbackground="black"/>
 246 <mspace id="under0025" height="1em" width="3em" mathbackground="blue"/>
 247 <mspace id="over0025" height="1em" width="3em" mathbackground="red"/>
 248 </munderover>
 249 <munderover mathbackground="cyan" id="el0026" accent="true">
 250 <mspace id="base0026" height="3em" width="1em" mathbackground="black"/>
 251 <mspace id="under0026" height="1em" width="3em" mathbackground="blue"/>
 252 <mspace id="over0026" height="1em" width="3em" mathbackground="red"/>
 253 </munderover>
 254 </math>
 255 </p>
 256 <hr/>
 257 <p>
 258 <math style="font-family: accentbaseheight4000overbarextraascender3000;">
 259 <mspace id="ref003" height="1em" width="3em" mathbackground="green"/>
 260 <mover mathbackground="cyan" id="el0031">
 261 <mspace id="base0031" height="3em" width="1em" mathbackground="black"/>
 262 <mspace id="over0031" height="1em" width="3em" mathbackground="red"/>
 263 </mover>
 264 <mover mathbackground="cyan" id="el0032" accent="true">
 265 <mspace id="base0032" height="5em" width="1em" mathbackground="black"/>
 266 <mspace id="over0032" height="1em" width="3em" mathbackground="red"/>
 267 </mover>
 268 <mover mathbackground="cyan" id="el0033" accent="true">
 269 <mspace id="base0033" height="3em" width="1em" mathbackground="black"/>
 270 <mspace id="over0033" height="1em" width="3em" mathbackground="red"/>
 271 </mover>
 272 <munderover mathbackground="cyan" id="el0034">
 273 <mspace id="base0034" height="3em" width="1em" mathbackground="black"/>
 274 <mspace id="under0034" height="1em" width="3em" mathbackground="blue"/>
 275 <mspace id="over0034" height="1em" width="3em" mathbackground="red"/>
 276 </munderover>
 277 <munderover mathbackground="cyan" id="el0035" accent="true">
 278 <mspace id="base0035" height="5em" width="1em" mathbackground="black"/>
 279 <mspace id="under0035" height="1em" width="3em" mathbackground="blue"/>
 280 <mspace id="over0035" height="1em" width="3em" mathbackground="red"/>
 281 </munderover>
 282 <munderover mathbackground="cyan" id="el0036" accent="true">
 283 <mspace id="base0036" height="3em" width="1em" mathbackground="black"/>
 284 <mspace id="under0036" height="1em" width="3em" mathbackground="blue"/>
 285 <mspace id="over0036" height="1em" width="3em" mathbackground="red"/>
 286 </munderover>
 287 </math>
 288 </p>
 289 <hr/>
 290 <p>
 291 <math style="font-family: accentbaseheight4000overbarverticalgap11000;">
 292 <mspace id="ref004" height="1em" width="3em" mathbackground="green"/>
 293 <mover mathbackground="cyan" id="el0041">
 294 <mspace id="base0041" height="3em" width="1em" mathbackground="black"/>
 295 <mspace id="over0041" height="1em" width="3em" mathbackground="red"/>
 296 </mover>
 297 <mover mathbackground="cyan" id="el0042" accent="true">
 298 <mspace id="base0042" height="5em" width="1em" mathbackground="black"/>
 299 <mspace id="over0042" height="1em" width="3em" mathbackground="red"/>
 300 </mover>
 301 <mover mathbackground="cyan" id="el0043" accent="true">
 302 <mspace id="base0043" height="3em" width="1em" mathbackground="black"/>
 303 <mspace id="over0043" height="1em" width="3em" mathbackground="red"/>
 304 </mover>
 305 <munderover mathbackground="cyan" id="el0044">
 306 <mspace id="base0044" height="3em" width="1em" mathbackground="black"/>
 307 <mspace id="under0044" height="1em" width="3em" mathbackground="blue"/>
 308 <mspace id="over0044" height="1em" width="3em" mathbackground="red"/>
 309 </munderover>
 310 <munderover mathbackground="cyan" id="el0045" accent="true">
 311 <mspace id="base0045" height="5em" width="1em" mathbackground="black"/>
 312 <mspace id="under0045" height="1em" width="3em" mathbackground="blue"/>
 313 <mspace id="over0045" height="1em" width="3em" mathbackground="red"/>
 314 </munderover>
 315 <munderover mathbackground="cyan" id="el0046" accent="true">
 316 <mspace id="base0046" height="3em" width="1em" mathbackground="black"/>
 317 <mspace id="under0046" height="1em" width="3em" mathbackground="blue"/>
 318 <mspace id="over0046" height="1em" width="3em" mathbackground="red"/>
 319 </munderover>
 320 </math>
 321 </p>
 322 <hr/>
 323</body>
 324</html>

LayoutTests/imported/mathml-in-html5/mathml/presentation-markup/scripts/underover-parameters-4-expected.txt

 1°
 2˘
 3˘
 4°
 5°
 6˘
 7˘
 8˘
 9˘
 10
 11˘
 12˘
 13°
 14˘
 15˘
 16˘
 17˘
 18˘
 19˘
 20
 21°
 22°
 23˘
 24°
 25˘
 26˘
 27˘
 28˘
 29˘
 30
 31°
 32°
 33˘
 34°
 35˘
 36˘
 37˘
 38˘
 39˘
 40
 41
 42PASS Baseline alignment
 43PASS Heights of bases
 44PASS AccentBaseHeight, UnderbarExtraDescender
 45PASS AccentBaseHeight, UnderbarVerticalGap
 46PASS AccentBaseHeight, OverbarExtraAscender
 47PASS AccentBaseHeight, OverbarVerticalGap
 48

LayoutTests/imported/mathml-in-html5/mathml/presentation-markup/scripts/underover-parameters-4.html

 1<!DOCTYPE html>
 2<html>
 3<head>
 4<meta charset="utf-8">
 5<title>Underscripts and Overscripts parameters</title>
 6<link rel="help" href="http://www.mathml-association.org/MathMLinHTML5/S3.html#SS4">
 7<meta name="assert" content="Elements munder, mover, munderover correctly use underbar/overbar and AccentBaseHeight parameters from the MATH table.">
 8<script src="../../../../../resources/testharness.js"></script>
 9<script src="../../../../../resources/testharnessreport.js"></script>
 10<style>
 11 math, mspace, mo {
 12 font-size: 10px;
 13 }
 14 @font-face {
 15 font-family: accentbaseheight4000underbarextradescender5000;
 16 src: url("../../../fonts/math/underover-accentbaseheight4000-underbarextradescender5000.woff");
 17 }
 18 @font-face {
 19 font-family: accentbaseheight4000underbarverticalgap7000;
 20 src: url("../../../fonts/math/underover-accentbaseheight4000-underbarverticalgap7000.woff");
 21 }
 22 @font-face {
 23 font-family: accentbaseheight4000overbarextraascender3000;
 24 src: url("../../../fonts/math/underover-accentbaseheight4000-overbarextraascender3000.woff");
 25 }
 26 @font-face {
 27 font-family: accentbaseheight4000overbarverticalgap11000;
 28 src: url("../../../fonts/math/underover-accentbaseheight4000-overbarverticalgap11000.woff");
 29 }
 30</style>
 31<script>
 32 var emToPx = 10 / 1000; // font-size: 10px, font.em = 1000
 33 var epsilon = 2;
 34 var axisBaseHeight = 4000 * emToPx;
 35 var shortBaseHeight = 3000 * emToPx; // shortBaseHeight < axisBaseHeight
 36 var tallBaseHeight = 5000 * emToPx; // tallBaseHeight > axisBaseHeight
 37
 38 function getBox(aId) {
 39 return document.getElementById(aId).getBoundingClientRect();
 40 }
 41
 42 setup({ explicit_done: true });
 43 window.addEventListener("load", function() {
 44 document.fonts.ready.then(function() {
 45 window.setTimeout(runTests, 250);
 46 });
 47 });
 48
 49 function runTests() {
 50 test(function() {
 51 for (var i = 1; i <= 4; i++) {
 52 for (var j = 1; j <= 6; j++) {
 53 var baseId = ("base00" + i) + j;
 54 assert_approx_equals(getBox("ref00" + i).bottom,
 55 getBox(baseId).bottom,
 56 epsilon,
 57 "alignment of " + baseId);
 58 }
 59 }
 60 }, "Baseline alignment");
 61
 62 test(function() {
 63 for (var i = 1; i <= 4; i++) {
 64 for (var j = 1; j <= 6; j++) {
 65 var baseId = ("base00" + i) + j;
 66 assert_approx_equals(getBox(baseId).height,
 67 j == 2 || j == 5 ?
 68 tallBaseHeight :shortBaseHeight,
 69 epsilon,
 70 "height of " + baseId);
 71 }
 72 }
 73 }, "Heights of bases");
 74
 75 test(function() {
 76 var v = 5000 * emToPx;
 77 assert_approx_equals(getBox("ref001").bottom - getBox("over0014").bottom,
 78 shortBaseHeight, epsilon,
 79 "munderover: nonaccent over short base");
 80 assert_approx_equals(getBox("ref001").bottom - getBox("over0015").bottom,
 81 tallBaseHeight, epsilon,
 82 "munderover: accent over tall base");
 83 assert_approx_equals(getBox("ref001").bottom - getBox("over0016").bottom,
 84 axisBaseHeight, epsilon,
 85 "munderover: accent over short base");
 86 for (var j = 1; j <= 6; j++) {
 87 var elId = "el001" + j;
 88 var baseId = "base001" + j;
 89 var underId = "under001" + j;
 90 assert_approx_equals(getBox(underId).top - getBox(baseId).bottom,
 91 0, epsilon,
 92 "gap between " + baseId + " and " + underId);
 93 assert_approx_equals(getBox(elId).bottom - getBox(underId).bottom,
 94 v, epsilon,
 95 "extra descender below " + underId);
 96 }
 97 }, "AccentBaseHeight, UnderbarExtraDescender");
 98
 99 test(function() {
 100 var v = 7000 * emToPx;
 101 assert_approx_equals(getBox("ref002").bottom - getBox("over0024").bottom,
 102 shortBaseHeight, epsilon,
 103 "munderover: nonaccent over short base");
 104 assert_approx_equals(getBox("ref002").bottom - getBox("over0025").bottom,
 105 tallBaseHeight, epsilon,
 106 "munderover: accent over tall base");
 107 assert_approx_equals(getBox("ref002").bottom - getBox("over0026").bottom,
 108 axisBaseHeight, epsilon,
 109 "munderover: accent over short base");
 110 for (var j = 1; j <= 6; j++) {
 111 var elId = "el002" + j;
 112 var baseId = "base002" + j;
 113 var underId = "under002" + j;
 114 var gap = (j == 2 || j == 3 ? 0 : v);
 115 assert_approx_equals(getBox(underId).top - getBox(baseId).bottom,
 116 gap, epsilon,
 117 "gap between " + baseId + " and " + underId);
 118 }
 119 }, "AccentBaseHeight, UnderbarVerticalGap");
 120
 121 test(function() {
 122 var v = 3000 * emToPx;
 123 assert_approx_equals(getBox("ref003").bottom - getBox("over0031").bottom,
 124 shortBaseHeight, epsilon,
 125 "mover: nonaccent over short base");
 126 assert_approx_equals(getBox("ref003").bottom - getBox("over0032").bottom,
 127 tallBaseHeight, epsilon,
 128 "mover: accent over tall base");
 129 assert_approx_equals(getBox("ref003").bottom - getBox("over0033").bottom,
 130 axisBaseHeight, epsilon,
 131 "mover: accent over short base");
 132 assert_approx_equals(getBox("ref003").bottom - getBox("over0034").bottom,
 133 shortBaseHeight, epsilon,
 134 "munderover: nonaccent over short base");
 135 assert_approx_equals(getBox("ref003").bottom - getBox("over0035").bottom,
 136 tallBaseHeight, epsilon,
 137 "munderover: accent over tall base");
 138 assert_approx_equals(getBox("ref003").bottom - getBox("over0036").bottom,
 139 axisBaseHeight, epsilon,
 140 "munderover: accent over short base");
 141 for (var j = 1; j <= 6; j++) {
 142 var elId = "el003" + j;
 143 var baseId = "base003" + j;
 144 if (j >= 4) {
 145 var underId = "under003" + j;
 146 assert_approx_equals(getBox(underId).top - getBox(baseId).bottom,
 147 0, epsilon,
 148 "gap between " + baseId + " and " + underId);
 149 }
 150 var overId = "over003" + j;
 151 assert_approx_equals(getBox(overId).top - getBox(elId).top,
 152 v, epsilon,
 153 "extra ascender below " + overId);
 154 }
 155 }, "AccentBaseHeight, OverbarExtraAscender");
 156
 157 test(function() {
 158 v = 11000 * emToPx;
 159 assert_approx_equals(getBox("ref004").bottom - getBox("over0041").bottom,
 160 shortBaseHeight + v, epsilon,
 161 "mover: nonaccent over short base");
 162 assert_approx_equals(getBox("ref004").bottom - getBox("over0042").bottom,
 163 tallBaseHeight, epsilon,
 164 "mover: accent over tall base");
 165 assert_approx_equals(getBox("ref004").bottom - getBox("over0043").bottom,
 166 axisBaseHeight, epsilon,
 167 "mover: accent over short base");
 168 assert_approx_equals(getBox("ref004").bottom - getBox("over0044").bottom,
 169 shortBaseHeight + v, epsilon,
 170 "munderover: nonaccent over short base");
 171 assert_approx_equals(getBox("ref004").bottom - getBox("over0045").bottom,
 172 tallBaseHeight, epsilon,
 173 "munderover: accent over tall base");
 174 assert_approx_equals(getBox("ref004").bottom - getBox("over0046").bottom,
 175 axisBaseHeight, epsilon,
 176 "munderover: accent over short base");
 177 for (var j = 4; j <= 6; j++) {
 178 var baseId = "base004" + j;
 179 var underId = "under004" + j;
 180 assert_approx_equals(getBox(underId).top - getBox(baseId).bottom,
 181 0, epsilon,
 182 "gap between " + baseId + " and " + underId);
 183 }
 184 }, "AccentBaseHeight, OverbarVerticalGap");
 185
 186 done();
 187 }
 188</script>
 189</head>
 190<body>
 191 <p>
 192 <math style="font-family: accentbaseheight4000underbarextradescender5000;">
 193 <mspace id="ref001" height="1em" width="3em" mathbackground="green"/>
 194 <munder mathbackground="cyan" id="el0011">
 195 <mspace id="base0011" height="3em" width="1em" mathbackground="black"/>
 196 <mo id="under0011" mathcolor="blue">&#xB0;</mo>
 197 </munder>
 198 <munder mathbackground="cyan" id="el0012">
 199 <mspace id="base0012" height="5em" width="1em" mathbackground="black"/>
 200 <mo id="under0012" mathcolor="blue">&#x2D8;</mo>
 201 </munder>
 202 <munder mathbackground="cyan" id="el0013">
 203 <mspace id="base0013" height="3em" width="1em" mathbackground="black"/>
 204 <mo id="under0013" mathcolor="blue">&#x2D8;</mo>
 205 </munder>
 206 <munderover mathbackground="cyan" id="el0014">
 207 <mspace id="base0014" height="3em" width="1em" mathbackground="black"/>
 208 <mo id="under0014" mathcolor="blue">&#xB0;</mo>
 209 <mo id="over0014" mathcolor="red">&#xB0;</mo>
 210 </munderover>
 211 <munderover mathbackground="cyan" id="el0015" accent="true">
 212 <mspace id="base0015" height="5em" width="1em" mathbackground="black"/>
 213 <mo id="under0015" mathcolor="blue">&#x2D8;</mo>
 214 <mo id="over0015" mathcolor="red">&#x2D8;</mo>
 215 </munderover>
 216 <munderover mathbackground="cyan" id="el0016" accent="true">
 217 <mspace id="base0016" height="3em" width="1em" mathbackground="black"/>
 218 <mo id="under0016" mathcolor="blue">&#x2D8;</mo>
 219 <mo id="over0016" mathcolor="red">&#x2D8;</mo>
 220 </munderover>
 221 </math>
 222 </p>
 223 <hr/>
 224 <p>
 225 <math style="font-family: accentbaseheight4000underbarverticalgap7000;">
 226 <mspace id="ref002" height="1em" width="3em" mathbackground="green"/>
 227 <munder mathbackground="cyan" id="el0021" accentunder="false">
 228 <mspace id="base0021" height="3em" width="1em" mathbackground="black"/>
 229 <mo id="under0021" mathcolor="blue">&#x2D8;</mo>
 230 </munder>
 231 <munder mathbackground="cyan" id="el0022">
 232 <mspace id="base0022" height="5em" width="1em" mathbackground="black"/>
 233 <mo id="under0022" mathcolor="blue" accent="true">&#x2D8;</mo>
 234 </munder>
 235 <munder mathbackground="cyan" id="el0023">
 236 <mspace id="base0023" height="3em" width="1em" mathbackground="black"/>
 237 <mo id="under0023" mathcolor="blue" accent="true">&#xB0;</mo>
 238 </munder>
 239 <munderover mathbackground="cyan" id="el0024">
 240 <mspace id="base0024" height="3em" width="1em" mathbackground="black"/>
 241 <mo id="under0024" mathcolor="blue" accent="false">&#x2D8;</mo>
 242 <mo id="over0024" mathcolor="red" accent="false">&#x2D8;</mo>
 243 </munderover>
 244 <munderover mathbackground="cyan" id="el0025">
 245 <mspace id="base0025" height="5em" width="1em" mathbackground="black"/>
 246 <mo id="under0025" mathcolor="blue" accent="false">&#x2D8;</mo>
 247 <mo id="over0025" mathcolor="red">&#x2D8;</mo>
 248 </munderover>
 249 <munderover mathbackground="cyan" id="el0026">
 250 <mspace id="base0026" height="3em" width="1em" mathbackground="black"/>
 251 <mo id="under0026" mathcolor="blue" accent="false">&#x2D8;</mo>
 252 <mo id="over0026" mathcolor="red">&#x2D8;</mo>
 253 </munderover>
 254 </math>
 255 </p>
 256 <hr/>
 257 <p>
 258 <math style="font-family: accentbaseheight4000overbarextraascender3000;">
 259 <mspace id="ref003" height="1em" width="3em" mathbackground="green"/>
 260 <mover mathbackground="cyan" id="el0031">
 261 <mspace id="base0031" height="3em" width="1em" mathbackground="black"/>
 262 <mo id="over0031" mathcolor="red">&#xB0;</mo>
 263 </mover>
 264 <mover mathbackground="cyan" id="el0032" accent="true">
 265 <mspace id="base0032" height="5em" width="1em" mathbackground="black"/>
 266 <mo id="over0032" mathcolor="red">&#xB0;</mo>
 267 </mover>
 268 <mover mathbackground="cyan" id="el0033">
 269 <mspace id="base0033" height="3em" width="1em" mathbackground="black"/>
 270 <mo id="over0033" mathcolor="red">&#x2D8;</mo>
 271 </mover>
 272 <munderover mathbackground="cyan" id="el0034">
 273 <mspace id="base0034" height="3em" width="1em" mathbackground="black"/>
 274 <mo id="under0034" mathcolor="blue">&#xB0;</mo>
 275 <mo id="over0034" mathcolor="red" accent="false">&#x2D8;</mo>
 276 </munderover>
 277 <munderover mathbackground="cyan" id="el0035" accent="true">
 278 <mspace id="base0035" height="5em" width="1em" mathbackground="black"/>
 279 <mo id="under0035" mathcolor="blue">&#x2D8;</mo>
 280 <mo id="over0035" mathcolor="red">&#x2D8;</mo>
 281 </munderover>
 282 <munderover mathbackground="cyan" id="el0036" accent="true">
 283 <mspace id="base0036" height="3em" width="1em" mathbackground="black"/>
 284 <mo id="under0036" mathcolor="blue">&#x2D8;</mo>
 285 <mo id="over0036" mathcolor="red">&#x2D8;</mo>
 286 </munderover>
 287 </math>
 288 </p>
 289 <hr/>
 290 <p>
 291 <math style="font-family: accentbaseheight4000overbarverticalgap11000;">
 292 <mspace id="ref004" height="1em" width="3em" mathbackground="green"/>
 293 <mover mathbackground="cyan" id="el0041">
 294 <mspace id="base0041" height="3em" width="1em" mathbackground="black"/>
 295 <mo id="over0041" mathcolor="red">&#xB0;</mo>
 296 </mover>
 297 <mover mathbackground="cyan" id="el0042" accent="true">
 298 <mspace id="base0042" height="5em" width="1em" mathbackground="black"/>
 299 <mo id="over0042" mathcolor="red">&#xB0;</mo>
 300 </mover>
 301 <mover mathbackground="cyan" id="el0043">
 302 <mspace id="base0043" height="3em" width="1em" mathbackground="black"/>
 303 <mo id="over0043" mathcolor="red">&#x2D8;</mo>
 304 </mover>
 305 <munderover mathbackground="cyan" id="el0044">
 306 <mspace id="base0044" height="3em" width="1em" mathbackground="black"/>
 307 <mo id="under0044" mathcolor="blue">&#xB0;</mo>
 308 <mo id="over0044" mathcolor="red" accent="false">&#x2D8;</mo>
 309 </munderover>
 310 <munderover mathbackground="cyan" id="el0045" accent="true">
 311 <mspace id="base0045" height="5em" width="1em" mathbackground="black"/>
 312 <mo id="under0045" mathcolor="blue">&#x2D8;</mo>
 313 <mo id="over0045" mathcolor="red">&#x2D8;</mo>
 314 </munderover>
 315 <munderover mathbackground="cyan" id="el0046" accent="true">
 316 <mspace id="base0046" height="3em" width="1em" mathbackground="black"/>
 317 <mo id="under0046" mathcolor="blue">&#x2D8;</mo>
 318 <mo id="over0046" mathcolor="red">&#x2D8;</mo>
 319 </munderover>
 320 </math>
 321 </p>
 322 <hr/>
 323</body>
 324</html>

LayoutTests/mathml/presentation/attributes-accent-accentunder-dynamic-expected.html

 1<!DOCTYPE html>
 2<html class="reftest-wait">
 3 <head>
 4 <title>accent / accentunder</title>
 5 <meta charset="utf-8"/>
 6 <style>
 7 * {
 8 font-size: 12pt;
 9 }
 10 </style>
 11 </head>
 12 <body>
 13 <math>
 14 <munder>
 15 <mspace width="1em" height="3em" mathbackground="red"/>
 16 <mo id="ra1">O</mo>
 17 </munder>
 18 </math>
 19 <math>
 20 <mover>
 21 <mspace width="1em" height="3em" mathbackground="red"/>
 22 <mo id="ra2">O</mo>
 23 </mover>
 24 </math>
 25 <math>
 26 <munderover>
 27 <mspace width="1em" height="3em" mathbackground="red"/>
 28 <mo id="ra3">O</mo>
 29 <mo>O</mo>
 30 </munderover>
 31 </math>
 32 <math>
 33 <munderover>
 34 <mspace width="1em" height="3em" mathbackground="red"/>
 35 <mo>O</mo>
 36 <mo id="ra4">O</mo>
 37 </munderover>
 38 </math>
 39 <math>
 40 <mover id="ra5">
 41 <mspace width="1em" height="3em" mathbackground="red"/>
 42 <mo>O</mo>
 43 </mover>
 44 </math>
 45 <math>
 46 <munderover id="ra6">
 47 <mspace width="1em" height="3em" mathbackground="red"/>
 48 <mo>O</mo>
 49 <mo>O</mo>
 50 </munderover>
 51 </math>
 52 <math>
 53 <munder id="rau1">
 54 <mspace width="1em" height="3em" mathbackground="red"/>
 55 <mo>O</mo>
 56 </munder>
 57 </math>
 58 <math>
 59 <munderover id="rau2">
 60 <mspace width="1em" height="3em" mathbackground="red"/>
 61 <mo>O</mo>
 62 <mo>O</mo>
 63 </munderover>
 64 </math>
 65 <hr/>
 66 <math>
 67 <munder>
 68 <mspace width="1em" height="3em" mathbackground="red"/>
 69 <mo id="aa1" accent="true">O</mo>
 70 </munder>
 71 </math>
 72 <math>
 73 <mover>
 74 <mspace width="1em" height="3em" mathbackground="red"/>
 75 <mo id="aa2" accent="true">O</mo>
 76 </mover>
 77 </math>
 78 <math>
 79 <munderover>
 80 <mspace width="1em" height="3em" mathbackground="red"/>
 81 <mo id="aa3" accent="true">O</mo>
 82 <mo>O</mo>
 83 </munderover>
 84 </math>
 85 <math>
 86 <munderover>
 87 <mspace width="1em" height="3em" mathbackground="red"/>
 88 <mo>O</mo>
 89 <mo id="aa4" accent="true">O</mo>
 90 </munderover>
 91 </math>
 92 <math>
 93 <mover id="aa5" accent="true">
 94 <mspace width="1em" height="3em" mathbackground="red"/>
 95 <mo>O</mo>
 96 </mover>
 97 </math>
 98 <math>
 99 <munderover id="aa6" accent="true">
 100 <mspace width="1em" height="3em" mathbackground="red"/>
 101 <mo>O</mo>
 102 <mo>O</mo>
 103 </munderover>
 104 </math>
 105 <math>
 106 <munder id="aau1" accentunder="true">
 107 <mspace width="1em" height="3em" mathbackground="red"/>
 108 <mo>O</mo>
 109 </munder>
 110 </math>
 111 <math>
 112 <munderover id="aau2" accentunder="true">
 113 <mspace width="1em" height="3em" mathbackground="red"/>
 114 <mo>O</mo>
 115 <mo>O</mo>
 116 </munderover>
 117 </math>
 118 </body>
 119</html>

LayoutTests/mathml/presentation/attributes-accent-accentunder-dynamic.html

 1<!DOCTYPE html>
 2<html class="reftest-wait">
 3 <head>
 4 <title>accent / accentunder</title>
 5 <meta charset="utf-8"/>
 6 <style>
 7 * {
 8 font-size: 12pt;
 9 }
 10 </style>
 11 <script type="text/javascript">
 12 function doTest() {
 13 var i;
 14 for (i = 1; i <= 6; i++) {
 15 document.getElementById('ra' + i).removeAttribute('accent');
 16 document.getElementById('aa' + i).setAttribute('accent', 'true');
 17 }
 18 for (i = 1; i <= 2; i++) {
 19 document.getElementById('rau' + i).removeAttribute('accentunder');
 20 document.getElementById('aau' + i).setAttribute('accentunder', 'true');
 21 }
 22 document.documentElement.removeAttribute("class");
 23 }
 24 window.addEventListener("load", doTest, false);
 25 </script>
 26 </head>
 27 <body>
 28 <math>
 29 <munder>
 30 <mspace width="1em" height="3em" mathbackground="red"/>
 31 <mo id="ra1" accent="true">O</mo>
 32 </munder>
 33 </math>
 34 <math>
 35 <mover>
 36 <mspace width="1em" height="3em" mathbackground="red"/>
 37 <mo id="ra2" accent="true">O</mo>
 38 </mover>
 39 </math>
 40 <math>
 41 <munderover>
 42 <mspace width="1em" height="3em" mathbackground="red"/>
 43 <mo id="ra3" accent="true">O</mo>
 44 <mo>O</mo>
 45 </munderover>
 46 </math>
 47 <math>
 48 <munderover>
 49 <mspace width="1em" height="3em" mathbackground="red"/>
 50 <mo>O</mo>
 51 <mo id="ra4" accent="true">O</mo>
 52 </munderover>
 53 </math>
 54 <math>
 55 <mover id="ra5" accent="true">
 56 <mspace width="1em" height="3em" mathbackground="red"/>
 57 <mo>O</mo>
 58 </mover>
 59 </math>
 60 <math>
 61 <munderover id="ra6" accent="true">
 62 <mspace width="1em" height="3em" mathbackground="red"/>
 63 <mo>O</mo>
 64 <mo>O</mo>
 65 </munderover>
 66 </math>
 67 <math>
 68 <munder id="rau1" accentunder="true">
 69 <mspace width="1em" height="3em" mathbackground="red"/>
 70 <mo>O</mo>
 71 </munder>
 72 </math>
 73 <math>
 74 <munderover id="rau2" accentunder="true">
 75 <mspace width="1em" height="3em" mathbackground="red"/>
 76 <mo>O</mo>
 77 <mo>O</mo>
 78 </munderover>
 79 </math>
 80 <hr/>
 81 <math>
 82 <munder>
 83 <mspace width="1em" height="3em" mathbackground="red"/>
 84 <mo id="aa1">O</mo>
 85 </munder>
 86 </math>
 87 <math>
 88 <mover>
 89 <mspace width="1em" height="3em" mathbackground="red"/>
 90 <mo id="aa2">O</mo>
 91 </mover>
 92 </math>
 93 <math>
 94 <munderover>
 95 <mspace width="1em" height="3em" mathbackground="red"/>
 96 <mo id="aa3">O</mo>
 97 <mo>O</mo>
 98 </munderover>
 99 </math>
 100 <math>
 101 <munderover>
 102 <mspace width="1em" height="3em" mathbackground="red"/>
 103 <mo>O</mo>
 104 <mo id="aa4">O</mo>
 105 </munderover>
 106 </math>
 107 <math>
 108 <mover id="aa5">
 109 <mspace width="1em" height="3em" mathbackground="red"/>
 110 <mo>O</mo>
 111 </mover>
 112 </math>
 113 <math>
 114 <munderover id="aa6">
 115 <mspace width="1em" height="3em" mathbackground="red"/>
 116 <mo>O</mo>
 117 <mo>O</mo>
 118 </munderover>
 119 </math>
 120 <math>
 121 <munder id="aau1">
 122 <mspace width="1em" height="3em" mathbackground="red"/>
 123 <mo>O</mo>
 124 </munder>
 125 </math>
 126 <math>
 127 <munderover id="aau2">
 128 <mspace width="1em" height="3em" mathbackground="red"/>
 129 <mo>O</mo>
 130 <mo>O</mo>
 131 </munderover>
 132 </math>
 133 </body>
 134</html>

LayoutTests/mathml/presentation/scripts-underover-expected.html

129129 <mi>C</mi>
130130 </munderover>
131131 </math>
132  <math>
133  <munder>
134  <mi>A</mi>
135  <mi>B</mi>
136  </munder>
137  <mover>
138  <mi>A</mi>
139  <mi>B</mi>
140  </mover>
141  </math>
142132 </div>
143133
144134 </body>

LayoutTests/mathml/presentation/scripts-underover.html

132132 <mi style="font-size: 0.75em !important">C</mi>
133133 </munderover>
134134 </math>
135 
136  <!-- This verifies that <munderscript> with an empty script is
137  equivalent to the corresponding constructions with only one script.
138  -->
139  <math>
140  <munderover>
141  <mi>A</mi>
142  <mi>B</mi>
143  <mspace/>
144  </munderover>
145  <munderover>
146  <mi>A</mi>
147  <mspace/>
148  <mi>B</mi>
149  </munderover>
150  </math>
151135 </div>
152136
153137 </body>

LayoutTests/platform/gtk/mathml/opentype/horizontal-expected.png

Exception raised during decoding git binary patch:
Error running git apply --directory=/tmp
with patch:
diff --git a/PrettyPatch20260325-5547-b0g9hp.bin b/PrettyPatch20260325-5547-b0g9hp.bin
new file mode 100644
index 0000000000000000000000000000000000000000..b7b3e1c75ba2b2ca824eee97394203f982b5eca1
GIT binary patch
literal 9404
zcmeI2XIxY1w#K8*s7FMO0-{tKGKeOMNTek;M5RPUnm|ASX;LKg0I`fR3WA7;bVUT|
zy@r5|-lUfhA}WN?TM`H*cje5PnLBgum;1Z-ew(eL*@o=>u6M2V{MWO2cu`MFaFh5Z
z1Og#={@j_%2*kQw2*g_BjcehIsEDW>{3Y+MY3y!gXJh3^@NhyLLtCjFJ*<d6dhO_O
zC9A_KH<VSBZm3+pb{Kv9*fr&AO1dU4uJBFkuWM_aLGbv$UQ$xR5r|!g^Jh+8@s6FK
z5nUr#...
error: invalid path '/tmp/PrettyPatch20260325-5547-b0g9hp.bin'

/var/www/bugs.webkit.org/Websites/bugs.webkit.org/PrettyPatch/PrettyPatch.rb:924:in `run_git_apply_on_patch'
/var/www/bugs.webkit.org/Websites/bugs.webkit.org/PrettyPatch/PrettyPatch.rb:935:in `extract_contents_from_git_binary_literal_chunk'
/var/www/bugs.webkit.org/Websites/bugs.webkit.org/PrettyPatch/PrettyPatch.rb:950:in `extract_contents_from_remote'
/var/www/bugs.webkit.org/Websites/bugs.webkit.org/PrettyPatch/PrettyPatch.rb:713:in `initialize'
/var/www/bugs.webkit.org/Websites/bugs.webkit.org/PrettyPatch/PrettyPatch.rb:845:in `new'
/var/www/bugs.webkit.org/Websites/bugs.webkit.org/PrettyPatch/PrettyPatch.rb:845:in `block in parse'
/var/www/bugs.webkit.org/Websites/bugs.webkit.org/PrettyPatch/PrettyPatch.rb:845:in `collect'
/var/www/bugs.webkit.org/Websites/bugs.webkit.org/PrettyPatch/PrettyPatch.rb:845:in `parse'
/var/www/bugs.webkit.org/Websites/bugs.webkit.org/PrettyPatch/PrettyPatch.rb:21:in `prettify'
/var/www/html/PrettyPatch/prettify.rb:30:in `<main>'

LayoutTests/platform/gtk/mathml/opentype/horizontal-expected.txt

11layer at (0,0) size 800x600
22 RenderView at (0,0) size 800x600
3 layer at (0,0) size 800x166
4  RenderBlock {HTML} at (0,0) size 800x166
5  RenderBody {BODY} at (8,16) size 784x134
6  RenderBlock {P} at (0,0) size 784x17
7  RenderMathMLMath {math} at (0,4) size 24x10 [padding: 0 1 0 1]
8  RenderMathMLUnderOver {mover} at (1,0) size 22x10
9  RenderMathMLSpace {mspace} at (0,8) size 22x2 [bgcolor=#0000FF]
10  RenderMathMLOperator {mo} at (1,0) size 20x8
 3layer at (0,0) size 800x190
 4 RenderBlock {HTML} at (0,0) size 800x190
 5 RenderBody {BODY} at (8,16) size 784x158
 6 RenderBlock {P} at (0,0) size 784x21
 7 RenderMathMLMath {math} at (0,2) size 24x16 [padding: 0 1 0 1]
 8 RenderMathMLUnderOver {mover} at (1,0) size 22x16
 9 RenderMathMLSpace {mspace} at (0,13) size 22x3 [bgcolor=#0000FF]
 10 RenderMathMLOperator {mo} at (1,0) size 20x9
1111 RenderBlock (anonymous) at (0,0) size 12x8
1212 RenderText {#text} at (0,-36) size 12x80
1313 text run at (0,-36) width 12: "\x{2190}"
14  RenderText {#text} at (24,0) size 4x17
15  text run at (24,0) width 4: " "
16  RenderMathMLMath {math} at (28,4) size 24x10 [padding: 0 1 0 1]
17  RenderMathMLUnderOver {mover} at (1,0) size 22x10
18  RenderMathMLSpace {mspace} at (0,8) size 22x2 [bgcolor=#0000FF]
19  RenderMathMLOperator {mo} at (1,0) size 20x8
 14 RenderText {#text} at (24,4) size 4x17
 15 text run at (24,4) width 4: " "
 16 RenderMathMLMath {math} at (28,2) size 24x16 [padding: 0 1 0 1]
 17 RenderMathMLUnderOver {mover} at (1,0) size 22x16
 18 RenderMathMLSpace {mspace} at (0,13) size 22x3 [bgcolor=#0000FF]
 19 RenderMathMLOperator {mo} at (1,0) size 20x9
2020 RenderBlock (anonymous) at (0,0) size 12x8
2121 RenderText {#text} at (0,-36) size 12x80
2222 text run at (0,-36) width 12: "\x{2192}"
23  RenderText {#text} at (52,0) size 4x17
24  text run at (52,0) width 4: " "
25  RenderMathMLMath {math} at (56,4) size 24x10 [padding: 0 1 0 1]
26  RenderMathMLUnderOver {mover} at (1,0) size 22x10
27  RenderMathMLSpace {mspace} at (0,8) size 22x2 [bgcolor=#0000FF]
28  RenderMathMLOperator {mo} at (1,0) size 20x8
 23 RenderText {#text} at (52,4) size 4x17
 24 text run at (52,4) width 4: " "
 25 RenderMathMLMath {math} at (56,2) size 24x16 [padding: 0 1 0 1]
 26 RenderMathMLUnderOver {mover} at (1,0) size 22x16
 27 RenderMathMLSpace {mspace} at (0,13) size 22x3 [bgcolor=#0000FF]
 28 RenderMathMLOperator {mo} at (1,0) size 20x9
2929 RenderBlock (anonymous) at (0,0) size 12x8
3030 RenderText {#text} at (0,-36) size 12x80
3131 text run at (0,-36) width 12: "\x{2194}"
32  RenderText {#text} at (80,0) size 4x17
33  text run at (80,0) width 4: " "
34  RenderMathMLMath {math} at (84,4) size 24x10 [padding: 0 1 0 1]
35  RenderMathMLUnderOver {mover} at (1,0) size 22x10
36  RenderMathMLSpace {mspace} at (0,8) size 22x2 [bgcolor=#0000FF]
37  RenderMathMLOperator {mo} at (1,0) size 20x8
 32 RenderText {#text} at (80,4) size 4x17
 33 text run at (80,4) width 4: " "
 34 RenderMathMLMath {math} at (84,2) size 24x16 [padding: 0 1 0 1]
 35 RenderMathMLUnderOver {mover} at (1,0) size 22x16
 36 RenderMathMLSpace {mspace} at (0,13) size 22x3 [bgcolor=#0000FF]
 37 RenderMathMLOperator {mo} at (1,0) size 20x9
3838 RenderBlock (anonymous) at (0,0) size 12x8
3939 RenderText {#text} at (0,-36) size 12x80
4040 text run at (0,-36) width 12: "\x{21A4}"
41  RenderText {#text} at (108,0) size 4x17
42  text run at (108,0) width 4: " "
43  RenderMathMLMath {math} at (112,4) size 24x10 [padding: 0 1 0 1]
44  RenderMathMLUnderOver {mover} at (1,0) size 22x10
45  RenderMathMLSpace {mspace} at (0,8) size 22x2 [bgcolor=#0000FF]
46  RenderMathMLOperator {mo} at (1,0) size 20x8
 41 RenderText {#text} at (108,4) size 4x17
 42 text run at (108,4) width 4: " "
 43 RenderMathMLMath {math} at (112,2) size 24x16 [padding: 0 1 0 1]
 44 RenderMathMLUnderOver {mover} at (1,0) size 22x16
 45 RenderMathMLSpace {mspace} at (0,13) size 22x3 [bgcolor=#0000FF]
 46 RenderMathMLOperator {mo} at (1,0) size 20x9
4747 RenderBlock (anonymous) at (0,0) size 12x8
4848 RenderText {#text} at (0,-36) size 12x80
4949 text run at (0,-36) width 12: "\x{21A6}"
50  RenderText {#text} at (136,0) size 4x17
51  text run at (136,0) width 4: " "
52  RenderMathMLMath {math} at (140,5) size 24x9 [padding: 0 1 0 1]
53  RenderMathMLUnderOver {mover} at (1,0) size 22x9
54  RenderMathMLSpace {mspace} at (0,7) size 22x2 [bgcolor=#0000FF]
55  RenderMathMLOperator {mo} at (1,0) size 20x7
 50 RenderText {#text} at (136,4) size 4x17
 51 text run at (136,4) width 4: " "
 52 RenderMathMLMath {math} at (140,3) size 24x15 [padding: 0 1 0 1]
 53 RenderMathMLUnderOver {mover} at (1,0) size 22x15
 54 RenderMathMLSpace {mspace} at (0,12) size 22x3 [bgcolor=#0000FF]
 55 RenderMathMLOperator {mo} at (1,0) size 20x8
5656 RenderBlock (anonymous) at (0,0) size 12x8
5757 RenderText {#text} at (0,-36) size 12x80
5858 text run at (0,-36) width 12: "\x{21BC}"
59  RenderText {#text} at (164,0) size 4x17
60  text run at (164,0) width 4: " "
61  RenderMathMLMath {math} at (168,7) size 24x7 [padding: 0 1 0 1]
62  RenderMathMLUnderOver {mover} at (1,0) size 22x7
63  RenderMathMLSpace {mspace} at (0,5) size 22x2 [bgcolor=#0000FF]
64  RenderMathMLOperator {mo} at (1,0) size 20x5
 59 RenderText {#text} at (164,4) size 4x17
 60 text run at (164,4) width 4: " "
 61 RenderMathMLMath {math} at (168,5) size 24x13 [padding: 0 1 0 1]
 62 RenderMathMLUnderOver {mover} at (1,0) size 22x13
 63 RenderMathMLSpace {mspace} at (0,10) size 22x3 [bgcolor=#0000FF]
 64 RenderMathMLOperator {mo} at (1,0) size 20x6
6565 RenderBlock (anonymous) at (0,0) size 12x5
6666 RenderText {#text} at (0,-39) size 12x80
6767 text run at (0,-39) width 12: "\x{21BD}"
68  RenderText {#text} at (192,0) size 4x17
69  text run at (192,0) width 4: " "
70  RenderMathMLMath {math} at (196,5) size 24x9 [padding: 0 1 0 1]
71  RenderMathMLUnderOver {mover} at (1,0) size 22x9
72  RenderMathMLSpace {mspace} at (0,7) size 22x2 [bgcolor=#0000FF]
73  RenderMathMLOperator {mo} at (1,0) size 20x7
 68 RenderText {#text} at (192,4) size 4x17
 69 text run at (192,4) width 4: " "
 70 RenderMathMLMath {math} at (196,3) size 24x15 [padding: 0 1 0 1]
 71 RenderMathMLUnderOver {mover} at (1,0) size 22x15
 72 RenderMathMLSpace {mspace} at (0,12) size 22x3 [bgcolor=#0000FF]
 73 RenderMathMLOperator {mo} at (1,0) size 20x8
7474 RenderBlock (anonymous) at (0,0) size 12x8
7575 RenderText {#text} at (0,-36) size 12x80
7676 text run at (0,-36) width 12: "\x{21C0}"
77  RenderText {#text} at (220,0) size 4x17
78  text run at (220,0) width 4: " "
79  RenderMathMLMath {math} at (224,4) size 24x10 [padding: 0 1 0 1]
80  RenderMathMLUnderOver {mover} at (1,0) size 22x10
81  RenderMathMLSpace {mspace} at (0,8) size 22x2 [bgcolor=#0000FF]
82  RenderMathMLOperator {mo} at (1,0) size 20x8
 77 RenderText {#text} at (220,4) size 4x17
 78 text run at (220,4) width 4: " "
 79 RenderMathMLMath {math} at (224,2) size 24x16 [padding: 0 1 0 1]
 80 RenderMathMLUnderOver {mover} at (1,0) size 22x16
 81 RenderMathMLSpace {mspace} at (0,13) size 22x3 [bgcolor=#0000FF]
 82 RenderMathMLOperator {mo} at (1,0) size 20x9
8383 RenderBlock (anonymous) at (0,0) size 12x8
8484 RenderText {#text} at (0,-36) size 12x80
8585 text run at (0,-36) width 12: "\x{21D0}"
86  RenderText {#text} at (248,0) size 4x17
87  text run at (248,0) width 4: " "
88  RenderMathMLMath {math} at (252,4) size 24x10 [padding: 0 1 0 1]
89  RenderMathMLUnderOver {mover} at (1,0) size 22x10
90  RenderMathMLSpace {mspace} at (0,8) size 22x2 [bgcolor=#0000FF]
91  RenderMathMLOperator {mo} at (1,0) size 20x8
 86 RenderText {#text} at (248,4) size 4x17
 87 text run at (248,4) width 4: " "
 88 RenderMathMLMath {math} at (252,2) size 24x16 [padding: 0 1 0 1]
 89 RenderMathMLUnderOver {mover} at (1,0) size 22x16
 90 RenderMathMLSpace {mspace} at (0,13) size 22x3 [bgcolor=#0000FF]
 91 RenderMathMLOperator {mo} at (1,0) size 20x9
9292 RenderBlock (anonymous) at (0,0) size 12x8
9393 RenderText {#text} at (0,-36) size 12x80
9494 text run at (0,-36) width 12: "\x{21D2}"
95  RenderText {#text} at (276,0) size 4x17
96  text run at (276,0) width 4: " "
97  RenderMathMLMath {math} at (280,4) size 24x10 [padding: 0 1 0 1]
98  RenderMathMLUnderOver {mover} at (1,0) size 22x10
99  RenderMathMLSpace {mspace} at (0,8) size 22x2 [bgcolor=#0000FF]
100  RenderMathMLOperator {mo} at (1,0) size 20x8
 95 RenderText {#text} at (276,4) size 4x17
 96 text run at (276,4) width 4: " "
 97 RenderMathMLMath {math} at (280,2) size 24x16 [padding: 0 1 0 1]
 98 RenderMathMLUnderOver {mover} at (1,0) size 22x16
 99 RenderMathMLSpace {mspace} at (0,13) size 22x3 [bgcolor=#0000FF]
 100 RenderMathMLOperator {mo} at (1,0) size 20x9
101101 RenderBlock (anonymous) at (0,0) size 12x8
102102 RenderText {#text} at (0,-36) size 12x80
103103 text run at (0,-36) width 12: "\x{21D4}"
104  RenderText {#text} at (304,0) size 4x17
105  text run at (304,0) width 4: " "
106  RenderMathMLMath {math} at (308,2) size 24x12 [padding: 0 1 0 1]
107  RenderMathMLUnderOver {mover} at (1,0) size 22x12
108  RenderMathMLSpace {mspace} at (0,10) size 22x2 [bgcolor=#0000FF]
109  RenderMathMLOperator {mo} at (1,0) size 20x10
 104 RenderText {#text} at (304,4) size 4x17
 105 text run at (304,4) width 4: " "
 106 RenderMathMLMath {math} at (308,0) size 24x18 [padding: 0 1 0 1]
 107 RenderMathMLUnderOver {mover} at (1,0) size 22x18
 108 RenderMathMLSpace {mspace} at (0,15) size 22x3 [bgcolor=#0000FF]
 109 RenderMathMLOperator {mo} at (1,0) size 20x11
110110 RenderBlock (anonymous) at (0,0) size 12x10
111111 RenderText {#text} at (0,-35) size 12x80
112112 text run at (0,-35) width 12: "\x{21DA}"
113  RenderText {#text} at (332,0) size 4x17
114  text run at (332,0) width 4: " "
115  RenderMathMLMath {math} at (336,2) size 24x12 [padding: 0 1 0 1]
116  RenderMathMLUnderOver {mover} at (1,0) size 22x12
117  RenderMathMLSpace {mspace} at (0,10) size 22x2 [bgcolor=#0000FF]
118  RenderMathMLOperator {mo} at (1,0) size 20x10
 113 RenderText {#text} at (332,4) size 4x17
 114 text run at (332,4) width 4: " "
 115 RenderMathMLMath {math} at (336,0) size 24x18 [padding: 0 1 0 1]
 116 RenderMathMLUnderOver {mover} at (1,0) size 22x18
 117 RenderMathMLSpace {mspace} at (0,15) size 22x3 [bgcolor=#0000FF]
 118 RenderMathMLOperator {mo} at (1,0) size 20x11
119119 RenderBlock (anonymous) at (0,0) size 12x10
120120 RenderText {#text} at (0,-35) size 12x80
121121 text run at (0,-35) width 12: "\x{21DB}"
122  RenderText {#text} at (360,0) size 4x17
123  text run at (360,0) width 4: " "
124  RenderMathMLMath {math} at (364,9) size 24x5 [padding: 0 1 0 1]
125  RenderMathMLUnderOver {mover} at (1,0) size 22x5
126  RenderMathMLSpace {mspace} at (0,3) size 22x2 [bgcolor=#0000FF]
127  RenderMathMLOperator {mo} at (9,0) size 4x3
 122 RenderText {#text} at (360,4) size 4x17
 123 text run at (360,4) width 4: " "
 124 RenderMathMLMath {math} at (364,7) size 24x11 [padding: 0 1 0 1]
 125 RenderMathMLUnderOver {mover} at (1,0) size 22x11
 126 RenderMathMLSpace {mspace} at (0,8) size 22x3 [bgcolor=#0000FF]
 127 RenderMathMLOperator {mo} at (9,0) size 4x4
128128 RenderBlock (anonymous) at (0,0) size 4x10
129129 RenderText {#text} at (0,-34) size 4x80
130130 text run at (0,-34) width 4: "\x{23B4}"
131  RenderText {#text} at (388,0) size 4x17
132  text run at (388,0) width 4: " "
133  RenderMathMLMath {math} at (392,9) size 24x5 [padding: 0 1 0 1]
134  RenderMathMLUnderOver {mover} at (1,0) size 22x5
135  RenderMathMLSpace {mspace} at (0,3) size 22x2 [bgcolor=#0000FF]
136  RenderMathMLOperator {mo} at (9,0) size 4x3
 131 RenderText {#text} at (388,4) size 4x17
 132 text run at (388,4) width 4: " "
 133 RenderMathMLMath {math} at (392,7) size 24x11 [padding: 0 1 0 1]
 134 RenderMathMLUnderOver {mover} at (1,0) size 22x11
 135 RenderMathMLSpace {mspace} at (0,8) size 22x3 [bgcolor=#0000FF]
 136 RenderMathMLOperator {mo} at (9,0) size 4x4
137137 RenderBlock (anonymous) at (0,0) size 4x4
138138 RenderText {#text} at (0,-43) size 4x80
139139 text run at (0,-43) width 4: "\x{23B5}"
140  RenderText {#text} at (416,0) size 4x17
141  text run at (416,0) width 4: " "
142  RenderMathMLMath {math} at (420,8) size 24x6 [padding: 0 1 0 1]
143  RenderMathMLUnderOver {mover} at (1,0) size 22x6
144  RenderMathMLSpace {mspace} at (0,4) size 22x2 [bgcolor=#0000FF]
145  RenderMathMLOperator {mo} at (8,0) size 6x4
 140 RenderText {#text} at (416,4) size 4x17
 141 text run at (416,4) width 4: " "
 142 RenderMathMLMath {math} at (420,6) size 24x12 [padding: 0 1 0 1]
 143 RenderMathMLUnderOver {mover} at (1,0) size 22x12
 144 RenderMathMLSpace {mspace} at (0,9) size 22x3 [bgcolor=#0000FF]
 145 RenderMathMLOperator {mo} at (8,0) size 6x5
146146 RenderBlock (anonymous) at (0,0) size 6x10
147147 RenderText {#text} at (0,-34) size 6x80
148148 text run at (0,-34) width 6: "\x{23DC}"
149  RenderText {#text} at (444,0) size 4x17
150  text run at (444,0) width 4: " "
151  RenderMathMLMath {math} at (448,7) size 24x7 [padding: 0 1 0 1]
152  RenderMathMLUnderOver {mover} at (1,0) size 22x7
153  RenderMathMLSpace {mspace} at (0,5) size 22x2 [bgcolor=#0000FF]
154  RenderMathMLOperator {mo} at (8,0) size 6x5
 149 RenderText {#text} at (444,4) size 4x17
 150 text run at (444,4) width 4: " "
 151 RenderMathMLMath {math} at (448,5) size 24x13 [padding: 0 1 0 1]
 152 RenderMathMLUnderOver {mover} at (1,0) size 22x13
 153 RenderMathMLSpace {mspace} at (0,10) size 22x3 [bgcolor=#0000FF]
 154 RenderMathMLOperator {mo} at (8,0) size 6x6
155155 RenderBlock (anonymous) at (0,0) size 6x4
156156 RenderText {#text} at (0,-43) size 6x80
157157 text run at (0,-43) width 6: "\x{23DD}"
158  RenderText {#text} at (472,0) size 4x17
159  text run at (472,0) width 4: " "
160  RenderMathMLMath {math} at (476,8) size 24x6 [padding: 0 1 0 1]
161  RenderMathMLUnderOver {mover} at (1,0) size 22x6
162  RenderMathMLSpace {mspace} at (0,4) size 22x2 [bgcolor=#0000FF]
163  RenderMathMLOperator {mo} at (8,0) size 6x4
 158 RenderText {#text} at (472,4) size 4x17
 159 text run at (472,4) width 4: " "
 160 RenderMathMLMath {math} at (476,6) size 24x12 [padding: 0 1 0 1]
 161 RenderMathMLUnderOver {mover} at (1,0) size 22x12
 162 RenderMathMLSpace {mspace} at (0,9) size 22x3 [bgcolor=#0000FF]
 163 RenderMathMLOperator {mo} at (8,0) size 6x5
164164 RenderBlock (anonymous) at (0,0) size 6x11
165165 RenderText {#text} at (0,-33) size 6x80
166166 text run at (0,-33) width 6: "\x{23DE}"
167  RenderText {#text} at (500,0) size 4x17
168  text run at (500,0) width 4: " "
169  RenderMathMLMath {math} at (504,7) size 24x7 [padding: 0 1 0 1]
170  RenderMathMLUnderOver {mover} at (1,0) size 22x7
171  RenderMathMLSpace {mspace} at (0,5) size 22x2 [bgcolor=#0000FF]
172  RenderMathMLOperator {mo} at (8,0) size 6x5
 167 RenderText {#text} at (500,4) size 4x17
 168 text run at (500,4) width 4: " "
 169 RenderMathMLMath {math} at (504,5) size 24x13 [padding: 0 1 0 1]
 170 RenderMathMLUnderOver {mover} at (1,0) size 22x13
 171 RenderMathMLSpace {mspace} at (0,10) size 22x3 [bgcolor=#0000FF]
 172 RenderMathMLOperator {mo} at (8,0) size 6x6
173173 RenderBlock (anonymous) at (0,0) size 6x5
174174 RenderText {#text} at (0,-43) size 6x80
175175 text run at (0,-43) width 6: "\x{23DF}"
176176 RenderText {#text} at (0,0) size 0x0
177  RenderBlock {P} at (0,33) size 784x34
178  RenderMathMLMath {math} at (0,4) size 52x10 [padding: 0 1 0 1]
179  RenderMathMLUnderOver {mover} at (1,0) size 50x10
180  RenderMathMLSpace {mspace} at (0,8) size 50x2 [bgcolor=#008000]
181  RenderMathMLOperator {mo} at (15,0) size 20x8
 177 RenderBlock {P} at (0,37) size 784x43
 178 RenderMathMLMath {math} at (0,2) size 52x16 [padding: 0 1 0 1]
 179 RenderMathMLUnderOver {mover} at (1,0) size 50x16
 180 RenderMathMLSpace {mspace} at (0,13) size 50x3 [bgcolor=#008000]
 181 RenderMathMLOperator {mo} at (15,0) size 20x9
182182 RenderBlock (anonymous) at (0,0) size 12x8
183183 RenderText {#text} at (0,-36) size 12x80
184184 text run at (0,-36) width 12: "\x{2190}"
185  RenderText {#text} at (52,0) size 4x17
186  text run at (52,0) width 4: " "
187  RenderMathMLMath {math} at (56,4) size 52x10 [padding: 0 1 0 1]
188  RenderMathMLUnderOver {mover} at (1,0) size 50x10
189  RenderMathMLSpace {mspace} at (0,8) size 50x2 [bgcolor=#008000]
190  RenderMathMLOperator {mo} at (15,0) size 20x8
 185 RenderText {#text} at (52,4) size 4x17
 186 text run at (52,4) width 4: " "
 187 RenderMathMLMath {math} at (56,2) size 52x16 [padding: 0 1 0 1]
 188 RenderMathMLUnderOver {mover} at (1,0) size 50x16
 189 RenderMathMLSpace {mspace} at (0,13) size 50x3 [bgcolor=#008000]
 190 RenderMathMLOperator {mo} at (15,0) size 20x9
191191 RenderBlock (anonymous) at (0,0) size 12x8
192192 RenderText {#text} at (0,-36) size 12x80
193193 text run at (0,-36) width 12: "\x{2192}"
194  RenderText {#text} at (108,0) size 4x17
195  text run at (108,0) width 4: " "
196  RenderMathMLMath {math} at (112,4) size 52x10 [padding: 0 1 0 1]
197  RenderMathMLUnderOver {mover} at (1,0) size 50x10
198  RenderMathMLSpace {mspace} at (0,8) size 50x2 [bgcolor=#008000]
199  RenderMathMLOperator {mo} at (15,0) size 20x8
 194 RenderText {#text} at (108,4) size 4x17
 195 text run at (108,4) width 4: " "
 196 RenderMathMLMath {math} at (112,2) size 52x16 [padding: 0 1 0 1]
 197 RenderMathMLUnderOver {mover} at (1,0) size 50x16
 198 RenderMathMLSpace {mspace} at (0,13) size 50x3 [bgcolor=#008000]
 199 RenderMathMLOperator {mo} at (15,0) size 20x9
200200 RenderBlock (anonymous) at (0,0) size 12x8
201201 RenderText {#text} at (0,-36) size 12x80
202202 text run at (0,-36) width 12: "\x{2194}"
203  RenderText {#text} at (164,0) size 4x17
204  text run at (164,0) width 4: " "
205  RenderMathMLMath {math} at (168,4) size 52x10 [padding: 0 1 0 1]
206  RenderMathMLUnderOver {mover} at (1,0) size 50x10
207  RenderMathMLSpace {mspace} at (0,8) size 50x2 [bgcolor=#008000]
208  RenderMathMLOperator {mo} at (15,0) size 20x8
 203 RenderText {#text} at (164,4) size 4x17
 204 text run at (164,4) width 4: " "
 205 RenderMathMLMath {math} at (168,2) size 52x16 [padding: 0 1 0 1]
 206 RenderMathMLUnderOver {mover} at (1,0) size 50x16
 207 RenderMathMLSpace {mspace} at (0,13) size 50x3 [bgcolor=#008000]
 208 RenderMathMLOperator {mo} at (15,0) size 20x9
209209 RenderBlock (anonymous) at (0,0) size 12x8
210210 RenderText {#text} at (0,-36) size 12x80
211211 text run at (0,-36) width 12: "\x{21A4}"
212  RenderText {#text} at (220,0) size 4x17
213  text run at (220,0) width 4: " "
214  RenderMathMLMath {math} at (224,4) size 52x10 [padding: 0 1 0 1]
215  RenderMathMLUnderOver {mover} at (1,0) size 50x10
216  RenderMathMLSpace {mspace} at (0,8) size 50x2 [bgcolor=#008000]
217  RenderMathMLOperator {mo} at (15,0) size 20x8
 212 RenderText {#text} at (220,4) size 4x17
 213 text run at (220,4) width 4: " "
 214 RenderMathMLMath {math} at (224,2) size 52x16 [padding: 0 1 0 1]
 215 RenderMathMLUnderOver {mover} at (1,0) size 50x16
 216 RenderMathMLSpace {mspace} at (0,13) size 50x3 [bgcolor=#008000]
 217 RenderMathMLOperator {mo} at (15,0) size 20x9
218218 RenderBlock (anonymous) at (0,0) size 12x8
219219 RenderText {#text} at (0,-36) size 12x80
220220 text run at (0,-36) width 12: "\x{21A6}"
221  RenderText {#text} at (276,0) size 4x17
222  text run at (276,0) width 4: " "
223  RenderMathMLMath {math} at (280,5) size 52x9 [padding: 0 1 0 1]
224  RenderMathMLUnderOver {mover} at (1,0) size 50x9
225  RenderMathMLSpace {mspace} at (0,7) size 50x2 [bgcolor=#008000]
226  RenderMathMLOperator {mo} at (15,0) size 20x7
 221 RenderText {#text} at (276,4) size 4x17
 222 text run at (276,4) width 4: " "
 223 RenderMathMLMath {math} at (280,3) size 52x15 [padding: 0 1 0 1]
 224 RenderMathMLUnderOver {mover} at (1,0) size 50x15
 225 RenderMathMLSpace {mspace} at (0,12) size 50x3 [bgcolor=#008000]
 226 RenderMathMLOperator {mo} at (15,0) size 20x8
227227 RenderBlock (anonymous) at (0,0) size 12x8
228228 RenderText {#text} at (0,-36) size 12x80
229229 text run at (0,-36) width 12: "\x{21BC}"
230  RenderText {#text} at (332,0) size 4x17
231  text run at (332,0) width 4: " "
232  RenderMathMLMath {math} at (336,7) size 52x7 [padding: 0 1 0 1]
233  RenderMathMLUnderOver {mover} at (1,0) size 50x7
234  RenderMathMLSpace {mspace} at (0,5) size 50x2 [bgcolor=#008000]
235  RenderMathMLOperator {mo} at (15,0) size 20x5
 230 RenderText {#text} at (332,4) size 4x17
 231 text run at (332,4) width 4: " "
 232 RenderMathMLMath {math} at (336,5) size 52x13 [padding: 0 1 0 1]
 233 RenderMathMLUnderOver {mover} at (1,0) size 50x13
 234 RenderMathMLSpace {mspace} at (0,10) size 50x3 [bgcolor=#008000]
 235 RenderMathMLOperator {mo} at (15,0) size 20x6
236236 RenderBlock (anonymous) at (0,0) size 12x5
237237 RenderText {#text} at (0,-39) size 12x80
238238 text run at (0,-39) width 12: "\x{21BD}"
239  RenderText {#text} at (388,0) size 4x17
240  text run at (388,0) width 4: " "
241  RenderMathMLMath {math} at (392,5) size 52x9 [padding: 0 1 0 1]
242  RenderMathMLUnderOver {mover} at (1,0) size 50x9
243  RenderMathMLSpace {mspace} at (0,7) size 50x2 [bgcolor=#008000]
244  RenderMathMLOperator {mo} at (15,0) size 20x7
 239 RenderText {#text} at (388,4) size 4x17
 240 text run at (388,4) width 4: " "
 241 RenderMathMLMath {math} at (392,3) size 52x15 [padding: 0 1 0 1]
 242 RenderMathMLUnderOver {mover} at (1,0) size 50x15
 243 RenderMathMLSpace {mspace} at (0,12) size 50x3 [bgcolor=#008000]
 244 RenderMathMLOperator {mo} at (15,0) size 20x8
245245 RenderBlock (anonymous) at (0,0) size 12x8
246246 RenderText {#text} at (0,-36) size 12x80
247247 text run at (0,-36) width 12: "\x{21C0}"
248  RenderText {#text} at (444,0) size 4x17
249  text run at (444,0) width 4: " "
250  RenderMathMLMath {math} at (448,4) size 52x10 [padding: 0 1 0 1]
251  RenderMathMLUnderOver {mover} at (1,0) size 50x10
252  RenderMathMLSpace {mspace} at (0,8) size 50x2 [bgcolor=#008000]
253  RenderMathMLOperator {mo} at (15,0) size 20x8
 248 RenderText {#text} at (444,4) size 4x17
 249 text run at (444,4) width 4: " "
 250 RenderMathMLMath {math} at (448,2) size 52x16 [padding: 0 1 0 1]
 251 RenderMathMLUnderOver {mover} at (1,0) size 50x16
 252 RenderMathMLSpace {mspace} at (0,13) size 50x3 [bgcolor=#008000]
 253 RenderMathMLOperator {mo} at (15,0) size 20x9
254254 RenderBlock (anonymous) at (0,0) size 12x8
255255 RenderText {#text} at (0,-36) size 12x80
256256 text run at (0,-36) width 12: "\x{21D0}"
257  RenderText {#text} at (500,0) size 4x17
258  text run at (500,0) width 4: " "
259  RenderMathMLMath {math} at (504,4) size 52x10 [padding: 0 1 0 1]
260  RenderMathMLUnderOver {mover} at (1,0) size 50x10
261  RenderMathMLSpace {mspace} at (0,8) size 50x2 [bgcolor=#008000]
262  RenderMathMLOperator {mo} at (15,0) size 20x8
 257 RenderText {#text} at (500,4) size 4x17
 258 text run at (500,4) width 4: " "
 259 RenderMathMLMath {math} at (504,2) size 52x16 [padding: 0 1 0 1]
 260 RenderMathMLUnderOver {mover} at (1,0) size 50x16
 261 RenderMathMLSpace {mspace} at (0,13) size 50x3 [bgcolor=#008000]
 262 RenderMathMLOperator {mo} at (15,0) size 20x9
263263 RenderBlock (anonymous) at (0,0) size 12x8
264264 RenderText {#text} at (0,-36) size 12x80
265265 text run at (0,-36) width 12: "\x{21D2}"
266  RenderText {#text} at (556,0) size 4x17
267  text run at (556,0) width 4: " "
268  RenderMathMLMath {math} at (560,4) size 52x10 [padding: 0 1 0 1]
269  RenderMathMLUnderOver {mover} at (1,0) size 50x10
270  RenderMathMLSpace {mspace} at (0,8) size 50x2 [bgcolor=#008000]
271  RenderMathMLOperator {mo} at (15,0) size 20x8
 266 RenderText {#text} at (556,4) size 4x17
 267 text run at (556,4) width 4: " "
 268 RenderMathMLMath {math} at (560,2) size 52x16 [padding: 0 1 0 1]
 269 RenderMathMLUnderOver {mover} at (1,0) size 50x16
 270 RenderMathMLSpace {mspace} at (0,13) size 50x3 [bgcolor=#008000]
 271 RenderMathMLOperator {mo} at (15,0) size 20x9
272272 RenderBlock (anonymous) at (0,0) size 12x8
273273 RenderText {#text} at (0,-36) size 12x80
274274 text run at (0,-36) width 12: "\x{21D4}"
275  RenderText {#text} at (612,0) size 4x17
276  text run at (612,0) width 4: " "
277  RenderMathMLMath {math} at (616,2) size 52x12 [padding: 0 1 0 1]
278  RenderMathMLUnderOver {mover} at (1,0) size 50x12
279  RenderMathMLSpace {mspace} at (0,10) size 50x2 [bgcolor=#008000]
280  RenderMathMLOperator {mo} at (15,0) size 20x10
 275 RenderText {#text} at (612,4) size 4x17
 276 text run at (612,4) width 4: " "
 277 RenderMathMLMath {math} at (616,0) size 52x18 [padding: 0 1 0 1]
 278 RenderMathMLUnderOver {mover} at (1,0) size 50x18
 279 RenderMathMLSpace {mspace} at (0,15) size 50x3 [bgcolor=#008000]
 280 RenderMathMLOperator {mo} at (15,0) size 20x11
281281 RenderBlock (anonymous) at (0,0) size 12x10
282282 RenderText {#text} at (0,-35) size 12x80
283283 text run at (0,-35) width 12: "\x{21DA}"
284  RenderText {#text} at (668,0) size 4x17
285  text run at (668,0) width 4: " "
286  RenderMathMLMath {math} at (672,2) size 52x12 [padding: 0 1 0 1]
287  RenderMathMLUnderOver {mover} at (1,0) size 50x12
288  RenderMathMLSpace {mspace} at (0,10) size 50x2 [bgcolor=#008000]
289  RenderMathMLOperator {mo} at (15,0) size 20x10
 284 RenderText {#text} at (668,4) size 4x17
 285 text run at (668,4) width 4: " "
 286 RenderMathMLMath {math} at (672,0) size 52x18 [padding: 0 1 0 1]
 287 RenderMathMLUnderOver {mover} at (1,0) size 50x18
 288 RenderMathMLSpace {mspace} at (0,15) size 50x3 [bgcolor=#008000]
 289 RenderMathMLOperator {mo} at (15,0) size 20x11
290290 RenderBlock (anonymous) at (0,0) size 12x10
291291 RenderText {#text} at (0,-35) size 12x80
292292 text run at (0,-35) width 12: "\x{21DB}"
293  RenderText {#text} at (724,0) size 4x17
294  text run at (724,0) width 4: " "
295  RenderMathMLMath {math} at (728,2) size 52x12 [padding: 0 1 0 1]
296  RenderMathMLUnderOver {mover} at (1,0) size 50x12
297  RenderMathMLSpace {mspace} at (0,10) size 50x2 [bgcolor=#008000]
298  RenderMathMLOperator {mo} at (23,0) size 4x10
 293 RenderText {#text} at (724,4) size 4x17
 294 text run at (724,4) width 4: " "
 295 RenderMathMLMath {math} at (728,0) size 52x18 [padding: 0 1 0 1]
 296 RenderMathMLUnderOver {mover} at (1,0) size 50x18
 297 RenderMathMLSpace {mspace} at (0,15) size 50x3 [bgcolor=#008000]
 298 RenderMathMLOperator {mo} at (23,0) size 4x11
299299 RenderBlock (anonymous) at (0,0) size 4x10
300300 RenderText {#text} at (0,-34) size 4x80
301301 text run at (0,-34) width 4: "\x{23B4}"
302302 RenderText {#text} at (0,0) size 0x0
303  RenderMathMLMath {math} at (0,24) size 52x7 [padding: 0 1 0 1]
304  RenderMathMLUnderOver {mover} at (1,0) size 50x7
305  RenderMathMLSpace {mspace} at (0,5) size 50x2 [bgcolor=#008000]
306  RenderMathMLOperator {mo} at (23,0) size 4x5
 303 RenderMathMLMath {math} at (0,27) size 52x13 [padding: 0 1 0 1]
 304 RenderMathMLUnderOver {mover} at (1,0) size 50x13
 305 RenderMathMLSpace {mspace} at (0,10) size 50x3 [bgcolor=#008000]
 306 RenderMathMLOperator {mo} at (23,0) size 4x6
307307 RenderBlock (anonymous) at (0,0) size 4x4
308308 RenderText {#text} at (0,-43) size 4x80
309309 text run at (0,-43) width 4: "\x{23B5}"
310  RenderText {#text} at (52,17) size 4x17
311  text run at (52,17) width 4: " "
312  RenderMathMLMath {math} at (56,19) size 52x12 [padding: 0 1 0 1]
313  RenderMathMLUnderOver {mover} at (1,0) size 50x12
314  RenderMathMLSpace {mspace} at (0,10) size 50x2 [bgcolor=#008000]
315  RenderMathMLOperator {mo} at (22,0) size 6x10
 310 RenderText {#text} at (52,26) size 4x17
 311 text run at (52,26) width 4: " "
 312 RenderMathMLMath {math} at (56,22) size 52x18 [padding: 0 1 0 1]
 313 RenderMathMLUnderOver {mover} at (1,0) size 50x18
 314 RenderMathMLSpace {mspace} at (0,15) size 50x3 [bgcolor=#008000]
 315 RenderMathMLOperator {mo} at (22,0) size 6x11
316316 RenderBlock (anonymous) at (0,0) size 6x10
317317 RenderText {#text} at (0,-34) size 6x80
318318 text run at (0,-34) width 6: "\x{23DC}"
319  RenderText {#text} at (108,17) size 4x17
320  text run at (108,17) width 4: " "
321  RenderMathMLMath {math} at (112,24) size 52x7 [padding: 0 1 0 1]
322  RenderMathMLUnderOver {mover} at (1,0) size 50x7
323  RenderMathMLSpace {mspace} at (0,5) size 50x2 [bgcolor=#008000]
324  RenderMathMLOperator {mo} at (22,0) size 6x5
 319 RenderText {#text} at (108,26) size 4x17
 320 text run at (108,26) width 4: " "
 321 RenderMathMLMath {math} at (112,27) size 52x13 [padding: 0 1 0 1]
 322 RenderMathMLUnderOver {mover} at (1,0) size 50x13
 323 RenderMathMLSpace {mspace} at (0,10) size 50x3 [bgcolor=#008000]
 324 RenderMathMLOperator {mo} at (22,0) size 6x6
325325 RenderBlock (anonymous) at (0,0) size 6x4
326326 RenderText {#text} at (0,-43) size 6x80
327327 text run at (0,-43) width 6: "\x{23DD}"
328  RenderText {#text} at (164,17) size 4x17
329  text run at (164,17) width 4: " "
330  RenderMathMLMath {math} at (168,18) size 52x13 [padding: 0 1 0 1]
331  RenderMathMLUnderOver {mover} at (1,0) size 50x13
332  RenderMathMLSpace {mspace} at (0,11) size 50x2 [bgcolor=#008000]
333  RenderMathMLOperator {mo} at (22,0) size 6x11
 328 RenderText {#text} at (164,26) size 4x17
 329 text run at (164,26) width 4: " "
 330 RenderMathMLMath {math} at (168,21) size 52x19 [padding: 0 1 0 1]
 331 RenderMathMLUnderOver {mover} at (1,0) size 50x19
 332 RenderMathMLSpace {mspace} at (0,16) size 50x3 [bgcolor=#008000]
 333 RenderMathMLOperator {mo} at (22,0) size 6x12
334334 RenderBlock (anonymous) at (0,0) size 6x11
335335 RenderText {#text} at (0,-33) size 6x80
336336 text run at (0,-33) width 6: "\x{23DE}"
337  RenderText {#text} at (220,17) size 4x17
338  text run at (220,17) width 4: " "
339  RenderMathMLMath {math} at (224,23) size 52x8 [padding: 0 1 0 1]
340  RenderMathMLUnderOver {mover} at (1,0) size 50x8
341  RenderMathMLSpace {mspace} at (0,6) size 50x2 [bgcolor=#008000]
342  RenderMathMLOperator {mo} at (22,0) size 6x6
 337 RenderText {#text} at (220,26) size 4x17
 338 text run at (220,26) width 4: " "
 339 RenderMathMLMath {math} at (224,26) size 52x14 [padding: 0 1 0 1]
 340 RenderMathMLUnderOver {mover} at (1,0) size 50x14
 341 RenderMathMLSpace {mspace} at (0,11) size 50x3 [bgcolor=#008000]
 342 RenderMathMLOperator {mo} at (22,0) size 6x7
343343 RenderBlock (anonymous) at (0,0) size 6x5
344344 RenderText {#text} at (0,-43) size 6x80
345345 text run at (0,-43) width 6: "\x{23DF}"
346346 RenderText {#text} at (0,0) size 0x0
347  RenderBlock {P} at (0,83) size 784x51
348  RenderMathMLMath {math} at (0,4) size 102x10 [padding: 0 1 0 1]
349  RenderMathMLUnderOver {mover} at (1,0) size 100x10
350  RenderMathMLSpace {mspace} at (0,8) size 100x2 [bgcolor=#FF0000]
351  RenderMathMLOperator {mo} at (40,0) size 20x8
 347 RenderBlock {P} at (0,96) size 784x62
 348 RenderMathMLMath {math} at (0,0) size 102x16 [padding: 0 1 0 1]
 349 RenderMathMLUnderOver {mover} at (1,0) size 100x16
 350 RenderMathMLSpace {mspace} at (0,13) size 100x3 [bgcolor=#FF0000]
 351 RenderMathMLOperator {mo} at (40,0) size 20x9
352352 RenderBlock (anonymous) at (0,0) size 12x8
353353 RenderText {#text} at (0,-36) size 12x80
354354 text run at (0,-36) width 12: "\x{2190}"
355  RenderText {#text} at (102,0) size 4x17
356  text run at (102,0) width 4: " "
357  RenderMathMLMath {math} at (106,4) size 102x10 [padding: 0 1 0 1]
358  RenderMathMLUnderOver {mover} at (1,0) size 100x10
359  RenderMathMLSpace {mspace} at (0,8) size 100x2 [bgcolor=#FF0000]
360  RenderMathMLOperator {mo} at (40,0) size 20x8
 355 RenderText {#text} at (102,2) size 4x17
 356 text run at (102,2) width 4: " "
 357 RenderMathMLMath {math} at (106,0) size 102x16 [padding: 0 1 0 1]
 358 RenderMathMLUnderOver {mover} at (1,0) size 100x16
 359 RenderMathMLSpace {mspace} at (0,13) size 100x3 [bgcolor=#FF0000]
 360 RenderMathMLOperator {mo} at (40,0) size 20x9
361361 RenderBlock (anonymous) at (0,0) size 12x8
362362 RenderText {#text} at (0,-36) size 12x80
363363 text run at (0,-36) width 12: "\x{2192}"
364  RenderText {#text} at (208,0) size 4x17
365  text run at (208,0) width 4: " "
366  RenderMathMLMath {math} at (212,4) size 102x10 [padding: 0 1 0 1]
367  RenderMathMLUnderOver {mover} at (1,0) size 100x10
368  RenderMathMLSpace {mspace} at (0,8) size 100x2 [bgcolor=#FF0000]
369  RenderMathMLOperator {mo} at (40,0) size 20x8
 364 RenderText {#text} at (208,2) size 4x17
 365 text run at (208,2) width 4: " "
 366 RenderMathMLMath {math} at (212,0) size 102x16 [padding: 0 1 0 1]
 367 RenderMathMLUnderOver {mover} at (1,0) size 100x16
 368 RenderMathMLSpace {mspace} at (0,13) size 100x3 [bgcolor=#FF0000]
 369 RenderMathMLOperator {mo} at (40,0) size 20x9
370370 RenderBlock (anonymous) at (0,0) size 12x8
371371 RenderText {#text} at (0,-36) size 12x80
372372 text run at (0,-36) width 12: "\x{2194}"
373  RenderText {#text} at (314,0) size 4x17
374  text run at (314,0) width 4: " "
375  RenderMathMLMath {math} at (318,4) size 102x10 [padding: 0 1 0 1]
376  RenderMathMLUnderOver {mover} at (1,0) size 100x10
377  RenderMathMLSpace {mspace} at (0,8) size 100x2 [bgcolor=#FF0000]
378  RenderMathMLOperator {mo} at (40,0) size 20x8
 373 RenderText {#text} at (314,2) size 4x17
 374 text run at (314,2) width 4: " "
 375 RenderMathMLMath {math} at (318,0) size 102x16 [padding: 0 1 0 1]
 376 RenderMathMLUnderOver {mover} at (1,0) size 100x16
 377 RenderMathMLSpace {mspace} at (0,13) size 100x3 [bgcolor=#FF0000]
 378 RenderMathMLOperator {mo} at (40,0) size 20x9
379379 RenderBlock (anonymous) at (0,0) size 12x8
380380 RenderText {#text} at (0,-36) size 12x80
381381 text run at (0,-36) width 12: "\x{21A4}"
382  RenderText {#text} at (420,0) size 4x17
383  text run at (420,0) width 4: " "
384  RenderMathMLMath {math} at (424,4) size 102x10 [padding: 0 1 0 1]
385  RenderMathMLUnderOver {mover} at (1,0) size 100x10
386  RenderMathMLSpace {mspace} at (0,8) size 100x2 [bgcolor=#FF0000]
387  RenderMathMLOperator {mo} at (40,0) size 20x8
 382 RenderText {#text} at (420,2) size 4x17
 383 text run at (420,2) width 4: " "
 384 RenderMathMLMath {math} at (424,0) size 102x16 [padding: 0 1 0 1]
 385 RenderMathMLUnderOver {mover} at (1,0) size 100x16
 386 RenderMathMLSpace {mspace} at (0,13) size 100x3 [bgcolor=#FF0000]
 387 RenderMathMLOperator {mo} at (40,0) size 20x9
388388 RenderBlock (anonymous) at (0,0) size 12x8
389389 RenderText {#text} at (0,-36) size 12x80
390390 text run at (0,-36) width 12: "\x{21A6}"
391  RenderText {#text} at (526,0) size 4x17
392  text run at (526,0) width 4: " "
393  RenderMathMLMath {math} at (530,5) size 102x9 [padding: 0 1 0 1]
394  RenderMathMLUnderOver {mover} at (1,0) size 100x9
395  RenderMathMLSpace {mspace} at (0,7) size 100x2 [bgcolor=#FF0000]
396  RenderMathMLOperator {mo} at (40,0) size 20x7
 391 RenderText {#text} at (526,2) size 4x17
 392 text run at (526,2) width 4: " "
 393 RenderMathMLMath {math} at (530,1) size 102x15 [padding: 0 1 0 1]
 394 RenderMathMLUnderOver {mover} at (1,0) size 100x15
 395 RenderMathMLSpace {mspace} at (0,12) size 100x3 [bgcolor=#FF0000]
 396 RenderMathMLOperator {mo} at (40,0) size 20x8
397397 RenderBlock (anonymous) at (0,0) size 12x8
398398 RenderText {#text} at (0,-36) size 12x80
399399 text run at (0,-36) width 12: "\x{21BC}"
400  RenderText {#text} at (632,0) size 4x17
401  text run at (632,0) width 4: " "
402  RenderMathMLMath {math} at (636,7) size 102x7 [padding: 0 1 0 1]
403  RenderMathMLUnderOver {mover} at (1,0) size 100x7
404  RenderMathMLSpace {mspace} at (0,5) size 100x2 [bgcolor=#FF0000]
405  RenderMathMLOperator {mo} at (40,0) size 20x5
 400 RenderText {#text} at (632,2) size 4x17
 401 text run at (632,2) width 4: " "
 402 RenderMathMLMath {math} at (636,3) size 102x13 [padding: 0 1 0 1]
 403 RenderMathMLUnderOver {mover} at (1,0) size 100x13
 404 RenderMathMLSpace {mspace} at (0,10) size 100x3 [bgcolor=#FF0000]
 405 RenderMathMLOperator {mo} at (40,0) size 20x6
406406 RenderBlock (anonymous) at (0,0) size 12x5
407407 RenderText {#text} at (0,-39) size 12x80
408408 text run at (0,-39) width 12: "\x{21BD}"
409409 RenderText {#text} at (0,0) size 0x0
410  RenderMathMLMath {math} at (0,22) size 102x9 [padding: 0 1 0 1]
411  RenderMathMLUnderOver {mover} at (1,0) size 100x9
412  RenderMathMLSpace {mspace} at (0,7) size 100x2 [bgcolor=#FF0000]
413  RenderMathMLOperator {mo} at (40,0) size 20x7
 410 RenderMathMLMath {math} at (0,22) size 102x15 [padding: 0 1 0 1]
 411 RenderMathMLUnderOver {mover} at (1,0) size 100x15
 412 RenderMathMLSpace {mspace} at (0,12) size 100x3 [bgcolor=#FF0000]
 413 RenderMathMLOperator {mo} at (40,0) size 20x8
414414 RenderBlock (anonymous) at (0,0) size 12x8
415415 RenderText {#text} at (0,-36) size 12x80
416416 text run at (0,-36) width 12: "\x{21C0}"
417  RenderText {#text} at (102,17) size 4x17
418  text run at (102,17) width 4: " "
419  RenderMathMLMath {math} at (106,21) size 102x10 [padding: 0 1 0 1]
420  RenderMathMLUnderOver {mover} at (1,0) size 100x10
421  RenderMathMLSpace {mspace} at (0,8) size 100x2 [bgcolor=#FF0000]
422  RenderMathMLOperator {mo} at (40,0) size 20x8
 417 RenderText {#text} at (102,23) size 4x17
 418 text run at (102,23) width 4: " "
 419 RenderMathMLMath {math} at (106,21) size 102x16 [padding: 0 1 0 1]
 420 RenderMathMLUnderOver {mover} at (1,0) size 100x16
 421 RenderMathMLSpace {mspace} at (0,13) size 100x3 [bgcolor=#FF0000]
 422 RenderMathMLOperator {mo} at (40,0) size 20x9
423423 RenderBlock (anonymous) at (0,0) size 12x8
424424 RenderText {#text} at (0,-36) size 12x80
425425 text run at (0,-36) width 12: "\x{21D0}"
426  RenderText {#text} at (208,17) size 4x17
427  text run at (208,17) width 4: " "
428  RenderMathMLMath {math} at (212,21) size 102x10 [padding: 0 1 0 1]
429  RenderMathMLUnderOver {mover} at (1,0) size 100x10
430  RenderMathMLSpace {mspace} at (0,8) size 100x2 [bgcolor=#FF0000]
431  RenderMathMLOperator {mo} at (40,0) size 20x8
 426 RenderText {#text} at (208,23) size 4x17
 427 text run at (208,23) width 4: " "
 428 RenderMathMLMath {math} at (212,21) size 102x16 [padding: 0 1 0 1]
 429 RenderMathMLUnderOver {mover} at (1,0) size 100x16
 430 RenderMathMLSpace {mspace} at (0,13) size 100x3 [bgcolor=#FF0000]
 431 RenderMathMLOperator {mo} at (40,0) size 20x9
432432 RenderBlock (anonymous) at (0,0) size 12x8
433433 RenderText {#text} at (0,-36) size 12x80
434434 text run at (0,-36) width 12: "\x{21D2}"
435  RenderText {#text} at (314,17) size 4x17
436  text run at (314,17) width 4: " "
437  RenderMathMLMath {math} at (318,21) size 102x10 [padding: 0 1 0 1]
438  RenderMathMLUnderOver {mover} at (1,0) size 100x10
439  RenderMathMLSpace {mspace} at (0,8) size 100x2 [bgcolor=#FF0000]
440  RenderMathMLOperator {mo} at (40,0) size 20x8
 435 RenderText {#text} at (314,23) size 4x17
 436 text run at (314,23) width 4: " "
 437 RenderMathMLMath {math} at (318,21) size 102x16 [padding: 0 1 0 1]
 438 RenderMathMLUnderOver {mover} at (1,0) size 100x16
 439 RenderMathMLSpace {mspace} at (0,13) size 100x3 [bgcolor=#FF0000]
 440 RenderMathMLOperator {mo} at (40,0) size 20x9
441441 RenderBlock (anonymous) at (0,0) size 12x8
442442 RenderText {#text} at (0,-36) size 12x80
443443 text run at (0,-36) width 12: "\x{21D4}"
444  RenderText {#text} at (420,17) size 4x17
445  text run at (420,17) width 4: " "
446  RenderMathMLMath {math} at (424,19) size 102x12 [padding: 0 1 0 1]
447  RenderMathMLUnderOver {mover} at (1,0) size 100x12
448  RenderMathMLSpace {mspace} at (0,10) size 100x2 [bgcolor=#FF0000]
449  RenderMathMLOperator {mo} at (40,0) size 20x10
 444 RenderText {#text} at (420,23) size 4x17
 445 text run at (420,23) width 4: " "
 446 RenderMathMLMath {math} at (424,19) size 102x18 [padding: 0 1 0 1]
 447 RenderMathMLUnderOver {mover} at (1,0) size 100x18
 448 RenderMathMLSpace {mspace} at (0,15) size 100x3 [bgcolor=#FF0000]
 449 RenderMathMLOperator {mo} at (40,0) size 20x11
450450 RenderBlock (anonymous) at (0,0) size 12x10
451451 RenderText {#text} at (0,-35) size 12x80
452452 text run at (0,-35) width 12: "\x{21DA}"
453  RenderText {#text} at (526,17) size 4x17
454  text run at (526,17) width 4: " "
455  RenderMathMLMath {math} at (530,19) size 102x12 [padding: 0 1 0 1]
456  RenderMathMLUnderOver {mover} at (1,0) size 100x12
457  RenderMathMLSpace {mspace} at (0,10) size 100x2 [bgcolor=#FF0000]
458  RenderMathMLOperator {mo} at (40,0) size 20x10
 453 RenderText {#text} at (526,23) size 4x17
 454 text run at (526,23) width 4: " "
 455 RenderMathMLMath {math} at (530,19) size 102x18 [padding: 0 1 0 1]
 456 RenderMathMLUnderOver {mover} at (1,0) size 100x18
 457 RenderMathMLSpace {mspace} at (0,15) size 100x3 [bgcolor=#FF0000]
 458 RenderMathMLOperator {mo} at (40,0) size 20x11
459459 RenderBlock (anonymous) at (0,0) size 12x10
460460 RenderText {#text} at (0,-35) size 12x80
461461 text run at (0,-35) width 12: "\x{21DB}"
462  RenderText {#text} at (632,17) size 4x17
463  text run at (632,17) width 4: " "
464  RenderMathMLMath {math} at (636,19) size 102x12 [padding: 0 1 0 1]
465  RenderMathMLUnderOver {mover} at (1,0) size 100x12
466  RenderMathMLSpace {mspace} at (0,10) size 100x2 [bgcolor=#FF0000]
467  RenderMathMLOperator {mo} at (48,0) size 4x10
 462 RenderText {#text} at (632,23) size 4x17
 463 text run at (632,23) width 4: " "
 464 RenderMathMLMath {math} at (636,19) size 102x18 [padding: 0 1 0 1]
 465 RenderMathMLUnderOver {mover} at (1,0) size 100x18
 466 RenderMathMLSpace {mspace} at (0,15) size 100x3 [bgcolor=#FF0000]
 467 RenderMathMLOperator {mo} at (48,0) size 4x11
468468 RenderBlock (anonymous) at (0,0) size 4x10
469469 RenderText {#text} at (0,-34) size 4x80
470470 text run at (0,-34) width 4: "\x{23B4}"
471471 RenderText {#text} at (0,0) size 0x0
472  RenderMathMLMath {math} at (0,41) size 102x7 [padding: 0 1 0 1]
473  RenderMathMLUnderOver {mover} at (1,0) size 100x7
474  RenderMathMLSpace {mspace} at (0,5) size 100x2 [bgcolor=#FF0000]
475  RenderMathMLOperator {mo} at (48,0) size 4x5
 472 RenderMathMLMath {math} at (0,46) size 102x13 [padding: 0 1 0 1]
 473 RenderMathMLUnderOver {mover} at (1,0) size 100x13
 474 RenderMathMLSpace {mspace} at (0,10) size 100x3 [bgcolor=#FF0000]
 475 RenderMathMLOperator {mo} at (48,0) size 4x6
476476 RenderBlock (anonymous) at (0,0) size 4x4
477477 RenderText {#text} at (0,-43) size 4x80
478478 text run at (0,-43) width 4: "\x{23B5}"
479  RenderText {#text} at (102,34) size 4x17
480  text run at (102,34) width 4: " "
481  RenderMathMLMath {math} at (106,36) size 102x12 [padding: 0 1 0 1]
482  RenderMathMLUnderOver {mover} at (1,0) size 100x12
483  RenderMathMLSpace {mspace} at (0,10) size 100x2 [bgcolor=#FF0000]
484  RenderMathMLOperator {mo} at (47,0) size 6x10
 479 RenderText {#text} at (102,45) size 4x17
 480 text run at (102,45) width 4: " "
 481 RenderMathMLMath {math} at (106,41) size 102x18 [padding: 0 1 0 1]
 482 RenderMathMLUnderOver {mover} at (1,0) size 100x18
 483 RenderMathMLSpace {mspace} at (0,15) size 100x3 [bgcolor=#FF0000]
 484 RenderMathMLOperator {mo} at (47,0) size 6x11
485485 RenderBlock (anonymous) at (0,0) size 6x10
486486 RenderText {#text} at (0,-34) size 6x80
487487 text run at (0,-34) width 6: "\x{23DC}"
488  RenderText {#text} at (208,34) size 4x17
489  text run at (208,34) width 4: " "
490  RenderMathMLMath {math} at (212,41) size 102x7 [padding: 0 1 0 1]
491  RenderMathMLUnderOver {mover} at (1,0) size 100x7
492  RenderMathMLSpace {mspace} at (0,5) size 100x2 [bgcolor=#FF0000]
493  RenderMathMLOperator {mo} at (47,0) size 6x5
 488 RenderText {#text} at (208,45) size 4x17
 489 text run at (208,45) width 4: " "
 490 RenderMathMLMath {math} at (212,46) size 102x13 [padding: 0 1 0 1]
 491 RenderMathMLUnderOver {mover} at (1,0) size 100x13
 492 RenderMathMLSpace {mspace} at (0,10) size 100x3 [bgcolor=#FF0000]
 493 RenderMathMLOperator {mo} at (47,0) size 6x6
494494 RenderBlock (anonymous) at (0,0) size 6x4
495495 RenderText {#text} at (0,-43) size 6x80
496496 text run at (0,-43) width 6: "\x{23DD}"
497  RenderText {#text} at (314,34) size 4x17
498  text run at (314,34) width 4: " "
499  RenderMathMLMath {math} at (318,35) size 102x13 [padding: 0 1 0 1]
500  RenderMathMLUnderOver {mover} at (1,0) size 100x13
501  RenderMathMLSpace {mspace} at (0,11) size 100x2 [bgcolor=#FF0000]
502  RenderMathMLOperator {mo} at (47,0) size 6x11
 497 RenderText {#text} at (314,45) size 4x17
 498 text run at (314,45) width 4: " "
 499 RenderMathMLMath {math} at (318,40) size 102x19 [padding: 0 1 0 1]
 500 RenderMathMLUnderOver {mover} at (1,0) size 100x19
 501 RenderMathMLSpace {mspace} at (0,16) size 100x3 [bgcolor=#FF0000]
 502 RenderMathMLOperator {mo} at (47,0) size 6x12
503503 RenderBlock (anonymous) at (0,0) size 6x11
504504 RenderText {#text} at (0,-33) size 6x80
505505 text run at (0,-33) width 6: "\x{23DE}"
506  RenderText {#text} at (420,34) size 4x17
507  text run at (420,34) width 4: " "
508  RenderMathMLMath {math} at (424,40) size 102x8 [padding: 0 1 0 1]
509  RenderMathMLUnderOver {mover} at (1,0) size 100x8
510  RenderMathMLSpace {mspace} at (0,6) size 100x2 [bgcolor=#FF0000]
511  RenderMathMLOperator {mo} at (47,0) size 6x6
 506 RenderText {#text} at (420,45) size 4x17
 507 text run at (420,45) width 4: " "
 508 RenderMathMLMath {math} at (424,45) size 102x14 [padding: 0 1 0 1]
 509 RenderMathMLUnderOver {mover} at (1,0) size 100x14
 510 RenderMathMLSpace {mspace} at (0,11) size 100x3 [bgcolor=#FF0000]
 511 RenderMathMLOperator {mo} at (47,0) size 6x7
512512 RenderBlock (anonymous) at (0,0) size 6x5
513513 RenderText {#text} at (0,-43) size 6x80
514514 text run at (0,-43) width 6: "\x{23DF}"

LayoutTests/platform/gtk/mathml/opentype/horizontal-munderover-expected.png

Exception raised during decoding git binary patch:
Error running git apply --directory=/tmp
with patch:
diff --git a/PrettyPatch20260325-5547-bkvnke.bin b/PrettyPatch20260325-5547-bkvnke.bin
new file mode 100644
index 0000000000000000000000000000000000000000..a266bc1dd9634ce591abe8d77961efbf84c3d729
GIT binary patch
literal 3920
zcmeHKX;+g+6n+7Zq6lcC1dAFh7U}_s6tjs*M6rk|No#uyr;3DtMH6LFAwhP~Mr5m{
zh?GqawJuZ$wI$H7M1m}`DM5j-gpfd#1Y#hNK(@Zvf6#9|CwD%~J$GjA-22S)e3;Cy
zi2k-4KHdNTfNj7rzY_pp<qQCpLDrUFWb2l#Zs4@%%F&=JVdu_<(J#kd1j3PFXs>Wo
zC<e11jlqO^VbIjisb@n`NX-6Fgcmw=Y9PxUJhYZd@b?2utK)9tgM0w6dl}&8`z^C%
zb_{=R...
error: invalid path '/tmp/PrettyPatch20260325-5547-bkvnke.bin'

/var/www/bugs.webkit.org/Websites/bugs.webkit.org/PrettyPatch/PrettyPatch.rb:924:in `run_git_apply_on_patch'
/var/www/bugs.webkit.org/Websites/bugs.webkit.org/PrettyPatch/PrettyPatch.rb:935:in `extract_contents_from_git_binary_literal_chunk'
/var/www/bugs.webkit.org/Websites/bugs.webkit.org/PrettyPatch/PrettyPatch.rb:950:in `extract_contents_from_remote'
/var/www/bugs.webkit.org/Websites/bugs.webkit.org/PrettyPatch/PrettyPatch.rb:713:in `initialize'
/var/www/bugs.webkit.org/Websites/bugs.webkit.org/PrettyPatch/PrettyPatch.rb:845:in `new'
/var/www/bugs.webkit.org/Websites/bugs.webkit.org/PrettyPatch/PrettyPatch.rb:845:in `block in parse'
/var/www/bugs.webkit.org/Websites/bugs.webkit.org/PrettyPatch/PrettyPatch.rb:845:in `collect'
/var/www/bugs.webkit.org/Websites/bugs.webkit.org/PrettyPatch/PrettyPatch.rb:845:in `parse'
/var/www/bugs.webkit.org/Websites/bugs.webkit.org/PrettyPatch/PrettyPatch.rb:21:in `prettify'
/var/www/html/PrettyPatch/prettify.rb:30:in `<main>'

LayoutTests/platform/gtk/mathml/opentype/horizontal-munderover-expected.txt

11layer at (0,0) size 800x600
22 RenderView at (0,0) size 800x600
3 layer at (0,0) size 800x63
4  RenderBlock {HTML} at (0,0) size 800x63
5  RenderBody {BODY} at (8,16) size 784x31
6  RenderBlock {P} at (0,0) size 784x31
7  RenderMathMLMath {math} at (0,4) size 50x16 [padding: 0 1 0 1]
8  RenderMathMLRow {mstyle} at (1,0) size 48x16
9  RenderMathMLUnderOver {mover} at (0,0) size 48x8
10  RenderMathMLOperator {mo} at (20,2) size 8x6
 3layer at (0,0) size 800x70
 4 RenderBlock {HTML} at (0,0) size 800x70
 5 RenderBody {BODY} at (8,16) size 784x38
 6 RenderBlock {P} at (0,0) size 784x38
 7 RenderMathMLMath {math} at (0,8) size 50x19 [padding: 0 1 0 1]
 8 RenderMathMLRow {mstyle} at (1,0) size 48x19
 9 RenderMathMLUnderOver {mover} at (0,0) size 48x12
 10 RenderMathMLOperator {mo} at (20,5) size 8x7
1111 RenderBlock (anonymous) at (0,0) size 8x14
1212 RenderText {#text} at (0,-44) size 8x106
1313 text run at (0,-44) width 8: "\x{23DE}"
1414 RenderMathMLSpace {mspace} at (0,0) size 48x2 [bgcolor=#FF0000]
15  RenderText {#text} at (50,6) size 4x17
16  text run at (50,6) width 4: " "
17  RenderMathMLMath {math} at (54,7) size 66x13 [padding: 0 1 0 1]
18  RenderMathMLRow {mstyle} at (1,0) size 64x13
19  RenderMathMLUnderOver {mover} at (0,0) size 64x13
20  RenderMathMLSpace {mspace} at (0,11) size 64x2 [bgcolor=#FF0000]
21  RenderMathMLOperator {mo} at (29,0) size 6x11
 15 RenderText {#text} at (50,13) size 4x17
 16 text run at (50,13) width 4: " "
 17 RenderMathMLMath {math} at (54,8) size 66x19 [padding: 0 1 0 1]
 18 RenderMathMLRow {mstyle} at (1,0) size 64x19
 19 RenderMathMLUnderOver {mover} at (0,0) size 64x19
 20 RenderMathMLSpace {mspace} at (0,16) size 64x3 [bgcolor=#FF0000]
 21 RenderMathMLOperator {mo} at (29,0) size 6x12
2222 RenderBlock (anonymous) at (0,0) size 6x11
2323 RenderText {#text} at (0,-33) size 6x80
2424 text run at (0,-33) width 6: "\x{23DE}"
25  RenderText {#text} at (120,6) size 4x17
26  text run at (120,6) width 4: " "
27  RenderMathMLMath {math} at (124,6) size 50x14 [padding: 0 1 0 1]
28  RenderMathMLRow {mstyle} at (1,0) size 48x14
29  RenderMathMLUnderOver {munder} at (0,0) size 48x8
 25 RenderText {#text} at (120,13) size 4x17
 26 text run at (120,13) width 4: " "
 27 RenderMathMLMath {math} at (124,13) size 50x16 [padding: 0 1 0 1]
 28 RenderMathMLRow {mstyle} at (1,0) size 48x16
 29 RenderMathMLUnderOver {munder} at (0,0) size 48x16
3030 RenderMathMLOperator {mo} at (20,0) size 8x6
3131 RenderBlock (anonymous) at (0,0) size 8x14
3232 RenderText {#text} at (0,-44) size 8x106
3333 text run at (0,-44) width 8: "\x{23DE}"
34  RenderMathMLSpace {mspace} at (0,6) size 48x2 [bgcolor=#FF0000]
35  RenderText {#text} at (174,6) size 4x17
36  text run at (174,6) width 4: " "
37  RenderMathMLMath {math} at (178,7) size 66x24 [padding: 0 1 0 1]
38  RenderMathMLRow {mstyle} at (1,0) size 64x24
39  RenderMathMLUnderOver {munderover} at (0,0) size 64x24
40  RenderMathMLSpace {mspace} at (0,11) size 64x2 [bgcolor=#FF0000]
41  RenderMathMLOperator {mo} at (29,13) size 6x11
 34 RenderMathMLSpace {mspace} at (0,13) size 48x3 [bgcolor=#FF0000]
 35 RenderText {#text} at (174,13) size 4x17
 36 text run at (174,13) width 4: " "
 37 RenderMathMLMath {math} at (178,8) size 66x31 [padding: 0 1 0 1]
 38 RenderMathMLRow {mstyle} at (1,0) size 64x31
 39 RenderMathMLUnderOver {munderover} at (0,0) size 64x31
 40 RenderMathMLSpace {mspace} at (0,16) size 64x3 [bgcolor=#FF0000]
 41 RenderMathMLOperator {mo} at (29,18) size 6x12
4242 RenderBlock (anonymous) at (0,0) size 6x11
4343 RenderText {#text} at (0,-33) size 6x80
4444 text run at (0,-33) width 6: "\x{23DE}"
45  RenderMathMLOperator {mo} at (29,0) size 6x11
 45 RenderMathMLOperator {mo} at (29,0) size 6x12
4646 RenderBlock (anonymous) at (0,0) size 6x11
4747 RenderText {#text} at (0,-33) size 6x80
4848 text run at (0,-33) width 6: "\x{23DE}"
49  RenderText {#text} at (244,6) size 4x17
50  text run at (244,6) width 4: " "
51  RenderMathMLMath {math} at (248,0) size 50x20 [padding: 0 1 0 1]
52  RenderMathMLRow {mstyle} at (1,0) size 48x20
53  RenderMathMLUnderOver {munderover} at (0,0) size 48x14
54  RenderMathMLOperator {mo} at (20,6) size 8x6
 49 RenderText {#text} at (244,13) size 4x17
 50 text run at (244,13) width 4: " "
 51 RenderMathMLMath {math} at (248,0) size 50x29 [padding: 0 1 0 1]
 52 RenderMathMLRow {mstyle} at (1,0) size 48x29
 53 RenderMathMLUnderOver {munderover} at (0,0) size 48x29
 54 RenderMathMLOperator {mo} at (20,12) size 8x7
5555 RenderBlock (anonymous) at (0,0) size 8x14
5656 RenderText {#text} at (0,-44) size 8x106
5757 text run at (0,-44) width 8: "\x{23DE}"
58  RenderMathMLSpace {mspace} at (0,12) size 48x2 [bgcolor=#FF0000]
 58 RenderMathMLSpace {mspace} at (0,26) size 48x3 [bgcolor=#FF0000]
5959 RenderMathMLOperator {mo} at (21,0) size 6x6
6060 RenderBlock (anonymous) at (0,0) size 6x11
6161 RenderText {#text} at (0,-33) size 6x80
6262 text run at (0,-33) width 6: "\x{23DE}"
63  RenderText {#text} at (298,6) size 4x17
64  text run at (298,6) width 4: " "
65  RenderMathMLMath {math} at (302,4) size 50x16 [padding: 0 1 0 1]
66  RenderMathMLRow {mstyle} at (1,0) size 48x16
67  RenderMathMLUnderOver {munderover} at (0,0) size 48x14
68  RenderMathMLOperator {mo} at (20,2) size 8x6
 63 RenderText {#text} at (298,13) size 4x17
 64 text run at (298,13) width 4: " "
 65 RenderMathMLMath {math} at (302,8) size 50x20 [padding: 0 1 0 1]
 66 RenderMathMLRow {mstyle} at (1,0) size 48x20
 67 RenderMathMLUnderOver {munderover} at (0,0) size 48x20
 68 RenderMathMLOperator {mo} at (20,5) size 8x7
6969 RenderBlock (anonymous) at (0,0) size 8x14
7070 RenderText {#text} at (0,-44) size 8x106
7171 text run at (0,-44) width 8: "\x{23DE}"
72  RenderMathMLOperator {mo} at (21,8) size 6x6
 72 RenderMathMLOperator {mo} at (21,13) size 6x7
7373 RenderBlock (anonymous) at (0,0) size 6x11
7474 RenderText {#text} at (0,-33) size 6x80
7575 text run at (0,-33) width 6: "\x{23DE}"
7676 RenderMathMLSpace {mspace} at (0,0) size 48x2 [bgcolor=#FF0000]
77  RenderText {#text} at (352,6) size 4x17
78  text run at (352,6) width 4: " "
79  RenderMathMLMath {math} at (356,4) size 50x16 [padding: 0 1 0 1]
80  RenderMathMLRow {mstyle} at (1,0) size 48x16
81  RenderMathMLUnderOver {munder} at (0,0) size 48x14
82  RenderMathMLUnderOver {mover} at (0,0) size 48x8
83  RenderMathMLOperator {mo} at (20,2) size 8x6
 77 RenderText {#text} at (352,13) size 4x17
 78 text run at (352,13) width 4: " "
 79 RenderMathMLMath {math} at (356,8) size 50x20 [padding: 0 1 0 1]
 80 RenderMathMLRow {mstyle} at (1,0) size 48x20
 81 RenderMathMLUnderOver {munder} at (0,0) size 48x20
 82 RenderMathMLUnderOver {mover} at (0,0) size 48x12
 83 RenderMathMLOperator {mo} at (20,5) size 8x7
8484 RenderBlock (anonymous) at (0,0) size 8x14
8585 RenderText {#text} at (0,-44) size 8x106
8686 text run at (0,-44) width 8: "\x{23DE}"
8787 RenderMathMLSpace {mspace} at (0,0) size 48x2 [bgcolor=#FF0000]
88  RenderMathMLOperator {mo} at (21,8) size 6x6
 88 RenderMathMLOperator {mo} at (21,13) size 6x7
8989 RenderBlock (anonymous) at (0,0) size 6x11
9090 RenderText {#text} at (0,-33) size 6x80
9191 text run at (0,-33) width 6: "\x{23DE}"

Source/WebCore/ChangeLog

 12016-03-23 Frederic Wang <fwang@igalia.com>
 2
 3 Use parameters from the OpenType MATH table for <munderover>
 4 https://bugs.webkit.org/show_bug.cgi?id=155756
 5
 6 Reviewed by NOBODY (OOPS!).
 7
 8 We follow the description from the MathML in HTML5 implementation
 9 to improve the layout of <munderover> using some constants from the MATH table.
 10
 11 Tests: mathml/mathml-in-html5/underover-parameters-1.html
 12 mathml/mathml-in-html5/underover-parameters-2.html
 13 mathml/mathml-in-html5/underover-parameters-3.html
 14 mathml/mathml-in-html5/underover-parameters-4.html
 15 mathml/presentation/attributes-accent-accentunder-dynamic.html
 16
 17 * mathml/mathattrs.in: Add accentunder attribute.
 18 * rendering/mathml/MathMLOperatorDictionary.h: Remove FIXME comment.
 19 * rendering/mathml/RenderMathMLUnderOver.cpp:
 20 (WebCore::RenderMathMLUnderOver::hasAccent): Helper function to determine whether
 21 the over/under script should be treated as an accent.
 22 (WebCore::RenderMathMLUnderOver::getVerticalParameters): Helper function to read
 23 some vertical parameters from the MATH table.
 24 (WebCore::RenderMathMLUnderOver::layoutBlock): Take into account the new vertical
 25 parameters for the layout of <munderover>.
 26 * rendering/mathml/RenderMathMLUnderOver.h: Define new helper functions.
 27
1282016-03-21 Frederic Wang <fred.wang@free.fr>
229
330 Use Stack* parameters from the OpenType MATH table

Source/WebCore/mathml/mathattrs.in

@@guardFactoryWith="ENABLE(MATHML)"
44attrsNullNamespace
55
66accent
 7accentunder
78actiontype
89alttext
910background

Source/WebCore/rendering/mathml/MathMLOperatorDictionary.h

@@namespace WebCore {
3535namespace MathMLOperatorDictionary {
3636enum Form { Infix, Prefix, Postfix };
3737enum Flag {
38  Accent = 0x1, // FIXME: This must be used to implement accentunder/accent on munderover (https://bugs.webkit.org/show_bug.cgi?id=124826).
 38 Accent = 0x1,
3939 Fence = 0x2, // This has no visual effect but allows to expose semantic information via the accessibility tree.
4040 LargeOp = 0x4,
4141 MovableLimits = 0x8,

Source/WebCore/rendering/mathml/RenderMathMLUnderOver.cpp

3232
3333#include "MathMLElement.h"
3434#include "MathMLNames.h"
 35#include "MathMLOperatorDictionary.h"
3536#include "RenderIterator.h"
3637#include "RenderMathMLOperator.h"
3738

@@LayoutUnit RenderMathMLUnderOver::horizontalOffset(const RenderBox& child) const
161162 return (logicalWidth() - child.logicalWidth()) / 2;
162163}
163164
 165bool RenderMathMLUnderOver::hasAccent(bool accentUnder) const
 166{
 167 ASSERT(m_scriptType == UnderOver || (accentUnder && m_scriptType == Under) || (!accentUnder && m_scriptType == Over));
 168
 169 const AtomicString& attributeValue = element()->fastGetAttribute(accentUnder ? accentunderAttr : accentAttr);
 170 if (attributeValue == "true")
 171 return true;
 172 if (attributeValue == "false")
 173 return false;
 174 RenderBox& script = accentUnder ? under() : over();
 175 if (!is<RenderMathMLBlock>(script))
 176 return false;
 177 auto* scriptOperator = downcast<RenderMathMLBlock>(script).unembellishedOperator();
 178 return scriptOperator && scriptOperator->hasOperatorFlag(MathMLOperatorDictionary::Accent);
 179}
 180
 181bool RenderMathMLUnderOver::getVerticalParameters(LayoutUnit& underGapMin, LayoutUnit& overGapMin, LayoutUnit& underShiftMin, LayoutUnit& overShiftMin, LayoutUnit& underExtraDescender, LayoutUnit& overExtraAscender, LayoutUnit& accentBaseHeight) const
 182{
 183 // By default, we set all values to zero.
 184 underGapMin = overGapMin = underShiftMin = overShiftMin = underExtraDescender = overExtraAscender = accentBaseHeight = 0;
 185
 186 const auto& primaryFont = style().fontCascade().primaryFont();
 187 auto* mathData = primaryFont.mathData();
 188 if (!mathData) {
 189 // The MATH table specification does not really provide any suggestions, except for some underbar/overbar values and AccentBaseHeight.
 190 LayoutUnit defaultLineThickness = ruleThicknessFallback();
 191 underGapMin = overGapMin = 3 * defaultLineThickness;
 192 underExtraDescender = overExtraAscender = defaultLineThickness;
 193 accentBaseHeight = style().fontMetrics().xHeight();
 194 return true;
 195 }
 196
 197 if (is<RenderMathMLBlock>(base())) {
 198 if (auto* baseOperator = downcast<RenderMathMLBlock>(base()).unembellishedOperator()) {
 199 if (baseOperator->hasOperatorFlag(MathMLOperatorDictionary::LargeOp)) {
 200 // The base is a large operator so we read UpperLimit/LowerLimit constants from the MATH table.
 201 underGapMin = mathData->getMathConstant(primaryFont, OpenTypeMathData::LowerLimitGapMin);
 202 overGapMin = mathData->getMathConstant(primaryFont, OpenTypeMathData::UpperLimitGapMin);
 203 underShiftMin = mathData->getMathConstant(primaryFont, OpenTypeMathData::LowerLimitBaselineDropMin);
 204 overShiftMin = mathData->getMathConstant(primaryFont, OpenTypeMathData::UpperLimitBaselineRiseMin);
 205 return false;
 206 }
 207 if (baseOperator->hasOperatorFlag(MathMLOperatorDictionary::Stretchy) && !baseOperator->isVertical()) {
 208 // The base is a horizontal stretchy operator, so we read StretchStack constants from the MATH table.
 209 underGapMin = mathData->getMathConstant(primaryFont, OpenTypeMathData::StretchStackGapBelowMin);
 210 overGapMin = mathData->getMathConstant(primaryFont, OpenTypeMathData::StretchStackGapAboveMin);
 211 underShiftMin = mathData->getMathConstant(primaryFont, OpenTypeMathData::StretchStackBottomShiftDown);
 212 overShiftMin = mathData->getMathConstant(primaryFont, OpenTypeMathData::StretchStackTopShiftUp);
 213 return false;
 214 }
 215 }
 216 }
 217
 218 // By default, we just use the underbar/overbar constants.
 219 underGapMin = mathData->getMathConstant(primaryFont, OpenTypeMathData::UnderbarVerticalGap);
 220 overGapMin = mathData->getMathConstant(primaryFont, OpenTypeMathData::OverbarVerticalGap);
 221 underExtraDescender = mathData->getMathConstant(primaryFont, OpenTypeMathData::UnderbarExtraDescender);
 222 overExtraAscender = mathData->getMathConstant(primaryFont, OpenTypeMathData::OverbarExtraAscender);
 223 accentBaseHeight = mathData->getMathConstant(primaryFont, OpenTypeMathData::AccentBaseHeight);
 224 return true;
 225}
 226
164227void RenderMathMLUnderOver::layoutBlock(bool relayoutChildren, LayoutUnit pageLogicalHeight)
165228{
166229 ASSERT(needsLayout());

@@void RenderMathMLUnderOver::layoutBlock(bool relayoutChildren, LayoutUnit pageLo
197260 logicalWidth = std::max(logicalWidth, over().logicalWidth());
198261 setLogicalWidth(logicalWidth);
199262
 263 LayoutUnit underGapMin, overGapMin, underShiftMin, overShiftMin, underExtraDescender, overExtraAscender, accentBaseHeight;
 264 bool underOverBarFall = getVerticalParameters(underGapMin, overGapMin, underShiftMin, overShiftMin, underExtraDescender, overExtraAscender, accentBaseHeight);
200265 LayoutUnit verticalOffset = 0;
201266 if (m_scriptType == Over || m_scriptType == UnderOver) {
202  over().setLocation(LayoutPoint(horizontalOffset(over()), 0));
203  verticalOffset += over().logicalHeight();
 267 verticalOffset += overExtraAscender;
 268 over().setLocation(LayoutPoint(horizontalOffset(over()), verticalOffset));
 269 if (underOverBarFall) {
 270 verticalOffset += over().logicalHeight();
 271 if (hasAccent()) {
 272 LayoutUnit baseAscent = ascentForChild(base());
 273 if (baseAscent < accentBaseHeight)
 274 verticalOffset += accentBaseHeight - baseAscent;
 275 } else
 276 verticalOffset += overGapMin;
 277 } else {
 278 LayoutUnit overAscent = ascentForChild(over());
 279 verticalOffset += std::max(over().logicalHeight() + overGapMin, overAscent + overShiftMin);
 280 }
204281 }
205282 base().setLocation(LayoutPoint(horizontalOffset(base()), verticalOffset));
206283 verticalOffset += base().logicalHeight();
207284 if (m_scriptType == Under || m_scriptType == UnderOver) {
 285 if (underOverBarFall) {
 286 if (!hasAccentUnder())
 287 verticalOffset += underGapMin;
 288 } else {
 289 LayoutUnit underAscent = ascentForChild(under());
 290 verticalOffset += std::max(underGapMin, underShiftMin - underAscent);
 291 }
208292 under().setLocation(LayoutPoint(horizontalOffset(under()), verticalOffset));
209293 verticalOffset += under().logicalHeight();
 294 verticalOffset += underExtraDescender;
210295 }
211296
212297 setLogicalHeight(verticalOffset);

Source/WebCore/rendering/mathml/RenderMathMLUnderOver.h

@@private:
5151 RenderBox& under() const;
5252 RenderBox& over() const;
5353 LayoutUnit horizontalOffset(const RenderBox&) const;
 54 bool hasAccent(bool accentUnder = false) const;
 55 bool hasAccentUnder() const { return hasAccent(true); };
 56 bool getVerticalParameters(LayoutUnit& underGapMin, LayoutUnit& overGapMin, LayoutUnit& underShiftMin, LayoutUnit& overShiftMin, LayoutUnit& underExtraDescender, LayoutUnit& overExtraAscender, LayoutUnit& accentBaseHeight) const;
5457};
5558
5659}