Skip to content
Permalink
Browse files

MathML: Test italic correction of sub and super scripts attached to a…

… large operator
  • Loading branch information...
fred-wang committed Mar 13, 2018
1 parent c7a4bd8 commit 10dcca564ab466ac96595f7019f4b33a121370ea
Binary file not shown.
@@ -0,0 +1,123 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Subscripts and Superscripts parameters</title>
<link rel="help" href="http://www.mathml-association.org/MathMLinHTML5/S3.html#SS4">
<meta name="assert" content="Elements msub, msup, subsup and msubsup correctly use the italic correction from the MATH table.">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<style>
math, mspace {
font-size: 10px;
}
@font-face {
font-family: largeop-displayoperatorminheight5000;
src: url("/fonts/math/largeop-displayoperatorminheight5000.woff");
}
@font-face {
font-family: largeop-displayoperatorminheight2000-2AFF-italiccorrection3000;
src: url("/fonts/math/largeop-displayoperatorminheight2000-2AFF-italiccorrection3000.woff");
}
</style>
<script>
var emToPx = 10 / 1000; // font-size: 10px, font.em = 1000
var epsilon = 1;
function getBox(aId) {
return document.getElementById(aId).getBoundingClientRect();
}
setup({ explicit_done: true });
window.addEventListener("load", function() {
document.fonts.ready.then(runTests);
});
function runTests() {
test(function() {
assert_approx_equals(getBox("ref001").left - getBox("sub001").right, 0, epsilon, "msub");
assert_approx_equals(getBox("sup002").left, getBox("base002").right, epsilon, "msup");
assert_approx_equals(getBox("sup003").left - getBox("sub003").left, 0, epsilon, "msubsup");
assert_approx_equals(getBox("sup004").left - getBox("sub004").left, 0, epsilon, "mmultiscripts postscripts");
assert_approx_equals(getBox("sup005").left - getBox("sub005").left, 0, epsilon, "mmultiscripts prescripts");
}, "Null Italic Correction");
test(function() {
var v = 3000 * emToPx;
assert_approx_equals(getBox("ref011").left - getBox("sub011").left, v, epsilon, "msub");
assert_approx_equals(getBox("sup012").left, getBox("base012").right, epsilon, "msup");
assert_approx_equals(getBox("sup013").left - getBox("sub013").left, v, epsilon, "msubsup");
assert_approx_equals(getBox("sup014").left - getBox("sub014").left, v, epsilon, "mmultiscripts postscripts");
assert_approx_equals(getBox("sup015").left - getBox("sub015").left, 0, epsilon, "mmultiscripts prescripts");
}, "NonNull Italic Correction");
done();
}
</script>
</head>
<body>
<p>
<math displaystyle="true" style="font-family: largeop-displayoperatorminheight5000;">
<msub>
<mo lspace="0px" rspace="0px">&#x2AFF;</mo>
<mspace id="sub001" height="1em" width="1em" mathbackground="blue"/>
</msub>
<mspace id="ref001" height="1em" width="1em" mathbackground="green"/>
</math>
<math displaystyle="true" style="font-family: largeop-displayoperatorminheight5000;">
<msup>
<mo id="base002" lspace="0px" rspace="0px">&#x2AFF;</mo>
<mspace id="sup002" height="1em" width="1em" mathbackground="blue"/>
</msup>
</math>
<math displaystyle="true" style="font-family: largeop-displayoperatorminheight5000;">
<msubsup>
<mo lspace="0px" rspace="0px">&#x2AFF;</mo>
<mspace id="sub003" height="1em" width="1em" mathbackground="blue"/>
<mspace id="sup003" height="1em" width="1em" mathbackground="green"/>
</msubsup>
</math>
<math displaystyle="true" style="font-family: largeop-displayoperatorminheight5000;">
<mmultiscripts>
<mo lspace="0px" rspace="0px">&#x2AFF;</mo>
<mspace id="sub004" height="1em" width="1em" mathbackground="blue"/>
<mspace id="sup004" height="1em" width="1em" mathbackground="green"/>
<mprescripts/>
<mspace id="sub005" height="1em" width="1em" mathbackground="magenta"/>
<mspace id="sup005" height="1em" width="1em" mathbackground="cyan"/>
</mmultiscripts>
</math>
</p>
<hr/>
<p>
<math displaystyle="true" style="font-family: largeop-displayoperatorminheight2000-2AFF-italiccorrection3000;">
<msub>
<mo lspace="0px" rspace="0px">&#x2AFF;</mo>
<mspace id="sub011" height="1em" width="1em" mathbackground="blue"/>
</msub>
<mspace id="ref011" height="1em" width="1em" mathbackground="green"/>
</math>
<math displaystyle="true" style="font-family: largeop-displayoperatorminheight2000-2AFF-italiccorrection3000;">
<msup>
<mo id="base012" lspace="0px" rspace="0px">&#x2AFF;</mo>
<mspace id="sup012" height="1em" width="1em" mathbackground="blue"/>
</msup>
</math>
<math displaystyle="true" style="font-family: largeop-displayoperatorminheight2000-2AFF-italiccorrection3000;">
<msubsup>
<mo lspace="0px" rspace="0px">&#x2AFF;</mo>
<mspace id="sub013" height="1em" width="1em" mathbackground="blue"/>
<mspace id="sup013" height="1em" width="1em" mathbackground="green"/>
</msubsup>
</math>
<math displaystyle="true" style="font-family: largeop-displayoperatorminheight2000-2AFF-italiccorrection3000;">
<mmultiscripts>
<mo lspace="0px" rspace="0px">&#x2AFF;</mo>
<mspace id="sub014" height="1em" width="1em" mathbackground="blue"/>
<mspace id="sup014" height="1em" width="1em" mathbackground="green"/>
<mprescripts/>
<mspace id="sub015" height="1em" width="1em" mathbackground="magenta"/>
<mspace id="sup015" height="1em" width="1em" mathbackground="cyan"/>
</mmultiscripts>
</math>
</p>
</body>
</html>
@@ -12,3 +12,21 @@
mathfont.drawRectangleGlyph(g, mathfont.em, v1, 0)
f[nAryWhiteVerticalBarCodePoint].verticalVariants = "uni2AFF uni2AFF.display"
mathfont.save(f)

v1 = 2 * mathfont.em
v2 = 3 * mathfont.em
f = mathfont.create("largeop-displayoperatorminheight%d-2AFF-italiccorrection%d" % (v1, v2))
f.copyright = "Copyright (c) 2018 Igalia S.L."
f.math.DisplayOperatorMinHeight = v1
mathfont.createSquareGlyph(f, nAryWhiteVerticalBarCodePoint)
g = f.createChar(-1, "uni2AFF.display")
p = g.glyphPen()
p.moveTo(0, 0)
p.lineTo(v2, v1)
p.lineTo(v2 + mathfont.em, v1)
p.lineTo(mathfont.em, 0)
p.closePath();
g.width = mathfont.em + v2
g.italicCorrection = v2
f[nAryWhiteVerticalBarCodePoint].verticalVariants = "uni2AFF uni2AFF.display"
mathfont.save(f)

0 comments on commit 10dcca5

Please sign in to comment.
You can’t perform that action at this time.