<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[170005] trunk</title>
</head>
<body>

<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt;  }
#msg dl a { font-weight: bold}
#msg dl a:link    { color:#fc3; }
#msg dl a:active  { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff  {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta">
<dt>Revision</dt> <dd><a href="http://trac.webkit.org/projects/webkit/changeset/170005">170005</a></dd>
<dt>Author</dt> <dd>fred.wang@free.fr</dd>
<dt>Date</dt> <dd>2014-06-16 03:07:32 -0700 (Mon, 16 Jun 2014)</dd>
</dl>

<h3>Log Message</h3>
<pre>Draw radicals with glyphs for better rendering
https://bugs.webkit.org/show_bug.cgi?id=119038

Reviewed by Chris Fleizach.

Source/WebCore:
We rewrite RenderMathMLRoot in order to fix bugs with SVG transforms and dynamic modification of children and allow drawing with an OpenType MATH table.
The drawing of the radical sign (without the top bar) is now moved to a RenderMathMLRadicalOperator class inheriting from RenderMathMLOperator.
This class fallbacks to the original drawing with graphic primitives if an OpenType MATH table is not available.

Tests: mathml/opentype/roots-LatinModern.html
       mathml/presentation/mroot-transform.html

* CMakeLists.txt: add files to build system.
* WebCore.vcxproj/WebCore.vcxproj: ditto.
* WebCore.vcxproj/WebCore.vcxproj.filters: ditto.
* WebCore.xcodeproj/project.pbxproj: ditto
* css/mathml.css: remove rules for msqrt/mroot. The &quot;script level&quot; in mroot is not incremented by 2 as specified in the spec.
(math, mrow, mfenced, merror, mphantom, mstyle, menclose):
(mroot &gt; *:last-child):
(math, mrow, mfenced, msqrt, mroot, merror, mphantom, mstyle, menclose): Deleted.
(msqrt &gt; *): Deleted.
(mroot): Deleted. This rule was causing bug 126516.
(mroot &gt; * + *): Deleted.
* rendering/RenderObject.h: Add two new isRenderMathML* functions for dynamic casting.
(WebCore::RenderObject::isRenderMathMLRadicalOperator):
(WebCore::RenderObject::isRenderMathMLRootWrapper):
* rendering/mathml/RenderMathMLOperator.cpp: Accept a set of operator dictionary flags, all disabled by default. This is to allow anonymous radicas, which don't have any flag.
isFencedOperator() is now replaced with the more general isAnonymous() since we allow anonymous radical operator fors msqrt/mroot.
(WebCore::RenderMathMLOperator::RenderMathMLOperator):
(WebCore::RenderMathMLOperator::setOperatorFlagFromAttribute):
(WebCore::RenderMathMLOperator::setOperatorPropertiesFromOpDictEntry):
(WebCore::RenderMathMLOperator::SetOperatorProperties):
(WebCore::RenderMathMLOperator::updateTokenContent):
* rendering/mathml/RenderMathMLOperator.h: Allow class to be overriden, redefine the anonymous constructor, remove isFencedOperator().
* rendering/mathml/RenderMathMLRadicalOperator.cpp: Added.
(WebCore::RenderMathMLRadicalOperator::RenderMathMLRadicalOperator):
(WebCore::RenderMathMLRadicalOperator::stretchTo):
(WebCore::RenderMathMLRadicalOperator::SetOperatorProperties):
(WebCore::RenderMathMLRadicalOperator::computePreferredLogicalWidths):
(WebCore::RenderMathMLRadicalOperator::computeLogicalHeight):
(WebCore::RenderMathMLRadicalOperator::paint):
(WebCore::RenderMathMLRadicalOperator::trailingSpaceError):
* rendering/mathml/RenderMathMLRadicalOperator.h: Added.
* rendering/mathml/RenderMathMLRoot.cpp: Rewritten. Some parts to use graphic primitives are moved to RenderMathMLRadicalOperator.cpp.
(WebCore::RenderMathMLRoot::RenderMathMLRoot):
(WebCore::RenderMathMLRoot::baseWrapper):
(WebCore::RenderMathMLRoot::radicalWrapper):
(WebCore::RenderMathMLRoot::indexWrapper):
(WebCore::RenderMathMLRoot::radicalOperator):
(WebCore::RenderMathMLRoot::restructureWrappers):
(WebCore::RenderMathMLRoot::addChild):
(WebCore::RenderMathMLRoot::styleDidChange):
(WebCore::RenderMathMLRoot::updateFromElement):
(WebCore::RenderMathMLRoot::updateStyle):
(WebCore::RenderMathMLRoot::firstLineBaseline):
(WebCore::RenderMathMLRoot::layout):
(WebCore::RenderMathMLRoot::paint):
(WebCore::RenderMathMLRootWrapper::createAnonymousWrapper):
(WebCore::RenderMathMLRootWrapper::removeChildWithoutRestructuring):
(WebCore::RenderMathMLRootWrapper::removeChild):
(WebCore::RenderMathMLRoot::paddingTop): Deleted.
(WebCore::RenderMathMLRoot::paddingBottom): Deleted.
(WebCore::RenderMathMLRoot::paddingLeft): Deleted.
(WebCore::RenderMathMLRoot::paddingRight): Deleted.
(WebCore::RenderMathMLRoot::paddingBefore): Deleted.
(WebCore::RenderMathMLRoot::paddingAfter): Deleted.
(WebCore::RenderMathMLRoot::paddingStart): Deleted.
(WebCore::RenderMathMLRoot::paddingEnd): Deleted.
(WebCore::RenderMathMLRoot::index): Deleted.
* rendering/mathml/RenderMathMLRoot.h: Rewritten.
(WebCore::RenderMathMLRootWrapper::RenderMathMLRootWrapper):

LayoutTests:
We update the reference for some tests with radicals and update the expectation of tests for addition/removal of children in an msqrt/mroot element.
We also add a test for bug 126516 (SVG transforms not applied to mroot) and a new test for radical drawing using an OpenType MATH table.

* TestExpectations: enable the tests for addition/removal of children.
* mathml/opentype/roots-LatinModern.html: Added.
* mathml/presentation/mroot-transform-expected.html: Added.
* mathml/presentation/mroot-transform.html: Added.
* platform/efl/TestExpectations: mark failures for bad references.
* platform/efl/mathml/opentype/roots-LatinModern-expected.txt: Added.
* platform/gtk/mathml/opentype/roots-LatinModern-expected.png: Added.
* platform/gtk/mathml/opentype/roots-LatinModern-expected.txt: Added.
* platform/gtk/mathml/presentation/mo-stretch-expected.png: update reference.
* platform/gtk/mathml/presentation/mo-stretch-expected.txt: update reference.
* platform/gtk/mathml/presentation/roots-expected.png: update reference.
* platform/gtk/mathml/presentation/roots-expected.txt: update reference.
* platform/mac/TestExpectations: mark failures for bad references.
* platform/mac/mathml/opentype/roots-LatinModern-expected.txt: Added.
* platform/win/TestExpectations: mark failures for bad references.
* platform/win/mathml/opentype/roots-LatinModern-expected.txt: Added.</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkLayoutTestsChangeLog">trunk/LayoutTests/ChangeLog</a></li>
<li><a href="#trunkLayoutTestsTestExpectations">trunk/LayoutTests/TestExpectations</a></li>
<li><a href="#trunkLayoutTestsplatformeflTestExpectations">trunk/LayoutTests/platform/efl/TestExpectations</a></li>
<li><a href="#trunkLayoutTestsplatformgtkmathmlpresentationmostretchexpectedpng">trunk/LayoutTests/platform/gtk/mathml/presentation/mo-stretch-expected.png</a></li>
<li><a href="#trunkLayoutTestsplatformgtkmathmlpresentationmostretchexpectedtxt">trunk/LayoutTests/platform/gtk/mathml/presentation/mo-stretch-expected.txt</a></li>
<li><a href="#trunkLayoutTestsplatformgtkmathmlpresentationrootsexpectedpng">trunk/LayoutTests/platform/gtk/mathml/presentation/roots-expected.png</a></li>
<li><a href="#trunkLayoutTestsplatformgtkmathmlpresentationrootsexpectedtxt">trunk/LayoutTests/platform/gtk/mathml/presentation/roots-expected.txt</a></li>
<li><a href="#trunkLayoutTestsplatformmacTestExpectations">trunk/LayoutTests/platform/mac/TestExpectations</a></li>
<li><a href="#trunkLayoutTestsplatformwinTestExpectations">trunk/LayoutTests/platform/win/TestExpectations</a></li>
<li><a href="#trunkSourceWebCoreCMakeListstxt">trunk/Source/WebCore/CMakeLists.txt</a></li>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCoreWebCorevcxprojWebCorevcxproj">trunk/Source/WebCore/WebCore.vcxproj/WebCore.vcxproj</a></li>
<li><a href="#trunkSourceWebCoreWebCorevcxprojWebCorevcxprojfilters">trunk/Source/WebCore/WebCore.vcxproj/WebCore.vcxproj.filters</a></li>
<li><a href="#trunkSourceWebCoreWebCorexcodeprojprojectpbxproj">trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj</a></li>
<li><a href="#trunkSourceWebCorecssmathmlcss">trunk/Source/WebCore/css/mathml.css</a></li>
<li><a href="#trunkSourceWebCorerenderingRenderObjecth">trunk/Source/WebCore/rendering/RenderObject.h</a></li>
<li><a href="#trunkSourceWebCorerenderingmathmlRenderMathMLOperatorcpp">trunk/Source/WebCore/rendering/mathml/RenderMathMLOperator.cpp</a></li>
<li><a href="#trunkSourceWebCorerenderingmathmlRenderMathMLOperatorh">trunk/Source/WebCore/rendering/mathml/RenderMathMLOperator.h</a></li>
<li><a href="#trunkSourceWebCorerenderingmathmlRenderMathMLRootcpp">trunk/Source/WebCore/rendering/mathml/RenderMathMLRoot.cpp</a></li>
<li><a href="#trunkSourceWebCorerenderingmathmlRenderMathMLRooth">trunk/Source/WebCore/rendering/mathml/RenderMathMLRoot.h</a></li>
</ul>

