Diff
Modified: trunk/LayoutTests/ChangeLog (203072 => 203073)
--- trunk/LayoutTests/ChangeLog 2016-07-11 18:38:36 UTC (rev 203072)
+++ trunk/LayoutTests/ChangeLog 2016-07-11 18:42:22 UTC (rev 203073)
@@ -1,5 +1,24 @@
2016-07-11 Frederic Wang <[email protected]>
+ Use Stack* parameters from the OpenType MATH table
+ https://bugs.webkit.org/show_bug.cgi?id=155714
+
+ Reviewed by Brent Fulgham.
+
+ We import a test from the MathML in HTML5 test suite to verify Stack* parameters.
+
+ * imported/mathml-in-html5/fonts/math/stack-axisheight7000.woff: Added.
+ * imported/mathml-in-html5/fonts/math/stack-bottomdisplaystyleshiftdown5000.woff: Added.
+ * imported/mathml-in-html5/fonts/math/stack-bottomshiftdown6000.woff: Added.
+ * imported/mathml-in-html5/fonts/math/stack-displaystylegapmin4000.woff: Added.
+ * imported/mathml-in-html5/fonts/math/stack-gapmin8000.woff: Added.
+ * imported/mathml-in-html5/fonts/math/stack-topdisplaystyleshiftup3000.woff: Added.
+ * imported/mathml-in-html5/fonts/math/stack-topshiftup9000.woff: Added.
+ * imported/mathml-in-html5/mathml/presentation-markup/fractions/frac-parameters-2-expected.txt: Added.
+ * imported/mathml-in-html5/mathml/presentation-markup/fractions/frac-parameters-2.html: Added.
+
+2016-07-11 Frederic Wang <[email protected]>
+
Add support for mathvariants that cannot be emulated via CSS.
https://bugs.webkit.org/show_bug.cgi?id=108778
Added: trunk/LayoutTests/imported/mathml-in-html5/fonts/math/stack-axisheight7000.woff (0 => 203073)
--- trunk/LayoutTests/imported/mathml-in-html5/fonts/math/stack-axisheight7000.woff (rev 0)
+++ trunk/LayoutTests/imported/mathml-in-html5/fonts/math/stack-axisheight7000.woff 2016-07-11 18:42:22 UTC (rev 203073)
@@ -0,0 +1,11 @@
+wOFFOTTO|CFF 0\xBB\xDB?C@FFTM\xECyS\xE1\xE0MATHiX'\xC7OS/2X>`
+\xF0cmap\xE07B+\xC6head*6]\xFBUhhea4$O\xDFhmtxt\xD0maxpPPname\x98EЦ\x8C?post \xFF\x863x\x9Cc`d``\xE2\xE7=\xE3\xF9m\xBE2p3\xBF\x8A0\\x96\xBFk\x81LC\x88\xF7\x90x\x9Cc`d``\xFC\xC2\xF8\x85!\x8A\xF902\xA0&Z<4Px\x9Cc`a~\xC18\x81\x81\x95\x81\x81\xA9\x8BiC\x84f|\xC0`\xC8\xC8e`\xE5d\x80Ft\xD0\xC0\xA0\xC0\xA0\xC0\xF8\x85\xF1C\x86\xA0#) x\x9C\xA5\x90\xBDJA\x85\xCF\xE4,\x8B\x94\xD3I\xB1av Ie\xA4\x90\xA4M\xED\xB2,\xD9!\x90\x89;S$Ϣ\xCF \xFA$\x82`\xE3\x8Bxvv\xB4!;\xF7\x9B\xBB\xE7\xFE\xB8\xC0\xEA\xEF\xCB\xC0]<nP\xF3\xB8 %n\xB7\xD0\x81۸o\x81;\xE86Ω\xAD3\xBEn}T\xC5=\x94\x81\xB8\xC2K\xE0&\xEE\xF0\xB8\x85\x9E\xB8܆ρ;\xF4`\x83=\x8E̢\xB1Aɜ\xFA\xB4 b\x8CH+\xA4\xFCS\xD0.\xF9\x9A\xC1\xF2\xAA\xB4\xF7k\xF2\x98\x9B\xFD\xB1ԛ\xC2\xC9^֗\x89\x8AGr\x95\xBAb\xB5\x943kM\xA6S\xA7+e\x96)c\xB7\x88h\x8C\xB6̜\xD7\xB3ju`
]\x9Am\xA3\xF4\xA0m\x91Wi\xC7J\xD1\xFBg\xC8O\xF1\xC2w\xE6\xBC-)\xCE\xFDTJ%\xA6\xBC\xFF\xED\xA5V'\x98P7\xE4\xFD\xDAf\xE7\xA6\xDC\xE42(9\x95\xBF\xF5Lw2\x89\x86Q\xB5\x91\x93\xC7_SZ2\xA4\xF4\xD2\xD8OT\xF7\x89u^Z\xEEY*\xAA\xE2\xA7V\xFC5~x\x9Cc```f\x80`F\xB0\xF2\xC1| \xCD\x84 \xBE\xC2\xFF\xFF\xF2\xFFC\xA8JF6' $?\xD4Ya\xD3x\x9Cc`f\x83\xFF\xCDF@\x8A\x91+(U\xB9x\x9Ccd`aa`dd-.IL\xCE\xD6M\xAC\xC8,\xCEH\xCDL\xCF(1700``db`d\xD0\xFE\xC1\xCF\xF0C\x9A\xF1\x87\xD3Y\xE6,=<\x8C\xDD@\xC0*ð\x82_\x86\x81A@\x86a\xB5\xA0\x87\xC3e!f\x905+?\xE7\xFC\x82\xCA"\x90A
+ɚ
+F\x86f
+\xBE\x89%\xBE>
+\x8E\xC5\xC5\xF9ə\x89%\x99\xF9y\xD8,\xC5\xEA `d`bdTR\xEE\xDE\xFB\xBDv/\xE3?\xB7\xECe\xDE+\xF6K\xE2\xFB\xC3l{\xAF\xFD^\xFBs\xCB\xEFZv>\xBE_5"ݢ\xDD<\<\x99D\xADx\x9Cc```d\x82\xCB"\xEA\xF9`Z\xFE\xAE\x8C7\xB8\x8Dx\x9Cc`d``\xE0bx\xC0\xA8\xC7\xC0`\xC3z\x87\xA4#\x88'\xA0\xB4&\x91\xEA\x89F@<+J\xC3\xD80\x80.n\x843\x8A20\xFC\xBD
+d\xDB0p0\x88i \xCD6\x81Qy*@\xCC\xC3 \xC4 \xC1 \x87\xD3U\x95"@*`\xD8\\x88(\x8CF\x82>\x85\xEC\xE8\xE8
\ No newline at end of file
Added: trunk/LayoutTests/imported/mathml-in-html5/fonts/math/stack-bottomdisplaystyleshiftdown5000.woff (0 => 203073)
--- trunk/LayoutTests/imported/mathml-in-html5/fonts/math/stack-bottomdisplaystyleshiftdown5000.woff (rev 0)
+++ trunk/LayoutTests/imported/mathml-in-html5/fonts/math/stack-bottomdisplaystyleshiftdown5000.woff 2016-07-11 18:42:22 UTC (rev 203073)
@@ -0,0 +1,8 @@
+wOFFOTTO\xB4 @CFF X\xCE\xCEx\x95FFTM(yS\xE1\xE0MATHDgX\xF7OS/2X>`
+\xF0cmap7B+\xC6head*6]\xFBUhhea4$O\xDFhmtx\xAC\xD0maxpPPname\x98pϣ\xBF=.post@ \xFF\x863x\x9Cc`d``b\xEBo$\xE3\xF9m\xBE2p3\xBF\x8A0\\x96\xBFk\x81LC\x88\x8D\x8Ax\x9Cc`d``\xFC\xC2\xF8\x85!\x8A\xF902\xA0&Z<4Px\x9Cc`a~\xC18\x81\x81\x95\x81\x81\xA9\x8BiC\x84f|\xC0`\xC8\xC8e`\xE5d\x80Ft\xD0\xC0\xA0\xC0\xA0\xC0\xF8\x85\xF1C\x86\xA0#) x\x9CŒ\xBDj\xC30\x85\x8F\x9Dh\x87\xD27\xA8\x86\x92\xC1\xC1vH
+!%CH\xD6\xEC\x8E\xED\xC4&?
+\x96 :\xF5A\xFA\xEDt\xEE\x83\xF4-\xBA\xF4DV\xE7Z\x88\x85\xD1'\xE9ܣ\xAB+\xB8\xC2T\xDFf\x96\xF2\x9Be7έ\xE5Fλ\xE5:\xEE܅\xE5\xAE\xDDg\xCBM\xCER\xE9\xD4/8\x9A\x9A\xA8;\xE4²\x8B{|X\xAE\xE1\xC9y\xB0\\xC7Խ\xB4܀p-79\xFF\x8A1$(\xE9\x92c\x8D-\xC4h\xB3\xE1#@\x9F4Gĕ\x8C\xFD\x8C\xA3\x9B\xA4*7\xF39y\x8C\xE5\xA1,\xF2u\xA6E+n\x8B\xD0\xFAb\xE9l>#\xA5d\x9CG:\x97\x94)FD\x8C\xDD\xC0Ò\x91\x9AMb\x87\x84>\x8A\xB9l\xB9ZUINIWV'\xD4\xB9S\x8Fy\x9D\x94\x8E⍷\x94Z\xCB]\x92\xAB\xC36*\x95.\xB7\xA9\xCA\xF2\x95N\xE4q\xDF\xF3}\xCA\xFE\xB8ˏ\xFEs~m\xFA\x82ULM\xED:\x8C\xF2\xFF\xBFW~!t\xEA\xF2\xFF\xBE!L\xE4^Od\xB1NE\xD8\xF1\xC5P\xFC\xAA2ԅ\xAF띮\xEA\xF7\xB2\xA0KA\x9F\xEA\xFD\x98\xBAUg\xC5"-ߌ\xF0\xFD\xA0s\xCA\xF7I~4\xC8&x\x9Cc```f\x80`F\xB0\xF2\xC1| \xCD\x84 \xBE\xC2\xFF\xFF\xF2\xFFC\xA8JF6' $?\xD4Ya\xD3x\x9Cc`f\x83\xFF\xCDF@\x8A\x91+(U\xB9x\x9Ccd`aa`ddT+.IL\xCE\xD6M\xCA/)\xC9\xCFM\xC9,.\xC8I\xAC,.\xA9\xCCI-\xCE\xC
8L+I\xC9/\xCF3500``db`d\xD0\xFE\xC1\xCF\xF0C\x9A\xF1\x87\xD3Y\xE6,=<\x8C\xDD@\xC0*\xC3p\x9B_\x86\x81A@\x86ហ\x87#\x9B3H\x83\x837C\x81s~AeQfzF\x89\x82F\xB2\xA6\x82\x91\x81\xA1\x99\x82obI\x86\xAF\x8F\x82cqq~rfbIf~Q\xAE Ω@\xC0\xC8\xC0\xC4Ȩ\xA4ܽ\xF7{\xED^ƽ{n\xD9˼W\xEC\x97\xC4\xF7\x87\xFF$\xD8\xF6\xFE^/\xFA\xBD\xF6\xE7\x96ߵ\xEC||\xBFjD\xBAE\xBBy\xB8\xE2\xE4Z\xB1x\x9Cc```d\x82\xCB"\xEA\xF9`Z\xFE\xAE\x8C7\xB8\x8Dx\x9Cc`d``\xE0bx\xC0\xA8\xC7\xC0`\xC3z\x87\x814pJk\xE2W&\xDCA\x82\x99F@<+J\xC3\xD80\x80.n\x843\x8A20\xFC\xBD
+d\xDB0p0\x88i \xCD6\x81Qy*@\xCC\xC3 \xC4 \xC1 \x87\xD3U\x95"@*`\xD8\\x88(\x8CF\x82@5\xE8\xE8
\ No newline at end of file
Added: trunk/LayoutTests/imported/mathml-in-html5/fonts/math/stack-bottomshiftdown6000.woff (0 => 203073)
--- trunk/LayoutTests/imported/mathml-in-html5/fonts/math/stack-bottomshiftdown6000.woff (rev 0)
+++ trunk/LayoutTests/imported/mathml-in-html5/fonts/math/stack-bottomshiftdown6000.woff 2016-07-11 18:42:22 UTC (rev 203073)
@@ -0,0 +1,6 @@
+wOFFOTTO\x94hCFF D\xC2\xEA\xF0Y\xEB\xA5FFTMyS\xE1\xE0MATH$gX#\xDFOS/2X>`
+\xF0cmap\xF47B+\xC6head)6]\xFBUhhea4$O\xDFhmtx\x8C\xD0maxpPPname\x98Y\x98\xB0\xBCpost, \xFF\x863x\x9Cc`d``b\xBE\xC0\x84\xCEx~\x9B\xAF\xDC\xCC/\x80"\x97\xE5\xEFZ \xD3P\xC0\xC1\xC0\xA2\xF8x\x9Cc`d``\xFC\xC2\xF8\x85!\x8A\xF902\xA0&Z<4Px\x9Cc`a~\xC18\x81\x81\x95\x81\x81\xA9\x8BiC\x84f|\xC0`\xC8\xC8e`\xE5d\x80Ft\xD0\xC0\xA0\xC0\xA0\xC0\xF8\x85\xF1C\x86\xA0#) x\x9C\xAD\x91\xBFj\xC30\xC6?9\xA0K(t\xCAT--\xC9\xE0 +Ԑl!\x90\xA1$S!\xBB\xE3\xFC\xB1[\xF22;\xF6\xFA}\x8A}\x84\xFDl\xAB[-\xC4B\xE8w\xBA\xFB\xCEw'-\xBC@\xA0\xFAn0u,\xD0ƳcWxw\ÝH\xD7\xD1o\x8E\xB8\xF4Z\x8E\x9Bh{\x8C\xF5Z\xF7\xA5\xAA`\x8Ḏ\x87[\xBC:\xAE\xE1\x9F\x8E\xEB\xD0\xE2\xC9qR|8nB{\xD7\xC3\xE0\x80\xB3\xA4\xD8 \x81\x85D1\xBA<5\x84\xA4"z\x9ESZ#\xE4\\x86Qiy\x9F\x92\xF7\xC0\xD8NY\xBAI\xAC\xEC\xC4]\xA9U\xCAYd\x93\xD9T\x8E\xF2\xDC\xC4idSð\x9C\x8A\x88
\xDA-|,\xA8\xB4\;\xDE'̴\xA6\xB5\xA4}dƐ\xFF/r\xC5[a\xAC5\xBB<I\xD7vi\x8E\xFBP)\xBA\xFE\x98\xE1G\x{D92C}ۖg\xC6\xEEWe\xCF=\xC6K\xB9\xFF_i\xA5\xD3P\xD1\xE7\xFE\x9E &fo'&۬\xA4\xEE)9\x94\xBFvD\x9F\xF8}\xBF߹g5g\x87\xB5\xD5{\xC92>(\xFB\xADj\xC7|\x95\xE5|#\xA9T\xD0+j9s_DJ\x94\x89x\x9Cc```f\x80`F\xB0\xF2\xC1| \xCD\x84 \xBE\xC2\xFF\xFF\xF2\xFFC\xA8JF6' $?\xD4Ya\xD3x\x9Cc`f\x83\xFF\xCDF@\x8A\x91+(U\xB9x\x9Ccd`aa`dd\x94*.IL\xCE\xD6M\xCA/)\xC9\xCF-\xCE\xC8L+I\xC9/\xCF3300``db`d\xD0\xFE\xC1\xCF\xF0C\x9A\xF1\x87\xD3Y\xE6,=<\x8C\xDD@\xC0*ð\x9D_\x86\x81A@\x86a\x97\xA0\x87\xC3#!f\x905{\x86\xE7\xFC\x82ʢ\xCC\xF4\x8C\x8DdM#C3\xDFĒ_\xC7\xE2\xE2\xFC\xE4\xCCĒ\xCC\xFC<\x9C6\xE3v02012*)w\xEF\xFD^\xBB\x97q\xEFޟ[\xF62\xEF\xFB%\xF1\xFD\xE1? \xB6\xBD\xBF~\xAF\xFD\xB9\xE5w-;߯\x91n\xD1n.<\xBCK\xA2x\x9Cc```d\x82\xCB"\xEA\xF9`Z\xFE\xAE\x8C7\xB8\x8Dx\x9Cc`d``\xE0bx\xC0\xA8\xC7\xC0`\xC3z\x87\x8
14pJk\xE2V"^@\xA2\x99F@<+J\xC3\xD80\x80.n\x843\x8A20\xFC\xBD
+d\xDB0p0\x88i \xCD6\x81Qy*@\xCC\xC3 \xC4 \xC1 \x87\xD3U\x95"@*`\xD8\\x88(\x8CF\x82/\x81\xE8\xE8
\ No newline at end of file
Added: trunk/LayoutTests/imported/mathml-in-html5/fonts/math/stack-displaystylegapmin4000.woff (0 => 203073)
--- trunk/LayoutTests/imported/mathml-in-html5/fonts/math/stack-displaystylegapmin4000.woff (rev 0)
+++ trunk/LayoutTests/imported/mathml-in-html5/fonts/math/stack-displaystylegapmin4000.woff 2016-07-11 18:42:22 UTC (rev 203073)
@@ -0,0 +1,5 @@
+wOFFOTTO\x98\x9CCFF D\xC5\xF3\xD6\xE7\xD9FFTMyS\xE1\xE0MATH(gXOS/2X>`
+\xF0cmap\xF47B+\xC6head*6]\xFBUhhea4$O\xDFhmtx\x90\xD0maxpPPname\x98ZH6l\x981post, \xFF\x863x\x9Cc`d``bֽ\xBF\xE3\xF9m\xBE2p3\xBF\x8A0\\x96\xBFk\x81LC\x88*\xB0\xEEx\x9Cc`d``\xFC\xC2\xF8\x85!\x8A\xF902\xA0&Z<4Px\x9Cc`a~\xC18\x81\x81\x95\x81\x81\xA9\x8BiC\x84f|\xC0`\xC8\xC8e`\xE5d\x80Ft\xD0\xC0\xA0\xC0\xA0\xC0\xF8\x85\xF1C\x86\xA0#) x\x9C\xB5\x911k\xC2@\xC7\xFFIU\xE8"N\x9Dn)(4\x92Du\xC1\xA1\xE8\xEAbH5 \xB9[2\xFA\x81J\xF7~\x84~\x9E]\xFB\xCF\xE5:\xB6Ђ9\x8E\xF7\xBB{\xEF\xFF\xF2\xDE;}\xBC\xC2A\xFB\xDDcg\xD9\xC1/\x96]\xDC\xE1\xD3\xF2+γ\xE5\x86·\xE5.nh\xB9\x87\xA1\xFB\xC4H\xA7s\xCBӣQ5\xEC`\x81ʲ\x8B\xBC[\xBEA\xE9\xF4-w\x98\xFF\xCDr\xC2X\xEEa\xE1n\xB0A\x815\xB3H\xA4Ƞ!0B\x8C1m\xE6\xA4="z2\xDAOk(\xAE\x82Q\xD2\xDCKrl\x8A\xB2\xAEd\x9Ai1\x8A\xC7"\xF4\x83\xB9\xD8G:\xDB\xEF\xC4Z\xA9"\x96\x91\x96\xC3\xB5'x8R
\xAB\xF8\xFF3oj\xE3\xA9\xC9 +\x89x{\xA17njU4JG\xF1\xC9;JU\x9E\xA3Z\xE9\xFA\x9C\xA4Qy\x91\xF9\xCC\xF7\xE9\xFDS\xAA\x9F\x92lM'\xDA؊\xD2\xC4LaB\x89\xC0\x8A\xFB\xBF\xB5\xB7\xEAK\xEA\xA6\xDCߓŶ\xC8\xF5\xB6\xA8\xD2D\x84_\xAC\xC4o=\xD2.\xBD\xA9\xD7L\xF6jc<PV1E\xFB\xA6\xC2H3\x81\xB6\x92J\xF1\x85\xEF\x93\xA6\xA8kU\xF2\x83@\x9F\xEEx\x9Cc```f\x80`F\xB0\xF2\xC1| \xCD\x84 \xBE\xC2\xFF\xFF\xF2\xFFC\xA8JF6' $?\xD4Ya\xD3x\x9Cc`f\x83\xFF\xCDF@\x8A\x91+(U\xB9x\x9Ccd`aa`dd\x94-.IL\xCE\xD6M\xC9,.\xC8I\xAC,.\xA9\xCCIMO,\xC8\xCD\xCC3100``db`d\xD0\xFE\xC1\xCF\xF0C\x9A\xF1\x87\xD3Y\xE6,=<\x8C\xDD@\xC0*\xC3p\x80_\x86\x81A@\x86ᰠ\x87\xC3k!f\x905'\x868\xE7\xFC\x82ʢ\xCC\xF4\x8C\x8DdM#C3\xDFĒ_\xC7\xE2\xE2\xFC\xE4\xCCĒ\xCC\xFC<|\x96\xE3u02012*)w\xEF\xFD^\xBB\x97q\xEFޟ[\xF62\xEF\xFB%\xF1\xFD\xE1? \xB6\xBD\xBF~\xAF\xFD\xB9\xE5w-;߯\x91n\xD1n.?\x81Okx\x9Cc```d\x82\xCB"\xEA\xF9`Z\xFE\xAE\x8C7\xB8\x8Dx\x9Cc`d``\
xE0bx\xC0\xA8\xC7\xC0`\xC3z\x87\x814pJk\xA7\x9C\x8A\x8C\x80x\x94\x86\xB1a]\xDC;fe`\xF8{ȶa\xE0`\xD2*@\x9Al#\xA2\xF2T\x80\x98\x87A\x88A\x82A\xA7\xAB *E\x80*T\xC0,>\xB0\xB9Q\x8DM\x8D(\xE8\xE8
\ No newline at end of file
Added: trunk/LayoutTests/imported/mathml-in-html5/fonts/math/stack-gapmin8000.woff (0 => 203073)
--- trunk/LayoutTests/imported/mathml-in-html5/fonts/math/stack-gapmin8000.woff (rev 0)
+++ trunk/LayoutTests/imported/mathml-in-html5/fonts/math/stack-gapmin8000.woff 2016-07-11 18:42:22 UTC (rev 203073)
@@ -0,0 +1,10 @@
+wOFFOTTOp\xC4CFF (\xB9Ͽ\xC1FFTM\xE4yS\xE1\xE0MATHgX+\xAFOS/2X>`
+\xF0cmap\xD87B+\xC6head*6]\xFBUhhea4$O\xDFhmtxh\xD0maxpPPname\x98?\x94dg\xEBpost \xFF\x863x\x9Cc`d``\xE2)Ǐ\xF1\xFC6_\xB8\x99_E.\xCBߵ@\xA6\xA1\x80\x83\x81 D\xFB|x\x9Cc`d``\xFC\xC2\xF8\x85!\x8A\xF902\xA0&Z<4Px\x9Cc`a~\xC18\x81\x81\x95\x81\x81\xA9\x8BiC\x84f|\xC0`\xC8\xC8e`\xE5d\x80Ft\xD0\xC0\xA0\xC0\xA0\xC0\xF8\x85\xF1C\x86\xA0#) x\x9C\x9D\x90\xBDj\xC30\x85\x8F\x9Ah\x87\x92\xA1\xA0\xA5\x90@dB\x92-2\x94x+]\x85 \xB6\xB1\x82\xAD%[\xA2OP\xE8ڥc\xF7\xBEAߧDz
+\xA5
+\x91\xF7\xD3չp\x8DW\xB4\xEB\x9B\xC0<\xBE\xC0\xDEwp'd\xE0.\xC2\xF7ɟT\x8A\xEE%o\xF7>\xAAa\x89*\xF0n\xF0\xB8\x83|\xEEB\x8A4p\x8F\xFC\xB8O~\xC3
+G\x9C\x98\xC5 GnjCd\xD1&P\x881%\xA5\xD0|)h7\xBC-Qs[\xAA\x8C\xF7r \xAC\xEC\xF1T\x99\xBCpr\x98\x8Dd\xA2\xE2\xA9L\xB5+ҍ\ֵ͌v\xC6RV3B3v\x8F\x885\xAB\x98\xA1Č՚\x8D\xDA\xE9l\xE5\xFAx0\xE5L)z\xFE\x94\xFD\xAC}\xCEۊ\xF2\x9D\xEF~L\x99Ă翚\xAD*\xC1\x9C\xEF\x9E\xEFɱ\xB6\xA5[\xDB*\xDF\xC9d\xAC\xE4B\xFEdM\xA2fڳF۲\x81\xEDJ/\x8B}\xE7m_\xD8\xFF&\x95\x8A\xC7M\xC1s\xAA|\x9A\xFAlox\x9Cc```f\x80`F\xB0\xF2\xC1| \xCD\x84 \xBE\xC2\xFF\xFF\xF2\xFFC\xA8JF6' $?\xD4Ya\xD3x\x9Cc`f\x83\xFF\xCDF@\x8A\x91+(U\xB9x\x9Ccd`aa`dd,.IL\xCE\xD6MO,\xC8\xCD̳000``db`d\xD0\xFE\xC1\xCF\xF0C\x9A\xF1\x87\xD3Y\xE6,=<\x8C\xDD@\xC0*\xC30\x87_\x86\x81A@\x86a\xBE\xA0\x87\xC3q!f\x90537\xE7\xFC\x82ʢ\xCC\xF4\x8C\x8DdM#C3\xDFĒ_\xC7\xE2\xE2\xFC\xE4\xCCĒ\xCC\xFC<t1\x8CL\x8C\x8CJ\xCA\xDD{\xBF\xD7\xEEeܻ\xF7疽\xCC{\xC5~I|\xF8O\x82m\xEF\xEF\xF5\xA2\xDFkn\xF9]\xCB\xCE\xC7\xF7\xABF\xA4[\xB4\x9B\x87\xA7\x9C?fx\x9Cc```d\x82\xCB&q
uot;\xEA\xF9`Z\xFE\xAE\x8C7\xB8\x8Dx\x9Cc`d``\xE0bx\xC0\xA8\xC7\xC0`\xC3z\x87\x814pJkV*\xEF@\xA4\x99F@<+J\xC3\xD80\x80.n\x843\x8A20\xFC\xBD
+d\xDB0p0\x88i \xCD6\x81Qy*@\xCC\xC3 \xC4 \xC1 \x87\xD3U\x95"@*`\xD8\\x88(\x8CF\x82I\xD8\xE8\xE8
\ No newline at end of file
Added: trunk/LayoutTests/imported/mathml-in-html5/fonts/math/stack-topdisplaystyleshiftup3000.woff (0 => 203073)
--- trunk/LayoutTests/imported/mathml-in-html5/fonts/math/stack-topdisplaystyleshiftup3000.woff (rev 0)
+++ trunk/LayoutTests/imported/mathml-in-html5/fonts/math/stack-topdisplaystyleshiftup3000.woff 2016-07-11 18:42:22 UTC (rev 203073)
@@ -0,0 +1,11 @@
+wOFFOTTO\xA4\xE4CFF H\xC9\xFF~q4EFFTMyS\xE1\xE0MATH0iX'OS/2X>`
+\xF0cmap\xF87B+\xC6head*6]\xFBUhhea4$O\xDFhmtx\x9C\xD0maxpPPname\x98`\x84d\xB5\x8Bpost0 \xFF\x863x\x9Cc`d``\xE2\xE8\xCA\xEA\x8F\xF1\xFC6_\xB8\x99_E.\xCBߵ@\xA6\xA1\x80\x83\x81 D+\xF0x\x9Cc`d``\xFC\xC2\xF8\x85!\x8A\xF902\xA0&Z<4Px\x9Cc`a~\xC18\x81\x81\x95\x81\x81\xA9\x8BiC\x84f|\xC0`\xC8\xC8e`\xE5d\x80Ft\xD0\xC0\xA0\xC0\xA0\xC0\xF8\x85\xF1C\x86\xA0#) x\x9C\xBD\x92\xCFJ\xC3@ƿM\xFF\x80\xE2ً{Q\xDACJ\xFEH\xA1\xC5C\xA4Ѓ\xB4\xD7\xDEc\x9A6KK\xB2[0o\xE3x\xD2G\xF1\xE8\xBB\xF8%Y\xAF
+
+Ͳ\xCCow\xE6\x9B\xCCL\xE0\xAFh\x9F,,H\xBCYvp%\xCE-wp/^,w!\x9Dk\xCB=\:O\x96\xFB\xBCg\xA4\xE8\x9E\xF1\xF4بj\x88PZvp\x87\xCB<\x8B[\xCB]D\xE2\xD3r\x8Fy"\xCB}D\x8E\xC69
+T̢\xB0E\xC3*H0\xA4+\xE0\xC1ǘ\xB4DLOF\xBB\xE0\xE9\x9A+g\x94j\xEE\xF9\xCC\xF2\xA2*\xD563r\x90e\xE0\xF9c\xB9\x8CM\xB6\\xC8\xAD\xF3D\xC5F\xE5\xD3T\xC4\xD4\xEE\xE0\x92귯\x99A\xD3\xEEy_5\xFE\x8A\x9C\x922z6<\xE9+YM\xBD\xA0M\x9C\xEC\\x93k\xA5\x8B}\iS\xEDS\x9D\xA9\x8D9\xA1\xE71\xE2OiJ8o:4\x8D-9\xA7\xB4\x99Έ2\x89)\xF7{j\xB3\x98PrO\xF3\xFC`\xE6y\xB9Me0\xF2\xE4T\xFE\xD6;C\x82\x89\xBA\xF5\xF4O2\xEA\xC5%\xE5\xED? \x99\xDFL\xA6\xED\xAB\xB4\xD4\xFC\xEE\xD2\xF3\xFCQ]\xE0)\xAA\xFA\xAFj\xB2x\x9Cc```f\x80`F\xB0\xF2\xC1| \xCD\x84 \xBE\xC2\xFF\xFF\xF2\xFFC\xA8JF6' $?\xD4Ya\xD3x\x9Cc`f\x83\xFF\xCDF@\x8A\x91+(U\xB9x\x9Ccd`aa`ddT,.IL\xCE\xD6-\xC9/H\xC9,.\xC8I\xAC,.\xA9\xCCI-\xCE\xC8L+)-0600``db`d\xD0\xFE\xC1\xCF\xF0C\x9A\xF1\x87\xD3Y\xE6,=<\x8C\xDD@\xC0*\xC3p\x86_\x86\x81A@\x86ἠ\x87\xC3w!f\x9057\x864\xE7\xFC\x82ʢ\xCC\xF4\x8C\x8DdM#C3\xDFĒ_\xC7\xE2\xE2\xFC\xE4\xCCĒ\xCC\xFC<B \xE8@ `d`bdTR\xEE\xDE\xFB\xBDv/\xE3
?\xB7\xECe\xDE+\xF6K\xE2\xFB\xC3l{\xAF\xFD^\xFBs\xCB\xEFZv>\xBE_5"ݢ\xDD<\\xD3\xE5U*x\x9Cc```d\x82\xCB"\xEA\xF9`Z\xFE\xAE\x8C7\xB8\x8Dx\x9Cc`d``\xE0bx\xC0\xA8\xC7\xC0`\xC3z\x87\x814pJkb\x97\xE6\xDEA\xA2y `\xC4Ӡ4\x8C+\xE8\xE2F\xD81\xA3(\xC3߫@\xB6+\x83\x90VҌ`\xC1\x95\xA7\xC4<Br8]Q)T\xA1f\xF1\x81ͅ\x88\xC2h$k\xED<\xE8\xE8
\ No newline at end of file
Added: trunk/LayoutTests/imported/mathml-in-html5/fonts/math/stack-topshiftup9000.woff (0 => 203073)
--- trunk/LayoutTests/imported/mathml-in-html5/fonts/math/stack-topshiftup9000.woff (rev 0)
+++ trunk/LayoutTests/imported/mathml-in-html5/fonts/math/stack-topshiftup9000.woff 2016-07-11 18:42:22 UTC (rev 203073)
@@ -0,0 +1,5 @@
+wOFFOTTO\x84CFF 4\xBD\xDBT3\zFFTM\xF4yS\xE1\xE0MATHiX/\x97OS/2X>`
+\xF0cmap\xE47B+\xC6head*6]\xFBUhhea4$O\xDFhmtx|\xD0maxpPPname\x98I\xD0HtPpost \xFF\x863x\x9Cc`d``\xE2\xE7O[f\xC6\xF3\xDB|e\xE0f~a\xB8,\xD7\x99\x86&I\xE8 \x99x\x9Cc`d``\xFC\xC2\xF8\x85!\x8A\xF902\xA0&Z<4Px\x9Cc`a~\xC18\x81\x81\x95\x81\x81\xA9\x8BiC\x84f|\xC0`\xC8\xC8e`\xE5d\x80Ft\xD0\xC0\xA0\xC0\xA0\xC0\xF8\x85\xF1C\x86\xA0#) x\x9C\xA5\x90\xBDj\xC30\x85\x8F\xF2Z:d젥\x90\xB2\x81djd(ɚ\xB9\xC6$\xB1D\xAE\xA5y\x96\xF6J\xFB$\x85>@\x97\xBEH\x8Feu \xA5b!\xEEw\xAF\xCF\xD5\xFDp\x85\xD4\xDF-\x81\xBAxܠ\xE6=pJ\xDCn\xA1+\x9E\xB7q->w\xD0m\R)Z\xF4\xEE}V\xC5=\x94\x81\xB8\xC1[\xE0&\xF0\xB8\x85\x9Ex܆\xAF\x81;\x8Ca\x83G\xBE\xA2\xB1E\xC973\xF4i(\xC4\x91\x96H\xF9'\xA7]Л\xC2\xF2\xAA\xB4\x8Fk\xF2\x98\x99\xE2X\xEAm\xEEd/\xEB\xCBD\xC5#\xB9L]\xBE\ȩ\xB5&өӆ2ˌ\x94\xB9;D\xA4\xAA\xBA\xE5\xCBzzcV\xAD\xACK\
xB3]\xE4Las\xBDq\x87b\xAC\xA3\xA6\x9C\x8A\xE7\xBE3\xE7m\xC9\xF9\xD6~\xAA\xA5\xDE\xFF\xF6R\xAB\xFA\x86\xBC?\x9B\xC1\xDC\xEC\xDDܔ۵LJN\xE4o=3\x9C\x8C\xA3aTm\xE4\xEC\xF1W\x9C\xA1dJ\xBDs饱\x9F\xA8\xEE\xABui\xB9g\xA9T<\xA8\x8A\x9F[\xF1\xAB\xFE\xB2x\x9Cc```f\x80`F\xB0\xF2\xC1| \xCD\x84 \xBE\xC2\xFF\xFF\xF2\xFFC\xA8JF6' $?\xD4Ya\xD3x\x9Cc`f\x83\xFF\xCDF@\x8A\x91+(U\xB9x\x9Ccd`aa`dd-.IL\xCE\xD6-\xC9/(\xCE\xC8L+)-\xB0400``db`d\xD0\xFE\xC1\xCF\xF0C\x9A\xF1\x87\xD3Y\xE6,=<\x8C\xDD@\xC0*ð\x82_\x86\x81A@\x86a\xB5\xA0\x87\xC3e!f\x905+?\xE7\xFC\x82ʢ\xCC\xF4\x8C\x8DdM#C3\xDFĒ_\xC7\xE2\xE2\xFC\xE4\xCCĒ\xCC\xFC<l\x96bu02012*)w\xEF\xFD^\xBB\x97q\xEFޟ[\xF62\xEF\xFB%\xF1\xFD\xE1? \xB6\xBD\xBF~\xAF\xFD\xB9\xE5w-;߯\x91n\xD1n.u'E+x\x9Cc```d\x82\xCB"\xEA\xF9`Z\xFE\xAE\x8C7\xB8\x8Dx\x9Cc`d``\xE0bx\xC0\xA8\xC7\xC0`\xC3z\x87\x814pJkbJ)k\x90h\xF14(+c\xC3\xBA\xB8v\xCC(\xCA\xC0\xF0\xF7*\x90m\xC
3\xC0\xC1 \xA4U\x804#\xD8F0D\xE5\xA91\x83\x83\x83NWAT\x8AU\xA8\x80Y|`s!\xA20 \xF8j\xC4\xE8\xE8
\ No newline at end of file
Added: trunk/LayoutTests/imported/mathml-in-html5/mathml/presentation-markup/fractions/frac-parameters-2-expected.txt (0 => 203073)
--- trunk/LayoutTests/imported/mathml-in-html5/mathml/presentation-markup/fractions/frac-parameters-2-expected.txt (rev 0)
+++ trunk/LayoutTests/imported/mathml-in-html5/mathml/presentation-markup/fractions/frac-parameters-2-expected.txt 2016-07-11 18:42:22 UTC (rev 203073)
@@ -0,0 +1,9 @@
+
+PASS AxisHeight
+PASS BottomDisplayStyleShiftDown
+PASS BottomShiftDown
+PASS DisplayStyleGapMin
+PASS GapMin
+PASS TopDisplayStyleShiftUp
+PASS ToShiftUp
+
Property changes on: trunk/LayoutTests/imported/mathml-in-html5/mathml/presentation-markup/fractions/frac-parameters-2-expected.txt
___________________________________________________________________
Added: svn:eol-style
+LF
\ No newline at end of property
Added: trunk/LayoutTests/imported/mathml-in-html5/mathml/presentation-markup/fractions/frac-parameters-2.html (0 => 203073)
--- trunk/LayoutTests/imported/mathml-in-html5/mathml/presentation-markup/fractions/frac-parameters-2.html (rev 0)
+++ trunk/LayoutTests/imported/mathml-in-html5/mathml/presentation-markup/fractions/frac-parameters-2.html 2016-07-11 18:42:22 UTC (rev 203073)
@@ -0,0 +1,175 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>Stack parameters</title>
+<link rel="help" href=""
+<meta name="assert" content="Element mfrac correctly uses the stack parameters from the MATH table.">
+<script src=""
+<script src=""
+<style>
+ math, mspace {
+ font-size: 10px;
+ }
+ @font-face {
+ font-family: axisheight7000;
+ src: url("../../../fonts/math/stack-axisheight7000.woff");
+ }
+ @font-face {
+ font-family: bottomdisplaystyleshiftdown5000;
+ src: url("../../../fonts/math/stack-bottomdisplaystyleshiftdown5000.woff");
+ }
+ @font-face {
+ font-family: bottomshiftdown6000;
+ src: url("../../../fonts/math/stack-bottomshiftdown6000.woff");
+ }
+ @font-face {
+ font-family: displaystylegapmin4000;
+ src: url("../../../fonts/math/stack-displaystylegapmin4000.woff");
+ }
+ @font-face {
+ font-family: gapmin8000;
+ src: url("../../../fonts/math/stack-gapmin8000.woff");
+ }
+ @font-face {
+ font-family: topdisplaystyleshiftup3000;
+ src: url("../../../fonts/math/stack-topdisplaystyleshiftup3000.woff");
+ }
+ @font-face {
+ font-family: topshiftup9000;
+ src: url("../../../fonts/math/stack-topshiftup9000.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(function() {
+ window.setTimeout(runTests, 250);
+ });
+ });
+
+ function runTests() {
+ test(function() {
+ var v = 7000 * emToPx;
+ assert_approx_equals(getBox("ref0001").top - getBox("num0001").bottom,
+ v, epsilon, "mfrac: axis height");
+ }, "AxisHeight");
+
+ test(function() {
+ var v = 5000 * emToPx;
+ assert_approx_equals(getBox("den0002").top - getBox("ref0002").bottom,
+ v, epsilon, "mfrac: denominator shift");
+ }, "BottomDisplayStyleShiftDown");
+
+ test(function() {
+ var v = 6000 * emToPx;
+ assert_approx_equals(getBox("den0003").top - getBox("ref0003").bottom,
+ v, epsilon, "mfrac: denominator shift");
+ }, "BottomShiftDown");
+
+ test(function() {
+ var v = 4000 * emToPx;
+ assert_approx_equals(getBox("den0004").top - getBox("num0004").bottom,
+ v, epsilon, "mfrac: gap");
+ }, "DisplayStyleGapMin");
+
+ test(function() {
+ var v = 8000 * emToPx;
+ assert_approx_equals(getBox("den0005").top - getBox("num0005").bottom,
+ v, epsilon, "mfrac: gap");
+ }, "GapMin");
+
+ test(function() {
+ var v = 3000 * emToPx;
+ assert_approx_equals(getBox("ref0006").top - getBox("num0006").bottom,
+ v, epsilon, "mfrac: numerator shift");
+ }, "TopDisplayStyleShiftUp");
+
+ test(function() {
+ var v = 9000 * emToPx;
+ assert_approx_equals(getBox("ref0007").top - getBox("num0007").bottom,
+ v, epsilon, "mfrac: numerator shift");
+ }, "ToShiftUp");
+
+ done();
+ }
+</script>
+</head>
+<body>
+ <p>
+ <math style="font-family: axisheight7000;">
+ <mspace id="ref0001" depth="1em" width="3em" mathbackground="green"/>
+ <mfrac linethickness="0px">
+ <mspace width="3em" height="1em" id="num0001" mathbackground="blue"/>
+ <mspace width="3em"/>
+ </mfrac>
+ </math>
+ </p>
+ <hr/>
+ <p>
+ <math display="block" style="font-family: bottomdisplaystyleshiftdown5000;">
+ <mspace id="ref0002" width="3em" height="1em" mathbackground="green"/>
+ <mfrac linethickness="0px">
+ <mspace width="3em"/>
+ <mspace width="3em" depth="1em" id="den0002" mathbackground="blue"/>
+ </mfrac>
+ </math>
+ </p>
+ <hr/>
+ <p>
+ <math style="font-family: bottomshiftdown6000;">
+ <mspace id="ref0003" width="3em" height="1em" mathbackground="green"/>
+ <mfrac linethickness="0px">
+ <mspace width="3em"/>
+ <mspace width="3em" depth="1em" id="den0003" mathbackground="blue"/>
+ </mfrac>
+ </math>
+ </p>
+ <hr/>
+ <p>
+ <math display="block" style="font-family: displaystylegapmin4000;">
+ <mfrac linethickness="0px">
+ <mspace width="3em" height="1em" id="num0004" mathbackground="blue"/>
+ <mspace width="3em" depth="1em" id="den0004" mathbackground="green"/>
+ </mfrac>
+ </math>
+ </p>
+ <hr/>
+ <p>
+ <math style="font-family: gapmin8000;">
+ <mfrac linethickness="0px">
+ <mspace width="3em" height="1em" id="num0005" mathbackground="blue"/>
+ <mspace width="3em" depth="1em" id="den0005" mathbackground="green"/>
+ </mfrac>
+ </math>
+ </p>
+ <hr/>
+ <p>
+ <math display="block" style="font-family: topdisplaystyleshiftup3000;">
+ <mspace id="ref0006" width="3em" depth="1em" mathbackground="green"/>
+ <mfrac linethickness="0px">
+ <mspace width="3em" height="1em" id="num0006" mathbackground="blue"/>
+ <mspace width="3em"/>
+ </mfrac>
+ </math>
+ </p>
+ <hr/>
+ <p>
+ <math style="font-family: topshiftup9000;">
+ <mspace id="ref0007" width="3em" depth="1em" mathbackground="green"/>
+ <mfrac linethickness="0px">
+ <mspace width="3em" height="1em" id="num0007" mathbackground="blue"/>
+ <mspace width="3em"/>
+ </mfrac>
+ </math>
+ </p>
+ <hr/>
+</body>
+</html>
Property changes on: trunk/LayoutTests/imported/mathml-in-html5/mathml/presentation-markup/fractions/frac-parameters-2.html
___________________________________________________________________
Added: svn:eol-style
+LF
\ No newline at end of property
Added: svn:mime-type
+text/html
\ No newline at end of property
Modified: trunk/Source/WebCore/ChangeLog (203072 => 203073)
--- trunk/Source/WebCore/ChangeLog 2016-07-11 18:38:36 UTC (rev 203072)
+++ trunk/Source/WebCore/ChangeLog 2016-07-11 18:42:22 UTC (rev 203073)
@@ -1,5 +1,24 @@
2016-07-11 Frederic Wang <[email protected]>
+ Use Stack* parameters from the OpenType MATH table
+ https://bugs.webkit.org/show_bug.cgi?id=155714
+
+ Reviewed by Brent Fulgham.
+
+ Test: mathml/mathml-in-html5/frac-parameters-2.html
+
+ * rendering/mathml/RenderMathMLFraction.cpp:
+ (WebCore::RenderMathMLFraction::updateFromElement): Set the stack parameters when
+ the line thickness is zero.
+ (WebCore::RenderMathMLFraction::layoutBlock): Correctly set the <mfrac> ascent and
+ the denominator vertical offset when the line thickness is zero.
+ (WebCore::RenderMathMLFraction::paint): Early return when we actually do not need to
+ paint any fraction bar.
+ * rendering/mathml/RenderMathMLFraction.h: Define an isStack helper function and define
+ members corresponding to stack parameters.
+
+2016-07-11 Frederic Wang <[email protected]>
+
Add support for mathvariants that cannot be emulated via CSS.
https://bugs.webkit.org/show_bug.cgi?id=108778
Modified: trunk/Source/WebCore/rendering/mathml/RenderMathMLFraction.cpp (203072 => 203073)
--- trunk/Source/WebCore/rendering/mathml/RenderMathMLFraction.cpp 2016-07-11 18:38:36 UTC (rev 203072)
+++ trunk/Source/WebCore/rendering/mathml/RenderMathMLFraction.cpp 2016-07-11 18:42:22 UTC (rev 203073)
@@ -110,19 +110,32 @@
}
// We now know whether we should layout as a normal fraction or as a stack (fraction without bar) and so determine the relevant constants.
- // FIXME: If m_lineThickness == 0, we should read Stack* parameters. See http://wkb.ug/122297
bool display = mathMLStyle()->displayStyle();
- if (mathData) {
- m_numeratorGapMin = mathData->getMathConstant(primaryFont, display ? OpenTypeMathData::FractionNumDisplayStyleGapMin : OpenTypeMathData::FractionNumeratorGapMin);
- m_denominatorGapMin = mathData->getMathConstant(primaryFont, display ? OpenTypeMathData::FractionDenomDisplayStyleGapMin : OpenTypeMathData::FractionDenominatorGapMin);
- m_numeratorMinShiftUp = mathData->getMathConstant(primaryFont, display ? OpenTypeMathData::FractionNumeratorDisplayStyleShiftUp : OpenTypeMathData::FractionNumeratorShiftUp);
- m_denominatorMinShiftDown = mathData->getMathConstant(primaryFont, display ? OpenTypeMathData::FractionDenominatorDisplayStyleShiftDown : OpenTypeMathData::FractionDenominatorShiftDown);
+ if (isStack()) {
+ if (mathData) {
+ m_gapMin = mathData->getMathConstant(primaryFont, display ? OpenTypeMathData::StackDisplayStyleGapMin : OpenTypeMathData::StackGapMin);
+ m_topShiftUp = mathData->getMathConstant(primaryFont, display ? OpenTypeMathData::StackTopDisplayStyleShiftUp : OpenTypeMathData::StackTopShiftUp);
+ m_bottomShiftDown = mathData->getMathConstant(primaryFont, display ? OpenTypeMathData::StackBottomDisplayStyleShiftDown : OpenTypeMathData::StackBottomShiftDown);
+ } else {
+ // We use the values suggested in the MATH table specification.
+ m_gapMin = m_denominatorGapMin = display ? 7 * ruleThicknessFallback() : 3 * ruleThicknessFallback();
+
+ // The MATH table specification does not suggest any values for shifts, so we leave them at zero.
+ m_topShiftUp = m_bottomShiftDown = 0;
+ }
} else {
- // The MATH table specification suggests default rule thickness or (in displaystyle) 3 times default rule thickness for the gaps.
- m_numeratorGapMin = m_denominatorGapMin = display ? 3 * ruleThicknessFallback() : ruleThicknessFallback();
+ if (mathData) {
+ m_numeratorGapMin = mathData->getMathConstant(primaryFont, display ? OpenTypeMathData::FractionNumDisplayStyleGapMin : OpenTypeMathData::FractionNumeratorGapMin);
+ m_denominatorGapMin = mathData->getMathConstant(primaryFont, display ? OpenTypeMathData::FractionDenomDisplayStyleGapMin : OpenTypeMathData::FractionDenominatorGapMin);
+ m_numeratorMinShiftUp = mathData->getMathConstant(primaryFont, display ? OpenTypeMathData::FractionNumeratorDisplayStyleShiftUp : OpenTypeMathData::FractionNumeratorShiftUp);
+ m_denominatorMinShiftDown = mathData->getMathConstant(primaryFont, display ? OpenTypeMathData::FractionDenominatorDisplayStyleShiftDown : OpenTypeMathData::FractionDenominatorShiftDown);
+ } else {
+ // The MATH table specification suggests default rule thickness or (in displaystyle) 3 times default rule thickness for the gaps.
+ m_numeratorGapMin = m_denominatorGapMin = display ? 3 * ruleThicknessFallback() : ruleThicknessFallback();
- // The MATH table specification does not suggest any values for shifts, so we leave them at zero.
- m_numeratorMinShiftUp = m_denominatorMinShiftDown = 0;
+ // The MATH table specification does not suggest any values for shifts, so we leave them at zero.
+ m_numeratorMinShiftUp = m_denominatorMinShiftDown = 0;
+ }
}
// Parse alignment attributes.
@@ -202,12 +215,28 @@
numerator().setLocation(numeratorLocation);
LayoutUnit numeratorAscent = ascentForChild(numerator());
- verticalOffset += std::max(numerator().logicalHeight() + m_numeratorGapMin + m_lineThickness / 2, numeratorAscent + m_numeratorMinShiftUp); // This is the middle of the fraction bar.
- m_ascent = verticalOffset + mathAxisHeight();
-
+ LayoutUnit numeratorDescent = numerator().logicalHeight() - numeratorAscent;
LayoutUnit denominatorAscent = ascentForChild(denominator());
LayoutUnit denominatorDescent = denominator().logicalHeight() - denominatorAscent;
- verticalOffset += std::max(m_lineThickness / 2 + m_denominatorGapMin, m_denominatorMinShiftDown - denominatorAscent);
+ if (isStack()) {
+ LayoutUnit topShiftUp = m_topShiftUp;
+ LayoutUnit bottomShiftDown = m_bottomShiftDown;
+ LayoutUnit gap = topShiftUp - numeratorDescent + bottomShiftDown - denominatorAscent;
+ if (gap < m_gapMin) {
+ // If the gap is not large enough, we increase the shifts by the same value.
+ LayoutUnit delta = (m_gapMin - gap) / 2;
+ topShiftUp += delta;
+ bottomShiftDown += delta;
+ }
+ verticalOffset += numeratorAscent + topShiftUp; // This is the middle of the stack gap.
+ m_ascent = verticalOffset + mathAxisHeight();
+ verticalOffset += bottomShiftDown - denominatorAscent;
+ } else {
+ verticalOffset += std::max(numerator().logicalHeight() + m_numeratorGapMin + m_lineThickness / 2, numeratorAscent + m_numeratorMinShiftUp); // This is the middle of the fraction bar.
+ m_ascent = verticalOffset + mathAxisHeight();
+ verticalOffset += std::max(m_lineThickness / 2 + m_denominatorGapMin, m_denominatorMinShiftDown - denominatorAscent);
+ }
+
LayoutPoint denominatorLocation(horizontalOffset(denominator(), m_denominatorAlign), verticalOffset);
denominator().setLocation(denominatorLocation);
@@ -220,7 +249,7 @@
void RenderMathMLFraction::paint(PaintInfo& info, const LayoutPoint& paintOffset)
{
RenderMathMLBlock::paint(info, paintOffset);
- if (info.context().paintingDisabled() || info.phase != PaintPhaseForeground || style().visibility() != VISIBLE || !isValid())
+ if (info.context().paintingDisabled() || info.phase != PaintPhaseForeground || style().visibility() != VISIBLE || !isValid() || isStack())
return;
IntPoint adjustedPaintOffset = roundedIntPoint(paintOffset + location() + LayoutPoint(0, m_ascent - mathAxisHeight()));
Modified: trunk/Source/WebCore/rendering/mathml/RenderMathMLFraction.h (203072 => 203073)
--- trunk/Source/WebCore/rendering/mathml/RenderMathMLFraction.h 2016-07-11 18:38:36 UTC (rev 203072)
+++ trunk/Source/WebCore/rendering/mathml/RenderMathMLFraction.h 2016-07-11 18:42:22 UTC (rev 203073)
@@ -57,6 +57,7 @@
RenderMathMLOperator* unembellishedOperator() final;
void styleDidChange(StyleDifference, const RenderStyle* oldStyle) final;
+ bool isStack() const { return !m_lineThickness; }
bool isValid() const;
RenderBox& numerator() const;
RenderBox& denominator() const;
@@ -69,14 +70,23 @@
LayoutUnit horizontalOffset(RenderBox&, FractionAlignment);
LayoutUnit m_ascent;
- LayoutUnit m_defaultLineThickness = 1;
+ LayoutUnit m_defaultLineThickness { 1 };
LayoutUnit m_lineThickness;
- LayoutUnit m_numeratorGapMin;
+ union {
+ LayoutUnit m_numeratorGapMin;
+ LayoutUnit m_gapMin;
+ };
LayoutUnit m_denominatorGapMin;
- LayoutUnit m_numeratorMinShiftUp;
- LayoutUnit m_denominatorMinShiftDown;
- FractionAlignment m_numeratorAlign = FractionAlignmentCenter;
- FractionAlignment m_denominatorAlign = FractionAlignmentCenter;
+ union {
+ LayoutUnit m_numeratorMinShiftUp;
+ LayoutUnit m_topShiftUp;
+ };
+ union {
+ LayoutUnit m_denominatorMinShiftDown;
+ LayoutUnit m_bottomShiftDown;
+ };
+ FractionAlignment m_numeratorAlign { FractionAlignmentCenter };
+ FractionAlignment m_denominatorAlign { FractionAlignmentCenter };
};
} // namespace WebCore