<h3>Added Paths</h3>
<ul>
<li><a href="#trunkLayoutTestsmathmlopentyperootsLatinModernhtml">trunk/LayoutTests/mathml/opentype/roots-LatinModern.html</a></li>
<li><a href="#trunkLayoutTestsmathmlpresentationmroottransformexpectedhtml">trunk/LayoutTests/mathml/presentation/mroot-transform-expected.html</a></li>
<li><a href="#trunkLayoutTestsmathmlpresentationmroottransformhtml">trunk/LayoutTests/mathml/presentation/mroot-transform.html</a></li>
<li><a href="#trunkLayoutTestsplatformeflmathmlopentyperootsLatinModernexpectedtxt">trunk/LayoutTests/platform/efl/mathml/opentype/roots-LatinModern-expected.txt</a></li>
<li><a href="#trunkLayoutTestsplatformgtkmathmlopentyperootsLatinModernexpectedpng">trunk/LayoutTests/platform/gtk/mathml/opentype/roots-LatinModern-expected.png</a></li>
<li><a href="#trunkLayoutTestsplatformgtkmathmlopentyperootsLatinModernexpectedtxt">trunk/LayoutTests/platform/gtk/mathml/opentype/roots-LatinModern-expected.txt</a></li>
<li><a href="#trunkLayoutTestsplatformmacmathmlopentyperootsLatinModernexpectedtxt">trunk/LayoutTests/platform/mac/mathml/opentype/roots-LatinModern-expected.txt</a></li>
<li><a href="#trunkLayoutTestsplatformwinmathmlopentyperootsLatinModernexpectedtxt">trunk/LayoutTests/platform/win/mathml/opentype/roots-LatinModern-expected.txt</a></li>
<li><a href="#trunkSourceWebCorerenderingmathmlRenderMathMLRadicalOperatorcpp">trunk/Source/WebCore/rendering/mathml/RenderMathMLRadicalOperator.cpp</a></li>
<li><a href="#trunkSourceWebCorerenderingmathmlRenderMathMLRadicalOperatorh">trunk/Source/WebCore/rendering/mathml/RenderMathMLRadicalOperator.h</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkLayoutTestsChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/ChangeLog (170004 => 170005)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/ChangeLog        2014-06-16 09:09:21 UTC (rev 170004)
+++ trunk/LayoutTests/ChangeLog        2014-06-16 10:07:32 UTC (rev 170005)
</span><span class="lines">@@ -1,3 +1,30 @@
</span><ins>+2014-06-16  Frédéric Wang  &lt;fred.wang@free.fr&gt;
+
+        Draw radicals with glyphs for better rendering
+        https://bugs.webkit.org/show_bug.cgi?id=119038
+
+        Reviewed by Chris Fleizach.
+
+        We update the reference for some tests with radicals and update the expectation of tests for addition/removal of children in an msqrt/mroot element.
+        We also add a test for bug 126516 (SVG transforms not applied to mroot) and a new test for radical drawing using an OpenType MATH table.
+
+        * TestExpectations: enable the tests for addition/removal of children.
+        * mathml/opentype/roots-LatinModern.html: Added.
+        * mathml/presentation/mroot-transform-expected.html: Added.
+        * mathml/presentation/mroot-transform.html: Added.
+        * platform/efl/TestExpectations: mark failures for bad references.
+        * platform/efl/mathml/opentype/roots-LatinModern-expected.txt: Added.
+        * platform/gtk/mathml/opentype/roots-LatinModern-expected.png: Added.
+        * platform/gtk/mathml/opentype/roots-LatinModern-expected.txt: Added.
+        * platform/gtk/mathml/presentation/mo-stretch-expected.png: update reference.
+        * platform/gtk/mathml/presentation/mo-stretch-expected.txt: update reference.
+        * platform/gtk/mathml/presentation/roots-expected.png: update reference.
+        * platform/gtk/mathml/presentation/roots-expected.txt: update reference.
+        * platform/mac/TestExpectations: mark failures for bad references.
+        * platform/mac/mathml/opentype/roots-LatinModern-expected.txt: Added.
+        * platform/win/TestExpectations: mark failures for bad references.
+        * platform/win/mathml/opentype/roots-LatinModern-expected.txt: Added.
+
</ins><span class="cx"> 2014-06-16  Andrzej Badowski  &lt;a.badowski@samsung.com&gt;
</span><span class="cx"> 
</span><span class="cx">         [EFL] Change expectations for three failing or flaky layout tests.
</span></span></pre></div>
<a id="trunkLayoutTestsTestExpectations"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/TestExpectations (170004 => 170005)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/TestExpectations        2014-06-16 09:09:21 UTC (rev 170004)
+++ trunk/LayoutTests/TestExpectations        2014-06-16 10:07:32 UTC (rev 170005)
</span><span class="lines">@@ -67,10 +67,8 @@
</span><span class="cx"> 
</span><span class="cx"> webkit.org/b/127860 [ Debug ] js/function-apply-aliased.html [ Skip ]
</span><span class="cx"> 
</span><del>-# These tests verify dynamic manipulation of the mroot and msqrt elements.
-# Unfortunately, the current MathML code does not handle them well.
-webkit.org/b/119038 mathml/roots-addChild.html [ Skip ]
-webkit.org/b/119038 mathml/roots-removeChild.html [ Skip ]
</del><ins>+# This test verifies dynamic manipulation of the mroot and msqrt elements.
+mathml/roots-removeChild.html [ ImageOnlyFailure ]
</ins><span class="cx"> 
</span><span class="cx"> # This test verifies that a mismatch reftest will fail as intended if both results are same. (introduced in r93187)
</span><span class="cx"> fast/harness/sample-fail-mismatch-reftest.html [ WontFix ImageOnlyFailure ]
</span></span></pre></div>
<a id="trunkLayoutTestsmathmlopentyperootsLatinModernhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/mathml/opentype/roots-LatinModern.html (0 => 170005)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/mathml/opentype/roots-LatinModern.html                                (rev 0)
+++ trunk/LayoutTests/mathml/opentype/roots-LatinModern.html        2014-06-16 10:07:32 UTC (rev 170005)
</span><span class="lines">@@ -0,0 +1,80 @@
</span><ins>+&lt;!doctype html&gt;
+&lt;html&gt; 
+  &lt;head&gt;
+    &lt;title&gt;Roots Latin Modern&lt;/title&gt;
+    &lt;meta charset=&quot;utf-8&quot;/&gt;
+    &lt;style type=&quot;text/css&quot;&gt;
+      @font-face {
+      font-family: &quot;Latin Modern Math&quot;;
+      src: local(&quot;Latin Modern Math&quot;), local(&quot;LatinModernMath-Regular&quot;), url(&quot;latinmodern-math.woff&quot;);
+      }
+      math {
+      font-family: &quot;Latin Modern Math&quot;;
+      }      
+    &lt;/style&gt;
+  &lt;/head&gt;
+  &lt;body&gt;
+
+    &lt;!-- We test the rendering roots with the Latin Modern Math font --&gt;
+
+    &lt;!-- nested square roots of various sizes --&gt;
+    &lt;math display=&quot;block&quot;&gt;
+      &lt;mrow&gt;
+        &lt;msqrt&gt;
+          &lt;mn&gt;1&lt;/mn&gt;
+          &lt;mo&gt;+&lt;/mo&gt;
+          &lt;msqrt&gt;
+            &lt;mn&gt;1&lt;/mn&gt;
+            &lt;mo&gt;+&lt;/mo&gt;
+            &lt;msqrt&gt;
+              &lt;mn&gt;1&lt;/mn&gt;
+              &lt;mo&gt;+&lt;/mo&gt;
+              &lt;msqrt&gt;
+                &lt;mn&gt;1&lt;/mn&gt;
+                &lt;mo&gt;+&lt;/mo&gt;
+                &lt;msqrt&gt;
+                  &lt;mn&gt;1&lt;/mn&gt;
+                  &lt;mo&gt;+&lt;/mo&gt;
+                  &lt;msqrt&gt;
+                    &lt;mn&gt;1&lt;/mn&gt;
+                    &lt;mo&gt;+&lt;/mo&gt;
+                    &lt;msqrt&gt;
+                      &lt;mn&gt;1&lt;/mn&gt;
+                      &lt;mo&gt;+&lt;/mo&gt;
+                      &lt;mi&gt;x&lt;/mi&gt;
+                    &lt;/msqrt&gt;
+                  &lt;/msqrt&gt;
+                &lt;/msqrt&gt;
+              &lt;/msqrt&gt;
+            &lt;/msqrt&gt;
+          &lt;/msqrt&gt;
+        &lt;/msqrt&gt;
+      &lt;/mrow&gt;
+    &lt;/math&gt;
+
+    &lt;!-- mroot with short index --&gt;
+    &lt;math display=&quot;block&quot;&gt;
+      &lt;mroot&gt;
+        &lt;mspace width=&quot;20px&quot; height=&quot;50px&quot; mathbackground=&quot;red&quot;/&gt;
+        &lt;mspace width=&quot;20px&quot; height=&quot;10px&quot; mathbackground=&quot;green&quot;/&gt;
+      &lt;/mroot&gt;
+      &lt;mroot&gt;
+        &lt;mspace width=&quot;20px&quot; height=&quot;20px&quot; mathbackground=&quot;red&quot;/&gt;
+        &lt;mspace width=&quot;20px&quot; height=&quot;5px&quot; mathbackground=&quot;blue&quot;/&gt;
+      &lt;/mroot&gt;
+    &lt;/math&gt;
+
+    &lt;!-- mroot with tall index --&gt;
+    &lt;math display=&quot;block&quot;&gt;
+      &lt;mroot&gt;
+        &lt;mspace width=&quot;20px&quot; height=&quot;50px&quot; mathbackground=&quot;red&quot;/&gt;
+        &lt;mspace width=&quot;20px&quot; height=&quot;50px&quot; mathbackground=&quot;green&quot;/&gt;
+      &lt;/mroot&gt;
+      &lt;mroot&gt;
+        &lt;mspace width=&quot;20px&quot; height=&quot;20px&quot; mathbackground=&quot;red&quot;/&gt;
+        &lt;mspace width=&quot;20px&quot; height=&quot;20px&quot; mathbackground=&quot;blue&quot;/&gt;
+      &lt;/mroot&gt;
+    &lt;/math&gt;
+
+  &lt;/body&gt;
+&lt;/html&gt;
</ins><span class="cx">Property changes on: trunk/LayoutTests/mathml/opentype/roots-LatinModern.html
</span><span class="cx">___________________________________________________________________
</span></span></pre></div>
<a id="svnmimetype"></a>
<div class="addfile"><h4>Added: svn:mime-type</h4></div>
<a id="svneolstyle"></a>
<div class="addfile"><h4>Added: svn:eol-style</h4></div>
<a id="trunkLayoutTestsmathmlpresentationmroottransformexpectedhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/mathml/presentation/mroot-transform-expected.html (0 => 170005)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/mathml/presentation/mroot-transform-expected.html                                (rev 0)
+++ trunk/LayoutTests/mathml/presentation/mroot-transform-expected.html        2014-06-16 10:07:32 UTC (rev 170005)
</span><span class="lines">@@ -0,0 +1,17 @@
</span><ins>+&lt;!doctype html&gt;
+&lt;html&gt;
+  &lt;head&gt;
+    &lt;title&gt;mroot transform (bug 126516)&lt;/title&gt;
+  &lt;/head&gt;
+  &lt;body&gt;
+
+    &lt;div style=&quot;position: absolute; top: 0; left: 0;&quot;&gt;
+      &lt;svg&gt;
+        &lt;g transform=&quot;translate(200,0)&quot;&gt;
+          &lt;rect width=&quot;100&quot; height=&quot;100&quot; fill=&quot;red&quot;/&gt;
+        &lt;/g&gt;
+      &lt;/svg&gt;
+    &lt;/div&gt;
+
+  &lt;/body&gt;
+&lt;/html&gt;
</ins><span class="cx">Property changes on: trunk/LayoutTests/mathml/presentation/mroot-transform-expected.html
</span><span class="cx">___________________________________________________________________
</span></span></pre></div>
<a id="svnmimetype"></a>
<div class="addfile"><h4>Added: svn:mime-type</h4></div>
<a id="svneolstyle"></a>
<div class="addfile"><h4>Added: svn:eol-style</h4></div>
<a id="trunkLayoutTestsmathmlpresentationmroottransformhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/mathml/presentation/mroot-transform.html (0 => 170005)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/mathml/presentation/mroot-transform.html                                (rev 0)
+++ trunk/LayoutTests/mathml/presentation/mroot-transform.html        2014-06-16 10:07:32 UTC (rev 170005)
</span><span class="lines">@@ -0,0 +1,33 @@
</span><ins>+&lt;!doctype html&gt;
+&lt;html&gt;
+  &lt;head&gt;
+    &lt;title&gt;mroot transform (bug 126516)&lt;/title&gt;
+  &lt;/head&gt;
+  &lt;body&gt;
+
+    &lt;!-- This cubic root should be translated to the left... --&gt;
+    &lt;div style=&quot;position: absolute; top: 0; left: 0;&quot;&gt;
+      &lt;svg&gt;
+        &lt;g transform=&quot;translate(200,0)&quot;&gt;
+          &lt;switch&gt;
+            &lt;foreignObject width=&quot;100&quot; height=&quot;100&quot;&gt;
+              &lt;math&gt;
+                &lt;mroot&gt;&lt;mi&gt;x&lt;/mi&gt;&lt;mn&gt;3&lt;/mn&gt;&lt;/mroot&gt;
+              &lt;/math&gt;
+            &lt;/foreignObject&gt;
+          &lt;/switch&gt;
+        &lt;/g&gt;
+      &lt;/svg&gt;
+    &lt;/div&gt;
+
+    &lt;!-- ... and thus hidden by this red rectangle. --&gt;
+    &lt;div style=&quot;position: absolute; top: 0; left: 0;&quot;&gt;
+      &lt;svg&gt;
+        &lt;g transform=&quot;translate(200,0)&quot;&gt;
+          &lt;rect width=&quot;100&quot; height=&quot;100&quot; fill=&quot;red&quot;/&gt;
+        &lt;/g&gt;
+      &lt;/svg&gt;
+    &lt;/div&gt;
+
+  &lt;/body&gt;
+&lt;/html&gt;
</ins><span class="cx">Property changes on: trunk/LayoutTests/mathml/presentation/mroot-transform.html
</span><span class="cx">___________________________________________________________________
</span></span></pre></div>
<a id="svnmimetype"></a>
<div class="addfile"><h4>Added: svn:mime-type</h4></div>
<a id="svneolstyle"></a>
<div class="addfile"><h4>Added: svn:eol-style</h4></div>
<a id="trunkLayoutTestsplatformeflTestExpectations"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/platform/efl/TestExpectations (170004 => 170005)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/platform/efl/TestExpectations        2014-06-16 09:09:21 UTC (rev 170004)
+++ trunk/LayoutTests/platform/efl/TestExpectations        2014-06-16 10:07:32 UTC (rev 170005)
</span><span class="lines">@@ -1635,6 +1635,9 @@
</span><span class="cx"> webkit.org/b/72828 mathml/opentype/horizontal-LatinModern.html [ Failure ]
</span><span class="cx"> webkit.org/b/72828 mathml/opentype/opentype-stretchy-horizontal.html [ Failure ]
</span><span class="cx"> webkit.org/b/72828 mathml/opentype/horizontal-LatinModern-munderover.html [ Failure ]
</span><ins>+webkit.org/b/119038 mathml/opentype/roots-LatinModern.html [ Failure ]
+webkit.org/b/119038 mathml/presentation/mo-stretch.html [ Failure ]
+webkit.org/b/119038 mathml/presentation/roots.xhtml [ Failure ]
</ins><span class="cx"> 
</span><span class="cx"> # Failures EFL since the inception
</span><span class="cx"> webkit.org/b/133734 css3/viewport-percentage-lengths/viewport-percentage-lengths-anonymous-block.html [ Failure ]
</span></span></pre></div>
<a id="trunkLayoutTestsplatformeflmathmlopentyperootsLatinModernexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/platform/efl/mathml/opentype/roots-LatinModern-expected.txt (0 => 170005)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/platform/efl/mathml/opentype/roots-LatinModern-expected.txt                                (rev 0)
+++ trunk/LayoutTests/platform/efl/mathml/opentype/roots-LatinModern-expected.txt        2014-06-16 10:07:32 UTC (rev 170005)
</span><span class="lines">@@ -0,0 +1,184 @@
</span><ins>+layer at (0,0) size 800x600
+  RenderView at (0,0) size 800x600
+layer at (0,0) size 800x259
+  RenderBlock {HTML} at (0,0) size 800x260
+    RenderBody {BODY} at (8,8) size 784x236
+      RenderMathMLMath {math} at (0,0) size 784x53 [padding: 0 1 0 1]
+        RenderMathMLRow {mrow} at (232,0) size 320x53
+          RenderMathMLSquareRoot {msqrt} at (0,0) size 319x53
+            RenderMathMLBlock (anonymous, flex) at (0,0) size 17x53
+              RenderMathMLRadicalOperator (anonymous) at (0,0) size 17x53
+                RenderMathMLBlock (anonymous, flex) at (0,0) size 13x53
+                  RenderBlock (anonymous) at (0,0) size 13x53
+                    RenderText at (0,-56) size 13x106
+                      text run at (0,-56) width 13: &quot;\x{221A}&quot;
+            RenderMathMLRootWrapper at (17,2) size 302x51
+              RenderMathMLToken {mn} at (0,12) size 8x12
+                RenderMathMLBlock (anonymous, flex) at (0,0) size 8x12
+                  RenderBlock (anonymous) at (0,0) size 8x12
+                    RenderText {#text} at (0,-46) size 8x106
+                      text run at (0,-46) width 8: &quot;1&quot;
+              RenderMathMLOperator {mo} at (8,13) size 20x12
+                RenderMathMLBlock (anonymous, flex) at (3,0) size 13x12
+                  RenderBlock (anonymous) at (0,0) size 12x12
+                    RenderText at (0,-47) size 12x106
+                      text run at (0,-47) width 12: &quot;+&quot;
+              RenderMathMLSquareRoot {msqrt} at (27,0) size 275x51
+                RenderMathMLBlock (anonymous, flex) at (0,0) size 17x51
+                  RenderMathMLRadicalOperator (anonymous) at (0,0) size 17x51
+                    RenderMathMLBlock (anonymous, flex) at (0,0) size 13x51
+                      RenderBlock (anonymous) at (0,0) size 13x51
+                        RenderText at (0,-56) size 13x106
+                          text run at (0,-56) width 13: &quot;\x{221A}&quot;
+                RenderMathMLRootWrapper at (17,2) size 258x49
+                  RenderMathMLToken {mn} at (0,10) size 8x12
+                    RenderMathMLBlock (anonymous, flex) at (0,0) size 8x12
+                      RenderBlock (anonymous) at (0,0) size 8x12
+                        RenderText {#text} at (0,-46) size 8x106
+                          text run at (0,-46) width 8: &quot;1&quot;
+                  RenderMathMLOperator {mo} at (8,11) size 20x12
+                    RenderMathMLBlock (anonymous, flex) at (3,0) size 13x12
+                      RenderBlock (anonymous) at (0,0) size 12x12
+                        RenderText at (0,-47) size 12x106
+                          text run at (0,-47) width 12: &quot;+&quot;
+                  RenderMathMLSquareRoot {msqrt} at (27,0) size 231x49
+                    RenderMathMLBlock (anonymous, flex) at (0,0) size 17x49
+                      RenderMathMLRadicalOperator (anonymous) at (0,0) size 17x49
+                        RenderMathMLBlock (anonymous, flex) at (0,0) size 13x48
+                          RenderBlock (anonymous) at (0,0) size 13x48
+                            RenderText at (0,-56) size 13x106
+                              text run at (0,-56) width 13: &quot;\x{221A}&quot;
+                    RenderMathMLRootWrapper at (17,2) size 214x47
+                      RenderMathMLToken {mn} at (0,8) size 8x12
+                        RenderMathMLBlock (anonymous, flex) at (0,0) size 8x12
+                          RenderBlock (anonymous) at (0,0) size 8x12
+                            RenderText {#text} at (0,-46) size 8x106
+                              text run at (0,-46) width 8: &quot;1&quot;
+                      RenderMathMLOperator {mo} at (8,9) size 20x12
+                        RenderMathMLBlock (anonymous, flex) at (3,0) size 13x12
+                          RenderBlock (anonymous) at (0,0) size 12x12
+                            RenderText at (0,-47) size 12x106
+                              text run at (0,-47) width 12: &quot;+&quot;
+                      RenderMathMLSquareRoot {msqrt} at (27,0) size 187x41
+                        RenderMathMLBlock (anonymous, flex) at (0,0) size 17x41
+                          RenderMathMLRadicalOperator (anonymous) at (0,0) size 17x41
+                            RenderMathMLBlock (anonymous, flex) at (0,0) size 13x40
+                              RenderBlock (anonymous) at (0,0) size 13x40
+                                RenderText at (0,-56) size 13x106
+                                  text run at (0,-56) width 13: &quot;\x{221A}&quot;
+                        RenderMathMLRootWrapper at (17,2) size 169x39
+                          RenderMathMLToken {mn} at (0,6) size 8x12
+                            RenderMathMLBlock (anonymous, flex) at (0,0) size 8x12
+                              RenderBlock (anonymous) at (0,0) size 8x12
+                                RenderText {#text} at (0,-46) size 8x106
+                                  text run at (0,-46) width 8: &quot;1&quot;
+                          RenderMathMLOperator {mo} at (8,7) size 20x12
+                            RenderMathMLBlock (anonymous, flex) at (3,0) size 13x12
+                              RenderBlock (anonymous) at (0,0) size 12x12
+                                RenderText at (0,-47) size 12x106
+                                  text run at (0,-47) width 12: &quot;+&quot;
+                          RenderMathMLSquareRoot {msqrt} at (27,0) size 142x31
+                            RenderMathMLBlock (anonymous, flex) at (0,0) size 17x31
+                              RenderMathMLRadicalOperator (anonymous) at (0,0) size 17x31
+                                RenderMathMLBlock (anonymous, flex) at (0,0) size 13x30
+                                  RenderBlock (anonymous) at (0,0) size 13x30
+                                    RenderText at (0,-56) size 13x106
+                                      text run at (0,-56) width 13: &quot;\x{221A}&quot;
+                            RenderMathMLRootWrapper at (17,2) size 125x29
+                              RenderMathMLToken {mn} at (0,4) size 8x12
+                                RenderMathMLBlock (anonymous, flex) at (0,0) size 8x12
+                                  RenderBlock (anonymous) at (0,0) size 8x12
+                                    RenderText {#text} at (0,-46) size 8x106
+                                      text run at (0,-46) width 8: &quot;1&quot;
+                              RenderMathMLOperator {mo} at (8,5) size 20x12
+                                RenderMathMLBlock (anonymous, flex) at (3,0) size 13x12
+                                  RenderBlock (anonymous) at (0,0) size 12x12
+                                    RenderText at (0,-47) size 12x106
+                                      text run at (0,-47) width 12: &quot;+&quot;
+                              RenderMathMLSquareRoot {msqrt} at (27,0) size 98x21
+                                RenderMathMLBlock (anonymous, flex) at (0,0) size 17x21
+                                  RenderMathMLRadicalOperator (anonymous) at (0,0) size 17x21
+                                    RenderMathMLBlock (anonymous, flex) at (0,0) size 13x20
+                                      RenderBlock (anonymous) at (0,0) size 13x20
+                                        RenderText at (0,-56) size 13x106
+                                          text run at (0,-56) width 13: &quot;\x{221A}&quot;
+                                RenderMathMLRootWrapper at (17,2) size 81x19
+                                  RenderMathMLToken {mn} at (0,2) size 8x12
+                                    RenderMathMLBlock (anonymous, flex) at (0,0) size 8x12
+                                      RenderBlock (anonymous) at (0,0) size 8x12
+                                        RenderText {#text} at (0,-46) size 8x106
+                                          text run at (0,-46) width 8: &quot;1&quot;
+                                  RenderMathMLOperator {mo} at (8,3) size 20x12
+                                    RenderMathMLBlock (anonymous, flex) at (3,0) size 13x12
+                                      RenderBlock (anonymous) at (0,0) size 12x12
+                                        RenderText at (0,-47) size 12x106
+                                          text run at (0,-47) width 12: &quot;+&quot;
+                                  RenderMathMLSquareRoot {msqrt} at (27,0) size 54x18
+                                    RenderMathMLBlock (anonymous, flex) at (0,0) size 17x18
+                                      RenderMathMLRadicalOperator (anonymous) at (0,0) size 17x18
+                                        RenderMathMLBlock (anonymous, flex) at (0,0) size 13x17
+                                          RenderBlock (anonymous) at (0,0) size 13x17
+                                            RenderText at (0,-56) size 13x106
+                                              text run at (0,-56) width 13: &quot;\x{221A}&quot;
+                                    RenderMathMLRootWrapper at (17,2) size 37x16
+                                      RenderMathMLToken {mn} at (0,0) size 8x12
+                                        RenderMathMLBlock (anonymous, flex) at (0,0) size 8x12
+                                          RenderBlock (anonymous) at (0,0) size 8x12
+                                            RenderText {#text} at (0,-46) size 8x106
+                                              text run at (0,-46) width 8: &quot;1&quot;
+                                      RenderMathMLOperator {mo} at (8,1) size 20x12
+                                        RenderMathMLBlock (anonymous, flex) at (3,0) size 13x12
+                                          RenderBlock (anonymous) at (0,0) size 12x12
+                                            RenderText at (0,-47) size 12x106
+                                              text run at (0,-47) width 12: &quot;+&quot;
+                                      RenderMathMLToken {mi} at (27,4) size 10x8 [padding: 0 2 0 0]
+                                        RenderMathMLBlock (anonymous, flex) at (0,0) size 8x8
+                                          RenderBlock (anonymous) at (0,0) size 8x8
+                                            RenderText {#text} at (0,-50) size 8x106
+                                              text run at (0,-50) width 8: &quot;x&quot;
+      RenderMathMLMath {math} at (0,68) size 784x62 [padding: 0 1 0 1]
+        RenderMathMLRoot {mroot} at (339,0) size 53x53
+          RenderMathMLRootWrapper at (4,10) size 21x43
+            RenderMathMLSpace {mspace} at (0,0) size 20x10 [bgcolor=#008000]
+          RenderMathMLBlock (anonymous, flex) at (15,0) size 18x53
+            RenderMathMLRadicalOperator (anonymous) at (0,0) size 17x53
+              RenderMathMLBlock (anonymous, flex) at (0,0) size 13x52
+                RenderBlock (anonymous) at (0,0) size 13x52
+                  RenderText at (0,-56) size 13x106
+                    text run at (0,-56) width 13: &quot;\x{221A}&quot;
+          RenderMathMLRootWrapper at (32,2) size 21x51
+            RenderMathMLSpace {mspace} at (0,0) size 20x50 [bgcolor=#FF0000]
+        RenderMathMLRoot {mroot} at (392,30) size 53x31
+          RenderMathMLRootWrapper at (4,7) size 21x24
+            RenderMathMLSpace {mspace} at (0,0) size 20x5 [bgcolor=#0000FF]
+          RenderMathMLBlock (anonymous, flex) at (15,0) size 18x31
+            RenderMathMLRadicalOperator (anonymous) at (0,0) size 17x31
+              RenderMathMLBlock (anonymous, flex) at (0,0) size 13x30
+                RenderBlock (anonymous) at (0,0) size 13x30
+                  RenderText at (0,-56) size 13x106
+                    text run at (0,-56) width 13: &quot;\x{221A}&quot;
+          RenderMathMLRootWrapper at (32,2) size 21x29
+            RenderMathMLSpace {mspace} at (0,0) size 20x20 [bgcolor=#FF0000]
+      RenderMathMLMath {math} at (0,145) size 784x91 [padding: 0 1 0 1]
+        RenderMathMLRoot {mroot} at (339,0) size 53x82
+          RenderMathMLRootWrapper at (4,0) size 21x82
+            RenderMathMLSpace {mspace} at (0,0) size 20x50 [bgcolor=#008000]
+          RenderMathMLBlock (anonymous, flex) at (15,0) size 18x82
+            RenderMathMLRadicalOperator (anonymous) at (0,29) size 17x53
+              RenderMathMLBlock (anonymous, flex) at (0,0) size 13x52
+                RenderBlock (anonymous) at (0,0) size 13x52
+                  RenderText at (0,-56) size 13x106
+                    text run at (0,-56) width 13: &quot;\x{221A}&quot;
+          RenderMathMLRootWrapper at (32,31) size 21x51
+            RenderMathMLSpace {mspace} at (0,0) size 20x50 [bgcolor=#FF0000]
+        RenderMathMLRoot {mroot} at (392,52) size 53x38
+          RenderMathMLRootWrapper at (4,0) size 21x38
+            RenderMathMLSpace {mspace} at (0,0) size 20x20 [bgcolor=#0000FF]
+          RenderMathMLBlock (anonymous, flex) at (15,0) size 18x38
+            RenderMathMLRadicalOperator (anonymous) at (0,8) size 17x30
+              RenderMathMLBlock (anonymous, flex) at (0,0) size 13x30
+                RenderBlock (anonymous) at (0,0) size 13x30
+                  RenderText at (0,-56) size 13x106
+                    text run at (0,-56) width 13: &quot;\x{221A}&quot;
+          RenderMathMLRootWrapper at (32,9) size 21x29
+            RenderMathMLSpace {mspace} at (0,0) size 20x20 [bgcolor=#FF0000]
</ins><span class="cx">Property changes on: trunk/LayoutTests/platform/efl/mathml/opentype/roots-LatinModern-expected.txt
</span><span class="cx">___________________________________________________________________
</span></span></pre></div>
<a id="svneolstyle"></a>
<div class="addfile"><h4>Added: svn:eol-style</h4></div>
<a id="trunkLayoutTestsplatformgtkmathmlopentyperootsLatinModernexpectedpng"></a>
<div class="binary"><h4>Added: trunk/LayoutTests/platform/gtk/mathml/opentype/roots-LatinModern-expected.png</h4>
<pre class="diff"><span>
<span class="cx">(Binary files differ)
</span></span></pre></div>
<span class="cx">Property changes on: trunk/LayoutTests/platform/gtk/mathml/opentype/roots-LatinModern-expected.png
</span><span class="cx">___________________________________________________________________
</span><a id="svnmimetype"></a>
<div class="addfile"><h4>Added: svn:mime-type</h4></div>
<a id="trunkLayoutTestsplatformgtkmathmlopentyperootsLatinModernexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/platform/gtk/mathml/opentype/roots-LatinModern-expected.txt (0 => 170005)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/platform/gtk/mathml/opentype/roots-LatinModern-expected.txt                                (rev 0)
+++ trunk/LayoutTests/platform/gtk/mathml/opentype/roots-LatinModern-expected.txt        2014-06-16 10:07:32 UTC (rev 170005)
</span><span class="lines">@@ -0,0 +1,184 @@
</span><ins>+layer at (0,0) size 800x600
+  RenderView at (0,0) size 800x600
+layer at (0,0) size 800x259
+  RenderBlock {HTML} at (0,0) size 800x260
+    RenderBody {BODY} at (8,8) size 784x236
+      RenderMathMLMath {math} at (0,0) size 784x53 [padding: 0 1 0 1]
+        RenderMathMLRow {mrow} at (232,0) size 320x53
+          RenderMathMLSquareRoot {msqrt} at (0,0) size 319x53
+            RenderMathMLBlock (anonymous, flex) at (0,0) size 17x53
+              RenderMathMLRadicalOperator (anonymous) at (0,0) size 17x53
+                RenderMathMLBlock (anonymous, flex) at (0,0) size 13x53
+                  RenderBlock (anonymous) at (0,0) size 13x53
+                    RenderText at (0,-56) size 13x106
+                      text run at (0,-56) width 13: &quot;\x{221A}&quot;
+            RenderMathMLRootWrapper at (17,2) size 302x51
+              RenderMathMLToken {mn} at (0,12) size 8x12
+                RenderMathMLBlock (anonymous, flex) at (0,0) size 8x12
+                  RenderBlock (anonymous) at (0,0) size 8x12
+                    RenderText {#text} at (0,-46) size 8x106
+                      text run at (0,-46) width 8: &quot;1&quot;
+              RenderMathMLOperator {mo} at (8,13) size 20x12
+                RenderMathMLBlock (anonymous, flex) at (3,0) size 13x12
+                  RenderBlock (anonymous) at (0,0) size 12x12
+                    RenderText at (0,-47) size 12x106
+                      text run at (0,-47) width 12: &quot;+&quot;
+              RenderMathMLSquareRoot {msqrt} at (27,0) size 275x51
+                RenderMathMLBlock (anonymous, flex) at (0,0) size 17x51
+                  RenderMathMLRadicalOperator (anonymous) at (0,0) size 17x51
+                    RenderMathMLBlock (anonymous, flex) at (0,0) size 13x51
+                      RenderBlock (anonymous) at (0,0) size 13x51
+                        RenderText at (0,-56) size 13x106
+                          text run at (0,-56) width 13: &quot;\x{221A}&quot;
+                RenderMathMLRootWrapper at (17,2) size 258x49
+                  RenderMathMLToken {mn} at (0,10) size 8x12
+                    RenderMathMLBlock (anonymous, flex) at (0,0) size 8x12
+                      RenderBlock (anonymous) at (0,0) size 8x12
+                        RenderText {#text} at (0,-46) size 8x106
+                          text run at (0,-46) width 8: &quot;1&quot;
+                  RenderMathMLOperator {mo} at (8,11) size 20x12
+                    RenderMathMLBlock (anonymous, flex) at (3,0) size 13x12
+                      RenderBlock (anonymous) at (0,0) size 12x12
+                        RenderText at (0,-47) size 12x106
+                          text run at (0,-47) width 12: &quot;+&quot;
+                  RenderMathMLSquareRoot {msqrt} at (27,0) size 231x49
+                    RenderMathMLBlock (anonymous, flex) at (0,0) size 17x49
+                      RenderMathMLRadicalOperator (anonymous) at (0,0) size 17x49
+                        RenderMathMLBlock (anonymous, flex) at (0,0) size 13x48
+                          RenderBlock (anonymous) at (0,0) size 13x48
+                            RenderText at (0,-56) size 13x106
+                              text run at (0,-56) width 13: &quot;\x{221A}&quot;
+                    RenderMathMLRootWrapper at (17,2) size 214x47
+                      RenderMathMLToken {mn} at (0,8) size 8x12
+                        RenderMathMLBlock (anonymous, flex) at (0,0) size 8x12
+                          RenderBlock (anonymous) at (0,0) size 8x12
+                            RenderText {#text} at (0,-46) size 8x106
+                              text run at (0,-46) width 8: &quot;1&quot;
+                      RenderMathMLOperator {mo} at (8,9) size 20x12
+                        RenderMathMLBlock (anonymous, flex) at (3,0) size 13x12
+                          RenderBlock (anonymous) at (0,0) size 12x12
+                            RenderText at (0,-47) size 12x106
+                              text run at (0,-47) width 12: &quot;+&quot;
+                      RenderMathMLSquareRoot {msqrt} at (27,0) size 187x41
+                        RenderMathMLBlock (anonymous, flex) at (0,0) size 17x41
+                          RenderMathMLRadicalOperator (anonymous) at (0,0) size 17x41
+                            RenderMathMLBlock (anonymous, flex) at (0,0) size 13x40
+                              RenderBlock (anonymous) at (0,0) size 13x40
+                                RenderText at (0,-56) size 13x106
+                                  text run at (0,-56) width 13: &quot;\x{221A}&quot;
+                        RenderMathMLRootWrapper at (17,2) size 169x39
+                          RenderMathMLToken {mn} at (0,6) size 8x12
+                            RenderMathMLBlock (anonymous, flex) at (0,0) size 8x12
+                              RenderBlock (anonymous) at (0,0) size 8x12
+                                RenderText {#text} at (0,-46) size 8x106
+                                  text run at (0,-46) width 8: &quot;1&quot;
+                          RenderMathMLOperator {mo} at (8,7) size 20x12
+                            RenderMathMLBlock (anonymous, flex) at (3,0) size 13x12
+                              RenderBlock (anonymous) at (0,0) size 12x12
+                                RenderText at (0,-47) size 12x106
+                                  text run at (0,-47) width 12: &quot;+&quot;
+                          RenderMathMLSquareRoot {msqrt} at (27,0) size 142x31
+                            RenderMathMLBlock (anonymous, flex) at (0,0) size 17x31
+                              RenderMathMLRadicalOperator (anonymous) at (0,0) size 17x31
+                                RenderMathMLBlock (anonymous, flex) at (0,0) size 13x30
+                                  RenderBlock (anonymous) at (0,0) size 13x30
+                                    RenderText at (0,-56) size 13x106
+                                      text run at (0,-56) width 13: &quot;\x{221A}&quot;
+                            RenderMathMLRootWrapper at (17,2) size 125x29
+                              RenderMathMLToken {mn} at (0,4) size 8x12
+                                RenderMathMLBlock (anonymous, flex) at (0,0) size 8x12
+                                  RenderBlock (anonymous) at (0,0) size 8x12
+                                    RenderText {#text} at (0,-46) size 8x106
+                                      text run at (0,-46) width 8: &quot;1&quot;
+                              RenderMathMLOperator {mo} at (8,5) size 20x12
+                                RenderMathMLBlock (anonymous, flex) at (3,0) size 13x12
+                                  RenderBlock (anonymous) at (0,0) size 12x12
+                                    RenderText at (0,-47) size 12x106
+                                      text run at (0,-47) width 12: &quot;+&quot;
+                              RenderMathMLSquareRoot {msqrt} at (27,0) size 98x21
+                                RenderMathMLBlock (anonymous, flex) at (0,0) size 17x21
+                                  RenderMathMLRadicalOperator (anonymous) at (0,0) size 17x21
+                                    RenderMathMLBlock (anonymous, flex) at (0,0) size 13x20
+                                      RenderBlock (anonymous) at (0,0) size 13x20
+                                        RenderText at (0,-56) size 13x106
+                                          text run at (0,-56) width 13: &quot;\x{221A}&quot;
+                                RenderMathMLRootWrapper at (17,2) size 81x19
+                                  RenderMathMLToken {mn} at (0,2) size 8x12
+                                    RenderMathMLBlock (anonymous, flex) at (0,0) size 8x12
+                                      RenderBlock (anonymous) at (0,0) size 8x12
+                                        RenderText {#text} at (0,-46) size 8x106
+                                          text run at (0,-46) width 8: &quot;1&quot;
+                                  RenderMathMLOperator {mo} at (8,3) size 20x12
+                                    RenderMathMLBlock (anonymous, flex) at (3,0) size 13x12
+                                      RenderBlock (anonymous) at (0,0) size 12x12
+                                        RenderText at (0,-47) size 12x106
+                                          text run at (0,-47) width 12: &quot;+&quot;
+                                  RenderMathMLSquareRoot {msqrt} at (27,0) size 54x18
+                                    RenderMathMLBlock (anonymous, flex) at (0,0) size 17x18
+                                      RenderMathMLRadicalOperator (anonymous) at (0,0) size 17x18
+                                        RenderMathMLBlock (anonymous, flex) at (0,0) size 13x17
+                                          RenderBlock (anonymous) at (0,0) size 13x17
+                                            RenderText at (0,-56) size 13x106
+                                              text run at (0,-56) width 13: &quot;\x{221A}&quot;
+                                    RenderMathMLRootWrapper at (17,2) size 37x16
+                                      RenderMathMLToken {mn} at (0,0) size 8x12
+                                        RenderMathMLBlock (anonymous, flex) at (0,0) size 8x12
+                                          RenderBlock (anonymous) at (0,0) size 8x12
+                                            RenderText {#text} at (0,-46) size 8x106
+                                              text run at (0,-46) width 8: &quot;1&quot;
+                                      RenderMathMLOperator {mo} at (8,1) size 20x12
+                                        RenderMathMLBlock (anonymous, flex) at (3,0) size 13x12
+                                          RenderBlock (anonymous) at (0,0) size 12x12
+                                            RenderText at (0,-47) size 12x106
+                                              text run at (0,-47) width 12: &quot;+&quot;
+                                      RenderMathMLToken {mi} at (27,4) size 10x8 [padding: 0 2 0 0]
+                                        RenderMathMLBlock (anonymous, flex) at (0,0) size 8x8
+                                          RenderBlock (anonymous) at (0,0) size 8x8
+                                            RenderText {#text} at (0,-50) size 8x106
+                                              text run at (0,-50) width 8: &quot;x&quot;
+      RenderMathMLMath {math} at (0,68) size 784x62 [padding: 0 1 0 1]
+        RenderMathMLRoot {mroot} at (339,0) size 53x53
+          RenderMathMLRootWrapper at (4,10) size 21x43
+            RenderMathMLSpace {mspace} at (0,0) size 20x10 [bgcolor=#008000]
+          RenderMathMLBlock (anonymous, flex) at (15,0) size 18x53
+            RenderMathMLRadicalOperator (anonymous) at (0,0) size 17x53
+              RenderMathMLBlock (anonymous, flex) at (0,0) size 13x52
+                RenderBlock (anonymous) at (0,0) size 13x52
+                  RenderText at (0,-56) size 13x106
+                    text run at (0,-56) width 13: &quot;\x{221A}&quot;
+          RenderMathMLRootWrapper at (32,2) size 21x51
+            RenderMathMLSpace {mspace} at (0,0) size 20x50 [bgcolor=#FF0000]
+        RenderMathMLRoot {mroot} at (392,30) size 53x31
+          RenderMathMLRootWrapper at (4,7) size 21x24
+            RenderMathMLSpace {mspace} at (0,0) size 20x5 [bgcolor=#0000FF]
+          RenderMathMLBlock (anonymous, flex) at (15,0) size 18x31
+            RenderMathMLRadicalOperator (anonymous) at (0,0) size 17x31
+              RenderMathMLBlock (anonymous, flex) at (0,0) size 13x30
+                RenderBlock (anonymous) at (0,0) size 13x30
+                  RenderText at (0,-56) size 13x106
+                    text run at (0,-56) width 13: &quot;\x{221A}&quot;
+          RenderMathMLRootWrapper at (32,2) size 21x29
+            RenderMathMLSpace {mspace} at (0,0) size 20x20 [bgcolor=#FF0000]
+      RenderMathMLMath {math} at (0,145) size 784x91 [padding: 0 1 0 1]
+        RenderMathMLRoot {mroot} at (339,0) size 53x82
+          RenderMathMLRootWrapper at (4,0) size 21x82
+            RenderMathMLSpace {mspace} at (0,0) size 20x50 [bgcolor=#008000]
+          RenderMathMLBlock (anonymous, flex) at (15,0) size 18x82
+            RenderMathMLRadicalOperator (anonymous) at (0,29) size 17x53
+              RenderMathMLBlock (anonymous, flex) at (0,0) size 13x52
+                RenderBlock (anonymous) at (0,0) size 13x52
+                  RenderText at (0,-56) size 13x106
+                    text run at (0,-56) width 13: &quot;\x{221A}&quot;
+          RenderMathMLRootWrapper at (32,31) size 21x51
+            RenderMathMLSpace {mspace} at (0,0) size 20x50 [bgcolor=#FF0000]
+        RenderMathMLRoot {mroot} at (392,52) size 53x38
+          RenderMathMLRootWrapper at (4,0) size 21x38
+            RenderMathMLSpace {mspace} at (0,0) size 20x20 [bgcolor=#0000FF]
+          RenderMathMLBlock (anonymous, flex) at (15,0) size 18x38
+            RenderMathMLRadicalOperator (anonymous) at (0,8) size 17x30
+              RenderMathMLBlock (anonymous, flex) at (0,0) size 13x30
+                RenderBlock (anonymous) at (0,0) size 13x30
+                  RenderText at (0,-56) size 13x106
+                    text run at (0,-56) width 13: &quot;\x{221A}&quot;
+          RenderMathMLRootWrapper at (32,9) size 21x29
+            RenderMathMLSpace {mspace} at (0,0) size 20x20 [bgcolor=#FF0000]
</ins><span class="cx">Property changes on: trunk/LayoutTests/platform/gtk/mathml/opentype/roots-LatinModern-expected.txt
</span><span class="cx">___________________________________________________________________
</span></span></pre></div>
<a id="svneolstyle"></a>
<div class="addfile"><h4>Added: svn:eol-style</h4></div>
<a id="trunkLayoutTestsplatformgtkmathmlpresentationmostretchexpectedpng"></a>
<div class="binary"><h4>Modified: trunk/LayoutTests/platform/gtk/mathml/presentation/mo-stretch-expected.png</h4>
<pre class="diff"><span>
<span class="cx">(Binary files differ)
</span></span></pre></div>
<a id="trunkLayoutTestsplatformgtkmathmlpresentationmostretchexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/platform/gtk/mathml/presentation/mo-stretch-expected.txt (170004 => 170005)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/platform/gtk/mathml/presentation/mo-stretch-expected.txt        2014-06-16 09:09:21 UTC (rev 170004)
+++ trunk/LayoutTests/platform/gtk/mathml/presentation/mo-stretch-expected.txt        2014-06-16 10:07:32 UTC (rev 170005)
</span><span class="lines">@@ -1,8 +1,8 @@
</span><span class="cx"> layer at (0,0) size 800x600
</span><span class="cx">   RenderView at (0,0) size 800x600
</span><del>-layer at (0,0) size 800x260
-  RenderBlock {HTML} at (0,0) size 800x260
-    RenderBody {BODY} at (8,8) size 784x244
</del><ins>+layer at (0,0) size 800x259
+  RenderBlock {HTML} at (0,0) size 800x259
+    RenderBody {BODY} at (8,8) size 784x243
</ins><span class="cx">       RenderMathMLMath {math} at (0,0) size 126x24 [padding: 0 1 0 1]
</span><span class="cx">         RenderMathMLRow {mrow} at (1,0) size 124x24
</span><span class="cx">           RenderMathMLOperator {mo} at (0,5) size 7x14
</span><span class="lines">@@ -305,8 +305,14 @@
</span><span class="cx">         text run at (383,85) width 5: &quot; &quot;
</span><span class="cx">       RenderBR {BR} at (0,0) size 0x0
</span><span class="cx">       RenderMathMLMath {math} at (0,166) size 138x78 [padding: 0 1 0 1]
</span><del>-        RenderMathMLSquareRoot {msqrt} at (1,0) size 136x78 [intrinsic padding: 3 0 3 12]
-          RenderMathMLRow (anonymous) at (12,3) size 124x72
</del><ins>+        RenderMathMLSquareRoot {msqrt} at (1,0) size 136x78
+          RenderMathMLBlock (anonymous, flex) at (0,0) size 12x78
+            RenderMathMLRadicalOperator (anonymous) at (0,0) size 12x78
+              RenderMathMLBlock (anonymous, flex) at (0,0) size 12x78
+                RenderBlock (anonymous) at (0,0) size 12x78
+                  RenderText at (0,-1) size 15x25
+                    text run at (0,-1) width 15: &quot;\x{221A}&quot;
+          RenderMathMLRootWrapper at (12,3) size 124x75
</ins><span class="cx">             RenderMathMLOperator {mo} at (0,0) size 7x72
</span><span class="cx">               RenderMathMLBlock (anonymous, flex) at (0,0) size 7x14
</span><span class="cx">                 RenderBlock (anonymous) at (0,0) size 5x14
</span></span></pre></div>
<a id="trunkLayoutTestsplatformgtkmathmlpresentationrootsexpectedpng"></a>
<div class="binary"><h4>Modified: trunk/LayoutTests/platform/gtk/mathml/presentation/roots-expected.png</h4>
<pre class="diff"><span>
<span class="cx">(Binary files differ)
</span></span></pre></div>
<a id="trunkLayoutTestsplatformgtkmathmlpresentationrootsexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/platform/gtk/mathml/presentation/roots-expected.txt (170004 => 170005)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/platform/gtk/mathml/presentation/roots-expected.txt        2014-06-16 09:09:21 UTC (rev 170004)
+++ trunk/LayoutTests/platform/gtk/mathml/presentation/roots-expected.txt        2014-06-16 10:07:32 UTC (rev 170005)
</span><span class="lines">@@ -1,25 +1,37 @@
</span><span class="cx"> layer at (0,0) size 800x600
</span><span class="cx">   RenderView at (0,0) size 800x600
</span><del>-layer at (0,0) size 800x512
-  RenderBlock {html} at (0,0) size 800x512
-    RenderBody {body} at (8,16) size 784x480
-      RenderBlock {p} at (0,0) size 784x17
-        RenderText {#text} at (0,0) size 177x17
-          text run at (0,0) width 177: &quot;square root (should be red): &quot;
-        RenderMathMLMath {math} at (177,0) size 22x15 [padding: 0 1 0 1]
-          RenderMathMLSquareRoot {msqrt} at (1,0) size 20x15 [color=#FF0000] [intrinsic padding: 3 0 0 12]
-            RenderMathMLRow (anonymous) at (12,3) size 8x12
</del><ins>+layer at (0,0) size 800x506
+  RenderBlock {html} at (0,0) size 800x506
+    RenderBody {body} at (8,16) size 784x474
+      RenderBlock {p} at (0,0) size 784x18
+        RenderText {#text} at (0,1) size 177x17
+          text run at (0,1) width 177: &quot;square root (should be red): &quot;
+        RenderMathMLMath {math} at (177,0) size 22x18 [padding: 0 1 0 1]
+          RenderMathMLSquareRoot {msqrt} at (1,0) size 20x18 [color=#FF0000]
+            RenderMathMLBlock (anonymous, flex) at (0,0) size 12x18
+              RenderMathMLRadicalOperator (anonymous) at (0,0) size 12x18
+                RenderMathMLBlock (anonymous, flex) at (0,0) size 12x18
+                  RenderBlock (anonymous) at (0,0) size 12x18
+                    RenderText at (0,-1) size 15x25
+                      text run at (0,-1) width 15: &quot;\x{221A}&quot;
+            RenderMathMLRootWrapper at (12,3) size 8x15
</ins><span class="cx">               RenderMathMLToken {mn} at (0,0) size 8x12
</span><span class="cx">                 RenderMathMLBlock (anonymous, flex) at (0,0) size 8x12
</span><span class="cx">                   RenderBlock (anonymous) at (0,0) size 8x12
</span><span class="cx">                     RenderText {#text} at (0,-6) size 8x25
</span><span class="cx">                       text run at (0,-6) width 8: &quot;2&quot;
</span><del>-      RenderBlock {p} at (0,33) size 784x17
-        RenderText {#text} at (0,0) size 110x17
-          text run at (0,0) width 110: &quot;long square root: &quot;
-        RenderMathMLMath {math} at (110,0) size 49x15 [padding: 0 1 0 1]
-          RenderMathMLSquareRoot {msqrt} at (1,0) size 47x15 [intrinsic padding: 3 0 0 12]
-            RenderMathMLRow (anonymous) at (12,3) size 35x12
</del><ins>+      RenderBlock {p} at (0,34) size 784x18
+        RenderText {#text} at (0,1) size 110x17
+          text run at (0,1) width 110: &quot;long square root: &quot;
+        RenderMathMLMath {math} at (110,0) size 49x18 [padding: 0 1 0 1]
+          RenderMathMLSquareRoot {msqrt} at (1,0) size 47x18
+            RenderMathMLBlock (anonymous, flex) at (0,0) size 12x18
+              RenderMathMLRadicalOperator (anonymous) at (0,0) size 12x18
+                RenderMathMLBlock (anonymous, flex) at (0,0) size 12x18
+                  RenderBlock (anonymous) at (0,0) size 12x18
+                    RenderText at (0,-1) size 15x25
+                      text run at (0,-1) width 15: &quot;\x{221A}&quot;
+            RenderMathMLRootWrapper at (12,3) size 35x15
</ins><span class="cx">               RenderMathMLRow {mrow} at (0,0) size 35x12
</span><span class="cx">                 RenderMathMLToken {mi} at (0,3) size 9x9 [padding: 0 2 0 0]
</span><span class="cx">                   RenderMathMLBlock (anonymous, flex) at (0,0) size 7x9
</span><span class="lines">@@ -36,12 +48,18 @@
</span><span class="cx">                     RenderBlock (anonymous) at (0,0) size 8x12
</span><span class="cx">                       RenderText {#text} at (0,-6) size 8x25
</span><span class="cx">                         text run at (0,-6) width 8: &quot;1&quot;
</span><del>-      RenderBlock {p} at (0,66) size 784x21
-        RenderText {#text} at (0,4) size 222x17
-          text run at (0,4) width 222: &quot;long square root with implied row: &quot;
-        RenderMathMLMath {math} at (222,0) size 55x19 [padding: 0 1 0 1]
-          RenderMathMLSquareRoot {msqrt} at (1,0) size 53x19 [intrinsic padding: 3 0 0 12]
-            RenderMathMLRow (anonymous) at (12,3) size 41x16
</del><ins>+      RenderBlock {p} at (0,68) size 784x22
+        RenderText {#text} at (0,5) size 222x17
+          text run at (0,5) width 222: &quot;long square root with implied row: &quot;
+        RenderMathMLMath {math} at (222,0) size 55x22 [padding: 0 1 0 1]
+          RenderMathMLSquareRoot {msqrt} at (1,0) size 53x22
+            RenderMathMLBlock (anonymous, flex) at (0,0) size 12x22
+              RenderMathMLRadicalOperator (anonymous) at (0,0) size 12x22
+                RenderMathMLBlock (anonymous, flex) at (0,0) size 12x22
+                  RenderBlock (anonymous) at (0,0) size 12x22
+                    RenderText at (0,-1) size 15x25
+                      text run at (0,-1) width 15: &quot;\x{221A}&quot;
+            RenderMathMLRootWrapper at (12,3) size 41x19
</ins><span class="cx">               RenderMathMLScripts {msup} at (0,0) size 15x16
</span><span class="cx">                 Base Wrapper at (0,0) size 9x16 [padding: 7 0 0 0]
</span><span class="cx">                   RenderMathMLToken {mi} at (0,7) size 9x9 [padding: 0 2 0 0]
</span><span class="lines">@@ -65,12 +83,18 @@
</span><span class="cx">                   RenderBlock (anonymous) at (0,0) size 8x12
</span><span class="cx">                     RenderText {#text} at (0,-6) size 8x25
</span><span class="cx">                       text run at (0,-6) width 8: &quot;1&quot;
</span><del>-      RenderBlock {p} at (0,103) size 784x37
-        RenderText {#text} at (0,9) size 113x17
-          text run at (0,9) width 113: &quot;root of a fraction: &quot;
</del><ins>+      RenderBlock {p} at (0,106) size 784x37
+        RenderText {#text} at (0,10) size 113x17
+          text run at (0,10) width 113: &quot;root of a fraction: &quot;
</ins><span class="cx">         RenderMathMLMath {math} at (113,0) size 51x38 [padding: 0 1 0 1]
</span><del>-          RenderMathMLSquareRoot {msqrt} at (1,0) size 49x38 [intrinsic padding: 3 0 3 12]
-            RenderMathMLRow (anonymous) at (12,3) size 37x32
</del><ins>+          RenderMathMLSquareRoot {msqrt} at (1,0) size 49x38
+            RenderMathMLBlock (anonymous, flex) at (0,0) size 12x38
+              RenderMathMLRadicalOperator (anonymous) at (0,0) size 12x38
+                RenderMathMLBlock (anonymous, flex) at (0,0) size 12x37
+                  RenderBlock (anonymous) at (0,0) size 12x37
+                    RenderText at (0,-1) size 15x25
+                      text run at (0,-1) width 15: &quot;\x{221A}&quot;
+            RenderMathMLRootWrapper at (12,3) size 37x35
</ins><span class="cx">               RenderMathMLFraction {mfrac} at (1,0) size 35x32
</span><span class="cx">                 RenderMathMLBlock (anonymous, flex) at (0,0) size 35x16
</span><span class="cx">                   RenderMathMLRow {mrow} at (0,0) size 35x12
</span><span class="lines">@@ -106,443 +130,551 @@
</span><span class="cx">                         RenderBlock (anonymous) at (0,0) size 8x12
</span><span class="cx">                           RenderText {#text} at (0,-6) size 8x25
</span><span class="cx">                             text run at (0,-6) width 8: &quot;2&quot;
</span><del>-      RenderBlock {p} at (0,156) size 784x21
-        RenderText {#text} at (0,4) size 173x17
-          text run at (0,4) width 173: &quot;cube root (should be blue): &quot;
</del><ins>+      RenderBlock {p} at (0,159) size 784x18
+        RenderText {#text} at (0,1) size 173x17
+          text run at (0,1) width 173: &quot;cube root (should be blue): &quot;
</ins><span class="cx">         RenderMathMLMath {math} at (173,0) size 23x19 [color=#0000FF] [padding: 0 1 0 1]
</span><del>-      RenderBlock {p} at (0,193) size 784x21
-        RenderText {#text} at (0,4) size 75x17
-          text run at (0,4) width 75: &quot;long index: &quot;
-        RenderMathMLMath {math} at (75,0) size 62x19 [padding: 0 1 0 1]
-      RenderBlock {p} at (0,230) size 784x37
-        RenderText {#text} at (0,9) size 185x17
-          text run at (0,9) width 185: &quot;long index w/ complex base: &quot;
-        RenderMathMLMath {math} at (185,0) size 92x38 [padding: 0 1 0 1]
-      RenderBlock {p} at (0,283) size 784x46
-        RenderText {#text} at (0,29) size 75x17
-          text run at (0,29) width 75: &quot;high index: &quot;
-        RenderMathMLMath {math} at (75,0) size 25x44 [padding: 0 1 0 1]
-      RenderBlock {p} at (0,345) size 784x45
-        RenderText {#text} at (0,21) size 155x17
-          text run at (0,21) width 155: &quot;Imbricated square roots: &quot;
-        RenderMathMLMath {math} at (155,0) size 293x45 [padding: 0 1 0 1]
-          RenderMathMLSquareRoot {msqrt} at (1,0) size 291x45 [intrinsic padding: 3 0 3 12]
-            RenderMathMLRow (anonymous) at (12,3) size 279x39
-              RenderMathMLToken {mn} at (0,21) size 8x12
</del><ins>+          RenderMathMLRoot {mroot} at (1,0) size 21x19
+            RenderMathMLRootWrapper at (4,0) size 6x19
+              RenderMathMLToken {mn} at (0,0) size 5x8
+                RenderMathMLBlock (anonymous, flex) at (0,0) size 5x8
+                  RenderBlock (anonymous) at (0,0) size 5x8
+                    RenderText {#text} at (0,-3) size 5x15
+                      text run at (0,-3) width 5: &quot;3&quot;
+            RenderMathMLBlock (anonymous, flex) at (0,0) size 13x19
+              RenderMathMLRadicalOperator (anonymous) at (0,1) size 12x18
+                RenderMathMLBlock (anonymous, flex) at (0,0) size 12x18
+                  RenderBlock (anonymous) at (0,0) size 12x18
+                    RenderText at (0,-1) size 15x25
+                      text run at (0,-1) width 15: &quot;\x{221A}&quot;
+            RenderMathMLRootWrapper at (12,4) size 9x15
+              RenderMathMLToken {mn} at (0,0) size 8x12
</ins><span class="cx">                 RenderMathMLBlock (anonymous, flex) at (0,0) size 8x12
</span><span class="cx">                   RenderBlock (anonymous) at (0,0) size 8x12
</span><span class="cx">                     RenderText {#text} at (0,-6) size 8x25
</span><ins>+                      text run at (0,-6) width 8: &quot;2&quot;
+      RenderBlock {p} at (0,193) size 784x18
+        RenderText {#text} at (0,1) size 75x17
+          text run at (0,1) width 75: &quot;long index: &quot;
+        RenderMathMLMath {math} at (75,0) size 53x18 [padding: 0 1 0 1]
+          RenderMathMLRoot {mroot} at (1,0) size 51x18
+            RenderMathMLRootWrapper at (4,0) size 36x18
+              RenderMathMLRow {mrow} at (0,0) size 35x7
+                RenderMathMLToken {mi} at (0,1) size 5x5 [padding: 0 1 0 0]
+                  RenderMathMLBlock (anonymous, flex) at (0,0) size 4x5
+                    RenderBlock (anonymous) at (0,0) size 4x5
+                      RenderText {#text} at (0,-6) size 4x15
+                        text run at (0,-6) width 4: &quot;x&quot;
+                RenderMathMLOperator {mo} at (4,0) size 11x6
+                  RenderMathMLBlock (anonymous, flex) at (2,0) size 6x6
+                    RenderBlock (anonymous) at (0,0) size 6x6
+                      RenderText at (0,-5) size 6x15
+                        text run at (0,-5) width 6: &quot;+&quot;
+                RenderMathMLToken {mi} at (14,1) size 6x6 [padding: 0 1 0 0]
+                  RenderMathMLBlock (anonymous, flex) at (0,0) size 4x6
+                    RenderBlock (anonymous) at (0,0) size 4x6
+                      RenderText {#text} at (0,-6) size 4x15
+                        text run at (0,-6) width 4: &quot;y&quot;
+                RenderMathMLOperator {mo} at (19,0) size 11x6
+                  RenderMathMLBlock (anonymous, flex) at (2,0) size 6x6
+                    RenderBlock (anonymous) at (0,0) size 6x6
+                      RenderText at (0,-5) size 6x15
+                        text run at (0,-5) width 6: &quot;+&quot;
+                RenderMathMLToken {mi} at (29,1) size 6x5 [padding: 0 1 0 0]
+                  RenderMathMLBlock (anonymous, flex) at (0,0) size 4x5
+                    RenderBlock (anonymous) at (0,0) size 4x5
+                      RenderText {#text} at (0,-6) size 4x15
+                        text run at (0,-6) width 4: &quot;z&quot;
+            RenderMathMLBlock (anonymous, flex) at (30,0) size 13x18
+              RenderMathMLRadicalOperator (anonymous) at (0,0) size 12x18
+                RenderMathMLBlock (anonymous, flex) at (0,0) size 12x18
+                  RenderBlock (anonymous) at (0,0) size 12x18
+                    RenderText at (0,-1) size 15x25
+                      text run at (0,-1) width 15: &quot;\x{221A}&quot;
+            RenderMathMLRootWrapper at (42,3) size 9x15
+              RenderMathMLToken {mn} at (0,0) size 8x12
+                RenderMathMLBlock (anonymous, flex) at (0,0) size 8x12
+                  RenderBlock (anonymous) at (0,0) size 8x12
+                    RenderText {#text} at (0,-6) size 8x25
+                      text run at (0,-6) width 8: &quot;2&quot;
+      RenderBlock {p} at (0,227) size 784x37
+        RenderText {#text} at (0,10) size 185x17
+          text run at (0,10) width 185: &quot;long index w/ complex base: &quot;
+        RenderMathMLMath {math} at (185,0) size 81x38 [padding: 0 1 0 1]
+          RenderMathMLRoot {mroot} at (1,0) size 79x38
+            RenderMathMLRootWrapper at (4,8) size 36x30
+              RenderMathMLRow {mrow} at (0,0) size 35x7
+                RenderMathMLToken {mi} at (0,1) size 5x5 [padding: 0 1 0 0]
+                  RenderMathMLBlock (anonymous, flex) at (0,0) size 4x5
+                    RenderBlock (anonymous) at (0,0) size 4x5
+                      RenderText {#text} at (0,-6) size 4x15
+                        text run at (0,-6) width 4: &quot;x&quot;
+                RenderMathMLOperator {mo} at (4,0) size 11x6
+                  RenderMathMLBlock (anonymous, flex) at (2,0) size 6x6
+                    RenderBlock (anonymous) at (0,0) size 6x6
+                      RenderText at (0,-5) size 6x15
+                        text run at (0,-5) width 6: &quot;+&quot;
+                RenderMathMLToken {mi} at (14,1) size 6x6 [padding: 0 1 0 0]
+                  RenderMathMLBlock (anonymous, flex) at (0,0) size 4x6
+                    RenderBlock (anonymous) at (0,0) size 4x6
+                      RenderText {#text} at (0,-6) size 4x15
+                        text run at (0,-6) width 4: &quot;y&quot;
+                RenderMathMLOperator {mo} at (19,0) size 11x6
+                  RenderMathMLBlock (anonymous, flex) at (2,0) size 6x6
+                    RenderBlock (anonymous) at (0,0) size 6x6
+                      RenderText at (0,-5) size 6x15
+                        text run at (0,-5) width 6: &quot;+&quot;
+                RenderMathMLToken {mi} at (29,1) size 6x5 [padding: 0 1 0 0]
+                  RenderMathMLBlock (anonymous, flex) at (0,0) size 4x5
+                    RenderBlock (anonymous) at (0,0) size 4x5
+                      RenderText {#text} at (0,-6) size 4x15
+                        text run at (0,-6) width 4: &quot;z&quot;
+            RenderMathMLBlock (anonymous, flex) at (30,0) size 13x38
+              RenderMathMLRadicalOperator (anonymous) at (0,0) size 12x38
+                RenderMathMLBlock (anonymous, flex) at (0,0) size 12x37
+                  RenderBlock (anonymous) at (0,0) size 12x37
+                    RenderText at (0,-1) size 15x25
+                      text run at (0,-1) width 15: &quot;\x{221A}&quot;
+            RenderMathMLRootWrapper at (42,3) size 37x35
+              RenderMathMLFraction {mfrac} at (1,0) size 35x32
+                RenderMathMLBlock (anonymous, flex) at (0,0) size 35x16
+                  RenderMathMLRow {mrow} at (0,0) size 35x12
+                    RenderMathMLToken {mi} at (0,3) size 9x9 [padding: 0 2 0 0]
+                      RenderMathMLBlock (anonymous, flex) at (0,0) size 7x9
+                        RenderBlock (anonymous) at (0,0) size 7x9
+                          RenderText {#text} at (0,-9) size 7x25
+                            text run at (0,-9) width 7: &quot;x&quot;
+                    RenderMathMLOperator {mo} at (8,2) size 19x10
+                      RenderMathMLBlock (anonymous, flex) at (3,0) size 12x10
+                        RenderBlock (anonymous) at (0,0) size 11x10
+                          RenderText at (0,-8) size 11x25
+                            text run at (0,-8) width 11: &quot;+&quot;
+                    RenderMathMLToken {mn} at (26,0) size 9x12
+                      RenderMathMLBlock (anonymous, flex) at (0,0) size 8x12
+                        RenderBlock (anonymous) at (0,0) size 8x12
+                          RenderText {#text} at (0,-6) size 8x25
+                            text run at (0,-6) width 8: &quot;1&quot;
+                RenderMathMLBlock (anonymous, flex) at (0,15) size 35x17 [padding: 1 0 0 0]
+                  RenderMathMLRow {mrow} at (0,4) size 35x13
+                    RenderMathMLToken {mi} at (0,3) size 9x9 [padding: 0 2 0 0]
+                      RenderMathMLBlock (anonymous, flex) at (0,0) size 7x9
+                        RenderBlock (anonymous) at (0,0) size 7x9
+                          RenderText {#text} at (0,-9) size 7x25
+                            text run at (0,-9) width 7: &quot;x&quot;
+                    RenderMathMLOperator {mo} at (8,2) size 19x10
+                      RenderMathMLBlock (anonymous, flex) at (3,0) size 12x10
+                        RenderBlock (anonymous) at (0,0) size 11x10
+                          RenderText at (0,-8) size 11x25
+                            text run at (0,-8) width 11: &quot;+&quot;
+                    RenderMathMLToken {mn} at (26,0) size 9x12
+                      RenderMathMLBlock (anonymous, flex) at (0,0) size 8x12
+                        RenderBlock (anonymous) at (0,0) size 8x12
+                          RenderText {#text} at (0,-6) size 8x25
+                            text run at (0,-6) width 8: &quot;2&quot;
+      RenderBlock {p} at (0,280) size 784x35
+        RenderText {#text} at (0,18) size 75x17
+          text run at (0,18) width 75: &quot;high index: &quot;
+        RenderMathMLMath {math} at (75,0) size 27x36 [padding: 0 1 0 1]
+          RenderMathMLRoot {mroot} at (1,0) size 25x36
+            RenderMathMLRootWrapper at (4,0) size 10x36
+              RenderMathMLFraction {mfrac} at (1,0) size 7x26
+                RenderMathMLBlock (anonymous, flex) at (0,0) size 7x18
+                  RenderMathMLFraction {mfrac} at (1,0) size 5x16
+                    RenderMathMLBlock (anonymous, flex) at (0,0) size 5x7
+                      RenderMathMLToken {mi} at (0,0) size 5x5 [padding: 0 1 0 0]
+                        RenderMathMLBlock (anonymous, flex) at (0,0) size 4x5
+                          RenderBlock (anonymous) at (0,0) size 4x5
+                            RenderText {#text} at (0,-6) size 4x15
+                              text run at (0,-6) width 4: &quot;x&quot;
+                    RenderMathMLBlock (anonymous, flex) at (0,6) size 5x10 [padding: 1 0 0 0]
+                      RenderMathMLToken {mi} at (0,2) size 5x7 [padding: 0 1 0 0]
+                        RenderMathMLBlock (anonymous, flex) at (0,0) size 4x6
+                          RenderBlock (anonymous) at (0,0) size 4x6
+                            RenderText {#text} at (0,-6) size 4x15
+                              text run at (0,-6) width 4: &quot;y&quot;
+                RenderMathMLBlock (anonymous, flex) at (0,17) size 7x9 [padding: 1 0 0 0]
+                  RenderMathMLToken {mi} at (1,2) size 5x6 [padding: 0 1 0 0]
+                    RenderMathMLBlock (anonymous, flex) at (0,0) size 4x5
+                      RenderBlock (anonymous) at (0,0) size 4x5
+                        RenderText {#text} at (0,-6) size 4x15
+                          text run at (0,-6) width 4: &quot;z&quot;
+            RenderMathMLBlock (anonymous, flex) at (4,0) size 13x36
+              RenderMathMLRadicalOperator (anonymous) at (0,18) size 12x18
+                RenderMathMLBlock (anonymous, flex) at (0,0) size 12x18
+                  RenderBlock (anonymous) at (0,0) size 12x18
+                    RenderText at (0,-1) size 15x25
+                      text run at (0,-1) width 15: &quot;\x{221A}&quot;
+            RenderMathMLRootWrapper at (16,21) size 9x15
+              RenderMathMLToken {mn} at (0,0) size 8x12
+                RenderMathMLBlock (anonymous, flex) at (0,0) size 8x12
+                  RenderBlock (anonymous) at (0,0) size 8x12
+                    RenderText {#text} at (0,-6) size 8x25
+                      text run at (0,-6) width 8: &quot;2&quot;
+      RenderBlock {p} at (0,331) size 784x59
+        RenderText {#text} at (0,29) size 155x17
+          text run at (0,29) width 155: &quot;Imbricated square roots: &quot;
+        RenderMathMLMath {math} at (155,0) size 293x60 [padding: 0 1 0 1]
+          RenderMathMLSquareRoot {msqrt} at (1,0) size 291x60
+            RenderMathMLBlock (anonymous, flex) at (0,0) size 12x60
+              RenderMathMLRadicalOperator (anonymous) at (0,0) size 12x60
+                RenderMathMLBlock (anonymous, flex) at (0,0) size 12x60
+                  RenderBlock (anonymous) at (0,0) size 12x60
+                    RenderText at (0,-1) size 15x25
+                      text run at (0,-1) width 15: &quot;\x{221A}&quot;
+            RenderMathMLRootWrapper at (12,3) size 279x57
+              RenderMathMLToken {mn} at (0,28) size 8x12
+                RenderMathMLBlock (anonymous, flex) at (0,0) size 8x12
+                  RenderBlock (anonymous) at (0,0) size 8x12
+                    RenderText {#text} at (0,-6) size 8x25
</ins><span class="cx">                       text run at (0,-6) width 8: &quot;1&quot;
</span><del>-              RenderMathMLOperator {mo} at (8,23) size 19x10
</del><ins>+              RenderMathMLOperator {mo} at (8,30) size 19x10
</ins><span class="cx">                 RenderMathMLBlock (anonymous, flex) at (3,0) size 12x10
</span><span class="cx">                   RenderBlock (anonymous) at (0,0) size 11x10
</span><span class="cx">                     RenderText at (0,-8) size 11x25
</span><span class="cx">                       text run at (0,-8) width 11: &quot;+&quot;
</span><del>-              RenderMathMLSquareRoot {msqrt} at (26,0) size 253x39 [intrinsic padding: 3 0 3 12]
-                RenderMathMLRow (anonymous) at (12,3) size 241x33
-                  RenderMathMLRow {mrow} at (0,0) size 241x33
-                    RenderMathMLToken {mn} at (0,18) size 8x12
</del><ins>+              RenderMathMLSquareRoot {msqrt} at (26,0) size 253x54
+                RenderMathMLBlock (anonymous, flex) at (0,0) size 12x54
+                  RenderMathMLRadicalOperator (anonymous) at (0,0) size 12x54
+                    RenderMathMLBlock (anonymous, flex) at (0,0) size 12x54
+                      RenderBlock (anonymous) at (0,0) size 12x54
+                        RenderText at (0,-1) size 15x25
+                          text run at (0,-1) width 15: &quot;\x{221A}&quot;
+                RenderMathMLRootWrapper at (12,3) size 241x51
+                  RenderMathMLRow {mrow} at (0,0) size 241x48
+                    RenderMathMLToken {mn} at (0,24) size 8x12
</ins><span class="cx">                       RenderMathMLBlock (anonymous, flex) at (0,0) size 8x12
</span><span class="cx">                         RenderBlock (anonymous) at (0,0) size 8x12
</span><span class="cx">                           RenderText {#text} at (0,-6) size 8x25
</span><span class="cx">                             text run at (0,-6) width 8: &quot;2&quot;
</span><del>-                    RenderMathMLOperator {mo} at (8,20) size 19x10
</del><ins>+                    RenderMathMLOperator {mo} at (8,26) size 19x10
</ins><span class="cx">                       RenderMathMLBlock (anonymous, flex) at (3,0) size 12x10
</span><span class="cx">                         RenderBlock (anonymous) at (0,0) size 11x10
</span><span class="cx">                           RenderText at (0,-8) size 11x25
</span><span class="cx">                             text run at (0,-8) width 11: &quot;+&quot;
</span><del>-                    RenderMathMLSquareRoot {msqrt} at (26,0) size 215x33 [intrinsic padding: 3 0 3 12]
-                      RenderMathMLRow (anonymous) at (12,3) size 203x27
-                        RenderMathMLRow {mrow} at (0,0) size 203x27
-                          RenderMathMLToken {mn} at (0,15) size 8x12
</del><ins>+                    RenderMathMLSquareRoot {msqrt} at (26,0) size 215x48
+                      RenderMathMLBlock (anonymous, flex) at (0,0) size 12x48
+                        RenderMathMLRadicalOperator (anonymous) at (0,0) size 12x48
+                          RenderMathMLBlock (anonymous, flex) at (0,0) size 12x48
+                            RenderBlock (anonymous) at (0,0) size 12x48
+                              RenderText at (0,-1) size 15x25
+                                text run at (0,-1) width 15: &quot;\x{221A}&quot;
+                      RenderMathMLRootWrapper at (12,3) size 203x45
+                        RenderMathMLRow {mrow} at (0,0) size 203x42
+                          RenderMathMLToken {mn} at (0,20) size 8x12
</ins><span class="cx">                             RenderMathMLBlock (anonymous, flex) at (0,0) size 8x12
</span><span class="cx">                               RenderBlock (anonymous) at (0,0) size 8x12
</span><span class="cx">                                 RenderText {#text} at (0,-6) size 8x25
</span><span class="cx">                                   text run at (0,-6) width 8: &quot;3&quot;
</span><del>-                          RenderMathMLOperator {mo} at (8,17) size 19x10
</del><ins>+                          RenderMathMLOperator {mo} at (8,22) size 19x10
</ins><span class="cx">                             RenderMathMLBlock (anonymous, flex) at (3,0) size 12x10
</span><span class="cx">                               RenderBlock (anonymous) at (0,0) size 11x10
</span><span class="cx">                                 RenderText at (0,-8) size 11x25
</span><span class="cx">                                   text run at (0,-8) width 11: &quot;+&quot;
</span><del>-                          RenderMathMLSquareRoot {msqrt} at (26,0) size 177x27 [intrinsic padding: 3 0 0 12]
-                            RenderMathMLRow (anonymous) at (12,3) size 164x24
-                              RenderMathMLRow {mrow} at (0,0) size 164x24
-                                RenderMathMLToken {mn} at (0,12) size 8x12
</del><ins>+                          RenderMathMLSquareRoot {msqrt} at (26,0) size 177x42
+                            RenderMathMLBlock (anonymous, flex) at (0,0) size 12x42
+                              RenderMathMLRadicalOperator (anonymous) at (0,0) size 12x42
+                                RenderMathMLBlock (anonymous, flex) at (0,0) size 12x42
+                                  RenderBlock (anonymous) at (0,0) size 12x42
+                                    RenderText at (0,-1) size 15x25
+                                      text run at (0,-1) width 15: &quot;\x{221A}&quot;
+                            RenderMathMLRootWrapper at (12,3) size 164x39
+                              RenderMathMLRow {mrow} at (0,0) size 164x36
+                                RenderMathMLToken {mn} at (0,16) size 8x12
</ins><span class="cx">                                   RenderMathMLBlock (anonymous, flex) at (0,0) size 8x12
</span><span class="cx">                                     RenderBlock (anonymous) at (0,0) size 8x12
</span><span class="cx">                                       RenderText {#text} at (0,-6) size 8x25
</span><span class="cx">                                         text run at (0,-6) width 8: &quot;4&quot;
</span><del>-                                RenderMathMLOperator {mo} at (8,14) size 19x10
</del><ins>+                                RenderMathMLOperator {mo} at (8,18) size 19x10
</ins><span class="cx">                                   RenderMathMLBlock (anonymous, flex) at (3,0) size 12x10
</span><span class="cx">                                     RenderBlock (anonymous) at (0,0) size 11x10
</span><span class="cx">                                       RenderText at (0,-8) size 11x25
</span><span class="cx">                                         text run at (0,-8) width 11: &quot;+&quot;
</span><del>-                                RenderMathMLSquareRoot {msqrt} at (26,0) size 138x24 [intrinsic padding: 3 0 0 12]
-                                  RenderMathMLRow (anonymous) at (12,3) size 126x21
-                                    RenderMathMLRow {mrow} at (0,0) size 126x21
-                                      RenderMathMLToken {mn} at (0,8) size 8x13
</del><ins>+                                RenderMathMLSquareRoot {msqrt} at (26,0) size 138x36
+                                  RenderMathMLBlock (anonymous, flex) at (0,0) size 12x36
+                                    RenderMathMLRadicalOperator (anonymous) at (0,0) size 12x36
+                                      RenderMathMLBlock (anonymous, flex) at (0,0) size 12x36
+                                        RenderBlock (anonymous) at (0,0) size 12x36
+                                          RenderText at (0,-1) size 15x25
+                                            text run at (0,-1) width 15: &quot;\x{221A}&quot;
+                                  RenderMathMLRootWrapper at (12,3) size 126x33
+                                    RenderMathMLRow {mrow} at (0,0) size 126x30
+                                      RenderMathMLToken {mn} at (0,11) size 8x13
</ins><span class="cx">                                         RenderMathMLBlock (anonymous, flex) at (0,0) size 8x13
</span><span class="cx">                                           RenderBlock (anonymous) at (0,0) size 8x13
</span><span class="cx">                                             RenderText {#text} at (0,-5) size 8x25
</span><span class="cx">                                               text run at (0,-5) width 8: &quot;5&quot;
</span><del>-                                      RenderMathMLOperator {mo} at (8,11) size 19x10
</del><ins>+                                      RenderMathMLOperator {mo} at (8,14) size 19x10
</ins><span class="cx">                                         RenderMathMLBlock (anonymous, flex) at (3,0) size 12x10
</span><span class="cx">                                           RenderBlock (anonymous) at (0,0) size 11x10
</span><span class="cx">                                             RenderText at (0,-8) size 11x25
</span><span class="cx">                                               text run at (0,-8) width 11: &quot;+&quot;
</span><del>-                                      RenderMathMLSquareRoot {msqrt} at (26,0) size 100x21 [intrinsic padding: 3 0 0 12]
-                                        RenderMathMLRow (anonymous) at (12,3) size 88x18
-                                          RenderMathMLRow {mrow} at (0,0) size 88x18
-                                            RenderMathMLToken {mn} at (0,6) size 8x12
</del><ins>+                                      RenderMathMLSquareRoot {msqrt} at (26,0) size 100x30
+                                        RenderMathMLBlock (anonymous, flex) at (0,0) size 12x30
+                                          RenderMathMLRadicalOperator (anonymous) at (0,0) size 12x30
+                                            RenderMathMLBlock (anonymous, flex) at (0,0) size 12x30
+                                              RenderBlock (anonymous) at (0,0) size 12x30
+                                                RenderText at (0,-1) size 15x25
+                                                  text run at (0,-1) width 15: &quot;\x{221A}&quot;
+                                        RenderMathMLRootWrapper at (12,3) size 88x27
+                                          RenderMathMLRow {mrow} at (0,0) size 88x24
+                                            RenderMathMLToken {mn} at (0,8) size 8x12
</ins><span class="cx">                                               RenderMathMLBlock (anonymous, flex) at (0,0) size 8x12
</span><span class="cx">                                                 RenderBlock (anonymous) at (0,0) size 8x12
</span><span class="cx">                                                   RenderText {#text} at (0,-6) size 8x25
</span><span class="cx">                                                     text run at (0,-6) width 8: &quot;6&quot;
</span><del>-                                            RenderMathMLOperator {mo} at (8,8) size 19x10
</del><ins>+                                            RenderMathMLOperator {mo} at (8,10) size 19x10
</ins><span class="cx">                                               RenderMathMLBlock (anonymous, flex) at (3,0) size 12x10
</span><span class="cx">                                                 RenderBlock (anonymous) at (0,0) size 11x10
</span><span class="cx">                                                   RenderText at (0,-8) size 11x25
</span><span class="cx">                                                     text run at (0,-8) width 11: &quot;+&quot;
</span><del>-                                            RenderMathMLSquareRoot {msqrt} at (26,0) size 62x18 [intrinsic padding: 3 0 0 12]
-                                              RenderMathMLRow (anonymous) at (12,3) size 50x15
-                                                RenderMathMLRow {mrow} at (0,0) size 50x15
-                                                  RenderMathMLToken {mn} at (0,3) size 8x12
</del><ins>+                                            RenderMathMLSquareRoot {msqrt} at (26,0) size 62x24
+                                              RenderMathMLBlock (anonymous, flex) at (0,0) size 12x24
+                                                RenderMathMLRadicalOperator (anonymous) at (0,0) size 12x24
+                                                  RenderMathMLBlock (anonymous, flex) at (0,0) size 12x24
+                                                    RenderBlock (anonymous) at (0,0) size 12x24
+                                                      RenderText at (0,-1) size 15x25
+                                                        text run at (0,-1) width 15: &quot;\x{221A}&quot;
+                                              RenderMathMLRootWrapper at (12,3) size 50x21
+                                                RenderMathMLRow {mrow} at (0,0) size 50x18
+                                                  RenderMathMLToken {mn} at (0,4) size 8x12
</ins><span class="cx">                                                     RenderMathMLBlock (anonymous, flex) at (0,0) size 8x12
</span><span class="cx">                                                       RenderBlock (anonymous) at (0,0) size 8x12
</span><span class="cx">                                                         RenderText {#text} at (0,-6) size 8x25
</span><span class="cx">                                                           text run at (0,-6) width 8: &quot;7&quot;
</span><del>-                                                  RenderMathMLOperator {mo} at (8,5) size 19x10
</del><ins>+                                                  RenderMathMLOperator {mo} at (8,6) size 19x10
</ins><span class="cx">                                                     RenderMathMLBlock (anonymous, flex) at (3,0) size 12x10
</span><span class="cx">                                                       RenderBlock (anonymous) at (0,0) size 11x10
</span><span class="cx">                                                         RenderText at (0,-8) size 11x25
</span><span class="cx">                                                           text run at (0,-8) width 11: &quot;+&quot;
</span><del>-                                                  RenderMathMLSquareRoot {msqrt} at (26,0) size 24x15 [intrinsic padding: 3 0 0 12]
-                                                    RenderMathMLRow (anonymous) at (12,3) size 12x12
</del><ins>+                                                  RenderMathMLSquareRoot {msqrt} at (26,0) size 24x18
+                                                    RenderMathMLBlock (anonymous, flex) at (0,0) size 12x18
+                                                      RenderMathMLRadicalOperator (anonymous) at (0,0) size 12x18
+                                                        RenderMathMLBlock (anonymous, flex) at (0,0) size 12x18
+                                                          RenderBlock (anonymous) at (0,0) size 12x18
+                                                            RenderText at (0,-1) size 15x25
+                                                              text run at (0,-1) width 15: &quot;\x{221A}&quot;
+                                                    RenderMathMLRootWrapper at (12,3) size 12x15
</ins><span class="cx">                                                       RenderMathMLToken {mi} at (0,0) size 12x12 [padding: 0 2 0 0]
</span><span class="cx">                                                         RenderMathMLBlock (anonymous, flex) at (0,0) size 10x12
</span><span class="cx">                                                           RenderBlock (anonymous) at (0,0) size 10x12
</span><span class="cx">                                                             RenderText {#text} at (0,-6) size 10x25
</span><span class="cx">                                                               text run at (0,-6) width 10: &quot;A&quot;
</span><span class="cx">         RenderText {#text} at (0,0) size 0x0
</span><del>-      RenderBlock {p} at (0,406) size 784x74
</del><ins>+      RenderBlock {p} at (0,406) size 784x68
</ins><span class="cx">         RenderText {#text} at (0,38) size 110x17
</span><span class="cx">           text run at (0,38) width 110: &quot;Imbricated roots: &quot;
</span><del>-        RenderMathMLMath {math} at (110,0) size 355x74 [padding: 0 1 0 1]
</del><ins>+        RenderMathMLMath {math} at (110,0) size 314x69 [padding: 0 1 0 1]
+          RenderMathMLRoot {mroot} at (1,0) size 312x69
+            RenderMathMLRootWrapper at (4,19) size 6x50
+              RenderMathMLToken {mn} at (0,0) size 5x8
+                RenderMathMLBlock (anonymous, flex) at (0,0) size 5x8
+                  RenderBlock (anonymous) at (0,0) size 5x8
+                    RenderText {#text} at (0,-3) size 5x15
+                      text run at (0,-3) width 5: &quot;3&quot;
+            RenderMathMLBlock (anonymous, flex) at (0,0) size 13x69
+              RenderMathMLRadicalOperator (anonymous) at (0,0) size 12x69
+                RenderMathMLBlock (anonymous, flex) at (0,0) size 12x68
+                  RenderBlock (anonymous) at (0,0) size 12x68
+                    RenderText at (0,-1) size 15x25
+                      text run at (0,-1) width 15: &quot;\x{221A}&quot;
+            RenderMathMLRootWrapper at (12,3) size 300x66
+              RenderMathMLRow {mrow} at (0,0) size 299x63
+                RenderMathMLToken {mn} at (0,37) size 8x12
+                  RenderMathMLBlock (anonymous, flex) at (0,0) size 8x12
+                    RenderBlock (anonymous) at (0,0) size 8x12
+                      RenderText {#text} at (0,-6) size 8x25
+                        text run at (0,-6) width 8: &quot;1&quot;
+                RenderMathMLOperator {mo} at (8,39) size 19x10
+                  RenderMathMLBlock (anonymous, flex) at (3,0) size 12x10
+                    RenderBlock (anonymous) at (0,0) size 11x10
+                      RenderText at (0,-8) size 11x25
+                        text run at (0,-8) width 11: &quot;+&quot;
+                RenderMathMLRoot {mroot} at (26,0) size 273x63
+                  RenderMathMLRootWrapper at (4,17) size 6x46
+                    RenderMathMLToken {mn} at (0,0) size 5x8
+                      RenderMathMLBlock (anonymous, flex) at (0,0) size 5x8
+                        RenderBlock (anonymous) at (0,0) size 5x8
+                          RenderText {#text} at (0,-3) size 5x15
+                            text run at (0,-3) width 5: &quot;4&quot;
+                  RenderMathMLBlock (anonymous, flex) at (0,0) size 13x63
+                    RenderMathMLRadicalOperator (anonymous) at (0,0) size 12x63
+                      RenderMathMLBlock (anonymous, flex) at (0,0) size 12x63
+                        RenderBlock (anonymous) at (0,0) size 12x63
+                          RenderText at (0,-1) size 15x25
+                            text run at (0,-1) width 15: &quot;\x{221A}&quot;
+                  RenderMathMLRootWrapper at (12,3) size 261x60
+                    RenderMathMLRow {mrow} at (0,0) size 261x57
+                      RenderMathMLToken {mn} at (0,33) size 8x12
+                        RenderMathMLBlock (anonymous, flex) at (0,0) size 8x12
+                          RenderBlock (anonymous) at (0,0) size 8x12
+                            RenderText {#text} at (0,-6) size 8x25
+                              text run at (0,-6) width 8: &quot;2&quot;
+                      RenderMathMLOperator {mo} at (8,35) size 19x10
+                        RenderMathMLBlock (anonymous, flex) at (3,0) size 12x10
+                          RenderBlock (anonymous) at (0,0) size 11x10
+                            RenderText at (0,-8) size 11x25
+                              text run at (0,-8) width 11: &quot;+&quot;
+                      RenderMathMLRoot {mroot} at (26,0) size 235x57
+                        RenderMathMLRootWrapper at (4,15) size 6x42
+                          RenderMathMLToken {mn} at (0,0) size 5x8
+                            RenderMathMLBlock (anonymous, flex) at (0,0) size 5x8
+                              RenderBlock (anonymous) at (0,0) size 5x8
+                                RenderText {#text} at (0,-3) size 5x15
+                                  text run at (0,-3) width 5: &quot;5&quot;
+                        RenderMathMLBlock (anonymous, flex) at (0,0) size 13x57
+                          RenderMathMLRadicalOperator (anonymous) at (0,0) size 12x57
+                            RenderMathMLBlock (anonymous, flex) at (0,0) size 12x57
+                              RenderBlock (anonymous) at (0,0) size 12x57
+                                RenderText at (0,-1) size 15x25
+                                  text run at (0,-1) width 15: &quot;\x{221A}&quot;
+                        RenderMathMLRootWrapper at (12,3) size 223x54
+                          RenderMathMLRow {mrow} at (0,0) size 222x51
+                            RenderMathMLToken {mn} at (0,29) size 8x12
+                              RenderMathMLBlock (anonymous, flex) at (0,0) size 8x12
+                                RenderBlock (anonymous) at (0,0) size 8x12
+                                  RenderText {#text} at (0,-6) size 8x25
+                                    text run at (0,-6) width 8: &quot;3&quot;
+                            RenderMathMLOperator {mo} at (8,31) size 19x10
+                              RenderMathMLBlock (anonymous, flex) at (3,0) size 12x10
+                                RenderBlock (anonymous) at (0,0) size 11x10
+                                  RenderText at (0,-8) size 11x25
+                                    text run at (0,-8) width 11: &quot;+&quot;
+                            RenderMathMLRoot {mroot} at (26,0) size 196x51
+                              RenderMathMLRootWrapper at (4,12) size 6x39
+                                RenderMathMLToken {mn} at (0,0) size 5x8
+                                  RenderMathMLBlock (anonymous, flex) at (0,0) size 5x8
+                                    RenderBlock (anonymous) at (0,0) size 5x8
+                                      RenderText {#text} at (0,-3) size 5x15
+                                        text run at (0,-3) width 5: &quot;6&quot;
+                              RenderMathMLBlock (anonymous, flex) at (0,0) size 13x51
+                                RenderMathMLRadicalOperator (anonymous) at (0,0) size 12x51
+                                  RenderMathMLBlock (anonymous, flex) at (0,0) size 12x51
+                                    RenderBlock (anonymous) at (0,0) size 12x51
+                                      RenderText at (0,-1) size 15x25
+                                        text run at (0,-1) width 15: &quot;\x{221A}&quot;
+                              RenderMathMLRootWrapper at (12,3) size 184x48
+                                RenderMathMLRow {mrow} at (0,0) size 183x45
+                                  RenderMathMLToken {mn} at (0,25) size 8x12
+                                    RenderMathMLBlock (anonymous, flex) at (0,0) size 8x12
+                                      RenderBlock (anonymous) at (0,0) size 8x12
+                                        RenderText {#text} at (0,-6) size 8x25
+                                          text run at (0,-6) width 8: &quot;4&quot;
+                                  RenderMathMLOperator {mo} at (8,27) size 19x10
+                                    RenderMathMLBlock (anonymous, flex) at (3,0) size 12x10
+                                      RenderBlock (anonymous) at (0,0) size 11x10
+                                        RenderText at (0,-8) size 11x25
+                                          text run at (0,-8) width 11: &quot;+&quot;
+                                  RenderMathMLRoot {mroot} at (26,0) size 157x45
+                                    RenderMathMLRootWrapper at (4,11) size 6x34
+                                      RenderMathMLToken {mn} at (0,0) size 5x7
+                                        RenderMathMLBlock (anonymous, flex) at (0,0) size 5x7
+                                          RenderBlock (anonymous) at (0,0) size 5x7
+                                            RenderText {#text} at (0,-4) size 5x15
+                                              text run at (0,-4) width 5: &quot;7&quot;
+                                    RenderMathMLBlock (anonymous, flex) at (0,0) size 13x45
+                                      RenderMathMLRadicalOperator (anonymous) at (0,0) size 12x45
+                                        RenderMathMLBlock (anonymous, flex) at (0,0) size 12x45
+                                          RenderBlock (anonymous) at (0,0) size 12x45
+                                            RenderText at (0,-1) size 15x25
+                                              text run at (0,-1) width 15: &quot;\x{221A}&quot;
+                                    RenderMathMLRootWrapper at (12,3) size 145x42
+                                      RenderMathMLRow {mrow} at (0,0) size 145x39
+                                        RenderMathMLToken {mn} at (0,20) size 8x13
+                                          RenderMathMLBlock (anonymous, flex) at (0,0) size 8x13
+                                            RenderBlock (anonymous) at (0,0) size 8x13
+                                              RenderText {#text} at (0,-5) size 8x25
+                                                text run at (0,-5) width 8: &quot;5&quot;
+                                        RenderMathMLOperator {mo} at (8,23) size 19x10
+                                          RenderMathMLBlock (anonymous, flex) at (3,0) size 12x10
+                                            RenderBlock (anonymous) at (0,0) size 11x10
+                                              RenderText at (0,-8) size 11x25
+                                                text run at (0,-8) width 11: &quot;+&quot;
+                                        RenderMathMLRoot {mroot} at (26,0) size 119x39
+                                          RenderMathMLRootWrapper at (4,8) size 6x31
+                                            RenderMathMLToken {mn} at (0,0) size 5x8
+                                              RenderMathMLBlock (anonymous, flex) at (0,0) size 5x8
+                                                RenderBlock (anonymous) at (0,0) size 5x8
+                                                  RenderText {#text} at (0,-3) size 5x15
+                                                    text run at (0,-3) width 5: &quot;8&quot;
+                                          RenderMathMLBlock (anonymous, flex) at (0,0) size 13x39
+                                            RenderMathMLRadicalOperator (anonymous) at (0,0) size 12x39
+                                              RenderMathMLBlock (anonymous, flex) at (0,0) size 12x39
+                                                RenderBlock (anonymous) at (0,0) size 12x39
+                                                  RenderText at (0,-1) size 15x25
+                                                    text run at (0,-1) width 15: &quot;\x{221A}&quot;
+                                          RenderMathMLRootWrapper at (12,3) size 107x36
+                                            RenderMathMLRow {mrow} at (0,0) size 106x33
+                                              RenderMathMLToken {mn} at (0,17) size 8x12
+                                                RenderMathMLBlock (anonymous, flex) at (0,0) size 8x12
+                                                  RenderBlock (anonymous) at (0,0) size 8x12
+                                                    RenderText {#text} at (0,-6) size 8x25
+                                                      text run at (0,-6) width 8: &quot;6&quot;
+                                              RenderMathMLOperator {mo} at (8,19) size 19x10
+                                                RenderMathMLBlock (anonymous, flex) at (3,0) size 12x10
+                                                  RenderBlock (anonymous) at (0,0) size 11x10
+                                                    RenderText at (0,-8) size 11x25
+                                                      text run at (0,-8) width 11: &quot;+&quot;
+                                              RenderMathMLRoot {mroot} at (26,0) size 80x33
+                                                RenderMathMLRootWrapper at (4,5) size 6x28
+                                                  RenderMathMLToken {mn} at (0,0) size 5x8
+                                                    RenderMathMLBlock (anonymous, flex) at (0,0) size 5x8
+                                                      RenderBlock (anonymous) at (0,0) size 5x8
+                                                        RenderText {#text} at (0,-3) size 5x15
+                                                          text run at (0,-3) width 5: &quot;9&quot;
+                                                RenderMathMLBlock (anonymous, flex) at (0,0) size 13x33
+                                                  RenderMathMLRadicalOperator (anonymous) at (0,0) size 12x33
+                                                    RenderMathMLBlock (anonymous, flex) at (0,0) size 12x33
+                                                      RenderBlock (anonymous) at (0,0) size 12x33
+                                                        RenderText at (0,-1) size 15x25
+                                                          text run at (0,-1) width 15: &quot;\x{221A}&quot;
+                                                RenderMathMLRootWrapper at (12,3) size 68x30
+                                                  RenderMathMLRow {mrow} at (0,0) size 68x27
+                                                    RenderMathMLToken {mn} at (0,13) size 8x12
+                                                      RenderMathMLBlock (anonymous, flex) at (0,0) size 8x12
+                                                        RenderBlock (anonymous) at (0,0) size 8x12
+                                                          RenderText {#text} at (0,-6) size 8x25
+                                                            text run at (0,-6) width 8: &quot;7&quot;
+                                                    RenderMathMLOperator {mo} at (8,15) size 19x10
+                                                      RenderMathMLBlock (anonymous, flex) at (3,0) size 12x10
+                                                        RenderBlock (anonymous) at (0,0) size 11x10
+                                                          RenderText at (0,-8) size 11x25
+                                                            text run at (0,-8) width 11: &quot;+&quot;
+                                                    RenderMathMLRoot {mroot} at (26,0) size 42x27
+                                                      RenderMathMLRootWrapper at (4,0) size 23x27
+                                                        RenderMathMLFraction {mfrac} at (1,0) size 20x17
+                                                          RenderMathMLBlock (anonymous, flex) at (0,0) size 20x9
+                                                            RenderMathMLRow {mrow} at (0,0) size 20x7
+                                                              RenderMathMLToken {mi} at (0,1) size 5x5 [padding: 0 1 0 0]
+                                                                RenderMathMLBlock (anonymous, flex) at (0,0) size 4x5
+                                                                  RenderBlock (anonymous) at (0,0) size 4x5
+                                                                    RenderText {#text} at (0,-6) size 4x15
+                                                                      text run at (0,-6) width 4: &quot;x&quot;
+                                                              RenderMathMLOperator {mo} at (4,0) size 11x6
+                                                                RenderMathMLBlock (anonymous, flex) at (2,0) size 6x6
+                                                                  RenderBlock (anonymous) at (0,0) size 6x6
+                                                                    RenderText at (0,-5) size 6x15
+                                                                      text run at (0,-5) width 6: &quot;+&quot;
+                                                              RenderMathMLToken {mi} at (14,1) size 6x6 [padding: 0 1 0 0]
+                                                                RenderMathMLBlock (anonymous, flex) at (0,0) size 4x6
+                                                                  RenderBlock (anonymous) at (0,0) size 4x6
+                                                                    RenderText {#text} at (0,-6) size 4x15
+                                                                      text run at (0,-6) width 4: &quot;y&quot;
+                                                          RenderMathMLBlock (anonymous, flex) at (0,8) size 20x9 [padding: 1 0 0 0]
+                                                            RenderMathMLToken {mi} at (7,2) size 6x6 [padding: 0 1 0 0]
+                                                              RenderMathMLBlock (anonymous, flex) at (0,0) size 4x5
+                                                                RenderBlock (anonymous) at (0,0) size 4x5
+                                                                  RenderText {#text} at (0,-6) size 4x15
+                                                                    text run at (0,-6) width 4: &quot;z&quot;
+                                                      RenderMathMLBlock (anonymous, flex) at (17,0) size 13x27
+                                                        RenderMathMLRadicalOperator (anonymous) at (0,9) size 12x18
+                                                          RenderMathMLBlock (anonymous, flex) at (0,0) size 12x18
+                                                            RenderBlock (anonymous) at (0,0) size 12x18
+                                                              RenderText at (0,-1) size 15x25
+                                                                text run at (0,-1) width 15: &quot;\x{221A}&quot;
+                                                      RenderMathMLRootWrapper at (29,12) size 12x15
+                                                        RenderMathMLToken {mi} at (0,0) size 12x12 [padding: 0 2 0 0]
+                                                          RenderMathMLBlock (anonymous, flex) at (0,0) size 10x12
+                                                            RenderBlock (anonymous) at (0,0) size 10x12
+                                                              RenderText {#text} at (0,-6) size 10x25
+                                                                text run at (0,-6) width 10: &quot;A&quot;
</ins><span class="cx">         RenderText {#text} at (0,0) size 0x0
</span><del>-layer at (182,172) size 21x19
-  RenderMathMLRoot {mroot} at (1,0) size 21x19 [intrinsic padding: 7 0 0 13]
-    RenderMathMLRow (anonymous) at (13,7) size 8x12
-      RenderMathMLToken {mn} at (0,0) size 8x12
-        RenderMathMLBlock (anonymous, flex) at (0,0) size 8x12
-          RenderBlock (anonymous) at (0,0) size 8x12
-            RenderText {#text} at (0,-6) size 8x25
-              text run at (0,-6) width 8: &quot;2&quot;
-layer at (182,172) size 13x14
-  RenderMathMLToken {mn} at (0,0) size 14x15 [padding: 0 5 4 2]
-    RenderMathMLBlock (anonymous, flex) at (2,0) size 7x10
-      RenderBlock (anonymous) at (0,0) size 6x10
-        RenderText {#text} at (0,-4) size 6x19
-          text run at (0,-4) width 6: &quot;3&quot;
-layer at (84,209) size 60x19
-  RenderMathMLRoot {mroot} at (1,0) size 60x19 [intrinsic padding: 7 0 0 52]
-    RenderMathMLRow (anonymous) at (52,7) size 8x12
-      RenderMathMLToken {mn} at (0,0) size 8x12
-        RenderMathMLBlock (anonymous, flex) at (0,0) size 8x12
-          RenderBlock (anonymous) at (0,0) size 8x12
-            RenderText {#text} at (0,-6) size 8x25
-              text run at (0,-6) width 8: &quot;2&quot;
-layer at (84,209) size 52x14
-  RenderMathMLRow {mrow} at (0,0) size 53x15 [padding: 0 5 4 2]
-    RenderMathMLToken {mi} at (2,1) size 7x7 [padding: 0 1 0 0]
-      RenderMathMLBlock (anonymous, flex) at (0,0) size 5x7
-        RenderBlock (anonymous) at (0,0) size 5x7
-          RenderText {#text} at (0,-7) size 5x19
-            text run at (0,-7) width 5: &quot;x&quot;
-    RenderMathMLOperator {mo} at (8,0) size 14x8
-      RenderMathMLBlock (anonymous, flex) at (2,0) size 9x8
-        RenderBlock (anonymous) at (0,0) size 8x8
-          RenderText at (0,-6) size 8x19
-            text run at (0,-6) width 8: &quot;+&quot;
-    RenderMathMLToken {mi} at (21,1) size 8x9 [padding: 0 1 0 0]
-      RenderMathMLBlock (anonymous, flex) at (0,0) size 5x9
-        RenderBlock (anonymous) at (0,0) size 5x9
-          RenderText {#text} at (0,-7) size 5x19
-            text run at (0,-7) width 5: &quot;y&quot;
-    RenderMathMLOperator {mo} at (28,0) size 14x8
-      RenderMathMLBlock (anonymous, flex) at (2,0) size 9x8
-        RenderBlock (anonymous) at (0,0) size 8x8
-          RenderText at (0,-6) size 8x19
-            text run at (0,-6) width 8: &quot;+&quot;
-    RenderMathMLToken {mi} at (41,1) size 7x7 [padding: 0 1 0 0]
-      RenderMathMLBlock (anonymous, flex) at (0,0) size 5x7
-        RenderBlock (anonymous) at (0,0) size 5x7
-          RenderText {#text} at (0,-7) size 5x19
-            text run at (0,-7) width 5: &quot;z&quot;
-layer at (194,246) size 90x37
-  RenderMathMLRoot {mroot} at (1,0) size 90x38 [intrinsic padding: 3 0 3 53]
-    RenderMathMLRow (anonymous) at (53,3) size 37x32
-      RenderMathMLFraction {mfrac} at (1,0) size 35x32
-        RenderMathMLBlock (anonymous, flex) at (0,0) size 35x16
-          RenderMathMLRow {mrow} at (0,0) size 35x12
-            RenderMathMLToken {mi} at (0,3) size 9x9 [padding: 0 2 0 0]
-              RenderMathMLBlock (anonymous, flex) at (0,0) size 7x9
-                RenderBlock (anonymous) at (0,0) size 7x9
-                  RenderText {#text} at (0,-9) size 7x25
-                    text run at (0,-9) width 7: &quot;x&quot;
-            RenderMathMLOperator {mo} at (8,2) size 19x10
-              RenderMathMLBlock (anonymous, flex) at (3,0) size 12x10
-                RenderBlock (anonymous) at (0,0) size 11x10
-                  RenderText at (0,-8) size 11x25
-                    text run at (0,-8) width 11: &quot;+&quot;
-            RenderMathMLToken {mn} at (26,0) size 9x12
-              RenderMathMLBlock (anonymous, flex) at (0,0) size 8x12
-                RenderBlock (anonymous) at (0,0) size 8x12
-                  RenderText {#text} at (0,-6) size 8x25
-                    text run at (0,-6) width 8: &quot;1&quot;
-        RenderMathMLBlock (anonymous, flex) at (0,15) size 35x17 [padding: 1 0 0 0]
-          RenderMathMLRow {mrow} at (0,4) size 35x13
-            RenderMathMLToken {mi} at (0,3) size 9x9 [padding: 0 2 0 0]
-              RenderMathMLBlock (anonymous, flex) at (0,0) size 7x9
-                RenderBlock (anonymous) at (0,0) size 7x9
-                  RenderText {#text} at (0,-9) size 7x25
-                    text run at (0,-9) width 7: &quot;x&quot;
-            RenderMathMLOperator {mo} at (8,2) size 19x10
-              RenderMathMLBlock (anonymous, flex) at (3,0) size 12x10
-                RenderBlock (anonymous) at (0,0) size 11x10
-                  RenderText at (0,-8) size 11x25
-                    text run at (0,-8) width 11: &quot;+&quot;
-            RenderMathMLToken {mn} at (26,0) size 9x12
-              RenderMathMLBlock (anonymous, flex) at (0,0) size 8x12
-                RenderBlock (anonymous) at (0,0) size 8x12
-                  RenderText {#text} at (0,-6) size 8x25
-                    text run at (0,-6) width 8: &quot;2&quot;
-layer at (194,254) size 52x14
-  RenderMathMLRow {mrow} at (0,8) size 53x15 [padding: 0 5 4 2]
-    RenderMathMLToken {mi} at (2,1) size 7x7 [padding: 0 1 0 0]
-      RenderMathMLBlock (anonymous, flex) at (0,0) size 5x7
-        RenderBlock (anonymous) at (0,0) size 5x7
-          RenderText {#text} at (0,-7) size 5x19
-            text run at (0,-7) width 5: &quot;x&quot;
-    RenderMathMLOperator {mo} at (8,0) size 14x8
-      RenderMathMLBlock (anonymous, flex) at (2,0) size 9x8
-        RenderBlock (anonymous) at (0,0) size 8x8
-          RenderText at (0,-6) size 8x19
-            text run at (0,-6) width 8: &quot;+&quot;
-    RenderMathMLToken {mi} at (21,1) size 8x9 [padding: 0 1 0 0]
-      RenderMathMLBlock (anonymous, flex) at (0,0) size 5x9
-        RenderBlock (anonymous) at (0,0) size 5x9
-          RenderText {#text} at (0,-7) size 5x19
-            text run at (0,-7) width 5: &quot;y&quot;
-    RenderMathMLOperator {mo} at (28,0) size 14x8
-      RenderMathMLBlock (anonymous, flex) at (2,0) size 9x8
-        RenderBlock (anonymous) at (0,0) size 8x8
-          RenderText at (0,-6) size 8x19
-            text run at (0,-6) width 8: &quot;+&quot;
-    RenderMathMLToken {mi} at (41,1) size 7x7 [padding: 0 1 0 0]
-      RenderMathMLBlock (anonymous, flex) at (0,0) size 5x7
-        RenderBlock (anonymous) at (0,0) size 5x7
-          RenderText {#text} at (0,-7) size 5x19
-            text run at (0,-7) width 5: &quot;z&quot;
-layer at (84,299) size 23x44
-  RenderMathMLRoot {mroot} at (1,0) size 23x44 [intrinsic padding: 32 0 0 15]
-    RenderMathMLRow (anonymous) at (15,32) size 8x12
-      RenderMathMLToken {mn} at (0,0) size 8x12
-        RenderMathMLBlock (anonymous, flex) at (0,0) size 8x12
-          RenderBlock (anonymous) at (0,0) size 8x12
-            RenderText {#text} at (0,-6) size 8x25
-              text run at (0,-6) width 8: &quot;2&quot;
-layer at (85,299) size 15x39
-  RenderMathMLFraction {mfrac} at (1,0) size 16x39 [padding: 0 5 4 2]
-    RenderMathMLBlock (anonymous, flex) at (2,0) size 9x25
-      RenderMathMLFraction {mfrac} at (1,0) size 7x22
-        RenderMathMLBlock (anonymous, flex) at (0,0) size 7x10
-          RenderMathMLToken {mi} at (0,0) size 7x7 [padding: 0 1 0 0]
-            RenderMathMLBlock (anonymous, flex) at (0,0) size 5x7
-              RenderBlock (anonymous) at (0,0) size 5x7
-                RenderText {#text} at (0,-7) size 5x19
-                  text run at (0,-7) width 5: &quot;x&quot;
-        RenderMathMLBlock (anonymous, flex) at (0,9) size 7x13 [padding: 1 0 0 0]
-          RenderMathMLToken {mi} at (0,3) size 7x10 [padding: 0 1 0 0]
-            RenderMathMLBlock (anonymous, flex) at (0,0) size 5x9
-              RenderBlock (anonymous) at (0,0) size 5x9
-                RenderText {#text} at (0,-7) size 5x19
-                  text run at (0,-7) width 5: &quot;y&quot;
-    RenderMathMLBlock (anonymous, flex) at (2,24) size 9x11 [padding: 1 0 0 0]
-      RenderMathMLToken {mi} at (1,3) size 7x8 [padding: 0 1 0 0]
-        RenderMathMLBlock (anonymous, flex) at (0,0) size 5x7
-          RenderBlock (anonymous) at (0,0) size 5x7
-            RenderText {#text} at (0,-7) size 5x19
-              text run at (0,-7) width 5: &quot;z&quot;
-layer at (119,422) size 352x74
-  RenderMathMLRoot {mroot} at (1,0) size 353x74 [intrinsic padding: 3 0 3 19]
-    RenderMathMLRow (anonymous) at (19,3) size 334x68
-      RenderMathMLRow {mrow} at (0,0) size 334x68
-        RenderMathMLToken {mn} at (0,38) size 8x12
-          RenderMathMLBlock (anonymous, flex) at (0,0) size 8x12
-            RenderBlock (anonymous) at (0,0) size 8x12
-              RenderText {#text} at (0,-6) size 8x25
-                text run at (0,-6) width 8: &quot;1&quot;
-        RenderMathMLOperator {mo} at (8,40) size 19x10
-          RenderMathMLBlock (anonymous, flex) at (3,0) size 12x10
-            RenderBlock (anonymous) at (0,0) size 11x10
-              RenderText at (0,-8) size 11x25
-                text run at (0,-8) width 11: &quot;+&quot;
-layer at (164,425) size 307x68
-  RenderMathMLRoot {mroot} at (26,0) size 308x68 [intrinsic padding: 3 0 3 19]
-    RenderMathMLRow (anonymous) at (19,3) size 289x62
-      RenderMathMLRow {mrow} at (0,0) size 289x62
-        RenderMathMLToken {mn} at (0,35) size 8x12
-          RenderMathMLBlock (anonymous, flex) at (0,0) size 8x12
-            RenderBlock (anonymous) at (0,0) size 8x12
-              RenderText {#text} at (0,-6) size 8x25
-                text run at (0,-6) width 8: &quot;2&quot;
-        RenderMathMLOperator {mo} at (8,37) size 19x10
-          RenderMathMLBlock (anonymous, flex) at (3,0) size 12x10
-            RenderBlock (anonymous) at (0,0) size 11x10
-              RenderText at (0,-8) size 11x25
-                text run at (0,-8) width 11: &quot;+&quot;
-layer at (209,428) size 262x62
-  RenderMathMLRoot {mroot} at (26,0) size 263x62 [intrinsic padding: 3 0 3 19]
-    RenderMathMLRow (anonymous) at (19,3) size 244x56
-      RenderMathMLRow {mrow} at (0,0) size 244x56
-        RenderMathMLToken {mn} at (0,32) size 8x12
-          RenderMathMLBlock (anonymous, flex) at (0,0) size 8x12
-            RenderBlock (anonymous) at (0,0) size 8x12
-              RenderText {#text} at (0,-6) size 8x25
-                text run at (0,-6) width 8: &quot;3&quot;
-        RenderMathMLOperator {mo} at (8,34) size 19x10
-          RenderMathMLBlock (anonymous, flex) at (3,0) size 12x10
-            RenderBlock (anonymous) at (0,0) size 11x10
-              RenderText at (0,-8) size 11x25
-                text run at (0,-8) width 11: &quot;+&quot;
-layer at (254,431) size 217x56
-  RenderMathMLRoot {mroot} at (26,0) size 218x56 [intrinsic padding: 3 0 3 19]
-    RenderMathMLRow (anonymous) at (19,3) size 198x50
-      RenderMathMLRow {mrow} at (0,0) size 198x50
-        RenderMathMLToken {mn} at (0,29) size 8x12
-          RenderMathMLBlock (anonymous, flex) at (0,0) size 8x12
-            RenderBlock (anonymous) at (0,0) size 8x12
-              RenderText {#text} at (0,-6) size 8x25
-                text run at (0,-6) width 8: &quot;4&quot;
-        RenderMathMLOperator {mo} at (8,31) size 19x10
-          RenderMathMLBlock (anonymous, flex) at (3,0) size 12x10
-            RenderBlock (anonymous) at (0,0) size 11x10
-              RenderText at (0,-8) size 11x25
-                text run at (0,-8) width 11: &quot;+&quot;
-layer at (299,434) size 172x50
-  RenderMathMLRoot {mroot} at (26,0) size 172x50 [intrinsic padding: 3 0 3 18]
-    RenderMathMLRow (anonymous) at (18,3) size 154x44
-      RenderMathMLRow {mrow} at (0,0) size 154x44
-        RenderMathMLToken {mn} at (0,25) size 8x13
-          RenderMathMLBlock (anonymous, flex) at (0,0) size 8x13
-            RenderBlock (anonymous) at (0,0) size 8x13
-              RenderText {#text} at (0,-5) size 8x25
-                text run at (0,-5) width 8: &quot;5&quot;
-        RenderMathMLOperator {mo} at (8,28) size 19x10
-          RenderMathMLBlock (anonymous, flex) at (3,0) size 12x10
-            RenderBlock (anonymous) at (0,0) size 11x10
-              RenderText at (0,-8) size 11x25
-                text run at (0,-8) width 11: &quot;+&quot;
-layer at (343,437) size 128x44
-  RenderMathMLRoot {mroot} at (26,0) size 128x44 [intrinsic padding: 3 0 3 16]
-    RenderMathMLRow (anonymous) at (16,3) size 112x38
-      RenderMathMLRow {mrow} at (0,0) size 112x38
-        RenderMathMLToken {mn} at (0,23) size 8x12
-          RenderMathMLBlock (anonymous, flex) at (0,0) size 8x12
-            RenderBlock (anonymous) at (0,0) size 8x12
-              RenderText {#text} at (0,-6) size 8x25
-                text run at (0,-6) width 8: &quot;6&quot;
-        RenderMathMLOperator {mo} at (8,25) size 19x10
-          RenderMathMLBlock (anonymous, flex) at (3,0) size 12x10
-            RenderBlock (anonymous) at (0,0) size 11x10
-              RenderText at (0,-8) size 11x25
-                text run at (0,-8) width 11: &quot;+&quot;
-layer at (386,440) size 86x38
-  RenderMathMLRoot {mroot} at (26,0) size 86x38 [intrinsic padding: 3 0 3 15]
-    RenderMathMLRow (anonymous) at (15,3) size 71x32
-      RenderMathMLRow {mrow} at (0,0) size 71x32
-        RenderMathMLToken {mn} at (0,20) size 8x12
-          RenderMathMLBlock (anonymous, flex) at (0,0) size 8x12
-            RenderBlock (anonymous) at (0,0) size 8x12
-              RenderText {#text} at (0,-6) size 8x25
-                text run at (0,-6) width 8: &quot;7&quot;
-        RenderMathMLOperator {mo} at (8,22) size 19x10
-          RenderMathMLBlock (anonymous, flex) at (3,0) size 12x10
-            RenderBlock (anonymous) at (0,0) size 11x10
-              RenderText at (0,-8) size 11x25
-                text run at (0,-8) width 11: &quot;+&quot;
-layer at (427,443) size 45x32
-  RenderMathMLRoot {mroot} at (26,0) size 45x32 [intrinsic padding: 20 0 0 33]
-    RenderMathMLRow (anonymous) at (33,20) size 12x12
-      RenderMathMLToken {mi} at (0,0) size 12x12 [padding: 0 2 0 0]
-        RenderMathMLBlock (anonymous, flex) at (0,0) size 10x12
-          RenderBlock (anonymous) at (0,0) size 10x12
-            RenderText {#text} at (0,-6) size 10x25
-              text run at (0,-6) width 10: &quot;A&quot;
-layer at (428,443) size 33x27
-  RenderMathMLFraction {mfrac} at (1,0) size 33x27 [padding: 0 5 4 2]
-    RenderMathMLBlock (anonymous, flex) at (2,0) size 27x13
-      RenderMathMLRow {mrow} at (0,0) size 26x10
-        RenderMathMLToken {mi} at (0,1) size 7x7 [padding: 0 1 0 0]
-          RenderMathMLBlock (anonymous, flex) at (0,0) size 5x7
-            RenderBlock (anonymous) at (0,0) size 5x7
-              RenderText {#text} at (0,-7) size 5x19
-                text run at (0,-7) width 5: &quot;x&quot;
-        RenderMathMLOperator {mo} at (6,0) size 14x8
-          RenderMathMLBlock (anonymous, flex) at (2,0) size 9x8
-            RenderBlock (anonymous) at (0,0) size 8x8
-              RenderText at (0,-6) size 8x19
-                text run at (0,-6) width 8: &quot;+&quot;
-        RenderMathMLToken {mi} at (19,1) size 7x9 [padding: 0 1 0 0]
-          RenderMathMLBlock (anonymous, flex) at (0,0) size 5x9
-            RenderBlock (anonymous) at (0,0) size 5x9
-              RenderText {#text} at (0,-7) size 5x19
-                text run at (0,-7) width 5: &quot;y&quot;
-    RenderMathMLBlock (anonymous, flex) at (2,12) size 27x11 [padding: 1 0 0 0]
-      RenderMathMLToken {mi} at (9,3) size 7x8 [padding: 0 1 0 0]
-        RenderMathMLBlock (anonymous, flex) at (0,0) size 5x7
-          RenderBlock (anonymous) at (0,0) size 5x7
-            RenderText {#text} at (0,-7) size 5x19
-              text run at (0,-7) width 5: &quot;z&quot;
-layer at (386,449) size 13x14
-  RenderMathMLToken {mn} at (0,9) size 14x15 [padding: 0 5 4 2]
-    RenderMathMLBlock (anonymous, flex) at (2,0) size 7x10
-      RenderBlock (anonymous) at (0,0) size 6x10
-        RenderText {#text} at (0,-4) size 6x19
-          text run at (0,-4) width 6: &quot;9&quot;
-layer at (343,450) size 13x14
-  RenderMathMLToken {mn} at (0,13) size 14x15 [padding: 0 5 4 2]
-    RenderMathMLBlock (anonymous, flex) at (2,0) size 7x10
-      RenderBlock (anonymous) at (0,0) size 6x10
-        RenderText {#text} at (0,-4) size 6x19
-          text run at (0,-4) width 6: &quot;8&quot;
-layer at (299,451) size 13x13
-  RenderMathMLToken {mn} at (0,17) size 14x14 [padding: 0 5 4 2]
-    RenderMathMLBlock (anonymous, flex) at (2,0) size 7x9
-      RenderBlock (anonymous) at (0,0) size 6x9
-        RenderText {#text} at (0,-5) size 6x19
-          text run at (0,-5) width 6: &quot;7&quot;
-layer at (254,451) size 13x14
-  RenderMathMLToken {mn} at (0,20) size 14x15 [padding: 0 5 4 2]
-    RenderMathMLBlock (anonymous, flex) at (2,0) size 7x10
-      RenderBlock (anonymous) at (0,0) size 6x10
-        RenderText {#text} at (0,-4) size 6x19
-          text run at (0,-4) width 6: &quot;6&quot;
-layer at (209,452) size 13x14
-  RenderMathMLToken {mn} at (0,24) size 14x15 [padding: 0 5 4 2]
-    RenderMathMLBlock (anonymous, flex) at (2,0) size 7x10
-      RenderBlock (anonymous) at (0,0) size 6x10
-        RenderText {#text} at (0,-4) size 6x19
-          text run at (0,-4) width 6: &quot;5&quot;
-layer at (164,453) size 13x14
-  RenderMathMLToken {mn} at (0,28) size 14x15 [padding: 0 5 4 2]
-    RenderMathMLBlock (anonymous, flex) at (2,0) size 7x10
-      RenderBlock (anonymous) at (0,0) size 6x10
-        RenderText {#text} at (0,-4) size 6x19
-          text run at (0,-4) width 6: &quot;4&quot;
-layer at (119,453) size 13x14
-  RenderMathMLToken {mn} at (0,31) size 14x15 [padding: 0 5 4 2]
-    RenderMathMLBlock (anonymous, flex) at (2,0) size 7x10
-      RenderBlock (anonymous) at (0,0) size 6x10
-        RenderText {#text} at (0,-4) size 6x19
-          text run at (0,-4) width 6: &quot;3&quot;
</del></span></pre></div>
<a id="trunkLayoutTestsplatformmacTestExpectations"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/platform/mac/TestExpectations (170004 => 170005)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/platform/mac/TestExpectations        2014-06-16 09:09:21 UTC (rev 170004)
+++ trunk/LayoutTests/platform/mac/TestExpectations        2014-06-16 10:07:32 UTC (rev 170005)
</span><span class="lines">@@ -1325,7 +1325,12 @@
</span><span class="cx"> webkit.org/b/72828 mathml/opentype/horizontal-LatinModern.html [ Failure ]
</span><span class="cx"> webkit.org/b/72828 mathml/opentype/opentype-stretchy-horizontal.html [ Failure ]
</span><span class="cx"> webkit.org/b/72828 mathml/opentype/horizontal-LatinModern-munderover.html [ Failure ]
</span><ins>+webkit.org/b/119038 mathml/opentype/roots-LatinModern.html [ Failure ]
</ins><span class="cx"> 
</span><ins>+# Missing references
+webkit.org/b/119038 mathml/presentation/mo-stretch.html [ Failure ]
+webkit.org/b/119038 mathml/presentation/roots.xhtml [ Failure ]
+
</ins><span class="cx"> # WebKitDataCue is supported, not DataCue
</span><span class="cx"> media/track/track-datacue.html [ Skip ]
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkLayoutTestsplatformmacmathmlopentyperootsLatinModernexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/platform/mac/mathml/opentype/roots-LatinModern-expected.txt (0 => 170005)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/platform/mac/mathml/opentype/roots-LatinModern-expected.txt                                (rev 0)
+++ trunk/LayoutTests/platform/mac/mathml/opentype/roots-LatinModern-expected.txt        2014-06-16 10:07:32 UTC (rev 170005)
</span><span class="lines">@@ -0,0 +1,184 @@
</span><ins>+layer at (0,0) size 800x600
+  RenderView at (0,0) size 800x600
+layer at (0,0) size 800x259
+  RenderBlock {HTML} at (0,0) size 800x260
+    RenderBody {BODY} at (8,8) size 784x236
+      RenderMathMLMath {math} at (0,0) size 784x53 [padding: 0 1 0 1]
+        RenderMathMLRow {mrow} at (232,0) size 320x53
+          RenderMathMLSquareRoot {msqrt} at (0,0) size 319x53
+            RenderMathMLBlock (anonymous, flex) at (0,0) size 17x53
+              RenderMathMLRadicalOperator (anonymous) at (0,0) size 17x53
+                RenderMathMLBlock (anonymous, flex) at (0,0) size 13x53
+                  RenderBlock (anonymous) at (0,0) size 13x53
+                    RenderText at (0,-56) size 13x106
+                      text run at (0,-56) width 13: &quot;\x{221A}&quot;
+            RenderMathMLRootWrapper at (17,2) size 302x51
+              RenderMathMLToken {mn} at (0,12) size 8x12
+                RenderMathMLBlock (anonymous, flex) at (0,0) size 8x12
+                  RenderBlock (anonymous) at (0,0) size 8x12
+                    RenderText {#text} at (0,-46) size 8x106
+                      text run at (0,-46) width 8: &quot;1&quot;
+              RenderMathMLOperator {mo} at (8,13) size 20x12
+                RenderMathMLBlock (anonymous, flex) at (3,0) size 13x12
+                  RenderBlock (anonymous) at (0,0) size 12x12
+                    RenderText at (0,-47) size 12x106
+                      text run at (0,-47) width 12: &quot;+&quot;
+              RenderMathMLSquareRoot {msqrt} at (27,0) size 275x51
+                RenderMathMLBlock (anonymous, flex) at (0,0) size 17x51
+                  RenderMathMLRadicalOperator (anonymous) at (0,0) size 17x51
+                    RenderMathMLBlock (anonymous, flex) at (0,0) size 13x51
+                      RenderBlock (anonymous) at (0,0) size 13x51
+                        RenderText at (0,-56) size 13x106
+                          text run at (0,-56) width 13: &quot;\x{221A}&quot;
+                RenderMathMLRootWrapper at (17,2) size 258x49
+                  RenderMathMLToken {mn} at (0,10) size 8x12
+                    RenderMathMLBlock (anonymous, flex) at (0,0) size 8x12
+                      RenderBlock (anonymous) at (0,0) size 8x12
+                        RenderText {#text} at (0,-46) size 8x106
+                          text run at (0,-46) width 8: &quot;1&quot;
+                  RenderMathMLOperator {mo} at (8,11) size 20x12
+                    RenderMathMLBlock (anonymous, flex) at (3,0) size 13x12
+                      RenderBlock (anonymous) at (0,0) size 12x12
+                        RenderText at (0,-47) size 12x106
+                          text run at (0,-47) width 12: &quot;+&quot;
+                  RenderMathMLSquareRoot {msqrt} at (27,0) size 231x49
+                    RenderMathMLBlock (anonymous, flex) at (0,0) size 17x49
+                      RenderMathMLRadicalOperator (anonymous) at (0,0) size 17x49
+                        RenderMathMLBlock (anonymous, flex) at (0,0) size 13x48
+                          RenderBlock (anonymous) at (0,0) size 13x48
+                            RenderText at (0,-56) size 13x106
+                              text run at (0,-56) width 13: &quot;\x{221A}&quot;
+                    RenderMathMLRootWrapper at (17,2) size 214x47
+                      RenderMathMLToken {mn} at (0,8) size 8x12
+                        RenderMathMLBlock (anonymous, flex) at (0,0) size 8x12
+                          RenderBlock (anonymous) at (0,0) size 8x12
+                            RenderText {#text} at (0,-46) size 8x106
+                              text run at (0,-46) width 8: &quot;1&quot;
+                      RenderMathMLOperator {mo} at (8,9) size 20x12
+                        RenderMathMLBlock (anonymous, flex) at (3,0) size 13x12
+                          RenderBlock (anonymous) at (0,0) size 12x12
+                            RenderText at (0,-47) size 12x106
+                              text run at (0,-47) width 12: &quot;+&quot;
+                      RenderMathMLSquareRoot {msqrt} at (27,0) size 187x41
+                        RenderMathMLBlock (anonymous, flex) at (0,0) size 17x41
+                          RenderMathMLRadicalOperator (anonymous) at (0,0) size 17x41
+                            RenderMathMLBlock (anonymous, flex) at (0,0) size 13x40
+                              RenderBlock (anonymous) at (0,0) size 13x40
+                                RenderText at (0,-56) size 13x106
+                                  text run at (0,-56) width 13: &quot;\x{221A}&quot;
+                        RenderMathMLRootWrapper at (17,2) size 169x39
+                          RenderMathMLToken {mn} at (0,6) size 8x12
+                            RenderMathMLBlock (anonymous, flex) at (0,0) size 8x12
+                              RenderBlock (anonymous) at (0,0) size 8x12
+                                RenderText {#text} at (0,-46) size 8x106
+                                  text run at (0,-46) width 8: &quot;1&quot;
+                          RenderMathMLOperator {mo} at (8,7) size 20x12
+                            RenderMathMLBlock (anonymous, flex) at (3,0) size 13x12
+                              RenderBlock (anonymous) at (0,0) size 12x12
+                                RenderText at (0,-47) size 12x106
+                                  text run at (0,-47) width 12: &quot;+&quot;
+                          RenderMathMLSquareRoot {msqrt} at (27,0) size 142x31
+                            RenderMathMLBlock (anonymous, flex) at (0,0) size 17x31
+                              RenderMathMLRadicalOperator (anonymous) at (0,0) size 17x31
+                                RenderMathMLBlock (anonymous, flex) at (0,0) size 13x30
+                                  RenderBlock (anonymous) at (0,0) size 13x30
+                                    RenderText at (0,-56) size 13x106
+                                      text run at (0,-56) width 13: &quot;\x{221A}&quot;
+                            RenderMathMLRootWrapper at (17,2) size 125x29
+                              RenderMathMLToken {mn} at (0,4) size 8x12
+                                RenderMathMLBlock (anonymous, flex) at (0,0) size 8x12
+                                  RenderBlock (anonymous) at (0,0) size 8x12
+                                    RenderText {#text} at (0,-46) size 8x106
+                                      text run at (0,-46) width 8: &quot;1&quot;
+                              RenderMathMLOperator {mo} at (8,5) size 20x12
+                                RenderMathMLBlock (anonymous, flex) at (3,0) size 13x12
+                                  RenderBlock (anonymous) at (0,0) size 12x12
+                                    RenderText at (0,-47) size 12x106
+                                      text run at (0,-47) width 12: &quot;+&quot;
+                              RenderMathMLSquareRoot {msqrt} at (27,0) size 98x21
+                                RenderMathMLBlock (anonymous, flex) at (0,0) size 17x21
+                                  RenderMathMLRadicalOperator (anonymous) at (0,0) size 17x21
+                                    RenderMathMLBlock (anonymous, flex) at (0,0) size 13x20
+                                      RenderBlock (anonymous) at (0,0) size 13x20
+                                        RenderText at (0,-56) size 13x106
+                                          text run at (0,-56) width 13: &quot;\x{221A}&quot;
+                                RenderMathMLRootWrapper at (17,2) size 81x19
+                                  RenderMathMLToken {mn} at (0,2) size 8x12
+                                    RenderMathMLBlock (anonymous, flex) at (0,0) size 8x12
+                                      RenderBlock (anonymous) at (0,0) size 8x12
+                                        RenderText {#text} at (0,-46) size 8x106
+                                          text run at (0,-46) width 8: &quot;1&quot;
+                                  RenderMathMLOperator {mo} at (8,3) size 20x12
+                                    RenderMathMLBlock (anonymous, flex) at (3,0) size 13x12
+                                      RenderBlock (anonymous) at (0,0) size 12x12
+                                        RenderText at (0,-47) size 12x106
+                                          text run at (0,-47) width 12: &quot;+&quot;
+                                  RenderMathMLSquareRoot {msqrt} at (27,0) size 54x18
+                                    RenderMathMLBlock (anonymous, flex) at (0,0) size 17x18
+                                      RenderMathMLRadicalOperator (anonymous) at (0,0) size 17x18
+                                        RenderMathMLBlock (anonymous, flex) at (0,0) size 13x17
+                                          RenderBlock (anonymous) at (0,0) size 13x17
+                                            RenderText at (0,-56) size 13x106
+                                              text run at (0,-56) width 13: &quot;\x{221A}&quot;
+                                    RenderMathMLRootWrapper at (17,2) size 37x16
+                                      RenderMathMLToken {mn} at (0,0) size 8x12
+                                        RenderMathMLBlock (anonymous, flex) at (0,0) size 8x12
+                                          RenderBlock (anonymous) at (0,0) size 8x12
+                                            RenderText {#text} at (0,-46) size 8x106
+                                              text run at (0,-46) width 8: &quot;1&quot;
+                                      RenderMathMLOperator {mo} at (8,1) size 20x12
+                                        RenderMathMLBlock (anonymous, flex) at (3,0) size 13x12
+                                          RenderBlock (anonymous) at (0,0) size 12x12
+                                            RenderText at (0,-47) size 12x106
+                                              text run at (0,-47) width 12: &quot;+&quot;
+                                      RenderMathMLToken {mi} at (27,4) size 10x8 [padding: 0 2 0 0]
+                                        RenderMathMLBlock (anonymous, flex) at (0,0) size 8x8
+                                          RenderBlock (anonymous) at (0,0) size 8x8
+                                            RenderText {#text} at (0,-50) size 8x106
+                                              text run at (0,-50) width 8: &quot;x&quot;
+      RenderMathMLMath {math} at (0,68) size 784x62 [padding: 0 1 0 1]
+        RenderMathMLRoot {mroot} at (339,0) size 53x53
+          RenderMathMLRootWrapper at (4,10) size 21x43
+            RenderMathMLSpace {mspace} at (0,0) size 20x10 [bgcolor=#008000]
+          RenderMathMLBlock (anonymous, flex) at (15,0) size 18x53
+            RenderMathMLRadicalOperator (anonymous) at (0,0) size 17x53
+              RenderMathMLBlock (anonymous, flex) at (0,0) size 13x52
+                RenderBlock (anonymous) at (0,0) size 13x52
+                  RenderText at (0,-56) size 13x106
+                    text run at (0,-56) width 13: &quot;\x{221A}&quot;
+          RenderMathMLRootWrapper at (32,2) size 21x51
+            RenderMathMLSpace {mspace} at (0,0) size 20x50 [bgcolor=#FF0000]
+        RenderMathMLRoot {mroot} at (392,30) size 53x31
+          RenderMathMLRootWrapper at (4,7) size 21x24
+            RenderMathMLSpace {mspace} at (0,0) size 20x5 [bgcolor=#0000FF]
+          RenderMathMLBlock (anonymous, flex) at (15,0) size 18x31
+            RenderMathMLRadicalOperator (anonymous) at (0,0) size 17x31
+              RenderMathMLBlock (anonymous, flex) at (0,0) size 13x30
+                RenderBlock (anonymous) at (0,0) size 13x30
+                  RenderText at (0,-56) size 13x106
+                    text run at (0,-56) width 13: &quot;\x{221A}&quot;
+          RenderMathMLRootWrapper at (32,2) size 21x29
+            RenderMathMLSpace {mspace} at (0,0) size 20x20 [bgcolor=#FF0000]
+      RenderMathMLMath {math} at (0,145) size 784x91 [padding: 0 1 0 1]
+        RenderMathMLRoot {mroot} at (339,0) size 53x82
+          RenderMathMLRootWrapper at (4,0) size 21x82
+            RenderMathMLSpace {mspace} at (0,0) size 20x50 [bgcolor=#008000]
+          RenderMathMLBlock (anonymous, flex) at (15,0) size 18x82
+            RenderMathMLRadicalOperator (anonymous) at (0,29) size 17x53
+              RenderMathMLBlock (anonymous, flex) at (0,0) size 13x52
+                RenderBlock (anonymous) at (0,0) size 13x52
+                  RenderText at (0,-56) size 13x106
+                    text run at (0,-56) width 13: &quot;\x{221A}&quot;
+          RenderMathMLRootWrapper at (32,31) size 21x51
+            RenderMathMLSpace {mspace} at (0,0) size 20x50 [bgcolor=#FF0000]
+        RenderMathMLRoot {mroot} at (392,52) size 53x38
+          RenderMathMLRootWrapper at (4,0) size 21x38
+            RenderMathMLSpace {mspace} at (0,0) size 20x20 [bgcolor=#0000FF]
+          RenderMathMLBlock (anonymous, flex) at (15,0) size 18x38
+            RenderMathMLRadicalOperator (anonymous) at (0,8) size 17x30
+              RenderMathMLBlock (anonymous, flex) at (0,0) size 13x30
+                RenderBlock (anonymous) at (0,0) size 13x30
+                  RenderText at (0,-56) size 13x106
+                    text run at (0,-56) width 13: &quot;\x{221A}&quot;
+          RenderMathMLRootWrapper at (32,9) size 21x29
+            RenderMathMLSpace {mspace} at (0,0) size 20x20 [bgcolor=#FF0000]
</ins><span class="cx">Property changes on: trunk/LayoutTests/platform/mac/mathml/opentype/roots-LatinModern-expected.txt
</span><span class="cx">___________________________________________________________________
</span></span></pre></div>
<a id="svneolstyle"></a>
<div class="addfile"><h4>Added: svn:eol-style</h4></div>
<a id="trunkLayoutTestsplatformwinTestExpectations"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/platform/win/TestExpectations (170004 => 170005)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/platform/win/TestExpectations        2014-06-16 09:09:21 UTC (rev 170004)
+++ trunk/LayoutTests/platform/win/TestExpectations        2014-06-16 10:07:32 UTC (rev 170005)
</span><span class="lines">@@ -2818,3 +2818,6 @@
</span><span class="cx"> webkit.org/b/72828 mathml/opentype/horizontal-LatinModern.html [ Failure ]
</span><span class="cx"> webkit.org/b/72828 mathml/opentype/opentype-stretchy-horizontal.html [ Failure ]
</span><span class="cx"> webkit.org/b/72828 mathml/opentype/horizontal-LatinModern-munderover.html [ Failure ]
</span><ins>+webkit.org/b/119038 mathml/opentype/roots-LatinModern.html [ Failure ]
+webkit.org/b/119038 mathml/presentation/mo-stretch.html [ Failure ]
+webkit.org/b/119038 mathml/presentation/roots.xhtml [ Failure ]
</ins></span></pre></div>
<a id="trunkLayoutTestsplatformwinmathmlopentyperootsLatinModernexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/platform/win/mathml/opentype/roots-LatinModern-expected.txt (0 => 170005)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/platform/win/mathml/opentype/roots-LatinModern-expected.txt                                (rev 0)
+++ trunk/LayoutTests/platform/win/mathml/opentype/roots-LatinModern-expected.txt        2014-06-16 10:07:32 UTC (rev 170005)
</span><span class="lines">@@ -0,0 +1,184 @@
</span><ins>+layer at (0,0) size 800x600
+  RenderView at (0,0) size 800x600
+layer at (0,0) size 800x259
+  RenderBlock {HTML} at (0,0) size 800x260
+    RenderBody {BODY} at (8,8) size 784x236
+      RenderMathMLMath {math} at (0,0) size 784x53 [padding: 0 1 0 1]
+        RenderMathMLRow {mrow} at (232,0) size 320x53
+          RenderMathMLSquareRoot {msqrt} at (0,0) size 319x53
+            RenderMathMLBlock (anonymous, flex) at (0,0) size 17x53
+              RenderMathMLRadicalOperator (anonymous) at (0,0) size 17x53
+                RenderMathMLBlock (anonymous, flex) at (0,0) size 13x53
+                  RenderBlock (anonymous) at (0,0) size 13x53
+                    RenderText at (0,-56) size 13x106
+                      text run at (0,-56) width 13: &quot;\x{221A}&quot;
+            RenderMathMLRootWrapper at (17,2) size 302x51
+              RenderMathMLToken {mn} at (0,12) size 8x12
+                RenderMathMLBlock (anonymous, flex) at (0,0) size 8x12
+                  RenderBlock (anonymous) at (0,0) size 8x12
+                    RenderText {#text} at (0,-46) size 8x106
+                      text run at (0,-46) width 8: &quot;1&quot;
+              RenderMathMLOperator {mo} at (8,13) size 20x12
+                RenderMathMLBlock (anonymous, flex) at (3,0) size 13x12
+                  RenderBlock (anonymous) at (0,0) size 12x12
+                    RenderText at (0,-47) size 12x106
+                      text run at (0,-47) width 12: &quot;+&quot;
+              RenderMathMLSquareRoot {msqrt} at (27,0) size 275x51
+                RenderMathMLBlock (anonymous, flex) at (0,0) size 17x51
+                  RenderMathMLRadicalOperator (anonymous) at (0,0) size 17x51
+                    RenderMathMLBlock (anonymous, flex) at (0,0) size 13x51
+                      RenderBlock (anonymous) at (0,0) size 13x51
+                        RenderText at (0,-56) size 13x106
+                          text run at (0,-56) width 13: &quot;\x{221A}&quot;
+                RenderMathMLRootWrapper at (17,2) size 258x49
+                  RenderMathMLToken {mn} at (0,10) size 8x12
+                    RenderMathMLBlock (anonymous, flex) at (0,0) size 8x12
+                      RenderBlock (anonymous) at (0,0) size 8x12
+                        RenderText {#text} at (0,-46) size 8x106
+                          text run at (0,-46) width 8: &quot;1&quot;
+                  RenderMathMLOperator {mo} at (8,11) size 20x12
+                    RenderMathMLBlock (anonymous, flex) at (3,0) size 13x12
+                      RenderBlock (anonymous) at (0,0) size 12x12
+                        RenderText at (0,-47) size 12x106
+                          text run at (0,-47) width 12: &quot;+&quot;
+                  RenderMathMLSquareRoot {msqrt} at (27,0) size 231x49
+                    RenderMathMLBlock (anonymous, flex) at (0,0) size 17x49
+                      RenderMathMLRadicalOperator (anonymous) at (0,0) size 17x49
+                        RenderMathMLBlock (anonymous, flex) at (0,0) size 13x48
+                          RenderBlock (anonymous) at (0,0) size 13x48
+                            RenderText at (0,-56) size 13x106
+                              text run at (0,-56) width 13: &quot;\x{221A}&quot;
+                    RenderMathMLRootWrapper at (17,2) size 214x47
+                      RenderMathMLToken {mn} at (0,8) size 8x12
+                        RenderMathMLBlock (anonymous, flex) at (0,0) size 8x12
+                          RenderBlock (anonymous) at (0,0) size 8x12
+                            RenderText {#text} at (0,-46) size 8x106
+                              text run at (0,-46) width 8: &quot;1&quot;
+                      RenderMathMLOperator {mo} at (8,9) size 20x12
+                        RenderMathMLBlock (anonymous, flex) at (3,0) size 13x12
+                          RenderBlock (anonymous) at (0,0) size 12x12
+                            RenderText at (0,-47) size 12x106
+                              text run at (0,-47) width 12: &quot;+&quot;
+                      RenderMathMLSquareRoot {msqrt} at (27,0) size 187x41
+                        RenderMathMLBlock (anonymous, flex) at (0,0) size 17x41
+                          RenderMathMLRadicalOperator (anonymous) at (0,0) size 17x41
+                            RenderMathMLBlock (anonymous, flex) at (0,0) size 13x40
+                              RenderBlock (anonymous) at (0,0) size 13x40
+                                RenderText at (0,-56) size 13x106
+                                  text run at (0,-56) width 13: &quot;\x{221A}&quot;
+                        RenderMathMLRootWrapper at (17,2) size 169x39
+                          RenderMathMLToken {mn} at (0,6) size 8x12
+                            RenderMathMLBlock (anonymous, flex) at (0,0) size 8x12
+                              RenderBlock (anonymous) at (0,0) size 8x12
+                                RenderText {#text} at (0,-46) size 8x106
+                                  text run at (0,-46) width 8: &quot;1&quot;
+                          RenderMathMLOperator {mo} at (8,7) size 20x12
+                            RenderMathMLBlock (anonymous, flex) at (3,0) size 13x12
+                              RenderBlock (anonymous) at (0,0) size 12x12
+                                RenderText at (0,-47) size 12x106
+                                  text run at (0,-47) width 12: &quot;+&quot;
+                          RenderMathMLSquareRoot {msqrt} at (27,0) size 142x31
+                            RenderMathMLBlock (anonymous, flex) at (0,0) size 17x31
+                              RenderMathMLRadicalOperator (anonymous) at (0,0) size 17x31
+                                RenderMathMLBlock (anonymous, flex) at (0,0) size 13x30
+                                  RenderBlock (anonymous) at (0,0) size 13x30
+                                    RenderText at (0,-56) size 13x106
+                                      text run at (0,-56) width 13: &quot;\x{221A}&quot;
+                            RenderMathMLRootWrapper at (17,2) size 125x29
+                              RenderMathMLToken {mn} at (0,4) size 8x12
+                                RenderMathMLBlock (anonymous, flex) at (0,0) size 8x12
+                                  RenderBlock (anonymous) at (0,0) size 8x12
+                                    RenderText {#text} at (0,-46) size 8x106
+                                      text run at (0,-46) width 8: &quot;1&quot;
+                              RenderMathMLOperator {mo} at (8,5) size 20x12
+                                RenderMathMLBlock (anonymous, flex) at (3,0) size 13x12
+                                  RenderBlock (anonymous) at (0,0) size 12x12
+                                    RenderText at (0,-47) size 12x106
+                                      text run at (0,-47) width 12: &quot;+&quot;
+                              RenderMathMLSquareRoot {msqrt} at (27,0) size 98x21
+                                RenderMathMLBlock (anonymous, flex) at (0,0) size 17x21
+                                  RenderMathMLRadicalOperator (anonymous) at (0,0) size 17x21
+                                    RenderMathMLBlock (anonymous, flex) at (0,0) size 13x20
+                                      RenderBlock (anonymous) at (0,0) size 13x20
+                                        RenderText at (0,-56) size 13x106
+                                          text run at (0,-56) width 13: &quot;\x{221A}&quot;
+                                RenderMathMLRootWrapper at (17,2) size 81x19
+                                  RenderMathMLToken {mn} at (0,2) size 8x12
+                                    RenderMathMLBlock (anonymous, flex) at (0,0) size 8x12
+                                      RenderBlock (anonymous) at (0,0) size 8x12
+                                        RenderText {#text} at (0,-46) size 8x106
+                                          text run at (0,-46) width 8: &quot;1&quot;
+                                  RenderMathMLOperator {mo} at (8,3) size 20x12
+                                    RenderMathMLBlock (anonymous, flex) at (3,0) size 13x12
+                                      RenderBlock (anonymous) at (0,0) size 12x12
+                                        RenderText at (0,-47) size 12x106
+                                          text run at (0,-47) width 12: &quot;+&quot;
+                                  RenderMathMLSquareRoot {msqrt} at (27,0) size 54x18
+                                    RenderMathMLBlock (anonymous, flex) at (0,0) size 17x18
+                                      RenderMathMLRadicalOperator (anonymous) at (0,0) size 17x18
+                                        RenderMathMLBlock (anonymous, flex) at (0,0) size 13x17
+                                          RenderBlock (anonymous) at (0,0) size 13x17
+                                            RenderText at (0,-56) size 13x106
+                                              text run at (0,-56) width 13: &quot;\x{221A}&quot;
+                                    RenderMathMLRootWrapper at (17,2) size 37x16
+                                      RenderMathMLToken {mn} at (0,0) size 8x12
+                                        RenderMathMLBlock (anonymous, flex) at (0,0) size 8x12
+                                          RenderBlock (anonymous) at (0,0) size 8x12
+                                            RenderText {#text} at (0,-46) size 8x106
+                                              text run at (0,-46) width 8: &quot;1&quot;
+                                      RenderMathMLOperator {mo} at (8,1) size 20x12
+                                        RenderMathMLBlock (anonymous, flex) at (3,0) size 13x12
+                                          RenderBlock (anonymous) at (0,0) size 12x12
+                                            RenderText at (0,-47) size 12x106
+                                              text run at (0,-47) width 12: &quot;+&quot;
+                                      RenderMathMLToken {mi} at (27,4) size 10x8 [padding: 0 2 0 0]
+                                        RenderMathMLBlock (anonymous, flex) at (0,0) size 8x8
+                                          RenderBlock (anonymous) at (0,0) size 8x8
+                                            RenderText {#text} at (0,-50) size 8x106
+                                              text run at (0,-50) width 8: &quot;x&quot;
+      RenderMathMLMath {math} at (0,68) size 784x62 [padding: 0 1 0 1]
+        RenderMathMLRoot {mroot} at (339,0) size 53x53
+          RenderMathMLRootWrapper at (4,10) size 21x43
+            RenderMathMLSpace {mspace} at (0,0) size 20x10 [bgcolor=#008000]
+          RenderMathMLBlock (anonymous, flex) at (15,0) size 18x53
+            RenderMathMLRadicalOperator (anonymous) at (0,0) size 17x53
+              RenderMathMLBlock (anonymous, flex) at (0,0) size 13x52
+                RenderBlock (anonymous) at (0,0) size 13x52
+                  RenderText at (0,-56) size 13x106
+                    text run at (0,-56) width 13: &quot;\x{221A}&quot;
+          RenderMathMLRootWrapper at (32,2) size 21x51
+            RenderMathMLSpace {mspace} at (0,0) size 20x50 [bgcolor=#FF0000]
+        RenderMathMLRoot {mroot} at (392,30) size 53x31
+          RenderMathMLRootWrapper at (4,7) size 21x24
+            RenderMathMLSpace {mspace} at (0,0) size 20x5 [bgcolor=#0000FF]
+          RenderMathMLBlock (anonymous, flex) at (15,0) size 18x31
+            RenderMathMLRadicalOperator (anonymous) at (0,0) size 17x31
+              RenderMathMLBlock (anonymous, flex) at (0,0) size 13x30
+                RenderBlock (anonymous) at (0,0) size 13x30
+                  RenderText at (0,-56) size 13x106
+                    text run at (0,-56) width 13: &quot;\x{221A}&quot;
+          RenderMathMLRootWrapper at (32,2) size 21x29
+            RenderMathMLSpace {mspace} at (0,0) size 20x20 [bgcolor=#FF0000]
+      RenderMathMLMath {math} at (0,145) size 784x91 [padding: 0 1 0 1]
+        RenderMathMLRoot {mroot} at (339,0) size 53x82
+          RenderMathMLRootWrapper at (4,0) size 21x82
+            RenderMathMLSpace {mspace} at (0,0) size 20x50 [bgcolor=#008000]
+          RenderMathMLBlock (anonymous, flex) at (15,0) size 18x82
+            RenderMathMLRadicalOperator (anonymous) at (0,29) size 17x53
+              RenderMathMLBlock (anonymous, flex) at (0,0) size 13x52
+                RenderBlock (anonymous) at (0,0) size 13x52
+                  RenderText at (0,-56) size 13x106
+                    text run at (0,-56) width 13: &quot;\x{221A}&quot;
+          RenderMathMLRootWrapper at (32,31) size 21x51
+            RenderMathMLSpace {mspace} at (0,0) size 20x50 [bgcolor=#FF0000]
+        RenderMathMLRoot {mroot} at (392,52) size 53x38
+          RenderMathMLRootWrapper at (4,0) size 21x38
+            RenderMathMLSpace {mspace} at (0,0) size 20x20 [bgcolor=#0000FF]
+          RenderMathMLBlock (anonymous, flex) at (15,0) size 18x38
+            RenderMathMLRadicalOperator (anonymous) at (0,8) size 17x30
+              RenderMathMLBlock (anonymous, flex) at (0,0) size 13x30
+                RenderBlock (anonymous) at (0,0) size 13x30
+                  RenderText at (0,-56) size 13x106
+                    text run at (0,-56) width 13: &quot;\x{221A}&quot;
+          RenderMathMLRootWrapper at (32,9) size 21x29
+            RenderMathMLSpace {mspace} at (0,0) size 20x20 [bgcolor=#FF0000]
</ins><span class="cx">Property changes on: trunk/LayoutTests/platform/win/mathml/opentype/roots-LatinModern-expected.txt
</span><span class="cx">___________________________________________________________________
</span></span></pre></div>
<a id="svneolstyle"></a>
<div class="addfile"><h4>Added: svn:eol-style</h4></div>
<a id="trunkSourceWebCoreCMakeListstxt"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/CMakeLists.txt (170004 => 170005)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/CMakeLists.txt        2014-06-16 09:09:21 UTC (rev 170004)
+++ trunk/Source/WebCore/CMakeLists.txt        2014-06-16 10:07:32 UTC (rev 170005)
</span><span class="lines">@@ -2384,6 +2384,7 @@
</span><span class="cx">     rendering/mathml/RenderMathMLMath.cpp
</span><span class="cx">     rendering/mathml/RenderMathMLMenclose.cpp
</span><span class="cx">     rendering/mathml/RenderMathMLOperator.cpp
</span><ins>+    rendering/mathml/RenderMathMLRadicalOperator.cpp
</ins><span class="cx">     rendering/mathml/RenderMathMLRoot.cpp
</span><span class="cx">     rendering/mathml/RenderMathMLRow.cpp
</span><span class="cx">     rendering/mathml/RenderMathMLScripts.cpp
</span></span></pre></div>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (170004 => 170005)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2014-06-16 09:09:21 UTC (rev 170004)
+++ trunk/Source/WebCore/ChangeLog        2014-06-16 10:07:32 UTC (rev 170005)
</span><span class="lines">@@ -1,3 +1,77 @@
</span><ins>+2014-06-16  Frédéric Wang  &lt;fred.wang@free.fr&gt;
+
+        Draw radicals with glyphs for better rendering
+        https://bugs.webkit.org/show_bug.cgi?id=119038
+
+        Reviewed by Chris Fleizach.
+
+        We rewrite RenderMathMLRoot in order to fix bugs with SVG transforms and dynamic modification of children and allow drawing with an OpenType MATH table.
+        The drawing of the radical sign (without the top bar) is now moved to a RenderMathMLRadicalOperator class inheriting from RenderMathMLOperator.
+        This class fallbacks to the original drawing with graphic primitives if an OpenType MATH table is not available.
+
+        Tests: mathml/opentype/roots-LatinModern.html
+               mathml/presentation/mroot-transform.html
+
+        * CMakeLists.txt: add files to build system.
+        * WebCore.vcxproj/WebCore.vcxproj: ditto.
+        * WebCore.vcxproj/WebCore.vcxproj.filters: ditto.
+        * WebCore.xcodeproj/project.pbxproj: ditto
+        * css/mathml.css: remove rules for msqrt/mroot. The &quot;script level&quot; in mroot is not incremented by 2 as specified in the spec.
+        (math, mrow, mfenced, merror, mphantom, mstyle, menclose):
+        (mroot &gt; *:last-child):
+        (math, mrow, mfenced, msqrt, mroot, merror, mphantom, mstyle, menclose): Deleted.
+        (msqrt &gt; *): Deleted.
+        (mroot): Deleted. This rule was causing bug 126516.
+        (mroot &gt; * + *): Deleted.
+        * rendering/RenderObject.h: Add two new isRenderMathML* functions for dynamic casting.
+        (WebCore::RenderObject::isRenderMathMLRadicalOperator):
+        (WebCore::RenderObject::isRenderMathMLRootWrapper):
+        * rendering/mathml/RenderMathMLOperator.cpp: Accept a set of operator dictionary flags, all disabled by default. This is to allow anonymous radicas, which don't have any flag.
+        isFencedOperator() is now replaced with the more general isAnonymous() since we allow anonymous radical operator fors msqrt/mroot.
+        (WebCore::RenderMathMLOperator::RenderMathMLOperator):
+        (WebCore::RenderMathMLOperator::setOperatorFlagFromAttribute):
+        (WebCore::RenderMathMLOperator::setOperatorPropertiesFromOpDictEntry):
+        (WebCore::RenderMathMLOperator::SetOperatorProperties):
+        (WebCore::RenderMathMLOperator::updateTokenContent):
+        * rendering/mathml/RenderMathMLOperator.h: Allow class to be overriden, redefine the anonymous constructor, remove isFencedOperator().
+        * rendering/mathml/RenderMathMLRadicalOperator.cpp: Added.
+        (WebCore::RenderMathMLRadicalOperator::RenderMathMLRadicalOperator):
+        (WebCore::RenderMathMLRadicalOperator::stretchTo):
+        (WebCore::RenderMathMLRadicalOperator::SetOperatorProperties):
+        (WebCore::RenderMathMLRadicalOperator::computePreferredLogicalWidths):
+        (WebCore::RenderMathMLRadicalOperator::computeLogicalHeight):
+        (WebCore::RenderMathMLRadicalOperator::paint):
+        (WebCore::RenderMathMLRadicalOperator::trailingSpaceError):
+        * rendering/mathml/RenderMathMLRadicalOperator.h: Added.
+        * rendering/mathml/RenderMathMLRoot.cpp: Rewritten. Some parts to use graphic primitives are moved to RenderMathMLRadicalOperator.cpp.
+        (WebCore::RenderMathMLRoot::RenderMathMLRoot):
+        (WebCore::RenderMathMLRoot::baseWrapper):
+        (WebCore::RenderMathMLRoot::radicalWrapper):
+        (WebCore::RenderMathMLRoot::indexWrapper):
+        (WebCore::RenderMathMLRoot::radicalOperator):
+        (WebCore::RenderMathMLRoot::restructureWrappers):
+        (WebCore::RenderMathMLRoot::addChild):
+        (WebCore::RenderMathMLRoot::styleDidChange):
+        (WebCore::RenderMathMLRoot::updateFromElement):
+        (WebCore::RenderMathMLRoot::updateStyle):
+        (WebCore::RenderMathMLRoot::firstLineBaseline):
+        (WebCore::RenderMathMLRoot::layout):
+        (WebCore::RenderMathMLRoot::paint):
+        (WebCore::RenderMathMLRootWrapper::createAnonymousWrapper):
+        (WebCore::RenderMathMLRootWrapper::removeChildWithoutRestructuring):
+        (WebCore::RenderMathMLRootWrapper::removeChild):
+        (WebCore::RenderMathMLRoot::paddingTop): Deleted.
+        (WebCore::RenderMathMLRoot::paddingBottom): Deleted.
+        (WebCore::RenderMathMLRoot::paddingLeft): Deleted.
+        (WebCore::RenderMathMLRoot::paddingRight): Deleted.
+        (WebCore::RenderMathMLRoot::paddingBefore): Deleted.
+        (WebCore::RenderMathMLRoot::paddingAfter): Deleted.
+        (WebCore::RenderMathMLRoot::paddingStart): Deleted.
+        (WebCore::RenderMathMLRoot::paddingEnd): Deleted.
+        (WebCore::RenderMathMLRoot::index): Deleted.
+        * rendering/mathml/RenderMathMLRoot.h: Rewritten.
+        (WebCore::RenderMathMLRootWrapper::RenderMathMLRootWrapper):
+
</ins><span class="cx"> 2014-06-16  Krzysztof Czech  &lt;k.czech@samsung.com&gt;
</span><span class="cx"> 
</span><span class="cx">         [EFL] Platform support for WebSpeech feature.
</span></span></pre></div>
<a id="trunkSourceWebCoreWebCorevcxprojWebCorevcxproj"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/WebCore.vcxproj/WebCore.vcxproj (170004 => 170005)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/WebCore.vcxproj/WebCore.vcxproj        2014-06-16 09:09:21 UTC (rev 170004)
+++ trunk/Source/WebCore/WebCore.vcxproj/WebCore.vcxproj        2014-06-16 10:07:32 UTC (rev 170005)
</span><span class="lines">@@ -11422,6 +11422,7 @@
</span><span class="cx">     &lt;ClCompile Include=&quot;..\rendering\mathml\RenderMathMLMath.cpp&quot; /&gt;
</span><span class="cx">     &lt;ClCompile Include=&quot;..\rendering\mathml\RenderMathMLMenclose.cpp&quot; /&gt;
</span><span class="cx">     &lt;ClCompile Include=&quot;..\rendering\mathml\RenderMathMLOperator.cpp&quot; /&gt;
</span><ins>+    &lt;ClCompile Include=&quot;..\rendering\mathml\RenderMathMLRadicalOperator.cpp&quot; /&gt;
</ins><span class="cx">     &lt;ClCompile Include=&quot;..\rendering\mathml\RenderMathMLRoot.cpp&quot; /&gt;
</span><span class="cx">     &lt;ClCompile Include=&quot;..\rendering\mathml\RenderMathMLRow.cpp&quot; /&gt;
</span><span class="cx">     &lt;ClCompile Include=&quot;..\rendering\mathml\RenderMathMLSpace.cpp&quot; /&gt;
</span><span class="lines">@@ -20133,6 +20134,7 @@
</span><span class="cx">     &lt;ClInclude Include=&quot;..\rendering\mathml\RenderMathMLMath.h&quot; /&gt;
</span><span class="cx">     &lt;ClInclude Include=&quot;..\rendering\mathml\RenderMathMLMenclose.h&quot; /&gt;
</span><span class="cx">     &lt;ClInclude Include=&quot;..\rendering\mathml\RenderMathMLOperator.h&quot; /&gt;
</span><ins>+    &lt;ClInclude Include=&quot;..\rendering\mathml\RenderMathMLRadicalOperator.h&quot; /&gt;
</ins><span class="cx">     &lt;ClInclude Include=&quot;..\rendering\mathml\RenderMathMLRoot.h&quot; /&gt;
</span><span class="cx">     &lt;ClInclude Include=&quot;..\rendering\mathml\RenderMathMLRow.h&quot; /&gt;
</span><span class="cx">     &lt;ClInclude Include=&quot;..\rendering\mathml\RenderMathMLSpace.h&quot; /&gt;
</span></span></pre></div>
<a id="trunkSourceWebCoreWebCorevcxprojWebCorevcxprojfilters"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/WebCore.vcxproj/WebCore.vcxproj.filters (170004 => 170005)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/WebCore.vcxproj/WebCore.vcxproj.filters        2014-06-16 09:09:21 UTC (rev 170004)
+++ trunk/Source/WebCore/WebCore.vcxproj/WebCore.vcxproj.filters        2014-06-16 10:07:32 UTC (rev 170005)
</span><span class="lines">@@ -2742,6 +2742,9 @@
</span><span class="cx">     &lt;ClCompile Include=&quot;..\rendering\mathml\RenderMathMLOperator.cpp&quot;&gt;
</span><span class="cx">       &lt;Filter&gt;rendering\mathml&lt;/Filter&gt;
</span><span class="cx">     &lt;/ClCompile&gt;
</span><ins>+    &lt;ClCompile Include=&quot;..\rendering\mathml\RenderMathMLRadicalOperator.cpp&quot;&gt;
+      &lt;Filter&gt;rendering\mathml&lt;/Filter&gt;
+    &lt;/ClCompile&gt;
</ins><span class="cx">     &lt;ClCompile Include=&quot;..\rendering\mathml\RenderMathMLRoot.cpp&quot;&gt;
</span><span class="cx">       &lt;Filter&gt;rendering\mathml&lt;/Filter&gt;
</span><span class="cx">     &lt;/ClCompile&gt;
</span><span class="lines">@@ -9652,6 +9655,9 @@
</span><span class="cx">     &lt;ClInclude Include=&quot;..\rendering\mathml\RenderMathMLOperator.h&quot;&gt;
</span><span class="cx">       &lt;Filter&gt;rendering\mathml&lt;/Filter&gt;
</span><span class="cx">     &lt;/ClInclude&gt;
</span><ins>+    &lt;ClInclude Include=&quot;..\rendering\mathml\RenderMathMLRadicalOperator.h&quot;&gt;
+      &lt;Filter&gt;rendering\mathml&lt;/Filter&gt;
+    &lt;/ClInclude&gt;
</ins><span class="cx">     &lt;ClInclude Include=&quot;..\rendering\mathml\RenderMathMLRoot.h&quot;&gt;
</span><span class="cx">       &lt;Filter&gt;rendering\mathml&lt;/Filter&gt;
</span><span class="cx">     &lt;/ClInclude&gt;
</span></span></pre></div>
<a id="trunkSourceWebCoreWebCorexcodeprojprojectpbxproj"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj (170004 => 170005)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj        2014-06-16 09:09:21 UTC (rev 170004)
+++ trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj        2014-06-16 10:07:32 UTC (rev 170005)
</span><span class="lines">@@ -1493,6 +1493,8 @@
</span><span class="cx">                 439046DE12DA25E800AF80A2 /* RenderMathMLMath.h in Headers */ = {isa = PBXBuildFile; fileRef = 439046CA12DA25E800AF80A2 /* RenderMathMLMath.h */; };
</span><span class="cx">                 439046DF12DA25E800AF80A2 /* RenderMathMLOperator.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 439046CB12DA25E800AF80A2 /* RenderMathMLOperator.cpp */; };
</span><span class="cx">                 439046E012DA25E800AF80A2 /* RenderMathMLOperator.h in Headers */ = {isa = PBXBuildFile; fileRef = 439046CC12DA25E800AF80A2 /* RenderMathMLOperator.h */; };
</span><ins>+                439046DF12DA25E800BF80A3 /* RenderMathMLRadicalOperator.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 439046CB12DA25E800BF80A3 /* RenderMathMLRadicalOperator.cpp */; };
+                439046E012DA25E800BF80A3 /* RenderMathMLRadicalOperator.h in Headers */ = {isa = PBXBuildFile; fileRef = 439046CC12DA25E800BF80A3 /* RenderMathMLRadicalOperator.h */; };
</ins><span class="cx">                 439046E112DA25E800AF80A2 /* RenderMathMLRoot.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 439046CD12DA25E800AF80A2 /* RenderMathMLRoot.cpp */; };
</span><span class="cx">                 439046E212DA25E800AF80A2 /* RenderMathMLRoot.h in Headers */ = {isa = PBXBuildFile; fileRef = 439046CE12DA25E800AF80A2 /* RenderMathMLRoot.h */; };
</span><span class="cx">                 439046E312DA25E800AF80A2 /* RenderMathMLRow.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 439046CF12DA25E800AF80A2 /* RenderMathMLRow.cpp */; };
</span><span class="lines">@@ -8514,6 +8516,8 @@
</span><span class="cx">                 439046CA12DA25E800AF80A2 /* RenderMathMLMath.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = RenderMathMLMath.h; path = mathml/RenderMathMLMath.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 439046CB12DA25E800AF80A2 /* RenderMathMLOperator.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = RenderMathMLOperator.cpp; path = mathml/RenderMathMLOperator.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 439046CC12DA25E800AF80A2 /* RenderMathMLOperator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = RenderMathMLOperator.h; path = mathml/RenderMathMLOperator.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><ins>+                439046CB12DA25E800BF80A3 /* RenderMathMLRadicalOperator.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = RenderMathMLRadicalOperator.cpp; path = mathml/RenderMathMLRadicalOperator.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
+                439046CC12DA25E800BF80A3 /* RenderMathMLRadicalOperator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = RenderMathMLRadicalOperator.h; path = mathml/RenderMathMLRadicalOperator.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</ins><span class="cx">                 439046CD12DA25E800AF80A2 /* RenderMathMLRoot.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = RenderMathMLRoot.cpp; path = mathml/RenderMathMLRoot.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 439046CE12DA25E800AF80A2 /* RenderMathMLRoot.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = RenderMathMLRoot.h; path = mathml/RenderMathMLRoot.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 439046CF12DA25E800AF80A2 /* RenderMathMLRow.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = RenderMathMLRow.cpp; path = mathml/RenderMathMLRow.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="lines">@@ -15577,6 +15581,8 @@
</span><span class="cx">                                 A208E222A56A0C7575F2A72E /* RenderMathMLMenclose.h */,
</span><span class="cx">                                 439046CB12DA25E800AF80A2 /* RenderMathMLOperator.cpp */,
</span><span class="cx">                                 439046CC12DA25E800AF80A2 /* RenderMathMLOperator.h */,
</span><ins>+                                439046CB12DA25E800BF80A3 /* RenderMathMLRadicalOperator.cpp */,
+                                439046CC12DA25E800BF80A3 /* RenderMathMLRadicalOperator.h */,
</ins><span class="cx">                                 439046CD12DA25E800AF80A2 /* RenderMathMLRoot.cpp */,
</span><span class="cx">                                 439046CE12DA25E800AF80A2 /* RenderMathMLRoot.h */,
</span><span class="cx">                                 439046CF12DA25E800AF80A2 /* RenderMathMLRow.cpp */,
</span><span class="lines">@@ -25498,6 +25504,7 @@
</span><span class="cx">                                 07AB996F18DA3C740018771E /* RTCConfigurationPrivate.h in Headers */,
</span><span class="cx">                                 439046DE12DA25E800AF80A2 /* RenderMathMLMath.h in Headers */,
</span><span class="cx">                                 439046E012DA25E800AF80A2 /* RenderMathMLOperator.h in Headers */,
</span><ins>+                                439046E012DA25E800BF80A3 /* RenderMathMLRadicalOperator.h in Headers */,
</ins><span class="cx">                                 439046E212DA25E800AF80A2 /* RenderMathMLRoot.h in Headers */,
</span><span class="cx">                                 439046E412DA25E800AF80A2 /* RenderMathMLRow.h in Headers */,
</span><span class="cx">                                 439046E812DA25E800AF80A2 /* RenderMathMLScripts.h in Headers */,
</span><span class="lines">@@ -28962,6 +28969,7 @@
</span><span class="cx">                                 439046DD12DA25E800AF80A2 /* RenderMathMLMath.cpp in Sources */,
</span><span class="cx">                                 3571883EEF618793751E4089 /* RenderMathMLMenclose.cpp in Sources */,
</span><span class="cx">                                 439046DF12DA25E800AF80A2 /* RenderMathMLOperator.cpp in Sources */,
</span><ins>+                                439046DF12DA25E800BF80A3 /* RenderMathMLRadicalOperator.cpp in Sources */,
</ins><span class="cx">                                 439046E112DA25E800AF80A2 /* RenderMathMLRoot.cpp in Sources */,
</span><span class="cx">                                 439046E312DA25E800AF80A2 /* RenderMathMLRow.cpp in Sources */,
</span><span class="cx">                                 439046E712DA25E800AF80A2 /* RenderMathMLScripts.cpp in Sources */,
</span></span></pre></div>
<a id="trunkSourceWebCorecssmathmlcss"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/css/mathml.css (170004 => 170005)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/css/mathml.css        2014-06-16 09:09:21 UTC (rev 170004)
+++ trunk/Source/WebCore/css/mathml.css        2014-06-16 10:07:32 UTC (rev 170005)
</span><span class="lines">@@ -37,12 +37,9 @@
</span><span class="cx">     display: -webkit-inline-flex !important;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-math, mrow, mfenced, msqrt, mroot, merror, mphantom, mstyle, menclose {
</del><ins>+math, mrow, mfenced, merror, mphantom, mstyle, menclose {
</ins><span class="cx">     -webkit-align-items: baseline;
</span><span class="cx"> }
</span><del>-msqrt &gt; * { /* This rule is needed because of &lt;msqrt&gt;'s anonymous &lt;mrow&gt;. */
-    -webkit-align-self: baseline;
-}
</del><span class="cx"> 
</span><span class="cx"> mo, mfrac, munder, mover, munderover {
</span><span class="cx">     -webkit-flex-direction: column;
</span><span class="lines">@@ -85,6 +82,9 @@
</span><span class="cx"> msub &gt; * + *, msup &gt; * + *, msubsup &gt; * + *, mmultiscripts &gt; * + *, munder &gt; * + *, mover &gt; * + *, munderover &gt; * + * {
</span><span class="cx">     font-size: 0.75em; /* FIXME: MathML standard is 0.71em */
</span><span class="cx"> }
</span><ins>+mroot &gt; *:last-child {
+    font-size: 0.5625em; /* This 0.75^2 since the scriptlevel is incremented by 2 in the index. */
+}
</ins><span class="cx"> 
</span><span class="cx"> mi {
</span><span class="cx">     -webkit-padding-end: 0.1em;
</span><span class="lines">@@ -96,19 +96,6 @@
</span><span class="cx">     -webkit-margin-start: 0.14em; /* This is larger than 0.1em because the child's font-size is smaller than the &lt;msubsup&gt;'s. */
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-mroot {
-    position: relative;
-}
-mroot &gt; * + * {
-    font-size: 0.75em;
-    position: absolute;
-    left: 0;
-    top: 0;
-    padding-right: 0.4em;
-    padding-left: 0.2em;
-    padding-bottom: 0.35em;
-}
-
</del><span class="cx"> math[mathvariant=&quot;normal&quot;], mstyle[mathvariant=&quot;normal&quot;], mo[mathvariant=&quot;normal&quot;], mn[mathvariant=&quot;normal&quot;], mi[mathvariant=&quot;normal&quot;], mtext[mathvariant=&quot;normal&quot;], mspace[mathvariant=&quot;normal&quot;], ms[mathvariant=&quot;normal&quot;] {
</span><span class="cx">     font-style: normal;
</span><span class="cx">     font-weight: normal;
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingRenderObjecth"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/RenderObject.h (170004 => 170005)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/RenderObject.h        2014-06-16 09:09:21 UTC (rev 170004)
+++ trunk/Source/WebCore/rendering/RenderObject.h        2014-06-16 10:07:32 UTC (rev 170005)
</span><span class="lines">@@ -410,11 +410,13 @@
</span><span class="cx">     virtual bool isRenderMathMLBlock() const { return false; }
</span><span class="cx">     virtual bool isRenderMathMLTable() const { return false; }
</span><span class="cx">     virtual bool isRenderMathMLOperator() const { return false; }
</span><ins>+    virtual bool isRenderMathMLRadicalOperator() const { return false; }
</ins><span class="cx">     virtual bool isRenderMathMLRow() const { return false; }
</span><span class="cx">     virtual bool isRenderMathMLMath() const { return false; }
</span><span class="cx">     virtual bool isRenderMathMLFenced() const { return false; }
</span><span class="cx">     virtual bool isRenderMathMLFraction() const { return false; }
</span><span class="cx">     virtual bool isRenderMathMLRoot() const { return false; }
</span><ins>+    virtual bool isRenderMathMLRootWrapper() const { return false; }
</ins><span class="cx">     virtual bool isRenderMathMLSpace() const { return false; }
</span><span class="cx">     virtual bool isRenderMathMLSquareRoot() const { return false; }
</span><span class="cx">     virtual bool isRenderMathMLScripts() const { return false; }
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingmathmlRenderMathMLOperatorcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/mathml/RenderMathMLOperator.cpp (170004 => 170005)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/mathml/RenderMathMLOperator.cpp        2014-06-16 09:09:21 UTC (rev 170004)
+++ trunk/Source/WebCore/rendering/mathml/RenderMathMLOperator.cpp        2014-06-16 10:07:32 UTC (rev 170005)
</span><span class="lines">@@ -1145,21 +1145,21 @@
</span><span class="cx">     updateTokenContent();
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-RenderMathMLOperator::RenderMathMLOperator(Document&amp; document, PassRef&lt;RenderStyle&gt; style, const String&amp; operatorString, MathMLOperatorDictionary::Form form, MathMLOperatorDictionary::Flag flag)
</del><ins>+RenderMathMLOperator::RenderMathMLOperator(Document&amp; document, PassRef&lt;RenderStyle&gt; style, const String&amp; operatorString, MathMLOperatorDictionary::Form form, unsigned short flags)
</ins><span class="cx">     : RenderMathMLToken(document, std::move(style))
</span><span class="cx">     , m_stretchHeightAboveBaseline(0)
</span><span class="cx">     , m_stretchDepthBelowBaseline(0)
</span><span class="cx">     , m_operator(0)
</span><span class="cx">     , m_isVertical(true)
</span><span class="cx">     , m_operatorForm(form)
</span><del>-    , m_operatorFlags(flag)
</del><ins>+    , m_operatorFlags(flags)
</ins><span class="cx"> {
</span><span class="cx">     updateTokenContent(operatorString);
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void RenderMathMLOperator::setOperatorFlagFromAttribute(MathMLOperatorDictionary::Flag flag, const QualifiedName&amp; name)
</span><span class="cx"> {
</span><del>-    ASSERT(!isFencedOperator());
</del><ins>+    ASSERT(!isAnonymous());
</ins><span class="cx">     const AtomicString&amp; attributeValue = element().fastGetAttribute(name);
</span><span class="cx">     if (attributeValue == &quot;true&quot;)
</span><span class="cx">         m_operatorFlags |= flag;
</span><span class="lines">@@ -1170,8 +1170,8 @@
</span><span class="cx"> 
</span><span class="cx"> void RenderMathMLOperator::setOperatorPropertiesFromOpDictEntry(const MathMLOperatorDictionary::Entry* entry)
</span><span class="cx"> {
</span><del>-    // If this operator has been created by RenderMathMLFenced, we preserve the Fence and Separator properties.
-    if (isFencedOperator())
</del><ins>+    // If this operator is anonymous, we preserve the Fence and Separator properties. This is to handle the case of RenderMathMLFenced.
+    if (isAnonymous())
</ins><span class="cx">         m_operatorFlags = (m_operatorFlags &amp; (MathMLOperatorDictionary::Fence | MathMLOperatorDictionary::Separator)) | entry-&gt;flags;
</span><span class="cx">     else
</span><span class="cx">         m_operatorFlags = entry-&gt;flags;
</span><span class="lines">@@ -1188,7 +1188,7 @@
</span><span class="cx"> 
</span><span class="cx">     // We determine the form of the operator.
</span><span class="cx">     bool explicitForm = true;
</span><del>-    if (!isFencedOperator()) {
</del><ins>+    if (!isAnonymous()) {
</ins><span class="cx">         const AtomicString&amp; form = element().fastGetAttribute(MathMLNames::formAttr);
</span><span class="cx">         if (form == &quot;prefix&quot;)
</span><span class="cx">             m_operatorForm = MathMLOperatorDictionary::Prefix;
</span><span class="lines">@@ -1211,7 +1211,7 @@
</span><span class="cx">     // We determine the default values of the operator properties.
</span><span class="cx"> 
</span><span class="cx">     // First we initialize with the default values for unknown operators.
</span><del>-    if (isFencedOperator())
</del><ins>+    if (isAnonymous())
</ins><span class="cx">         m_operatorFlags &amp;= MathMLOperatorDictionary::Fence | MathMLOperatorDictionary::Separator; // This resets all but the Fence and Separator properties.
</span><span class="cx">     else
</span><span class="cx">         m_operatorFlags = 0; // This resets all the operator properties.
</span><span class="lines">@@ -1238,7 +1238,7 @@
</span><span class="cx">     }
</span><span class="cx"> #undef MATHML_OPDICT_SIZE
</span><span class="cx"> 
</span><del>-    if (!isFencedOperator()) {
</del><ins>+    if (!isAnonymous()) {
</ins><span class="cx">         // Finally, we make the attribute values override the default.
</span><span class="cx"> 
</span><span class="cx">         setOperatorFlagFromAttribute(MathMLOperatorDictionary::Fence, MathMLNames::fenceAttr);
</span><span class="lines">@@ -1386,13 +1386,13 @@
</span><span class="cx"> 
</span><span class="cx"> void RenderMathMLOperator::updateTokenContent(const String&amp; operatorString)
</span><span class="cx"> {
</span><del>-    ASSERT(isFencedOperator());
</del><ins>+    ASSERT(isAnonymous());
</ins><span class="cx">     rebuildTokenContent(operatorString);
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void RenderMathMLOperator::updateTokenContent()
</span><span class="cx"> {
</span><del>-    ASSERT(!isFencedOperator());
</del><ins>+    ASSERT(!isAnonymous());
</ins><span class="cx">     rebuildTokenContent(element().textContent());
</span><span class="cx"> }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingmathmlRenderMathMLOperatorh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/mathml/RenderMathMLOperator.h (170004 => 170005)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/mathml/RenderMathMLOperator.h        2014-06-16 09:09:21 UTC (rev 170004)
+++ trunk/Source/WebCore/rendering/mathml/RenderMathMLOperator.h        2014-06-16 10:07:32 UTC (rev 170005)
</span><span class="lines">@@ -58,12 +58,12 @@
</span><span class="cx"> 
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-class RenderMathMLOperator final : public RenderMathMLToken {
</del><ins>+class RenderMathMLOperator : public RenderMathMLToken {
</ins><span class="cx"> public:
</span><span class="cx">     RenderMathMLOperator(MathMLElement&amp;, PassRef&lt;RenderStyle&gt;);
</span><del>-    RenderMathMLOperator(Document&amp;, PassRef&lt;RenderStyle&gt;, const String&amp; operatorString, MathMLOperatorDictionary::Form, MathMLOperatorDictionary::Flag);
</del><ins>+    RenderMathMLOperator(Document&amp;, PassRef&lt;RenderStyle&gt;, const String&amp; operatorString, MathMLOperatorDictionary::Form, unsigned short flags = 0);
</ins><span class="cx"> 
</span><del>-    void stretchTo(LayoutUnit heightAboveBaseline, LayoutUnit depthBelowBaseline);
</del><ins>+    virtual void stretchTo(LayoutUnit heightAboveBaseline, LayoutUnit depthBelowBaseline);
</ins><span class="cx">     void stretchTo(LayoutUnit width);
</span><span class="cx">     LayoutUnit stretchSize() const { return m_isVertical ? m_stretchHeightAboveBaseline + m_stretchDepthBelowBaseline : m_stretchWidth; }
</span><span class="cx">     
</span><span class="lines">@@ -73,17 +73,16 @@
</span><span class="cx"> 
</span><span class="cx">     void updateStyle() override final;
</span><span class="cx"> 
</span><del>-    void paint(PaintInfo&amp;, const LayoutPoint&amp;);
</del><ins>+    virtual void paint(PaintInfo&amp;, const LayoutPoint&amp;);
</ins><span class="cx"> 
</span><span class="cx">     void updateTokenContent(const String&amp; operatorString);
</span><span class="cx">     void updateTokenContent() override final;
</span><span class="cx">     void updateOperatorProperties();
</span><span class="cx"> 
</span><del>-private:
</del><ins>+protected:
</ins><span class="cx">     virtual const char* renderName() const override { return isAnonymous() ? &quot;RenderMathMLOperator (anonymous)&quot; : &quot;RenderMathMLOperator&quot;; }
</span><span class="cx">     virtual void paintChildren(PaintInfo&amp; forSelf, const LayoutPoint&amp;, PaintInfo&amp; forChild, bool usePrintRect) override;
</span><span class="cx">     virtual bool isRenderMathMLOperator() const override { return true; }
</span><del>-    bool isFencedOperator() { return isAnonymous(); }
</del><span class="cx">     // The following operators are invisible: U+2061 FUNCTION APPLICATION, U+2062 INVISIBLE TIMES, U+2063 INVISIBLE SEPARATOR, U+2064 INVISIBLE PLUS.
</span><span class="cx">     bool isInvisibleOperator() const { return 0x2061 &lt;= m_operator &amp;&amp; m_operator &lt;= 0x2064; }
</span><span class="cx">     virtual bool isChildAllowed(const RenderObject&amp;, const RenderStyle&amp;) const override;
</span><span class="lines">@@ -187,7 +186,7 @@
</span><span class="cx"> 
</span><span class="cx">     void setOperatorFlagFromAttribute(MathMLOperatorDictionary::Flag, const QualifiedName&amp;);
</span><span class="cx">     void setOperatorPropertiesFromOpDictEntry(const MathMLOperatorDictionary::Entry*);
</span><del>-    void SetOperatorProperties();
</del><ins>+    virtual void SetOperatorProperties();
</ins><span class="cx"> };
</span><span class="cx"> 
</span><span class="cx"> RENDER_OBJECT_TYPE_CASTS(RenderMathMLOperator, isRenderMathMLOperator())
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingmathmlRenderMathMLRadicalOperatorcpp"></a>
<div class="addfile"><h4>Added: trunk/Source/WebCore/rendering/mathml/RenderMathMLRadicalOperator.cpp (0 => 170005)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/mathml/RenderMathMLRadicalOperator.cpp                                (rev 0)
+++ trunk/Source/WebCore/rendering/mathml/RenderMathMLRadicalOperator.cpp        2014-06-16 10:07:32 UTC (rev 170005)
</span><span class="lines">@@ -0,0 +1,207 @@
</span><ins>+/*
+ * Copyright (C) 2014 Frédéric Wang (fred.wang@free.fr). All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * &quot;AS IS&quot; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include &quot;config.h&quot;
+
+#if ENABLE(MATHML)
+#include &quot;RenderMathMLRadicalOperator.h&quot;
+
+namespace WebCore {
+
+using namespace MathMLNames;
+
+static const UChar gRadicalCharacter = 0x221A;
+
+// This class relies on the RenderMathMLOperator class to draw a radical symbol.
+// This does not work well when an OpenType MATH font is not available.
+// In that case, we fallback to the old implementation of RenderMathMLRoot.cpp with graphic primitives.
+
+// Normal width of the front of the radical sign, before the base &amp; overbar (em)
+const float gFrontWidthEms = 0.75f;
+// Horizontal position of the bottom point of the radical (* frontWidth)
+const float gRadicalBottomPointXFront = 0.5f;
+// Lower the radical sign's bottom point (px)
+const int gRadicalBottomPointLower = 3;
+// Horizontal position of the top left point of the radical &quot;dip&quot; (* frontWidth)
+const float gRadicalDipLeftPointXFront = 0.8f;
+// Vertical position of the top left point of a sqrt radical &quot;dip&quot; (* baseHeight)
+const float gSqrtRadicalDipLeftPointYPos = 0.5f;
+// Vertical shift of the left end point of the radical (em)
+const float gRadicalLeftEndYShiftEms = 0.05f;
+
+// Radical line thickness (em)
+const float gRadicalLineThicknessEms = 0.02f;
+// Radical thick line thickness (em)
+const float gRadicalThickLineThicknessEms = 0.1f;
+
+RenderMathMLRadicalOperator::RenderMathMLRadicalOperator(Document&amp; document, PassRef&lt;RenderStyle&gt; style)
+    : RenderMathMLOperator(document, std::move(style), String(&amp;gRadicalCharacter, 1), MathMLOperatorDictionary::Prefix)
+{
+}
+
+void RenderMathMLRadicalOperator::stretchTo(LayoutUnit heightAboveBaseline, LayoutUnit depthBelowBaseline)
+{
+    const auto&amp; primaryFontData = style().font().primaryFont();
+    if (!primaryFontData || !primaryFontData-&gt;mathData()) {
+        // If we do not have an OpenType MATH font, we always make the radical depth a bit larger than the target.
+        depthBelowBaseline += gRadicalBottomPointLower;
+    }
+
+    RenderMathMLOperator::stretchTo(heightAboveBaseline, depthBelowBaseline);
+}
+
+void RenderMathMLRadicalOperator::SetOperatorProperties()
+{
+    RenderMathMLOperator::SetOperatorProperties();
+    // We remove spacing around the radical symbol.
+    m_leadingSpace = 0;
+    m_trailingSpace = 0;
+}
+
+void RenderMathMLRadicalOperator::computePreferredLogicalWidths()
+{
+    ASSERT(preferredLogicalWidthsDirty());
+
+    const auto&amp; primaryFontData = style().font().primaryFont();
+    if (primaryFontData &amp;&amp; primaryFontData-&gt;mathData()) {
+        RenderMathMLOperator::computePreferredLogicalWidths();
+        return;
+    }
+
+    // If we do not have an OpenType MATH font, the front width is just given by the gFrontWidthEms constant.
+    int frontWidth = lroundf(gFrontWidthEms * style().fontSize());
+    m_minPreferredLogicalWidth = frontWidth;
+    m_maxPreferredLogicalWidth = frontWidth;
+}
+
+void RenderMathMLRadicalOperator::computeLogicalHeight(LayoutUnit logicalHeight, LayoutUnit logicalTop, LogicalExtentComputedValues&amp; computedValues) const
+{
+    const auto&amp; primaryFontData = style().font().primaryFont();
+    if (primaryFontData &amp;&amp; primaryFontData-&gt;mathData()) {
+        RenderMathMLOperator::computeLogicalHeight(logicalHeight, logicalTop, computedValues);
+        return;
+    }
+
+    // If we do not have an OpenType MATH font, the logical height is always the stretch size.
+    logicalHeight = stretchSize();
+    RenderBox::computeLogicalHeight(logicalHeight, logicalTop, computedValues);
+}
+
+void RenderMathMLRadicalOperator::paint(PaintInfo&amp; info, const LayoutPoint&amp; paintOffset)
+{
+    if (info.context-&gt;paintingDisabled() || info.phase != PaintPhaseForeground || style().visibility() != VISIBLE)
+        return;
+
+    const auto&amp; primaryFontData = style().font().primaryFont();
+    if (primaryFontData &amp;&amp; primaryFontData-&gt;mathData()) {
+        RenderMathMLOperator::paint(info, paintOffset);
+        return;
+    }
+
+    // If we do not have an OpenType MATH font, we paint the radical sign with graphic primitives.
+    IntPoint adjustedPaintOffset = roundedIntPoint(paintOffset + location() + contentBoxRect().location());
+    int frontWidth = lroundf(gFrontWidthEms * style().fontSize());
+    int startX = adjustedPaintOffset.x() + frontWidth;
+    int baseHeight = stretchSize() - gRadicalBottomPointLower;
+
+    float radicalDipLeftPointYPos = gSqrtRadicalDipLeftPointYPos * baseHeight;
+
+    FloatPoint overbarLeftPoint(startX, adjustedPaintOffset.y());
+    FloatPoint bottomPoint(startX - gRadicalBottomPointXFront * frontWidth, adjustedPaintOffset.y() + baseHeight + gRadicalBottomPointLower);
+    FloatPoint dipLeftPoint(startX - gRadicalDipLeftPointXFront * frontWidth, adjustedPaintOffset.y() + radicalDipLeftPointYPos);
+    FloatPoint leftEnd(startX - frontWidth, dipLeftPoint.y() + gRadicalLeftEndYShiftEms * style().fontSize());
+
+    GraphicsContextStateSaver stateSaver(*info.context);
+
+    info.context-&gt;setStrokeThickness(gRadicalLineThicknessEms * style().fontSize());
+    info.context-&gt;setStrokeStyle(SolidStroke);
+    info.context-&gt;setStrokeColor(style().visitedDependentColor(CSSPropertyColor), ColorSpaceDeviceRGB);
+    info.context-&gt;setLineJoin(MiterJoin);
+    info.context-&gt;setMiterLimit(style().fontSize());
+
+    Path root;
+
+    root.moveTo(FloatPoint(overbarLeftPoint.x(), adjustedPaintOffset.y()));
+    // draw from top left corner to bottom point of radical
+    root.addLineTo(bottomPoint);
+    // draw from bottom point to top of left part of radical base &quot;dip&quot;
+    root.addLineTo(dipLeftPoint);
+    // draw to end
+    root.addLineTo(leftEnd);
+
+    info.context-&gt;strokePath(root);
+
+    GraphicsContextStateSaver maskStateSaver(*info.context);
+
+    // Build a mask to draw the thick part of the root.
+    Path mask;
+
+    mask.moveTo(overbarLeftPoint);
+    mask.addLineTo(bottomPoint);
+    mask.addLineTo(dipLeftPoint);
+    mask.addLineTo(FloatPoint(2 * dipLeftPoint.x() - leftEnd.x(), 2 * dipLeftPoint.y() - leftEnd.y()));
+
+    info.context-&gt;clip(mask);
+
+    // Draw the thick part of the root.
+    info.context-&gt;setStrokeThickness(gRadicalThickLineThicknessEms * style().fontSize());
+    info.context-&gt;setLineCap(SquareCap);
+
+    Path line;
+    line.moveTo(bottomPoint);
+    line.addLineTo(dipLeftPoint);
+
+    info.context-&gt;strokePath(line);
+}
+
+LayoutUnit RenderMathMLRadicalOperator::trailingSpaceError()
+{
+    const auto&amp; primaryFontData = style().font().primaryFont();
+    if (!primaryFontData || !primaryFontData-&gt;mathData())
+        return 0;
+
+    // For OpenType MATH font, the layout is based on RenderMathOperator for which the preferred width is sometimes overestimated (bug https://bugs.webkit.org/show_bug.cgi?id=130326).
+    // Hence we determine the error in the logical width with respect to the actual width of the glyph(s) used to paint the radical.
+    LayoutUnit width = logicalWidth();
+
+    if (m_stretchyData.mode() == DrawNormal) {
+        GlyphData data = style().font().glyphDataForCharacter(m_operator, !style().isLeftToRightDirection());
+        return width - advanceForGlyph(data);
+    }
+
+    if (m_stretchyData.mode() == DrawSizeVariant)
+        return width - advanceForGlyph(m_stretchyData.variant());
+
+    float assemblyWidth = advanceForGlyph(m_stretchyData.top());
+    assemblyWidth = std::max(assemblyWidth, advanceForGlyph(m_stretchyData.bottom()));
+    assemblyWidth = std::max(assemblyWidth, advanceForGlyph(m_stretchyData.extension()));
+    if (m_stretchyData.middle().glyph)
+        assemblyWidth = std::max(assemblyWidth, advanceForGlyph(m_stretchyData.middle()));
+    return width - assemblyWidth;
+}
+
+}
+
+#endif
</ins><span class="cx">Property changes on: trunk/Source/WebCore/rendering/mathml/RenderMathMLRadicalOperator.cpp
</span><span class="cx">___________________________________________________________________
</span></span></pre></div>
<a id="svneolstyle"></a>
<div class="addfile"><h4>Added: svn:eol-style</h4></div>
<a id="trunkSourceWebCorerenderingmathmlRenderMathMLRadicalOperatorh"></a>
<div class="addfile"><h4>Added: trunk/Source/WebCore/rendering/mathml/RenderMathMLRadicalOperator.h (0 => 170005)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/mathml/RenderMathMLRadicalOperator.h                                (rev 0)
+++ trunk/Source/WebCore/rendering/mathml/RenderMathMLRadicalOperator.h        2014-06-16 10:07:32 UTC (rev 170005)
</span><span class="lines">@@ -0,0 +1,56 @@
</span><ins>+/*
+ * Copyright (C) 2014 Frédéric Wang (fred.wang@free.fr). All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * &quot;AS IS&quot; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef RenderMathMLOperator_h
+#define RenderMathMLRadicalOperator_h
+
+#if ENABLE(MATHML)
+
+#include &quot;PaintInfo.h&quot;
+#include &quot;RenderMathMLOperator.h&quot;
+
+namespace WebCore {
+
+class RenderMathMLRadicalOperator final : public RenderMathMLOperator {
+public:
+    RenderMathMLRadicalOperator(Document&amp;, PassRef&lt;RenderStyle&gt;);
+    virtual void stretchTo(LayoutUnit heightAboveBaseline, LayoutUnit depthBelowBaseline);
+    virtual void computePreferredLogicalWidths() override;
+    virtual void computeLogicalHeight(LayoutUnit logicalHeight, LayoutUnit logicalTop, LogicalExtentComputedValues&amp;) const override;
+    virtual void paint(PaintInfo&amp;, const LayoutPoint&amp; paintOffset) override;
+    LayoutUnit trailingSpaceError();
+
+private:
+    virtual bool isRenderMathMLRadicalOperator() const override { return true; }
+    virtual const char* renderName() const override { return isAnonymous() ? &quot;RenderMathMLRadicalOperator (anonymous)&quot; : &quot;RenderMathMLRadicalOperator&quot;; }
+    void SetOperatorProperties() override;
+};
+
+RENDER_OBJECT_TYPE_CASTS(RenderMathMLRadicalOperator, isRenderMathMLRadicalOperator())
+
+}
+
+#endif // ENABLE(MATHML)
+#endif // RenderMathMLRadicalOperator_h
</ins><span class="cx">Property changes on: trunk/Source/WebCore/rendering/mathml/RenderMathMLRadicalOperator.h
</span><span class="cx">___________________________________________________________________
</span></span></pre></div>
<a id="svneolstyle"></a>
<div class="addfile"><h4>Added: svn:eol-style</h4></div>
<a id="trunkSourceWebCorerenderingmathmlRenderMathMLRootcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/mathml/RenderMathMLRoot.cpp (170004 => 170005)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/mathml/RenderMathMLRoot.cpp        2014-06-16 09:09:21 UTC (rev 170004)
+++ trunk/Source/WebCore/rendering/mathml/RenderMathMLRoot.cpp        2014-06-16 10:07:32 UTC (rev 170005)
</span><span class="lines">@@ -30,282 +30,339 @@
</span><span class="cx"> 
</span><span class="cx"> #include &quot;RenderMathMLRoot.h&quot;
</span><span class="cx"> 
</span><ins>+#include &quot;FontCache.h&quot;
</ins><span class="cx"> #include &quot;GraphicsContext.h&quot;
</span><span class="cx"> #include &quot;PaintInfo.h&quot;
</span><span class="cx"> #include &quot;RenderIterator.h&quot;
</span><del>-#include &quot;RenderMathMLRow.h&quot;
</del><ins>+#include &quot;RenderMathMLRadicalOperator.h&quot;
</ins><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="cx">     
</span><del>-// FIXME: This whole file should be changed to work with various writing modes. See https://bugs.webkit.org/show_bug.cgi?id=48951.
</del><ins>+// RenderMathMLRoot implements drawing of radicals via the &lt;mroot&gt; and &lt;msqrt&gt; elements. For valid MathML elements, the DOM is
+//
+// &lt;mroot&gt; Base Index &lt;/mroot&gt;
+// &lt;msqrt&gt; Child1 Child2 ... ChildN &lt;/msqrt&gt;
+//
+// and the structure of the render tree will be
+//
+// IndexWrapper RadicalWrapper BaseWrapper
+//
+// where RadicalWrapper contains an &lt;mo&gt;&amp;#x221A;&lt;/mo&gt;.
+// For &lt;mroot&gt;, the IndexWrapper and BaseWrapper should contain exactly one child (Index and Base respectively).
+// For &lt;msqrt&gt;, the IndexWrapper should be empty and the BaseWrapper can contain any number of children (Child1, ... ChildN).
+//
+// In order to accept invalid markup and to handle &lt;mroot&gt; and &lt;msqrt&gt; consistently, we will allow any number of children in the BaseWrapper of &lt;mroot&gt; too.
+// We will allow the IndexWrapper to be empty and it will always contain the last child of the &lt;mroot&gt; if there are at least 2 elements.
</ins><span class="cx"> 
</span><del>-// Threshold above which the radical shape is modified to look nice with big bases (em)
-const float gThresholdBaseHeightEms = 1.5f;
-// Normal width of the front of the radical sign, before the base &amp; overbar (em)
-const float gFrontWidthEms = 0.75f;
-// Gap between the base and overbar (em)
-const float gSpaceAboveEms = 0.2f;
-// Horizontal position of the bottom point of the radical (* frontWidth)
-const float gRadicalBottomPointXFront = 0.5f;
-// Lower the radical sign's bottom point (px)
-const int gRadicalBottomPointLower = 3;
-// Horizontal position of the top left point of the radical &quot;dip&quot; (* frontWidth)
-const float gRadicalDipLeftPointXFront = 0.8f;
-// Vertical position of the top left point of a sqrt radical &quot;dip&quot; (* baseHeight)
-const float gSqrtRadicalDipLeftPointYPos = 0.5f;
-// Vertical position of the top left point of an nth root radical &quot;dip&quot; (* baseHeight)
-const float gRootRadicalDipLeftPointYPos = 0.625f;
-// Vertical shift of the left end point of the radical (em)
-const float gRadicalLeftEndYShiftEms = 0.05f;
-// Additional bottom root padding if baseHeight &gt; threshold (em)
-const float gBigRootBottomPaddingEms = 0.2f;
-
-// Radical line thickness (em)
-const float gRadicalLineThicknessEms = 0.02f;
-// Radical thick line thickness (em)
-const float gRadicalThickLineThicknessEms = 0.1f;
-    
</del><span class="cx"> RenderMathMLRoot::RenderMathMLRoot(Element&amp; element, PassRef&lt;RenderStyle&gt; style)
</span><span class="cx">     : RenderMathMLBlock(element, std::move(style))
</span><del>-    , m_intrinsicPaddingBefore(0)
-    , m_intrinsicPaddingAfter(0)
-    , m_intrinsicPaddingStart(0)
-    , m_intrinsicPaddingEnd(0)
</del><span class="cx"> {
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> RenderMathMLRoot::RenderMathMLRoot(Document&amp; document, PassRef&lt;RenderStyle&gt; style)
</span><span class="cx">     : RenderMathMLBlock(document, std::move(style))
</span><del>-    , m_intrinsicPaddingBefore(0)
-    , m_intrinsicPaddingAfter(0)
-    , m_intrinsicPaddingStart(0)
-    , m_intrinsicPaddingEnd(0)
</del><span class="cx"> {
</span><span class="cx"> }
</span><del>-LayoutUnit RenderMathMLRoot::paddingTop() const
</del><ins>+
+RenderMathMLRootWrapper* RenderMathMLRoot::baseWrapper() const
</ins><span class="cx"> {
</span><del>-    LayoutUnit result = computedCSSPaddingTop();
-    switch (style().writingMode()) {
-    case TopToBottomWritingMode:
-        return result + m_intrinsicPaddingBefore;
-    case BottomToTopWritingMode:
-        return result + m_intrinsicPaddingAfter;
-    case LeftToRightWritingMode:
-    case RightToLeftWritingMode:
-        return result + (style().isLeftToRightDirection() ? m_intrinsicPaddingStart : m_intrinsicPaddingEnd);
-    }
-    ASSERT_NOT_REACHED();
-    return result;
</del><ins>+    ASSERT(!isEmpty());
+    return toRenderMathMLRootWrapper(lastChild());
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-LayoutUnit RenderMathMLRoot::paddingBottom() const
</del><ins>+RenderMathMLBlock* RenderMathMLRoot::radicalWrapper() const
</ins><span class="cx"> {
</span><del>-    LayoutUnit result = computedCSSPaddingBottom();
-    switch (style().writingMode()) {
-    case TopToBottomWritingMode:
-        return result + m_intrinsicPaddingAfter;
-    case BottomToTopWritingMode:
-        return result + m_intrinsicPaddingBefore;
-    case LeftToRightWritingMode:
-    case RightToLeftWritingMode:
-        return result + (style().isLeftToRightDirection() ? m_intrinsicPaddingEnd : m_intrinsicPaddingStart);
-    }
-    ASSERT_NOT_REACHED();
-    return result;
</del><ins>+    ASSERT(!isEmpty());
+    return toRenderMathMLBlock(lastChild()-&gt;previousSibling());
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-LayoutUnit RenderMathMLRoot::paddingLeft() const
</del><ins>+RenderMathMLRootWrapper* RenderMathMLRoot::indexWrapper() const
</ins><span class="cx"> {
</span><del>-    LayoutUnit result = computedCSSPaddingLeft();
-    switch (style().writingMode()) {
-    case LeftToRightWritingMode:
-        return result + m_intrinsicPaddingBefore;
-    case RightToLeftWritingMode:
-        return result + m_intrinsicPaddingAfter;
-    case TopToBottomWritingMode:
-    case BottomToTopWritingMode:
-        return result + (style().isLeftToRightDirection() ? m_intrinsicPaddingStart : m_intrinsicPaddingEnd);
-    }
-    ASSERT_NOT_REACHED();
-    return result;
</del><ins>+    ASSERT(!isEmpty());
+    return isRenderMathMLSquareRoot() ? nullptr : toRenderMathMLRootWrapper(firstChild());
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-LayoutUnit RenderMathMLRoot::paddingRight() const
</del><ins>+RenderMathMLRadicalOperator* RenderMathMLRoot::radicalOperator() const
</ins><span class="cx"> {
</span><del>-    LayoutUnit result = computedCSSPaddingRight();
-    switch (style().writingMode()) {
-    case RightToLeftWritingMode:
-        return result + m_intrinsicPaddingBefore;
-    case LeftToRightWritingMode:
-        return result + m_intrinsicPaddingAfter;
-    case TopToBottomWritingMode:
-    case BottomToTopWritingMode:
-        return result + (style().isLeftToRightDirection() ? m_intrinsicPaddingEnd : m_intrinsicPaddingStart);
-    }
-    ASSERT_NOT_REACHED();
-    return result;
</del><ins>+    ASSERT(!isEmpty());
+    return toRenderMathMLRadicalOperator(radicalWrapper()-&gt;firstChild());
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-LayoutUnit RenderMathMLRoot::paddingBefore() const
</del><ins>+void RenderMathMLRoot::restructureWrappers()
</ins><span class="cx"> {
</span><del>-    return computedCSSPaddingBefore() + m_intrinsicPaddingBefore;
</del><ins>+    ASSERT(!isEmpty());
+
+    auto base = baseWrapper();
+    auto index = indexWrapper();
+    auto radical = radicalWrapper();
+
+    // For visual consistency with the initial state, we remove the radical when the base/index wrappers become empty.
+    if (base-&gt;isEmpty() &amp;&amp; (!index || index-&gt;isEmpty())) {
+        if (!radical-&gt;isEmpty()) {
+            auto child = radicalOperator();
+            radical-&gt;removeChild(*child);
+            child-&gt;destroy();
+        }
+        // FIXME: early return!!!
+    }
+
+    if (radical-&gt;isEmpty()) {
+        // We create the radical operator.
+        RenderPtr&lt;RenderMathMLRadicalOperator&gt; radicalOperator = createRenderer&lt;RenderMathMLRadicalOperator&gt;(document(), RenderStyle::createAnonymousStyleWithDisplay(&amp;style(), FLEX));
+        radicalOperator-&gt;initializeStyle();
+        radical-&gt;addChild(radicalOperator.leakPtr());
+    }
+
+    if (isRenderMathMLSquareRoot())
+        return;
+
+    if (auto childToMove = base-&gt;lastChild()) {
+        // We move the last child of the base wrapper into the index wrapper if the index wrapper is empty and the base wrapper has at least two children.
+        if (childToMove-&gt;previousSibling() &amp;&amp; index-&gt;isEmpty()) {
+            base-&gt;removeChildWithoutRestructuring(*childToMove);
+            index-&gt;addChild(childToMove);
+        }
+    }
+
+    if (auto childToMove = index-&gt;firstChild()) {
+        // We move the first child of the index wrapper into the base wrapper if:
+        // - either the index wrapper has at least two children.
+        // - or the base wrapper is empty but the index wrapper is not.
+        if (childToMove-&gt;nextSibling() || base-&gt;isEmpty()) {
+            index-&gt;removeChildWithoutRestructuring(*childToMove);
+            base-&gt;addChild(childToMove);
+        }
+    }
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-LayoutUnit RenderMathMLRoot::paddingAfter() const
</del><ins>+void RenderMathMLRoot::addChild(RenderObject* newChild, RenderObject* beforeChild)
</ins><span class="cx"> {
</span><del>-    return computedCSSPaddingAfter() + m_intrinsicPaddingAfter;
</del><ins>+    if (isEmpty()) {
+        if (!isRenderMathMLSquareRoot()) {
+            // We add the IndexWrapper.
+            RenderMathMLBlock::addChild(RenderMathMLRootWrapper::createAnonymousWrapper(this).leakPtr());
+        }
+
+        // We create the radicalWrapper
+        RenderMathMLBlock::addChild(RenderMathMLBlock::createAnonymousMathMLBlock().leakPtr());
+
+        // We create the BaseWrapper.
+        RenderMathMLBlock::addChild(RenderMathMLRootWrapper::createAnonymousWrapper(this).leakPtr());
+
+        updateStyle();
+    }
+
+    // We insert the child.
+    auto base = baseWrapper();
+    auto index = indexWrapper();
+    RenderElement* actualParent;
+    RenderElement* actualBeforeChild;
+    if (isRenderMathMLSquareRoot()) {
+        // For square root, we always insert the child into the base wrapper.
+        actualParent = base;
+        if (beforeChild &amp;&amp; beforeChild-&gt;parent() == base)
+            actualBeforeChild = toRenderElement(beforeChild);
+        else
+            actualBeforeChild = nullptr;
+    } else {
+        // For mroot, we insert the child into the parent of beforeChild, or at the end of the index. The wrapper structure is reorganize below.
+        actualParent = beforeChild ? beforeChild-&gt;parent() : nullptr;
+        if (actualParent == base || actualParent == index)
+            actualBeforeChild = toRenderElement(beforeChild);
+        else {
+            actualParent = index;
+            actualBeforeChild = nullptr;
+        }
+    }
+    actualParent-&gt;addChild(newChild, actualBeforeChild);
+    restructureWrappers();
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-LayoutUnit RenderMathMLRoot::paddingStart() const
</del><ins>+void RenderMathMLRoot::styleDidChange(StyleDifference diff, const RenderStyle* oldStyle)
</ins><span class="cx"> {
</span><del>-    return computedCSSPaddingStart() + m_intrinsicPaddingStart;
</del><ins>+    RenderMathMLBlock::styleDidChange(diff, oldStyle);
+    if (!isEmpty())
+        updateStyle();
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-LayoutUnit RenderMathMLRoot::paddingEnd() const
</del><ins>+void RenderMathMLRoot::updateFromElement()
</ins><span class="cx"> {
</span><del>-    return computedCSSPaddingEnd() + m_intrinsicPaddingEnd;
</del><ins>+    RenderMathMLBlock::updateFromElement();
+    if (!isEmpty())
+        updateStyle();
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-void RenderMathMLRoot::addChild(RenderObject* newChild, RenderObject* beforeChild)
</del><ins>+void RenderMathMLRoot::updateStyle()
</ins><span class="cx"> {
</span><del>-    // Insert an implicit &lt;mrow&gt; for &lt;mroot&gt; as well as &lt;msqrt&gt;, to ensure firstChild() will have a box
-    // to measure and store a glyph-based height for preferredLogicalHeightAfterSizing.
-    if (!firstChild())
-        RenderMathMLBlock::addChild(RenderMathMLRow::createAnonymousWithParentRenderer(*this).leakPtr());
-    
-    // An &lt;mroot&gt;'s index has { position: absolute }.
-    if (newChild-&gt;style().position() == AbsolutePosition)
-        RenderMathMLBlock::addChild(newChild);
-    else
-        toRenderElement(firstChild())-&gt;addChild(newChild, beforeChild &amp;&amp; beforeChild-&gt;parent() == firstChild() ? beforeChild : 0);
</del><ins>+    ASSERT(!isEmpty());
+
+    // We set some constants to draw the radical, as defined in the OpenType MATH tables.
+
+    m_ruleThickness = 0.05f * style().font().size();
+
+    // FIXME: The recommended default for m_verticalGap in displaystyle is rule thickness + 1/4 x-height (https://bugs.webkit.org/show_bug.cgi?id=118737).
+    m_verticalGap = 11 * m_ruleThickness / 4;
+    m_extraAscender = m_ruleThickness;
+    LayoutUnit kernBeforeDegree = 5 * style().font().size() / 18;
+    LayoutUnit kernAfterDegree = -10 * style().font().size() / 18;
+    m_degreeBottomRaisePercent = 0.6f;
+
+    const auto&amp; primaryFontData = style().font().primaryFont();
+    if (primaryFontData &amp;&amp; primaryFontData-&gt;mathData()) {
+        // FIXME: m_verticalGap should use RadicalDisplayStyleVertical in display mode (https://bugs.webkit.org/show_bug.cgi?id=118737).
+        m_verticalGap = primaryFontData-&gt;mathData()-&gt;getMathConstant(primaryFontData, OpenTypeMathData::RadicalVerticalGap);
+        m_ruleThickness = primaryFontData-&gt;mathData()-&gt;getMathConstant(primaryFontData, OpenTypeMathData::RadicalRuleThickness);
+        m_extraAscender = primaryFontData-&gt;mathData()-&gt;getMathConstant(primaryFontData, OpenTypeMathData::RadicalExtraAscender);
+
+        if (!isRenderMathMLSquareRoot()) {
+            kernBeforeDegree = primaryFontData-&gt;mathData()-&gt;getMathConstant(primaryFontData, OpenTypeMathData::RadicalKernBeforeDegree);
+            kernAfterDegree = primaryFontData-&gt;mathData()-&gt;getMathConstant(primaryFontData, OpenTypeMathData::RadicalKernAfterDegree);
+            m_degreeBottomRaisePercent = primaryFontData-&gt;mathData()-&gt;getMathConstant(primaryFontData, OpenTypeMathData::RadicalDegreeBottomRaisePercent);
+        }
+    }
+
+    // We set the style of the anonymous wrappers.
+
+    auto radical = radicalWrapper();
+    auto radicalStyle = RenderStyle::createAnonymousStyleWithDisplay(&amp;style(), FLEX);
+    radicalStyle.get().setMarginTop(Length(0, Fixed)); // This will be updated in RenderMathMLRoot::layout().
+    radical-&gt;setStyle(std::move(radicalStyle));
+    radical-&gt;setNeedsLayoutAndPrefWidthsRecalc();
+
+    auto base = baseWrapper();
+    auto baseStyle = RenderStyle::createAnonymousStyleWithDisplay(&amp;style(), FLEX);
+    baseStyle.get().setMarginTop(Length(0, Fixed)); // This will be updated in RenderMathMLRoot::layout().
+    baseStyle.get().setAlignItems(AlignBaseline);
+    base-&gt;setStyle(std::move(baseStyle));
+    base-&gt;setNeedsLayoutAndPrefWidthsRecalc();
+
+    if (!isRenderMathMLSquareRoot()) {
+        // For mroot, we also set the style of the index wrapper.
+        auto index = indexWrapper();
+        auto indexStyle = RenderStyle::createAnonymousStyleWithDisplay(&amp;style(), FLEX);
+        indexStyle.get().setMarginTop(Length(0, Fixed)); // This will be updated in RenderMathMLRoot::layout().
+        indexStyle.get().setMarginStart(Length(kernBeforeDegree, Fixed));
+        indexStyle.get().setMarginEnd(Length(kernAfterDegree, Fixed));
+        indexStyle.get().setAlignItems(AlignBaseline);
+        index-&gt;setStyle(std::move(indexStyle));
+        index-&gt;setNeedsLayoutAndPrefWidthsRecalc();
+    }
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-RenderBox* RenderMathMLRoot::index() const
</del><ins>+int RenderMathMLRoot::firstLineBaseline() const
</ins><span class="cx"> {
</span><del>-    if (!firstChild())
-        return 0;
-    RenderObject* index = firstChild()-&gt;nextSibling();
-    if (!index || !index-&gt;isBox())
-        return 0;
-    return toRenderBox(index);
</del><ins>+    if (!isEmpty()) {
+        auto base = baseWrapper();
+        return static_cast&lt;int&gt;(lroundf(base-&gt;firstLineBaseline() + base-&gt;marginTop()));
+    }
+
+    return RenderMathMLBlock::firstLineBaseline();
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void RenderMathMLRoot::layout()
</span><span class="cx"> {
</span><del>-    for (auto&amp; box : childrenOfType&lt;RenderBox&gt;(*this))
-        box.layoutIfNeeded();
</del><ins>+    if (isEmpty()) {
+        RenderMathMLBlock::layout();
+        return;
+    }
</ins><span class="cx"> 
</span><del>-    int baseHeight = firstChild() &amp;&amp; firstChild()-&gt;isBox() ? roundToInt(toRenderBox(firstChild())-&gt;logicalHeight()) : style().fontSize();
-    int frontWidth = lroundf(gFrontWidthEms * style().fontSize());
-    
-    // Base height above which the shape of the root changes
-    float thresholdHeight = gThresholdBaseHeightEms * style().fontSize();
-    if (baseHeight &gt; thresholdHeight &amp;&amp; thresholdHeight) {
-        float shift = std::min&lt;float&gt;((baseHeight - thresholdHeight) / thresholdHeight, 1.0f);
-        m_overbarLeftPointShift = static_cast&lt;int&gt;(shift * gRadicalBottomPointXFront * frontWidth);
-        m_intrinsicPaddingAfter = lroundf(gBigRootBottomPaddingEms * style().fontSize());
-    } else {
-        m_overbarLeftPointShift = 0;
-        m_intrinsicPaddingAfter = 0;
</del><ins>+    // FIXME: It seems that changing the top margin of the base below modifies its logical height and leads to reftest failures.
+    // For now, we workaround that by avoiding to recompute the child margins if they were not reset in updateStyle().
+    auto base = baseWrapper();
+    if (base-&gt;marginTop() &gt; 0) {
+        RenderMathMLBlock::layout();
+        return;
</ins><span class="cx">     }
</span><del>-    
-    int rootPad = lroundf(gSpaceAboveEms * style().fontSize());
-    m_intrinsicPaddingBefore = rootPad;
-    m_indexTop = 0;
-    if (RenderBox* index = this-&gt;index()) {
-        m_intrinsicPaddingStart = roundToInt(index-&gt;maxPreferredLogicalWidth()) + m_overbarLeftPointShift;
</del><span class="cx"> 
</span><del>-        int indexHeight = roundToInt(index-&gt;logicalHeight());
-        int partDipHeight = lroundf((1 - gRootRadicalDipLeftPointYPos) * baseHeight);
-        int rootExtraTop = partDipHeight + indexHeight - (baseHeight + rootPad);
-        if (rootExtraTop &gt; 0)
-            m_intrinsicPaddingBefore += rootExtraTop;
-        else
-            m_indexTop = - rootExtraTop;
-    } else
-        m_intrinsicPaddingStart = frontWidth;
</del><ins>+    // We layout the children.
+    for (RenderObject* child = firstChild(); child; child = child-&gt;nextSibling()) {
+        if (child-&gt;needsLayout())
+            toRenderElement(child)-&gt;layout();
+    }
</ins><span class="cx"> 
</span><del>-    // FIXME: We should rewrite RenderMathMLRoot to rewrite -webkit-flex-order to get rid of the need
-    // for intrinsic padding. See https://bugs.webkit.org/show_bug.cgi?id=107151#c2.
-    // FIXME: We should make it so that the preferred width of RenderMathMLRoots doesn't change during layout.
-    // Technically, we currently only need to set the dirty bit here if one of the member variables above changes.
-    setPreferredLogicalWidthsDirty(true);
</del><ins>+    auto radical = radicalOperator();
+    if (radical) {
+        // We stretch the radical sign to cover the height of the base wrapper.
+        float baseHeight = base-&gt;logicalHeight();
+        float baseHeightAboveBaseline = base-&gt;firstLineBaseline();
+        if (baseHeightAboveBaseline == -1)
+            baseHeightAboveBaseline = baseHeight;
+        float baseDepthBelowBaseline = baseHeight - baseHeightAboveBaseline;
+        baseHeightAboveBaseline += m_verticalGap;
+        radical-&gt;stretchTo(baseHeightAboveBaseline, baseDepthBelowBaseline);
</ins><span class="cx"> 
</span><ins>+        // We modify the top margins to adjust the vertical positions of wrappers.
+        float radicalTopMargin = m_extraAscender;
+        float baseTopMargin = m_verticalGap + m_ruleThickness + m_extraAscender;
+        if (!isRenderMathMLSquareRoot()) {
+            // For mroot, we try to place the index so the space below its baseline is m_degreeBottomRaisePercent times the height of the radical.
+            auto index = indexWrapper();
+            float indexHeight = 0;
+            if (!index-&gt;isEmpty())
+                indexHeight = toRenderBlock(index-&gt;firstChild())-&gt;logicalHeight();
+            float indexTopMargin = (1.0 - m_degreeBottomRaisePercent) * radical-&gt;stretchSize() + radicalTopMargin - indexHeight;
+            if (indexTopMargin &lt; 0) {
+                // If the index is too tall, we must add space at the top of renderer.
+                radicalTopMargin -= indexTopMargin;
+                baseTopMargin -= indexTopMargin;
+                indexTopMargin = 0;
+            }
+            index-&gt;style().setMarginTop(Length(indexTopMargin, Fixed));
+        }
+        radical-&gt;style().setMarginTop(Length(radicalTopMargin, Fixed));
+        base-&gt;style().setMarginTop(Length(baseTopMargin, Fixed));
+    }
+
</ins><span class="cx">     RenderMathMLBlock::layout();
</span><del>-
-    if (RenderBox* index = this-&gt;index())
-        index-&gt;setLogicalTop(m_indexTop);
</del><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void RenderMathMLRoot::paint(PaintInfo&amp; info, const LayoutPoint&amp; paintOffset)
</span><span class="cx"> {
</span><span class="cx">     RenderMathMLBlock::paint(info, paintOffset);
</span><span class="cx">     
</span><del>-    if (info.context-&gt;paintingDisabled() || style().visibility() != VISIBLE)
</del><ins>+    if (isEmpty() || info.context-&gt;paintingDisabled() || style().visibility() != VISIBLE)
</ins><span class="cx">         return;
</span><del>-    
-    IntPoint adjustedPaintOffset = roundedIntPoint(paintOffset + location() + contentBoxRect().location());
-    
-    int startX = adjustedPaintOffset.x();
-    int frontWidth = lroundf(gFrontWidthEms * style().fontSize());
-    int overbarWidth = roundToInt(contentLogicalWidth()) + m_overbarLeftPointShift;
-    
-    int baseHeight = roundToInt(contentLogicalHeight());
-    int rootPad = lroundf(gSpaceAboveEms * style().fontSize());
-    adjustedPaintOffset.setY(adjustedPaintOffset.y() - rootPad);
-    
-    float radicalDipLeftPointYPos = (index() ? gRootRadicalDipLeftPointYPos : gSqrtRadicalDipLeftPointYPos) * baseHeight;
-    
-    FloatPoint overbarLeftPoint(startX - m_overbarLeftPointShift, adjustedPaintOffset.y());
-    FloatPoint bottomPoint(startX - gRadicalBottomPointXFront * frontWidth, adjustedPaintOffset.y() + baseHeight + gRadicalBottomPointLower);
-    FloatPoint dipLeftPoint(startX - gRadicalDipLeftPointXFront * frontWidth, adjustedPaintOffset.y() + radicalDipLeftPointYPos);
-    FloatPoint leftEnd(startX - frontWidth, dipLeftPoint.y() + gRadicalLeftEndYShiftEms * style().fontSize());
-    
</del><ins>+
+    auto base = baseWrapper();
+    auto radical = radicalOperator();
+    if (!base || !radical || !m_ruleThickness)
+        return;
+
+    // We draw the radical line.
</ins><span class="cx">     GraphicsContextStateSaver stateSaver(*info.context);
</span><del>-    
-    info.context-&gt;setStrokeThickness(gRadicalLineThicknessEms * style().fontSize());
</del><ins>+
+    info.context-&gt;setStrokeThickness(m_ruleThickness);
</ins><span class="cx">     info.context-&gt;setStrokeStyle(SolidStroke);
</span><span class="cx">     info.context-&gt;setStrokeColor(style().visitedDependentColor(CSSPropertyColor), ColorSpaceDeviceRGB);
</span><del>-    info.context-&gt;setLineJoin(MiterJoin);
-    info.context-&gt;setMiterLimit(style().fontSize());
-    
-    Path root;
-    
-    root.moveTo(FloatPoint(overbarLeftPoint.x() + overbarWidth, adjustedPaintOffset.y()));
-    // draw top
-    root.addLineTo(overbarLeftPoint);
-    // draw from top left corner to bottom point of radical
-    root.addLineTo(bottomPoint);
-    // draw from bottom point to top of left part of radical base &quot;dip&quot;
-    root.addLineTo(dipLeftPoint);
-    // draw to end
-    root.addLineTo(leftEnd);
-    
-    info.context-&gt;strokePath(root);
-    
-    GraphicsContextStateSaver maskStateSaver(*info.context);
-    
-    // Build a mask to draw the thick part of the root.
-    Path mask;
-    
-    mask.moveTo(overbarLeftPoint);
-    mask.addLineTo(bottomPoint);
-    mask.addLineTo(dipLeftPoint);
-    mask.addLineTo(FloatPoint(2 * dipLeftPoint.x() - leftEnd.x(), 2 * dipLeftPoint.y() - leftEnd.y()));
-    
-    info.context-&gt;clip(mask);
-    
-    // Draw the thick part of the root.
-    info.context-&gt;setStrokeThickness(gRadicalThickLineThicknessEms * style().fontSize());
-    info.context-&gt;setLineCap(SquareCap);
-    
-    Path line;
-    line.moveTo(bottomPoint);
-    line.addLineTo(dipLeftPoint);
-    
-    info.context-&gt;strokePath(line);
</del><ins>+
+    // The preferred width of the radical is sometimes incorrect, so we draw a slightly longer line to ensure it touches the radical symbol (https://bugs.webkit.org/show_bug.cgi?id=130326).
+    LayoutUnit sizeError = radical-&gt;trailingSpaceError();
+    IntPoint adjustedPaintOffset = roundedIntPoint(paintOffset + location() + base-&gt;location() + LayoutPoint(-sizeError, -(m_verticalGap + m_ruleThickness / 2)));
+    info.context-&gt;drawLine(adjustedPaintOffset, IntPoint(adjustedPaintOffset.x() + base-&gt;pixelSnappedOffsetWidth() + sizeError, adjustedPaintOffset.y()));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><ins>+RenderPtr&lt;RenderMathMLRootWrapper&gt; RenderMathMLRootWrapper::createAnonymousWrapper(RenderMathMLRoot* renderObject)
+{
+    RenderPtr&lt;RenderMathMLRootWrapper&gt; newBlock = createRenderer&lt;RenderMathMLRootWrapper&gt;(renderObject-&gt;document(), RenderStyle::createAnonymousStyleWithDisplay(&amp;renderObject-&gt;style(), FLEX));
+    newBlock-&gt;initializeStyle();
+    return newBlock;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><ins>+RenderObject* RenderMathMLRootWrapper::removeChildWithoutRestructuring(RenderObject&amp; child)
+{
+    return RenderMathMLBlock::removeChild(child);
+}
+
+RenderObject* RenderMathMLRootWrapper::removeChild(RenderObject&amp; child)
+{
+    RenderObject* next = RenderMathMLBlock::removeChild(child);
+
+    if (!(beingDestroyed() || documentBeingDestroyed()))
+        toRenderMathMLRoot(parent())-&gt;restructureWrappers();
+
+    return next;
+}
+
+}
+
</ins><span class="cx"> #endif // ENABLE(MATHML)
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingmathmlRenderMathMLRooth"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/mathml/RenderMathMLRoot.h (170004 => 170005)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/mathml/RenderMathMLRoot.h        2014-06-16 09:09:21 UTC (rev 170004)
+++ trunk/Source/WebCore/rendering/mathml/RenderMathMLRoot.h        2014-06-16 10:07:32 UTC (rev 170005)
</span><span class="lines">@@ -29,25 +29,25 @@
</span><span class="cx"> #if ENABLE(MATHML)
</span><span class="cx"> 
</span><span class="cx"> #include &quot;RenderMathMLBlock.h&quot;
</span><ins>+#include &quot;RenderMathMLRow.h&quot;
</ins><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><ins>+
+class RenderMathMLRadicalOperator;
+class RenderMathMLRootWrapper;
</ins><span class="cx">     
</span><span class="cx"> // Render base^(1/index), or sqrt(base) via the derived class RenderMathMLSquareRoot, using radical notation.
</span><span class="cx"> class RenderMathMLRoot : public RenderMathMLBlock {
</span><ins>+
+friend class RenderMathMLRootWrapper;
+
</ins><span class="cx"> public:
</span><span class="cx">     RenderMathMLRoot(Element&amp;, PassRef&lt;RenderStyle&gt;);
</span><span class="cx">     RenderMathMLRoot(Document&amp;, PassRef&lt;RenderStyle&gt;);
</span><span class="cx"> 
</span><del>-    virtual LayoutUnit paddingTop() const override;
-    virtual LayoutUnit paddingBottom() const override;
-    virtual LayoutUnit paddingLeft() const override;
-    virtual LayoutUnit paddingRight() const override;
-    virtual LayoutUnit paddingBefore() const override;
-    virtual LayoutUnit paddingAfter() const override;
-    virtual LayoutUnit paddingStart() const override;
-    virtual LayoutUnit paddingEnd() const override;
-
</del><span class="cx">     virtual void addChild(RenderObject* newChild, RenderObject* beforeChild = 0) override;
</span><ins>+    virtual void styleDidChange(StyleDifference, const RenderStyle* oldStyle) override;
+    virtual void updateFromElement() override;
</ins><span class="cx">     
</span><span class="cx"> protected:
</span><span class="cx">     virtual void layout() override;
</span><span class="lines">@@ -57,18 +57,42 @@
</span><span class="cx"> private:
</span><span class="cx">     virtual bool isRenderMathMLRoot() const override final { return true; }
</span><span class="cx">     virtual const char* renderName() const override { return &quot;RenderMathMLRoot&quot;; }
</span><ins>+    virtual int firstLineBaseline() const override;
+    void updateStyle();
+    void restructureWrappers();
+
+    RenderMathMLRootWrapper* baseWrapper() const;
+    RenderMathMLBlock* radicalWrapper() const;
+    RenderMathMLRootWrapper* indexWrapper() const;
+    RenderMathMLRadicalOperator* radicalOperator() const;
+
+    LayoutUnit m_verticalGap;
+    LayoutUnit m_ruleThickness;
+    LayoutUnit m_extraAscender;
+    float m_degreeBottomRaisePercent;
+};
</ins><span class="cx">     
</span><del>-    // This may return 0 for a non-MathML index (which won't occur in valid MathML).
-    RenderBox* index() const;
</del><ins>+RENDER_OBJECT_TYPE_CASTS(RenderMathMLRoot, isRenderMathMLRoot())
</ins><span class="cx"> 
</span><del>-    int m_intrinsicPaddingBefore;
-    int m_intrinsicPaddingAfter;
-    int m_intrinsicPaddingStart;
-    int m_intrinsicPaddingEnd;
-    int m_overbarLeftPointShift;
-    int m_indexTop;
</del><ins>+// These are specific wrappers for the index and base, that ask the parent to restructure the renderers after child removal.
+class RenderMathMLRootWrapper : public RenderMathMLRow {
+
+friend class RenderMathMLRoot;
+
+public:
+    RenderMathMLRootWrapper(Document&amp; document, PassRef&lt;RenderStyle&gt; style)
+        : RenderMathMLRow(document, std::move(style)) { }
+
+private:
+    RenderObject* removeChildWithoutRestructuring(RenderObject&amp;);
+    RenderObject* removeChild(RenderObject&amp;) override;
+    static RenderPtr&lt;RenderMathMLRootWrapper&gt; createAnonymousWrapper(RenderMathMLRoot* renderObject);
+    virtual bool isRenderMathMLRoot() const override final { return true; }
+    virtual const char* renderName() const override { return &quot;RenderMathMLRootWrapper&quot;; }
</ins><span class="cx"> };
</span><del>-    
</del><ins>+
+RENDER_OBJECT_TYPE_CASTS(RenderMathMLRootWrapper, isRenderMathMLRootWrapper())
+
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> #endif // ENABLE(MATHML)
</span></span></pre>
</div>
</div>

</body>
</html>