<!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>[169607] 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/169607">169607</a></dd>
<dt>Author</dt> <dd>fred.wang@free.fr</dd>
<dt>Date</dt> <dd>2014-06-04 23:35:04 -0700 (Wed, 04 Jun 2014)</dd>
</dl>

<h3>Log Message</h3>
<pre>MathML operators not stretched horizontally
https://bugs.webkit.org/show_bug.cgi?id=72828

Reviewed by Chris Fleizach.

Source/WebCore:
This patch adds basic horizontal stretching rules for operators inside
an &lt;munder&gt;, &lt;mover&gt; or &lt;munderover&gt; elements. The stretchy operators
in such an element stretch to cover the size of the non-stretchy
operators. This only works when fonts that have an OpenType MATH table
are used.

Tests: mathml/opentype/horizontal-LatinModern.html
       mathml/opentype/opentype-stretchy-horizontal.html
       mathml/opentype/horizontal-LatinModern-munderover.html

* rendering/mathml/RenderMathMLOperator.cpp:
(WebCore::MathMLOperatorDictionary::ExtractKeyHorizontal): We add an ordered list of operators that have horizontal stretch direction.
(WebCore::RenderMathMLOperator::RenderMathMLOperator): init m_Vertical
(WebCore::RenderMathMLOperator::SetOperatorProperties): set m_Vertical by checking whether the operator is in the horizontalOperators list.
(WebCore::RenderMathMLOperator::stretchTo): We do not stretch vertically
if the operator has horizontal direction.
We also add a new version stretchTo(LayoutUnit width) for horizontal stretching only.
(WebCore::RenderMathMLOperator::computePreferredLogicalWidths): Handle horizontal stretching: the maximumGlyphWidth is the maximum of
the base size or of the stretch size.
(WebCore::RenderMathMLOperator::getDisplayStyleLargeOperator): Add an ASSERT to ensure that this function is only called for vertical stretching.
(WebCore::RenderMathMLOperator::findStretchyData): Add an ASSERT to ensure that this function is not called to get the maximum width of a horizontal stretchy operator.
We take into account m_isVertical when calling getMathVariants or computing sizes.
There is not any Unicode-only construction for horizontal stretching, so a MATH table is required for horizontal stretching.
(WebCore::RenderMathMLOperator::updateStyle): Ignore some code paths specific to vertical stretching and take into account the m_Vertical parameters.
For horizontal stretching, the m_stretch*Baseline parameters are now updated to match the metrics of the size variant or of the maximum of the parts in the glyph assembly.
(WebCore::RenderMathMLOperator::computeLogicalHeight): logicalHeight is now explicitely the sum of m_stretchHeightAboveBaseline and m_stretchDepthBelowBaseline, since it can be different from the stretchSize() in horizontal stretching.
(WebCore::RenderMathMLOperator::paintGlyph): handle trimming for horizontal stretching.
(WebCore::RenderMathMLOperator::fillWithVerticalExtensionGlyph): rename the function and ensure it is only call for m_isVertical.
(WebCore::RenderMathMLOperator::fillWithHorizontalExtensionGlyph): same as fillWithVerticalExtensionGlyph, but for horizontal stretching.
(WebCore::RenderMathMLOperator::paint): For glyph assembly, choose between paintVerticalGlyphAssembly or paintHorizontalGlyphAssembly.
(WebCore::RenderMathMLOperator::paintVerticalGlyphAssembly): rename the function and ensure it is only call for m_isVertical.
(WebCore::RenderMathMLOperator::paintHorizontalGlyphAssembly): same as paintVerticalGlyphAssembly but for horizontal stretching.
* rendering/mathml/RenderMathMLOperator.h: we add a m_isVertical member to indicate the stretch direction and a m_stretchWidth to indicate the width of the stretchy character.
We define the horizontal counterparts of fillWith*ExtensionGlyph, paint*GlyphAssembly, GlyphPaintTrimming  StretchyData.
Finally stretchSize() takes into account the stretch direction.
* rendering/mathml/RenderMathMLUnderOver.cpp: We override the layout() function to stretch munderover children horizontally.
(WebCore::RenderMathMLUnderOver::layout):
* rendering/mathml/RenderMathMLUnderOver.h: we declare layout().

LayoutTests:
Add some tests to verify horizontal stretching with the MATH data.

* mathml/opentype/horizontal-LatinModern-munderover.html: Added.
* mathml/opentype/horizontal-LatinModern.html: Added.
* mathml/opentype/opentype-stretchy-horizontal.html: Added.
* platform/efl/TestExpectations: mark tests as failing.
* platform/gtk/mathml/opentype/horizontal-LatinModern-expected.png: Added.
* platform/gtk/mathml/opentype/horizontal-LatinModern-expected.txt: Added.
* platform/gtk/mathml/opentype/horizontal-LatinModern-munderover-expected.png: Added.
* platform/gtk/mathml/opentype/horizontal-LatinModern-munderover-expected.txt: Added.
* platform/gtk/mathml/opentype/opentype-stretchy-horizontal-expected.png: Added.
* platform/gtk/mathml/opentype/opentype-stretchy-horizontal-expected.txt: Added.
* platform/mac/TestExpectations: mark tests as failing.
* platform/win/TestExpectations: ditto.</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkLayoutTestsChangeLog">trunk/LayoutTests/ChangeLog</a></li>
<li><a href="#trunkLayoutTestsplatformeflTestExpectations">trunk/LayoutTests/platform/efl/TestExpectations</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="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</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="#trunkSourceWebCorerenderingmathmlRenderMathMLUnderOvercpp">trunk/Source/WebCore/rendering/mathml/RenderMathMLUnderOver.cpp</a></li>
<li><a href="#trunkSourceWebCorerenderingmathmlRenderMathMLUnderOverh">trunk/Source/WebCore/rendering/mathml/RenderMathMLUnderOver.h</a></li>
</ul>

<h3>Added Paths</h3>
<ul>
<li><a href="#trunkLayoutTestsmathmlopentypehorizontalLatinModernmunderoverhtml">trunk/LayoutTests/mathml/opentype/horizontal-LatinModern-munderover.html</a></li>
<li><a href="#trunkLayoutTestsmathmlopentypehorizontalLatinModernhtml">trunk/LayoutTests/mathml/opentype/horizontal-LatinModern.html</a></li>
<li><a href="#trunkLayoutTestsmathmlopentypeopentypestretchyhorizontalhtml">trunk/LayoutTests/mathml/opentype/opentype-stretchy-horizontal.html</a></li>
<li><a href="#trunkLayoutTestsplatformgtkmathmlopentypehorizontalLatinModernexpectedpng">trunk/LayoutTests/platform/gtk/mathml/opentype/horizontal-LatinModern-expected.png</a></li>
<li><a href="#trunkLayoutTestsplatformgtkmathmlopentypehorizontalLatinModernexpectedtxt">trunk/LayoutTests/platform/gtk/mathml/opentype/horizontal-LatinModern-expected.txt</a></li>
<li><a href="#trunkLayoutTestsplatformgtkmathmlopentypehorizontalLatinModernmunderoverexpectedpng">trunk/LayoutTests/platform/gtk/mathml/opentype/horizontal-LatinModern-munderover-expected.png</a></li>
<li><a href="#trunkLayoutTestsplatformgtkmathmlopentypehorizontalLatinModernmunderoverexpectedtxt">trunk/LayoutTests/platform/gtk/mathml/opentype/horizontal-LatinModern-munderover-expected.txt</a></li>
<li><a href="#trunkLayoutTestsplatformgtkmathmlopentypeopentypestretchyhorizontalexpectedpng">trunk/LayoutTests/platform/gtk/mathml/opentype/opentype-stretchy-horizontal-expected.png</a></li>
<li><a href="#trunkLayoutTestsplatformgtkmathmlopentypeopentypestretchyhorizontalexpectedtxt">trunk/LayoutTests/platform/gtk/mathml/opentype/opentype-stretchy-horizontal-expected.txt</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkLayoutTestsChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/ChangeLog (169606 => 169607)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/ChangeLog        2014-06-05 04:52:57 UTC (rev 169606)
+++ trunk/LayoutTests/ChangeLog        2014-06-05 06:35:04 UTC (rev 169607)
</span><span class="lines">@@ -1,3 +1,25 @@
</span><ins>+2014-06-05  Frédéric Wang  &lt;fred.wang@free.fr&gt;
+
+        MathML operators not stretched horizontally
+        https://bugs.webkit.org/show_bug.cgi?id=72828
+
+        Reviewed by Chris Fleizach.
+
+        Add some tests to verify horizontal stretching with the MATH data.
+
+        * mathml/opentype/horizontal-LatinModern-munderover.html: Added.
+        * mathml/opentype/horizontal-LatinModern.html: Added.
+        * mathml/opentype/opentype-stretchy-horizontal.html: Added.
+        * platform/efl/TestExpectations: mark tests as failing.
+        * platform/gtk/mathml/opentype/horizontal-LatinModern-expected.png: Added.
+        * platform/gtk/mathml/opentype/horizontal-LatinModern-expected.txt: Added.
+        * platform/gtk/mathml/opentype/horizontal-LatinModern-munderover-expected.png: Added.
+        * platform/gtk/mathml/opentype/horizontal-LatinModern-munderover-expected.txt: Added.
+        * platform/gtk/mathml/opentype/opentype-stretchy-horizontal-expected.png: Added.
+        * platform/gtk/mathml/opentype/opentype-stretchy-horizontal-expected.txt: Added.
+        * platform/mac/TestExpectations: mark tests as failing.
+        * platform/win/TestExpectations: ditto.
+
</ins><span class="cx"> 2014-06-04  Bem Jones-Bey  &lt;bjonesbe@adobe.com&gt;
</span><span class="cx"> 
</span><span class="cx">         [CSS Shapes] Image lifetime is not properly handled for gradient shapes
</span></span></pre></div>
<a id="trunkLayoutTestsmathmlopentypehorizontalLatinModernmunderoverhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/mathml/opentype/horizontal-LatinModern-munderover.html (0 => 169607)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/mathml/opentype/horizontal-LatinModern-munderover.html                                (rev 0)
+++ trunk/LayoutTests/mathml/opentype/horizontal-LatinModern-munderover.html        2014-06-05 06:35:04 UTC (rev 169607)
</span><span class="lines">@@ -0,0 +1,59 @@
</span><ins>+&lt;!doctype html&gt;
+&lt;html&gt; 
+  &lt;head&gt;
+    &lt;title&gt;Large Operator 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 various munderover constructions. All the horizontal braces
+         should stretch to cover the size of the red rectangle. --&gt;
+    &lt;p&gt;
+      &lt;math&gt;
+        &lt;mstyle scriptsizemultiplier=&quot;1&quot;&gt;
+          &lt;mover&gt;&lt;mo stretchy=&quot;true&quot;&gt;&amp;#x23DE;&lt;/mo&gt;&lt;mspace mathbackground=&quot;red&quot; height=&quot;2px&quot; width=&quot;4em&quot;/&gt;&lt;/mover&gt;
+        &lt;/mstyle&gt;
+      &lt;/math&gt;
+      &lt;math&gt;
+        &lt;mstyle scriptsizemultiplier=&quot;1&quot;&gt;
+          &lt;mover&gt;&lt;mspace mathbackground=&quot;red&quot; height=&quot;2px&quot; width=&quot;4em&quot;/&gt;&lt;mo stretchy=&quot;true&quot;&gt;&amp;#x23DE;&lt;/mo&gt;&lt;/mover&gt;
+        &lt;/mstyle&gt;
+      &lt;/math&gt;
+      &lt;math&gt;
+        &lt;mstyle scriptsizemultiplier=&quot;1&quot;&gt;
+          &lt;munder&gt;&lt;mo stretchy=&quot;true&quot;&gt;&amp;#x23DE;&lt;/mo&gt;&lt;mspace mathbackground=&quot;red&quot; height=&quot;2px&quot; width=&quot;4em&quot;/&gt;&lt;/munder&gt;
+        &lt;/mstyle&gt;
+      &lt;/math&gt;
+      &lt;math&gt;
+        &lt;mstyle scriptsizemultiplier=&quot;1&quot;&gt;
+          &lt;munderover&gt;&lt;mspace mathbackground=&quot;red&quot; height=&quot;2px&quot; width=&quot;4em&quot;/&gt;&lt;mo stretchy=&quot;true&quot;&gt;&amp;#x23DE;&lt;/mo&gt;&lt;mo stretchy=&quot;true&quot;&gt;&amp;#x23DE;&lt;/mo&gt;&lt;/munderover&gt;
+        &lt;/mstyle&gt;
+      &lt;/math&gt;
+      &lt;math&gt;
+        &lt;mstyle scriptsizemultiplier=&quot;1&quot;&gt;
+          &lt;munderover&gt;&lt;mo stretchy=&quot;true&quot;&gt;&amp;#x23DE;&lt;/mo&gt;&lt;mspace mathbackground=&quot;red&quot; height=&quot;2px&quot; width=&quot;4em&quot;/&gt;&lt;mo stretchy=&quot;true&quot;&gt;&amp;#x23DE;&lt;/mo&gt;&lt;/munderover&gt;
+        &lt;/mstyle&gt;
+      &lt;/math&gt;
+      &lt;math&gt;
+        &lt;mstyle scriptsizemultiplier=&quot;1&quot;&gt;
+          &lt;munderover&gt;&lt;mo stretchy=&quot;true&quot;&gt;&amp;#x23DE;&lt;/mo&gt;&lt;mo stretchy=&quot;true&quot;&gt;&amp;#x23DE;&lt;/mo&gt;&lt;mspace mathbackground=&quot;red&quot; height=&quot;2px&quot; width=&quot;4em&quot;/&gt;&lt;/munderover&gt;
+        &lt;/mstyle&gt;
+      &lt;/math&gt;
+      &lt;math&gt;
+        &lt;mstyle scriptsizemultiplier=&quot;1&quot;&gt;
+          &lt;munder&gt;&lt;mover&gt;&lt;mo stretchy=&quot;true&quot;&gt;&amp;#x23DE;&lt;/mo&gt;&lt;mspace mathbackground=&quot;red&quot; height=&quot;2px&quot; width=&quot;4em&quot;/&gt;&lt;/mover&gt;&lt;mo stretchy=&quot;true&quot;&gt;&amp;#x23DE;&lt;/mo&gt;&lt;/munder&gt;
+        &lt;/mstyle&gt;
+      &lt;/math&gt;
+    &lt;/p&gt;
+
+  &lt;/body&gt;
+&lt;/html&gt;
</ins><span class="cx">Property changes on: trunk/LayoutTests/mathml/opentype/horizontal-LatinModern-munderover.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="trunkLayoutTestsmathmlopentypehorizontalLatinModernhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/mathml/opentype/horizontal-LatinModern.html (0 => 169607)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/mathml/opentype/horizontal-LatinModern.html                                (rev 0)
+++ trunk/LayoutTests/mathml/opentype/horizontal-LatinModern.html        2014-06-05 06:35:04 UTC (rev 169607)
</span><span class="lines">@@ -0,0 +1,88 @@
</span><ins>+&lt;!doctype html&gt;
+&lt;html&gt; 
+  &lt;head&gt;
+    &lt;title&gt;Large Operator 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 various horizontal operators. They should stretch to cover the
+         size of the &lt;mspace&gt; element. --&gt;
+
+    &lt;p&gt;
+      &lt;math&gt;&lt;mover&gt;&lt;mspace width=&quot;22px&quot; height=&quot;2px&quot; mathbackground=&quot;blue&quot;/&gt;&lt;mo stretchy=&quot;true&quot;&gt;&amp;#x2190;&lt;/mo&gt;&lt;/mover&gt;&lt;/math&gt;
+      &lt;math&gt;&lt;mover&gt;&lt;mspace width=&quot;22px&quot; height=&quot;2px&quot; mathbackground=&quot;blue&quot;/&gt;&lt;mo stretchy=&quot;true&quot;&gt;&amp;#x2192;&lt;/mo&gt;&lt;/mover&gt;&lt;/math&gt;
+      &lt;math&gt;&lt;mover&gt;&lt;mspace width=&quot;22px&quot; height=&quot;2px&quot; mathbackground=&quot;blue&quot;/&gt;&lt;mo stretchy=&quot;true&quot;&gt;&amp;#x2194;&lt;/mo&gt;&lt;/mover&gt;&lt;/math&gt;
+      &lt;math&gt;&lt;mover&gt;&lt;mspace width=&quot;22px&quot; height=&quot;2px&quot; mathbackground=&quot;blue&quot;/&gt;&lt;mo stretchy=&quot;true&quot;&gt;&amp;#x21A4;&lt;/mo&gt;&lt;/mover&gt;&lt;/math&gt;
+      &lt;math&gt;&lt;mover&gt;&lt;mspace width=&quot;22px&quot; height=&quot;2px&quot; mathbackground=&quot;blue&quot;/&gt;&lt;mo stretchy=&quot;true&quot;&gt;&amp;#x21A6;&lt;/mo&gt;&lt;/mover&gt;&lt;/math&gt;
+      &lt;math&gt;&lt;mover&gt;&lt;mspace width=&quot;22px&quot; height=&quot;2px&quot; mathbackground=&quot;blue&quot;/&gt;&lt;mo stretchy=&quot;true&quot;&gt;&amp;#x21BC;&lt;/mo&gt;&lt;/mover&gt;&lt;/math&gt;
+      &lt;math&gt;&lt;mover&gt;&lt;mspace width=&quot;22px&quot; height=&quot;2px&quot; mathbackground=&quot;blue&quot;/&gt;&lt;mo stretchy=&quot;true&quot;&gt;&amp;#x21BD;&lt;/mo&gt;&lt;/mover&gt;&lt;/math&gt;
+      &lt;math&gt;&lt;mover&gt;&lt;mspace width=&quot;22px&quot; height=&quot;2px&quot; mathbackground=&quot;blue&quot;/&gt;&lt;mo stretchy=&quot;true&quot;&gt;&amp;#x21C0;&lt;/mo&gt;&lt;/mover&gt;&lt;/math&gt;
+      &lt;math&gt;&lt;mover&gt;&lt;mspace width=&quot;22px&quot; height=&quot;2px&quot; mathbackground=&quot;blue&quot;/&gt;&lt;mo stretchy=&quot;true&quot;&gt;&amp;#x21D0;&lt;/mo&gt;&lt;/mover&gt;&lt;/math&gt;
+      &lt;math&gt;&lt;mover&gt;&lt;mspace width=&quot;22px&quot; height=&quot;2px&quot; mathbackground=&quot;blue&quot;/&gt;&lt;mo stretchy=&quot;true&quot;&gt;&amp;#x21D2;&lt;/mo&gt;&lt;/mover&gt;&lt;/math&gt;
+      &lt;math&gt;&lt;mover&gt;&lt;mspace width=&quot;22px&quot; height=&quot;2px&quot; mathbackground=&quot;blue&quot;/&gt;&lt;mo stretchy=&quot;true&quot;&gt;&amp;#x21D4;&lt;/mo&gt;&lt;/mover&gt;&lt;/math&gt;
+      &lt;math&gt;&lt;mover&gt;&lt;mspace width=&quot;22px&quot; height=&quot;2px&quot; mathbackground=&quot;blue&quot;/&gt;&lt;mo stretchy=&quot;true&quot;&gt;&amp;#x21DA;&lt;/mo&gt;&lt;/mover&gt;&lt;/math&gt;
+      &lt;math&gt;&lt;mover&gt;&lt;mspace width=&quot;22px&quot; height=&quot;2px&quot; mathbackground=&quot;blue&quot;/&gt;&lt;mo stretchy=&quot;true&quot;&gt;&amp;#x21DB;&lt;/mo&gt;&lt;/mover&gt;&lt;/math&gt;
+      &lt;math&gt;&lt;mover&gt;&lt;mspace width=&quot;22px&quot; height=&quot;2px&quot; mathbackground=&quot;blue&quot;/&gt;&lt;mo stretchy=&quot;true&quot;&gt;&amp;#x23B4;&lt;/mo&gt;&lt;/mover&gt;&lt;/math&gt;
+      &lt;math&gt;&lt;mover&gt;&lt;mspace width=&quot;22px&quot; height=&quot;2px&quot; mathbackground=&quot;blue&quot;/&gt;&lt;mo stretchy=&quot;true&quot;&gt;&amp;#x23B5;&lt;/mo&gt;&lt;/mover&gt;&lt;/math&gt;
+      &lt;math&gt;&lt;mover&gt;&lt;mspace width=&quot;22px&quot; height=&quot;2px&quot; mathbackground=&quot;blue&quot;/&gt;&lt;mo stretchy=&quot;true&quot;&gt;&amp;#x23DC;&lt;/mo&gt;&lt;/mover&gt;&lt;/math&gt;
+      &lt;math&gt;&lt;mover&gt;&lt;mspace width=&quot;22px&quot; height=&quot;2px&quot; mathbackground=&quot;blue&quot;/&gt;&lt;mo stretchy=&quot;true&quot;&gt;&amp;#x23DD;&lt;/mo&gt;&lt;/mover&gt;&lt;/math&gt;
+      &lt;math&gt;&lt;mover&gt;&lt;mspace width=&quot;22px&quot; height=&quot;2px&quot; mathbackground=&quot;blue&quot;/&gt;&lt;mo stretchy=&quot;true&quot;&gt;&amp;#x23DE;&lt;/mo&gt;&lt;/mover&gt;&lt;/math&gt;
+      &lt;math&gt;&lt;mover&gt;&lt;mspace width=&quot;22px&quot; height=&quot;2px&quot; mathbackground=&quot;blue&quot;/&gt;&lt;mo stretchy=&quot;true&quot;&gt;&amp;#x23DF;&lt;/mo&gt;&lt;/mover&gt;&lt;/math&gt;
+    &lt;/p&gt;
+
+    &lt;p&gt;
+      &lt;math&gt;&lt;mover&gt;&lt;mspace width=&quot;50px&quot; height=&quot;2px&quot; mathbackground=&quot;green&quot;/&gt;&lt;mo stretchy=&quot;true&quot;&gt;&amp;#x2190;&lt;/mo&gt;&lt;/mover&gt;&lt;/math&gt;
+      &lt;math&gt;&lt;mover&gt;&lt;mspace width=&quot;50px&quot; height=&quot;2px&quot; mathbackground=&quot;green&quot;/&gt;&lt;mo stretchy=&quot;true&quot;&gt;&amp;#x2192;&lt;/mo&gt;&lt;/mover&gt;&lt;/math&gt;
+      &lt;math&gt;&lt;mover&gt;&lt;mspace width=&quot;50px&quot; height=&quot;2px&quot; mathbackground=&quot;green&quot;/&gt;&lt;mo stretchy=&quot;true&quot;&gt;&amp;#x2194;&lt;/mo&gt;&lt;/mover&gt;&lt;/math&gt;
+      &lt;math&gt;&lt;mover&gt;&lt;mspace width=&quot;50px&quot; height=&quot;2px&quot; mathbackground=&quot;green&quot;/&gt;&lt;mo stretchy=&quot;true&quot;&gt;&amp;#x21A4;&lt;/mo&gt;&lt;/mover&gt;&lt;/math&gt;
+      &lt;math&gt;&lt;mover&gt;&lt;mspace width=&quot;50px&quot; height=&quot;2px&quot; mathbackground=&quot;green&quot;/&gt;&lt;mo stretchy=&quot;true&quot;&gt;&amp;#x21A6;&lt;/mo&gt;&lt;/mover&gt;&lt;/math&gt;
+      &lt;math&gt;&lt;mover&gt;&lt;mspace width=&quot;50px&quot; height=&quot;2px&quot; mathbackground=&quot;green&quot;/&gt;&lt;mo stretchy=&quot;true&quot;&gt;&amp;#x21BC;&lt;/mo&gt;&lt;/mover&gt;&lt;/math&gt;
+      &lt;math&gt;&lt;mover&gt;&lt;mspace width=&quot;50px&quot; height=&quot;2px&quot; mathbackground=&quot;green&quot;/&gt;&lt;mo stretchy=&quot;true&quot;&gt;&amp;#x21BD;&lt;/mo&gt;&lt;/mover&gt;&lt;/math&gt;
+      &lt;math&gt;&lt;mover&gt;&lt;mspace width=&quot;50px&quot; height=&quot;2px&quot; mathbackground=&quot;green&quot;/&gt;&lt;mo stretchy=&quot;true&quot;&gt;&amp;#x21C0;&lt;/mo&gt;&lt;/mover&gt;&lt;/math&gt;
+      &lt;math&gt;&lt;mover&gt;&lt;mspace width=&quot;50px&quot; height=&quot;2px&quot; mathbackground=&quot;green&quot;/&gt;&lt;mo stretchy=&quot;true&quot;&gt;&amp;#x21D0;&lt;/mo&gt;&lt;/mover&gt;&lt;/math&gt;
+      &lt;math&gt;&lt;mover&gt;&lt;mspace width=&quot;50px&quot; height=&quot;2px&quot; mathbackground=&quot;green&quot;/&gt;&lt;mo stretchy=&quot;true&quot;&gt;&amp;#x21D2;&lt;/mo&gt;&lt;/mover&gt;&lt;/math&gt;
+      &lt;math&gt;&lt;mover&gt;&lt;mspace width=&quot;50px&quot; height=&quot;2px&quot; mathbackground=&quot;green&quot;/&gt;&lt;mo stretchy=&quot;true&quot;&gt;&amp;#x21D4;&lt;/mo&gt;&lt;/mover&gt;&lt;/math&gt;
+      &lt;math&gt;&lt;mover&gt;&lt;mspace width=&quot;50px&quot; height=&quot;2px&quot; mathbackground=&quot;green&quot;/&gt;&lt;mo stretchy=&quot;true&quot;&gt;&amp;#x21DA;&lt;/mo&gt;&lt;/mover&gt;&lt;/math&gt;
+      &lt;math&gt;&lt;mover&gt;&lt;mspace width=&quot;50px&quot; height=&quot;2px&quot; mathbackground=&quot;green&quot;/&gt;&lt;mo stretchy=&quot;true&quot;&gt;&amp;#x21DB;&lt;/mo&gt;&lt;/mover&gt;&lt;/math&gt;
+      &lt;math&gt;&lt;mover&gt;&lt;mspace width=&quot;50px&quot; height=&quot;2px&quot; mathbackground=&quot;green&quot;/&gt;&lt;mo stretchy=&quot;true&quot;&gt;&amp;#x23B4;&lt;/mo&gt;&lt;/mover&gt;&lt;/math&gt;
+      &lt;math&gt;&lt;mover&gt;&lt;mspace width=&quot;50px&quot; height=&quot;2px&quot; mathbackground=&quot;green&quot;/&gt;&lt;mo stretchy=&quot;true&quot;&gt;&amp;#x23B5;&lt;/mo&gt;&lt;/mover&gt;&lt;/math&gt;
+      &lt;math&gt;&lt;mover&gt;&lt;mspace width=&quot;50px&quot; height=&quot;2px&quot; mathbackground=&quot;green&quot;/&gt;&lt;mo stretchy=&quot;true&quot;&gt;&amp;#x23DC;&lt;/mo&gt;&lt;/mover&gt;&lt;/math&gt;
+      &lt;math&gt;&lt;mover&gt;&lt;mspace width=&quot;50px&quot; height=&quot;2px&quot; mathbackground=&quot;green&quot;/&gt;&lt;mo stretchy=&quot;true&quot;&gt;&amp;#x23DD;&lt;/mo&gt;&lt;/mover&gt;&lt;/math&gt;
+      &lt;math&gt;&lt;mover&gt;&lt;mspace width=&quot;50px&quot; height=&quot;2px&quot; mathbackground=&quot;green&quot;/&gt;&lt;mo stretchy=&quot;true&quot;&gt;&amp;#x23DE;&lt;/mo&gt;&lt;/mover&gt;&lt;/math&gt;
+      &lt;math&gt;&lt;mover&gt;&lt;mspace width=&quot;50px&quot; height=&quot;2px&quot; mathbackground=&quot;green&quot;/&gt;&lt;mo stretchy=&quot;true&quot;&gt;&amp;#x23DF;&lt;/mo&gt;&lt;/mover&gt;&lt;/math&gt;
+    &lt;/p&gt;
+
+    &lt;p&gt;
+      &lt;math&gt;&lt;mover&gt;&lt;mspace width=&quot;100px&quot; height=&quot;2px&quot; mathbackground=&quot;red&quot;/&gt;&lt;mo stretchy=&quot;true&quot;&gt;&amp;#x2190;&lt;/mo&gt;&lt;/mover&gt;&lt;/math&gt;
+      &lt;math&gt;&lt;mover&gt;&lt;mspace width=&quot;100px&quot; height=&quot;2px&quot; mathbackground=&quot;red&quot;/&gt;&lt;mo stretchy=&quot;true&quot;&gt;&amp;#x2192;&lt;/mo&gt;&lt;/mover&gt;&lt;/math&gt;
+      &lt;math&gt;&lt;mover&gt;&lt;mspace width=&quot;100px&quot; height=&quot;2px&quot; mathbackground=&quot;red&quot;/&gt;&lt;mo stretchy=&quot;true&quot;&gt;&amp;#x2194;&lt;/mo&gt;&lt;/mover&gt;&lt;/math&gt;
+      &lt;math&gt;&lt;mover&gt;&lt;mspace width=&quot;100px&quot; height=&quot;2px&quot; mathbackground=&quot;red&quot;/&gt;&lt;mo stretchy=&quot;true&quot;&gt;&amp;#x21A4;&lt;/mo&gt;&lt;/mover&gt;&lt;/math&gt;
+      &lt;math&gt;&lt;mover&gt;&lt;mspace width=&quot;100px&quot; height=&quot;2px&quot; mathbackground=&quot;red&quot;/&gt;&lt;mo stretchy=&quot;true&quot;&gt;&amp;#x21A6;&lt;/mo&gt;&lt;/mover&gt;&lt;/math&gt;
+      &lt;math&gt;&lt;mover&gt;&lt;mspace width=&quot;100px&quot; height=&quot;2px&quot; mathbackground=&quot;red&quot;/&gt;&lt;mo stretchy=&quot;true&quot;&gt;&amp;#x21BC;&lt;/mo&gt;&lt;/mover&gt;&lt;/math&gt;
+      &lt;math&gt;&lt;mover&gt;&lt;mspace width=&quot;100px&quot; height=&quot;2px&quot; mathbackground=&quot;red&quot;/&gt;&lt;mo stretchy=&quot;true&quot;&gt;&amp;#x21BD;&lt;/mo&gt;&lt;/mover&gt;&lt;/math&gt;
+      &lt;math&gt;&lt;mover&gt;&lt;mspace width=&quot;100px&quot; height=&quot;2px&quot; mathbackground=&quot;red&quot;/&gt;&lt;mo stretchy=&quot;true&quot;&gt;&amp;#x21C0;&lt;/mo&gt;&lt;/mover&gt;&lt;/math&gt;
+      &lt;math&gt;&lt;mover&gt;&lt;mspace width=&quot;100px&quot; height=&quot;2px&quot; mathbackground=&quot;red&quot;/&gt;&lt;mo stretchy=&quot;true&quot;&gt;&amp;#x21D0;&lt;/mo&gt;&lt;/mover&gt;&lt;/math&gt;
+      &lt;math&gt;&lt;mover&gt;&lt;mspace width=&quot;100px&quot; height=&quot;2px&quot; mathbackground=&quot;red&quot;/&gt;&lt;mo stretchy=&quot;true&quot;&gt;&amp;#x21D2;&lt;/mo&gt;&lt;/mover&gt;&lt;/math&gt;
+      &lt;math&gt;&lt;mover&gt;&lt;mspace width=&quot;100px&quot; height=&quot;2px&quot; mathbackground=&quot;red&quot;/&gt;&lt;mo stretchy=&quot;true&quot;&gt;&amp;#x21D4;&lt;/mo&gt;&lt;/mover&gt;&lt;/math&gt;
+      &lt;math&gt;&lt;mover&gt;&lt;mspace width=&quot;100px&quot; height=&quot;2px&quot; mathbackground=&quot;red&quot;/&gt;&lt;mo stretchy=&quot;true&quot;&gt;&amp;#x21DA;&lt;/mo&gt;&lt;/mover&gt;&lt;/math&gt;
+      &lt;math&gt;&lt;mover&gt;&lt;mspace width=&quot;100px&quot; height=&quot;2px&quot; mathbackground=&quot;red&quot;/&gt;&lt;mo stretchy=&quot;true&quot;&gt;&amp;#x21DB;&lt;/mo&gt;&lt;/mover&gt;&lt;/math&gt;
+      &lt;math&gt;&lt;mover&gt;&lt;mspace width=&quot;100px&quot; height=&quot;2px&quot; mathbackground=&quot;red&quot;/&gt;&lt;mo stretchy=&quot;true&quot;&gt;&amp;#x23B4;&lt;/mo&gt;&lt;/mover&gt;&lt;/math&gt;
+      &lt;math&gt;&lt;mover&gt;&lt;mspace width=&quot;100px&quot; height=&quot;2px&quot; mathbackground=&quot;red&quot;/&gt;&lt;mo stretchy=&quot;true&quot;&gt;&amp;#x23B5;&lt;/mo&gt;&lt;/mover&gt;&lt;/math&gt;
+      &lt;math&gt;&lt;mover&gt;&lt;mspace width=&quot;100px&quot; height=&quot;2px&quot; mathbackground=&quot;red&quot;/&gt;&lt;mo stretchy=&quot;true&quot;&gt;&amp;#x23DC;&lt;/mo&gt;&lt;/mover&gt;&lt;/math&gt;
+      &lt;math&gt;&lt;mover&gt;&lt;mspace width=&quot;100px&quot; height=&quot;2px&quot; mathbackground=&quot;red&quot;/&gt;&lt;mo stretchy=&quot;true&quot;&gt;&amp;#x23DD;&lt;/mo&gt;&lt;/mover&gt;&lt;/math&gt;
+      &lt;math&gt;&lt;mover&gt;&lt;mspace width=&quot;100px&quot; height=&quot;2px&quot; mathbackground=&quot;red&quot;/&gt;&lt;mo stretchy=&quot;true&quot;&gt;&amp;#x23DE;&lt;/mo&gt;&lt;/mover&gt;&lt;/math&gt;
+      &lt;math&gt;&lt;mover&gt;&lt;mspace width=&quot;100px&quot; height=&quot;2px&quot; mathbackground=&quot;red&quot;/&gt;&lt;mo stretchy=&quot;true&quot;&gt;&amp;#x23DF;&lt;/mo&gt;&lt;/mover&gt;&lt;/math&gt;
+    &lt;/p&gt;
+
+  &lt;/body&gt;
+&lt;/html&gt;
</ins><span class="cx">Property changes on: trunk/LayoutTests/mathml/opentype/horizontal-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="trunkLayoutTestsmathmlopentypeopentypestretchyhorizontalhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/mathml/opentype/opentype-stretchy-horizontal.html (0 => 169607)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/mathml/opentype/opentype-stretchy-horizontal.html                                (rev 0)
+++ trunk/LayoutTests/mathml/opentype/opentype-stretchy-horizontal.html        2014-06-05 06:35:04 UTC (rev 169607)
</span><span class="lines">@@ -0,0 +1,46 @@
</span><ins>+&lt;!doctype html&gt;
+&lt;html&gt;
+  &lt;head&gt;
+    &lt;title&gt;Open Type MATH - stretchy operator&lt;/title&gt;
+    &lt;meta charset=&quot;utf-8&quot;/&gt;
+    &lt;style type=&quot;text/css&quot;&gt;
+      /* This font is taken from Mozilla's test suite. */
+      @font-face {
+        font-family: stretchy;
+        src: url(&quot;stretchy.woff&quot;);
+      }
+      math {
+        font-family: stretchy;
+        font-size: 10px;
+      }
+    &lt;/style&gt;
+  &lt;/head&gt;
+  &lt;body&gt;
+
+    &lt;!-- This checks various vertical size variants. --&gt;
+    &lt;p&gt;
+      &lt;math&gt;
+        &lt;mstyle scriptsizemultiplier=&quot;1&quot;&gt;
+          &lt;mover&gt;&lt;mo stretchy=&quot;true&quot;&gt;&amp;#x219C;&lt;/mo&gt;&lt;mspace width=&quot;1em&quot; height=&quot;1px&quot;/&gt;&lt;/mover&gt;
+        &lt;/mstyle&gt;
+      &lt;/math&gt;
+    &lt;/p&gt;
+    &lt;p&gt;
+      &lt;math&gt;
+        &lt;mstyle scriptsizemultiplier=&quot;1&quot;&gt;
+          &lt;mover&gt;&lt;mo stretchy=&quot;true&quot;&gt;&amp;#x219C;&lt;/mo&gt;&lt;mspace width=&quot;2em&quot; height=&quot;1px&quot;/&gt;&lt;/mover&gt;
+        &lt;/mstyle&gt;
+      &lt;/math&gt;
+    &lt;/p&gt;
+
+    &lt;!-- This checks vertical glyph assembly. --&gt;
+    &lt;p&gt;
+      &lt;math&gt;
+        &lt;mstyle scriptsizemultiplier=&quot;1&quot;&gt;
+          &lt;mover&gt;&lt;mo stretchy=&quot;true&quot;&gt;&amp;#x219C;&lt;/mo&gt;&lt;mspace width=&quot;20em&quot; height=&quot;1px&quot;/&gt;&lt;/mover&gt;
+        &lt;/mstyle&gt;
+      &lt;/math&gt;
+    &lt;/p&gt;
+
+  &lt;/body&gt;
+&lt;/html&gt;
</ins><span class="cx">Property changes on: trunk/LayoutTests/mathml/opentype/opentype-stretchy-horizontal.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 (169606 => 169607)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/platform/efl/TestExpectations        2014-06-05 04:52:57 UTC (rev 169606)
+++ trunk/LayoutTests/platform/efl/TestExpectations        2014-06-05 06:35:04 UTC (rev 169607)
</span><span class="lines">@@ -1626,3 +1626,11 @@
</span><span class="cx"> webkit.org/b/133307 fast/forms/number/number-spinbutton-in-multi-column.html [ Failure ]
</span><span class="cx"> 
</span><span class="cx"> webkit.org/b/133308 fast/selectors/hover-quirks.html [ Failure ]
</span><ins>+
+# Missing or bad references
+webkit.org/b/130322 mathml/opentype/large-operators-LatinModern.html [ Failure ]
+webkit.org/b/130322 mathml/opentype/opentype-stretchy.html [ Failure ]
+webkit.org/b/130322 mathml/opentype/vertical-LatinModern.html [ Failure ]
+webkit.org/b/72828 mathml/opentype/horizontal-LatinModern.html [ Failure ]
+webkit.org/b/72828 mathml/opentype/opentype-stretchy-horizontal.html [ Failure ]
+webkit.org/b/72828 mathml/opentype/horizontal-LatinModern-munderover.html [ Failure ]
</ins></span></pre></div>
<a id="trunkLayoutTestsplatformgtkmathmlopentypehorizontalLatinModernexpectedpng"></a>
<div class="binary"><h4>Added: trunk/LayoutTests/platform/gtk/mathml/opentype/horizontal-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/horizontal-LatinModern-expected.png
</span><span class="cx">___________________________________________________________________
</span><a id="svnmimetype"></a>
<div class="addfile"><h4>Added: svn:mime-type</h4></div>
<a id="trunkLayoutTestsplatformgtkmathmlopentypehorizontalLatinModernexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/platform/gtk/mathml/opentype/horizontal-LatinModern-expected.txt (0 => 169607)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/platform/gtk/mathml/opentype/horizontal-LatinModern-expected.txt                                (rev 0)
+++ trunk/LayoutTests/platform/gtk/mathml/opentype/horizontal-LatinModern-expected.txt        2014-06-05 06:35:04 UTC (rev 169607)
</span><span class="lines">@@ -0,0 +1,572 @@
</span><ins>+layer at (0,0) size 800x600
+  RenderView at (0,0) size 800x600
+layer at (0,0) size 800x166
+  RenderBlock {HTML} at (0,0) size 800x166
+    RenderBody {BODY} at (8,16) size 784x134
+      RenderBlock {P} at (0,0) size 784x17
+        RenderMathMLMath {math} at (0,4) size 31x10 [padding: 0 1 0 1]
+          RenderMathMLUnderOver {mover} at (1,0) size 29x10
+            RenderMathMLSpace {mspace} at (3,8) size 23x2 [bgcolor=#0000FF]
+            RenderMathMLOperator {mo} at (-4,0) size 36x8
+              RenderMathMLBlock (anonymous, flex) at (3,0) size 29x8
+                RenderBlock (anonymous) at (0,0) size 12x8
+                  RenderText at (0,-36) size 12x80
+                    text run at (0,-36) width 12: &quot;\x{2190}&quot;
+        RenderText {#text} at (30,0) size 5x17
+          text run at (30,0) width 5: &quot; &quot;
+        RenderMathMLMath {math} at (34,4) size 32x10 [padding: 0 1 0 1]
+          RenderMathMLUnderOver {mover} at (1,0) size 29x10
+            RenderMathMLSpace {mspace} at (3,8) size 23x2 [bgcolor=#0000FF]
+            RenderMathMLOperator {mo} at (-4,0) size 36x8
+              RenderMathMLBlock (anonymous, flex) at (3,0) size 29x8
+                RenderBlock (anonymous) at (0,0) size 12x8
+                  RenderText at (0,-36) size 12x80
+                    text run at (0,-36) width 12: &quot;\x{2192}&quot;
+        RenderText {#text} at (65,0) size 5x17
+          text run at (65,0) width 5: &quot; &quot;
+        RenderMathMLMath {math} at (69,4) size 31x10 [padding: 0 1 0 1]
+          RenderMathMLUnderOver {mover} at (1,0) size 29x10
+            RenderMathMLSpace {mspace} at (3,8) size 23x2 [bgcolor=#0000FF]
+            RenderMathMLOperator {mo} at (-4,0) size 36x8
+              RenderMathMLBlock (anonymous, flex) at (3,0) size 29x8
+                RenderBlock (anonymous) at (0,0) size 12x8
+                  RenderText at (0,-36) size 12x80
+                    text run at (0,-36) width 12: &quot;\x{2194}&quot;
+        RenderText {#text} at (99,0) size 5x17
+          text run at (99,0) width 5: &quot; &quot;
+        RenderMathMLMath {math} at (103,4) size 32x10 [padding: 0 1 0 1]
+          RenderMathMLUnderOver {mover} at (1,0) size 29x10
+            RenderMathMLSpace {mspace} at (3,8) size 23x2 [bgcolor=#0000FF]
+            RenderMathMLOperator {mo} at (-4,0) size 36x8
+              RenderMathMLBlock (anonymous, flex) at (3,0) size 29x8
+                RenderBlock (anonymous) at (0,0) size 12x8
+                  RenderText at (0,-36) size 12x80
+                    text run at (0,-36) width 12: &quot;\x{21A4}&quot;
+        RenderText {#text} at (134,0) size 5x17
+          text run at (134,0) width 5: &quot; &quot;
+        RenderMathMLMath {math} at (138,4) size 32x10 [padding: 0 1 0 1]
+          RenderMathMLUnderOver {mover} at (1,0) size 29x10
+            RenderMathMLSpace {mspace} at (3,8) size 23x2 [bgcolor=#0000FF]
+            RenderMathMLOperator {mo} at (-4,0) size 36x8
+              RenderMathMLBlock (anonymous, flex) at (3,0) size 29x8
+                RenderBlock (anonymous) at (0,0) size 12x8
+                  RenderText at (0,-36) size 12x80
+                    text run at (0,-36) width 12: &quot;\x{21A6}&quot;
+        RenderText {#text} at (169,0) size 5x17
+          text run at (169,0) width 5: &quot; &quot;
+        RenderMathMLMath {math} at (173,5) size 31x9 [padding: 0 1 0 1]
+          RenderMathMLUnderOver {mover} at (1,0) size 29x9
+            RenderMathMLSpace {mspace} at (3,7) size 23x2 [bgcolor=#0000FF]
+            RenderMathMLOperator {mo} at (-4,0) size 36x7
+              RenderMathMLBlock (anonymous, flex) at (3,0) size 29x7
+                RenderBlock (anonymous) at (0,0) size 12x7
+                  RenderText at (0,-36) size 12x80
+                    text run at (0,-36) width 12: &quot;\x{21BC}&quot;
+        RenderText {#text} at (203,0) size 5x17
+          text run at (203,0) width 5: &quot; &quot;
+        RenderMathMLMath {math} at (207,7) size 32x7 [padding: 0 1 0 1]
+          RenderMathMLUnderOver {mover} at (1,0) size 29x7
+            RenderMathMLSpace {mspace} at (3,5) size 23x2 [bgcolor=#0000FF]
+            RenderMathMLOperator {mo} at (-4,0) size 36x5
+              RenderMathMLBlock (anonymous, flex) at (3,0) size 29x5
+                RenderBlock (anonymous) at (0,0) size 12x5
+                  RenderText at (0,-39) size 12x80
+                    text run at (0,-39) width 12: &quot;\x{21BD}&quot;
+        RenderText {#text} at (238,0) size 5x17
+          text run at (238,0) width 5: &quot; &quot;
+        RenderMathMLMath {math} at (242,5) size 32x9 [padding: 0 1 0 1]
+          RenderMathMLUnderOver {mover} at (1,0) size 29x9
+            RenderMathMLSpace {mspace} at (3,7) size 23x2 [bgcolor=#0000FF]
+            RenderMathMLOperator {mo} at (-4,0) size 36x7
+              RenderMathMLBlock (anonymous, flex) at (3,0) size 29x7
+                RenderBlock (anonymous) at (0,0) size 12x7
+                  RenderText at (0,-36) size 12x80
+                    text run at (0,-36) width 12: &quot;\x{21C0}&quot;
+        RenderText {#text} at (273,0) size 5x17
+          text run at (273,0) width 5: &quot; &quot;
+        RenderMathMLMath {math} at (277,4) size 31x10 [padding: 0 1 0 1]
+          RenderMathMLUnderOver {mover} at (1,0) size 29x10
+            RenderMathMLSpace {mspace} at (3,8) size 23x2 [bgcolor=#0000FF]
+            RenderMathMLOperator {mo} at (-4,0) size 36x8
+              RenderMathMLBlock (anonymous, flex) at (3,0) size 29x8
+                RenderBlock (anonymous) at (0,0) size 12x8
+                  RenderText at (0,-36) size 12x80
+                    text run at (0,-36) width 12: &quot;\x{21D0}&quot;
+        RenderText {#text} at (307,0) size 5x17
+          text run at (307,0) width 5: &quot; &quot;
+        RenderMathMLMath {math} at (311,4) size 32x10 [padding: 0 1 0 1]
+          RenderMathMLUnderOver {mover} at (1,0) size 29x10
+            RenderMathMLSpace {mspace} at (3,8) size 23x2 [bgcolor=#0000FF]
+            RenderMathMLOperator {mo} at (-4,0) size 36x8
+              RenderMathMLBlock (anonymous, flex) at (3,0) size 29x8
+                RenderBlock (anonymous) at (0,0) size 12x8
+                  RenderText at (0,-36) size 12x80
+                    text run at (0,-36) width 12: &quot;\x{21D2}&quot;
+        RenderText {#text} at (342,0) size 5x17
+          text run at (342,0) width 5: &quot; &quot;
+        RenderMathMLMath {math} at (346,4) size 32x10 [padding: 0 1 0 1]
+          RenderMathMLUnderOver {mover} at (1,0) size 29x10
+            RenderMathMLSpace {mspace} at (3,8) size 23x2 [bgcolor=#0000FF]
+            RenderMathMLOperator {mo} at (-4,0) size 36x8
+              RenderMathMLBlock (anonymous, flex) at (3,0) size 29x8
+                RenderBlock (anonymous) at (0,0) size 12x8
+                  RenderText at (0,-36) size 12x80
+                    text run at (0,-36) width 12: &quot;\x{21D4}&quot;
+        RenderText {#text} at (377,0) size 5x17
+          text run at (377,0) width 5: &quot; &quot;
+        RenderMathMLMath {math} at (381,2) size 31x12 [padding: 0 1 0 1]
+          RenderMathMLUnderOver {mover} at (1,0) size 29x12
+            RenderMathMLSpace {mspace} at (3,10) size 23x2 [bgcolor=#0000FF]
+            RenderMathMLOperator {mo} at (-4,0) size 36x10
+              RenderMathMLBlock (anonymous, flex) at (3,0) size 29x10
+                RenderBlock (anonymous) at (0,0) size 12x10
+                  RenderText at (0,-35) size 12x80
+                    text run at (0,-35) width 12: &quot;\x{21DA}&quot;
+        RenderText {#text} at (411,0) size 5x17
+          text run at (411,0) width 5: &quot; &quot;
+        RenderMathMLMath {math} at (415,2) size 32x12 [padding: 0 1 0 1]
+          RenderMathMLUnderOver {mover} at (1,0) size 29x12
+            RenderMathMLSpace {mspace} at (3,10) size 23x2 [bgcolor=#0000FF]
+            RenderMathMLOperator {mo} at (-4,0) size 36x10
+              RenderMathMLBlock (anonymous, flex) at (3,0) size 29x10
+                RenderBlock (anonymous) at (0,0) size 12x10
+                  RenderText at (0,-35) size 12x80
+                    text run at (0,-35) width 12: &quot;\x{21DB}&quot;
+        RenderText {#text} at (446,0) size 5x17
+          text run at (446,0) width 5: &quot; &quot;
+        RenderMathMLMath {math} at (450,9) size 25x5 [padding: 0 1 0 1]
+          RenderMathMLUnderOver {mover} at (1,0) size 22x5
+            RenderMathMLSpace {mspace} at (0,3) size 22x2 [bgcolor=#0000FF]
+            RenderMathMLOperator {mo} at (0,0) size 22x3
+              RenderMathMLBlock (anonymous, flex) at (0,0) size 22x3
+                RenderBlock (anonymous) at (0,0) size 4x3
+                  RenderText at (0,-34) size 4x80
+                    text run at (0,-34) width 4: &quot;\x{23B4}&quot;
+        RenderText {#text} at (474,0) size 5x17
+          text run at (474,0) width 5: &quot; &quot;
+        RenderMathMLMath {math} at (478,9) size 25x5 [padding: 0 1 0 1]
+          RenderMathMLUnderOver {mover} at (1,0) size 22x5
+            RenderMathMLSpace {mspace} at (0,3) size 22x2 [bgcolor=#0000FF]
+            RenderMathMLOperator {mo} at (0,0) size 22x3
+              RenderMathMLBlock (anonymous, flex) at (0,0) size 22x3
+                RenderBlock (anonymous) at (0,0) size 4x3
+                  RenderText at (0,-43) size 4x80
+                    text run at (0,-43) width 4: &quot;\x{23B5}&quot;
+        RenderText {#text} at (502,0) size 5x17
+          text run at (502,0) width 5: &quot; &quot;
+        RenderMathMLMath {math} at (506,8) size 27x6 [padding: 0 1 0 1]
+          RenderMathMLUnderOver {mover} at (1,0) size 24x6
+            RenderMathMLSpace {mspace} at (1,4) size 22x2 [bgcolor=#0000FF]
+            RenderMathMLOperator {mo} at (0,0) size 24x4
+              RenderMathMLBlock (anonymous, flex) at (0,0) size 24x4
+                RenderBlock (anonymous) at (0,0) size 6x4
+                  RenderText at (0,-34) size 6x80
+                    text run at (0,-34) width 6: &quot;\x{23DC}&quot;
+        RenderText {#text} at (532,0) size 5x17
+          text run at (532,0) width 5: &quot; &quot;
+        RenderMathMLMath {math} at (536,7) size 27x7 [padding: 0 1 0 1]
+          RenderMathMLUnderOver {mover} at (1,0) size 24x7
+            RenderMathMLSpace {mspace} at (1,5) size 22x2 [bgcolor=#0000FF]
+            RenderMathMLOperator {mo} at (0,0) size 24x5
+              RenderMathMLBlock (anonymous, flex) at (0,0) size 24x4
+                RenderBlock (anonymous) at (0,0) size 6x4
+                  RenderText at (0,-43) size 6x80
+                    text run at (0,-43) width 6: &quot;\x{23DD}&quot;
+        RenderText {#text} at (562,0) size 5x17
+          text run at (562,0) width 5: &quot; &quot;
+        RenderMathMLMath {math} at (566,8) size 27x6 [padding: 0 1 0 1]
+          RenderMathMLUnderOver {mover} at (1,0) size 24x6
+            RenderMathMLSpace {mspace} at (1,4) size 22x2 [bgcolor=#0000FF]
+            RenderMathMLOperator {mo} at (0,0) size 24x4
+              RenderMathMLBlock (anonymous, flex) at (0,0) size 24x4
+                RenderBlock (anonymous) at (0,0) size 6x4
+                  RenderText at (0,-33) size 6x80
+                    text run at (0,-33) width 6: &quot;\x{23DE}&quot;
+        RenderText {#text} at (592,0) size 5x17
+          text run at (592,0) width 5: &quot; &quot;
+        RenderMathMLMath {math} at (596,7) size 27x7 [padding: 0 1 0 1]
+          RenderMathMLUnderOver {mover} at (1,0) size 24x7
+            RenderMathMLSpace {mspace} at (1,5) size 22x2 [bgcolor=#0000FF]
+            RenderMathMLOperator {mo} at (0,0) size 24x5
+              RenderMathMLBlock (anonymous, flex) at (0,0) size 24x5
+                RenderBlock (anonymous) at (0,0) size 6x5
+                  RenderText at (0,-43) size 6x80
+                    text run at (0,-43) width 6: &quot;\x{23DF}&quot;
+        RenderText {#text} at (0,0) size 0x0
+      RenderBlock {P} at (0,33) size 784x34
+        RenderMathMLMath {math} at (0,4) size 59x10 [padding: 0 1 0 1]
+          RenderMathMLUnderOver {mover} at (1,0) size 57x10
+            RenderMathMLSpace {mspace} at (3,8) size 51x2 [bgcolor=#008000]
+            RenderMathMLOperator {mo} at (-4,0) size 64x8
+              RenderMathMLBlock (anonymous, flex) at (3,0) size 57x8
+                RenderBlock (anonymous) at (0,0) size 12x8
+                  RenderText at (0,-36) size 12x80
+                    text run at (0,-36) width 12: &quot;\x{2190}&quot;
+        RenderText {#text} at (58,0) size 5x17
+          text run at (58,0) width 5: &quot; &quot;
+        RenderMathMLMath {math} at (62,4) size 60x10 [padding: 0 1 0 1]
+          RenderMathMLUnderOver {mover} at (1,0) size 57x10
+            RenderMathMLSpace {mspace} at (3,8) size 51x2 [bgcolor=#008000]
+            RenderMathMLOperator {mo} at (-4,0) size 64x8
+              RenderMathMLBlock (anonymous, flex) at (3,0) size 57x8
+                RenderBlock (anonymous) at (0,0) size 12x8
+                  RenderText at (0,-36) size 12x80
+                    text run at (0,-36) width 12: &quot;\x{2192}&quot;
+        RenderText {#text} at (121,0) size 5x17
+          text run at (121,0) width 5: &quot; &quot;
+        RenderMathMLMath {math} at (125,4) size 59x10 [padding: 0 1 0 1]
+          RenderMathMLUnderOver {mover} at (1,0) size 57x10
+            RenderMathMLSpace {mspace} at (3,8) size 51x2 [bgcolor=#008000]
+            RenderMathMLOperator {mo} at (-4,0) size 64x8
+              RenderMathMLBlock (anonymous, flex) at (3,0) size 57x8
+                RenderBlock (anonymous) at (0,0) size 12x8
+                  RenderText at (0,-36) size 12x80
+                    text run at (0,-36) width 12: &quot;\x{2194}&quot;
+        RenderText {#text} at (183,0) size 5x17
+          text run at (183,0) width 5: &quot; &quot;
+        RenderMathMLMath {math} at (187,4) size 60x10 [padding: 0 1 0 1]
+          RenderMathMLUnderOver {mover} at (1,0) size 57x10
+            RenderMathMLSpace {mspace} at (3,8) size 51x2 [bgcolor=#008000]
+            RenderMathMLOperator {mo} at (-4,0) size 64x8
+              RenderMathMLBlock (anonymous, flex) at (3,0) size 57x8
+                RenderBlock (anonymous) at (0,0) size 12x8
+                  RenderText at (0,-36) size 12x80
+                    text run at (0,-36) width 12: &quot;\x{21A4}&quot;
+        RenderText {#text} at (246,0) size 5x17
+          text run at (246,0) width 5: &quot; &quot;
+        RenderMathMLMath {math} at (250,4) size 60x10 [padding: 0 1 0 1]
+          RenderMathMLUnderOver {mover} at (1,0) size 57x10
+            RenderMathMLSpace {mspace} at (3,8) size 51x2 [bgcolor=#008000]
+            RenderMathMLOperator {mo} at (-4,0) size 64x8
+              RenderMathMLBlock (anonymous, flex) at (3,0) size 57x8
+                RenderBlock (anonymous) at (0,0) size 12x8
+                  RenderText at (0,-36) size 12x80
+                    text run at (0,-36) width 12: &quot;\x{21A6}&quot;
+        RenderText {#text} at (309,0) size 5x17
+          text run at (309,0) width 5: &quot; &quot;
+        RenderMathMLMath {math} at (313,5) size 59x9 [padding: 0 1 0 1]
+          RenderMathMLUnderOver {mover} at (1,0) size 57x9
+            RenderMathMLSpace {mspace} at (3,7) size 51x2 [bgcolor=#008000]
+            RenderMathMLOperator {mo} at (-4,0) size 64x7
+              RenderMathMLBlock (anonymous, flex) at (3,0) size 57x7
+                RenderBlock (anonymous) at (0,0) size 12x7
+                  RenderText at (0,-36) size 12x80
+                    text run at (0,-36) width 12: &quot;\x{21BC}&quot;
+        RenderText {#text} at (371,0) size 5x17
+          text run at (371,0) width 5: &quot; &quot;
+        RenderMathMLMath {math} at (375,7) size 60x7 [padding: 0 1 0 1]
+          RenderMathMLUnderOver {mover} at (1,0) size 57x7
+            RenderMathMLSpace {mspace} at (3,5) size 51x2 [bgcolor=#008000]
+            RenderMathMLOperator {mo} at (-4,0) size 64x5
+              RenderMathMLBlock (anonymous, flex) at (3,0) size 57x5
+                RenderBlock (anonymous) at (0,0) size 12x5
+                  RenderText at (0,-39) size 12x80
+                    text run at (0,-39) width 12: &quot;\x{21BD}&quot;
+        RenderText {#text} at (434,0) size 5x17
+          text run at (434,0) width 5: &quot; &quot;
+        RenderMathMLMath {math} at (438,5) size 60x9 [padding: 0 1 0 1]
+          RenderMathMLUnderOver {mover} at (1,0) size 57x9
+            RenderMathMLSpace {mspace} at (3,7) size 51x2 [bgcolor=#008000]
+            RenderMathMLOperator {mo} at (-4,0) size 64x7
+              RenderMathMLBlock (anonymous, flex) at (3,0) size 57x7
+                RenderBlock (anonymous) at (0,0) size 12x7
+                  RenderText at (0,-36) size 12x80
+                    text run at (0,-36) width 12: &quot;\x{21C0}&quot;
+        RenderText {#text} at (497,0) size 5x17
+          text run at (497,0) width 5: &quot; &quot;
+        RenderMathMLMath {math} at (501,4) size 59x10 [padding: 0 1 0 1]
+          RenderMathMLUnderOver {mover} at (1,0) size 57x10
+            RenderMathMLSpace {mspace} at (3,8) size 51x2 [bgcolor=#008000]
+            RenderMathMLOperator {mo} at (-4,0) size 64x8
+              RenderMathMLBlock (anonymous, flex) at (3,0) size 57x8
+                RenderBlock (anonymous) at (0,0) size 12x8
+                  RenderText at (0,-36) size 12x80
+                    text run at (0,-36) width 12: &quot;\x{21D0}&quot;
+        RenderText {#text} at (559,0) size 5x17
+          text run at (559,0) width 5: &quot; &quot;
+        RenderMathMLMath {math} at (563,4) size 60x10 [padding: 0 1 0 1]
+          RenderMathMLUnderOver {mover} at (1,0) size 57x10
+            RenderMathMLSpace {mspace} at (3,8) size 51x2 [bgcolor=#008000]
+            RenderMathMLOperator {mo} at (-4,0) size 64x8
+              RenderMathMLBlock (anonymous, flex) at (3,0) size 57x8
+                RenderBlock (anonymous) at (0,0) size 12x8
+                  RenderText at (0,-36) size 12x80
+                    text run at (0,-36) width 12: &quot;\x{21D2}&quot;
+        RenderText {#text} at (622,0) size 5x17
+          text run at (622,0) width 5: &quot; &quot;
+        RenderMathMLMath {math} at (626,4) size 60x10 [padding: 0 1 0 1]
+          RenderMathMLUnderOver {mover} at (1,0) size 57x10
+            RenderMathMLSpace {mspace} at (3,8) size 51x2 [bgcolor=#008000]
+            RenderMathMLOperator {mo} at (-4,0) size 64x8
+              RenderMathMLBlock (anonymous, flex) at (3,0) size 57x8
+                RenderBlock (anonymous) at (0,0) size 12x8
+                  RenderText at (0,-36) size 12x80
+                    text run at (0,-36) width 12: &quot;\x{21D4}&quot;
+        RenderText {#text} at (685,0) size 5x17
+          text run at (685,0) width 5: &quot; &quot;
+        RenderMathMLMath {math} at (689,2) size 59x12 [padding: 0 1 0 1]
+          RenderMathMLUnderOver {mover} at (1,0) size 57x12
+            RenderMathMLSpace {mspace} at (3,10) size 51x2 [bgcolor=#008000]
+            RenderMathMLOperator {mo} at (-4,0) size 64x10
+              RenderMathMLBlock (anonymous, flex) at (3,0) size 57x10
+                RenderBlock (anonymous) at (0,0) size 12x10
+                  RenderText at (0,-35) size 12x80
+                    text run at (0,-35) width 12: &quot;\x{21DA}&quot;
+        RenderText {#text} at (0,0) size 0x0
+        RenderMathMLMath {math} at (0,19) size 59x12 [padding: 0 1 0 1]
+          RenderMathMLUnderOver {mover} at (1,0) size 57x12
+            RenderMathMLSpace {mspace} at (3,10) size 51x2 [bgcolor=#008000]
+            RenderMathMLOperator {mo} at (-4,0) size 64x10
+              RenderMathMLBlock (anonymous, flex) at (3,0) size 57x10
+                RenderBlock (anonymous) at (0,0) size 12x10
+                  RenderText at (0,-35) size 12x80
+                    text run at (0,-35) width 12: &quot;\x{21DB}&quot;
+        RenderText {#text} at (58,17) size 5x17
+          text run at (58,17) width 5: &quot; &quot;
+        RenderMathMLMath {math} at (62,19) size 53x12 [padding: 0 1 0 1]
+          RenderMathMLUnderOver {mover} at (1,0) size 50x12
+            RenderMathMLSpace {mspace} at (0,10) size 50x2 [bgcolor=#008000]
+            RenderMathMLOperator {mo} at (0,0) size 50x10
+              RenderMathMLBlock (anonymous, flex) at (0,0) size 50x10
+                RenderBlock (anonymous) at (0,0) size 4x10
+                  RenderText at (0,-34) size 4x80
+                    text run at (0,-34) width 4: &quot;\x{23B4}&quot;
+        RenderText {#text} at (114,17) size 5x17
+          text run at (114,17) width 5: &quot; &quot;
+        RenderMathMLMath {math} at (118,24) size 53x7 [padding: 0 1 0 1]
+          RenderMathMLUnderOver {mover} at (1,0) size 50x7
+            RenderMathMLSpace {mspace} at (0,5) size 50x2 [bgcolor=#008000]
+            RenderMathMLOperator {mo} at (0,0) size 50x5
+              RenderMathMLBlock (anonymous, flex) at (0,0) size 50x4
+                RenderBlock (anonymous) at (0,0) size 4x4
+                  RenderText at (0,-43) size 4x80
+                    text run at (0,-43) width 4: &quot;\x{23B5}&quot;
+        RenderText {#text} at (170,17) size 5x17
+          text run at (170,17) width 5: &quot; &quot;
+        RenderMathMLMath {math} at (174,19) size 53x12 [padding: 0 1 0 1]
+          RenderMathMLUnderOver {mover} at (1,0) size 50x12
+            RenderMathMLSpace {mspace} at (0,10) size 50x2 [bgcolor=#008000]
+            RenderMathMLOperator {mo} at (0,0) size 50x10
+              RenderMathMLBlock (anonymous, flex) at (0,0) size 50x10
+                RenderBlock (anonymous) at (0,0) size 6x10
+                  RenderText at (0,-34) size 6x80
+                    text run at (0,-34) width 6: &quot;\x{23DC}&quot;
+        RenderText {#text} at (226,17) size 5x17
+          text run at (226,17) width 5: &quot; &quot;
+        RenderMathMLMath {math} at (230,24) size 53x7 [padding: 0 1 0 1]
+          RenderMathMLUnderOver {mover} at (1,0) size 50x7
+            RenderMathMLSpace {mspace} at (0,5) size 50x2 [bgcolor=#008000]
+            RenderMathMLOperator {mo} at (0,0) size 50x5
+              RenderMathMLBlock (anonymous, flex) at (0,0) size 50x4
+                RenderBlock (anonymous) at (0,0) size 6x4
+                  RenderText at (0,-43) size 6x80
+                    text run at (0,-43) width 6: &quot;\x{23DD}&quot;
+        RenderText {#text} at (282,17) size 5x17
+          text run at (282,17) width 5: &quot; &quot;
+        RenderMathMLMath {math} at (286,18) size 53x13 [padding: 0 1 0 1]
+          RenderMathMLUnderOver {mover} at (1,0) size 50x13
+            RenderMathMLSpace {mspace} at (0,11) size 50x2 [bgcolor=#008000]
+            RenderMathMLOperator {mo} at (0,0) size 50x11
+              RenderMathMLBlock (anonymous, flex) at (0,0) size 50x11
+                RenderBlock (anonymous) at (0,0) size 6x11
+                  RenderText at (0,-33) size 6x80
+                    text run at (0,-33) width 6: &quot;\x{23DE}&quot;
+        RenderText {#text} at (338,17) size 5x17
+          text run at (338,17) width 5: &quot; &quot;
+        RenderMathMLMath {math} at (342,23) size 53x8 [padding: 0 1 0 1]
+          RenderMathMLUnderOver {mover} at (1,0) size 50x8
+            RenderMathMLSpace {mspace} at (0,6) size 50x2 [bgcolor=#008000]
+            RenderMathMLOperator {mo} at (0,0) size 50x6
+              RenderMathMLBlock (anonymous, flex) at (0,0) size 50x5
+                RenderBlock (anonymous) at (0,0) size 6x5
+                  RenderText at (0,-43) size 6x80
+                    text run at (0,-43) width 6: &quot;\x{23DF}&quot;
+        RenderText {#text} at (0,0) size 0x0
+      RenderBlock {P} at (0,83) size 784x51
+        RenderMathMLMath {math} at (0,4) size 109x10 [padding: 0 1 0 1]
+          RenderMathMLUnderOver {mover} at (1,0) size 107x10
+            RenderMathMLSpace {mspace} at (3,8) size 101x2 [bgcolor=#FF0000]
+            RenderMathMLOperator {mo} at (-4,0) size 114x8
+              RenderMathMLBlock (anonymous, flex) at (3,0) size 107x8
+                RenderBlock (anonymous) at (0,0) size 12x8
+                  RenderText at (0,-36) size 12x80
+                    text run at (0,-36) width 12: &quot;\x{2190}&quot;
+        RenderText {#text} at (108,0) size 5x17
+          text run at (108,0) width 5: &quot; &quot;
+        RenderMathMLMath {math} at (112,4) size 110x10 [padding: 0 1 0 1]
+          RenderMathMLUnderOver {mover} at (1,0) size 107x10
+            RenderMathMLSpace {mspace} at (3,8) size 101x2 [bgcolor=#FF0000]
+            RenderMathMLOperator {mo} at (-4,0) size 114x8
+              RenderMathMLBlock (anonymous, flex) at (3,0) size 107x8
+                RenderBlock (anonymous) at (0,0) size 12x8
+                  RenderText at (0,-36) size 12x80
+                    text run at (0,-36) width 12: &quot;\x{2192}&quot;
+        RenderText {#text} at (221,0) size 5x17
+          text run at (221,0) width 5: &quot; &quot;
+        RenderMathMLMath {math} at (225,4) size 109x10 [padding: 0 1 0 1]
+          RenderMathMLUnderOver {mover} at (1,0) size 107x10
+            RenderMathMLSpace {mspace} at (3,8) size 101x2 [bgcolor=#FF0000]
+            RenderMathMLOperator {mo} at (-4,0) size 114x8
+              RenderMathMLBlock (anonymous, flex) at (3,0) size 107x8
+                RenderBlock (anonymous) at (0,0) size 12x8
+                  RenderText at (0,-36) size 12x80
+                    text run at (0,-36) width 12: &quot;\x{2194}&quot;
+        RenderText {#text} at (333,0) size 5x17
+          text run at (333,0) width 5: &quot; &quot;
+        RenderMathMLMath {math} at (337,4) size 110x10 [padding: 0 1 0 1]
+          RenderMathMLUnderOver {mover} at (1,0) size 107x10
+            RenderMathMLSpace {mspace} at (3,8) size 101x2 [bgcolor=#FF0000]
+            RenderMathMLOperator {mo} at (-4,0) size 114x8
+              RenderMathMLBlock (anonymous, flex) at (3,0) size 107x8
+                RenderBlock (anonymous) at (0,0) size 12x8
+                  RenderText at (0,-36) size 12x80
+                    text run at (0,-36) width 12: &quot;\x{21A4}&quot;
+        RenderText {#text} at (446,0) size 5x17
+          text run at (446,0) width 5: &quot; &quot;
+        RenderMathMLMath {math} at (450,4) size 110x10 [padding: 0 1 0 1]
+          RenderMathMLUnderOver {mover} at (1,0) size 107x10
+            RenderMathMLSpace {mspace} at (3,8) size 101x2 [bgcolor=#FF0000]
+            RenderMathMLOperator {mo} at (-4,0) size 114x8
+              RenderMathMLBlock (anonymous, flex) at (3,0) size 107x8
+                RenderBlock (anonymous) at (0,0) size 12x8
+                  RenderText at (0,-36) size 12x80
+                    text run at (0,-36) width 12: &quot;\x{21A6}&quot;
+        RenderText {#text} at (559,0) size 5x17
+          text run at (559,0) width 5: &quot; &quot;
+        RenderMathMLMath {math} at (563,5) size 109x9 [padding: 0 1 0 1]
+          RenderMathMLUnderOver {mover} at (1,0) size 107x9
+            RenderMathMLSpace {mspace} at (3,7) size 101x2 [bgcolor=#FF0000]
+            RenderMathMLOperator {mo} at (-4,0) size 114x7
+              RenderMathMLBlock (anonymous, flex) at (3,0) size 107x7
+                RenderBlock (anonymous) at (0,0) size 12x7
+                  RenderText at (0,-36) size 12x80
+                    text run at (0,-36) width 12: &quot;\x{21BC}&quot;
+        RenderText {#text} at (0,0) size 0x0
+        RenderMathMLMath {math} at (0,24) size 109x7 [padding: 0 1 0 1]
+          RenderMathMLUnderOver {mover} at (1,0) size 107x7
+            RenderMathMLSpace {mspace} at (3,5) size 101x2 [bgcolor=#FF0000]
+            RenderMathMLOperator {mo} at (-4,0) size 114x5
+              RenderMathMLBlock (anonymous, flex) at (3,0) size 107x5
+                RenderBlock (anonymous) at (0,0) size 12x5
+                  RenderText at (0,-39) size 12x80
+                    text run at (0,-39) width 12: &quot;\x{21BD}&quot;
+        RenderText {#text} at (108,17) size 5x17
+          text run at (108,17) width 5: &quot; &quot;
+        RenderMathMLMath {math} at (112,22) size 110x9 [padding: 0 1 0 1]
+          RenderMathMLUnderOver {mover} at (1,0) size 107x9
+            RenderMathMLSpace {mspace} at (3,7) size 101x2 [bgcolor=#FF0000]
+            RenderMathMLOperator {mo} at (-4,0) size 114x7
+              RenderMathMLBlock (anonymous, flex) at (3,0) size 107x7
+                RenderBlock (anonymous) at (0,0) size 12x7
+                  RenderText at (0,-36) size 12x80
+                    text run at (0,-36) width 12: &quot;\x{21C0}&quot;
+        RenderText {#text} at (221,17) size 5x17
+          text run at (221,17) width 5: &quot; &quot;
+        RenderMathMLMath {math} at (225,21) size 109x10 [padding: 0 1 0 1]
+          RenderMathMLUnderOver {mover} at (1,0) size 107x10
+            RenderMathMLSpace {mspace} at (3,8) size 101x2 [bgcolor=#FF0000]
+            RenderMathMLOperator {mo} at (-4,0) size 114x8
+              RenderMathMLBlock (anonymous, flex) at (3,0) size 107x8
+                RenderBlock (anonymous) at (0,0) size 12x8
+                  RenderText at (0,-36) size 12x80
+                    text run at (0,-36) width 12: &quot;\x{21D0}&quot;
+        RenderText {#text} at (333,17) size 5x17
+          text run at (333,17) width 5: &quot; &quot;
+        RenderMathMLMath {math} at (337,21) size 110x10 [padding: 0 1 0 1]
+          RenderMathMLUnderOver {mover} at (1,0) size 107x10
+            RenderMathMLSpace {mspace} at (3,8) size 101x2 [bgcolor=#FF0000]
+            RenderMathMLOperator {mo} at (-4,0) size 114x8
+              RenderMathMLBlock (anonymous, flex) at (3,0) size 107x8
+                RenderBlock (anonymous) at (0,0) size 12x8
+                  RenderText at (0,-36) size 12x80
+                    text run at (0,-36) width 12: &quot;\x{21D2}&quot;
+        RenderText {#text} at (446,17) size 5x17
+          text run at (446,17) width 5: &quot; &quot;
+        RenderMathMLMath {math} at (450,21) size 110x10 [padding: 0 1 0 1]
+          RenderMathMLUnderOver {mover} at (1,0) size 107x10
+            RenderMathMLSpace {mspace} at (3,8) size 101x2 [bgcolor=#FF0000]
+            RenderMathMLOperator {mo} at (-4,0) size 114x8
+              RenderMathMLBlock (anonymous, flex) at (3,0) size 107x8
+                RenderBlock (anonymous) at (0,0) size 12x8
+                  RenderText at (0,-36) size 12x80
+                    text run at (0,-36) width 12: &quot;\x{21D4}&quot;
+        RenderText {#text} at (559,17) size 5x17
+          text run at (559,17) width 5: &quot; &quot;
+        RenderMathMLMath {math} at (563,19) size 109x12 [padding: 0 1 0 1]
+          RenderMathMLUnderOver {mover} at (1,0) size 107x12
+            RenderMathMLSpace {mspace} at (3,10) size 101x2 [bgcolor=#FF0000]
+            RenderMathMLOperator {mo} at (-4,0) size 114x10
+              RenderMathMLBlock (anonymous, flex) at (3,0) size 107x10
+                RenderBlock (anonymous) at (0,0) size 12x10
+                  RenderText at (0,-35) size 12x80
+                    text run at (0,-35) width 12: &quot;\x{21DA}&quot;
+        RenderText {#text} at (0,0) size 0x0
+        RenderMathMLMath {math} at (0,36) size 109x12 [padding: 0 1 0 1]
+          RenderMathMLUnderOver {mover} at (1,0) size 107x12
+            RenderMathMLSpace {mspace} at (3,10) size 101x2 [bgcolor=#FF0000]
+            RenderMathMLOperator {mo} at (-4,0) size 114x10
+              RenderMathMLBlock (anonymous, flex) at (3,0) size 107x10
+                RenderBlock (anonymous) at (0,0) size 12x10
+                  RenderText at (0,-35) size 12x80
+                    text run at (0,-35) width 12: &quot;\x{21DB}&quot;
+        RenderText {#text} at (108,34) size 5x17
+          text run at (108,34) width 5: &quot; &quot;
+        RenderMathMLMath {math} at (112,36) size 103x12 [padding: 0 1 0 1]
+          RenderMathMLUnderOver {mover} at (1,0) size 100x12
+            RenderMathMLSpace {mspace} at (0,10) size 100x2 [bgcolor=#FF0000]
+            RenderMathMLOperator {mo} at (0,0) size 100x10
+              RenderMathMLBlock (anonymous, flex) at (0,0) size 100x10
+                RenderBlock (anonymous) at (0,0) size 4x10
+                  RenderText at (0,-34) size 4x80
+                    text run at (0,-34) width 4: &quot;\x{23B4}&quot;
+        RenderText {#text} at (214,34) size 5x17
+          text run at (214,34) width 5: &quot; &quot;
+        RenderMathMLMath {math} at (218,41) size 103x7 [padding: 0 1 0 1]
+          RenderMathMLUnderOver {mover} at (1,0) size 100x7
+            RenderMathMLSpace {mspace} at (0,5) size 100x2 [bgcolor=#FF0000]
+            RenderMathMLOperator {mo} at (0,0) size 100x5
+              RenderMathMLBlock (anonymous, flex) at (0,0) size 100x4
+                RenderBlock (anonymous) at (0,0) size 4x4
+                  RenderText at (0,-43) size 4x80
+                    text run at (0,-43) width 4: &quot;\x{23B5}&quot;
+        RenderText {#text} at (320,34) size 5x17
+          text run at (320,34) width 5: &quot; &quot;
+        RenderMathMLMath {math} at (324,36) size 103x12 [padding: 0 1 0 1]
+          RenderMathMLUnderOver {mover} at (1,0) size 100x12
+            RenderMathMLSpace {mspace} at (0,10) size 100x2 [bgcolor=#FF0000]
+            RenderMathMLOperator {mo} at (0,0) size 100x10
+              RenderMathMLBlock (anonymous, flex) at (0,0) size 100x10
+                RenderBlock (anonymous) at (0,0) size 6x10
+                  RenderText at (0,-34) size 6x80
+                    text run at (0,-34) width 6: &quot;\x{23DC}&quot;
+        RenderText {#text} at (426,34) size 5x17
+          text run at (426,34) width 5: &quot; &quot;
+        RenderMathMLMath {math} at (430,41) size 103x7 [padding: 0 1 0 1]
+          RenderMathMLUnderOver {mover} at (1,0) size 100x7
+            RenderMathMLSpace {mspace} at (0,5) size 100x2 [bgcolor=#FF0000]
+            RenderMathMLOperator {mo} at (0,0) size 100x5
+              RenderMathMLBlock (anonymous, flex) at (0,0) size 100x4
+                RenderBlock (anonymous) at (0,0) size 6x4
+                  RenderText at (0,-43) size 6x80
+                    text run at (0,-43) width 6: &quot;\x{23DD}&quot;
+        RenderText {#text} at (532,34) size 5x17
+          text run at (532,34) width 5: &quot; &quot;
+        RenderMathMLMath {math} at (536,35) size 103x13 [padding: 0 1 0 1]
+          RenderMathMLUnderOver {mover} at (1,0) size 100x13
+            RenderMathMLSpace {mspace} at (0,11) size 100x2 [bgcolor=#FF0000]
+            RenderMathMLOperator {mo} at (0,0) size 100x11
+              RenderMathMLBlock (anonymous, flex) at (0,0) size 100x11
+                RenderBlock (anonymous) at (0,0) size 6x11
+                  RenderText at (0,-33) size 6x80
+                    text run at (0,-33) width 6: &quot;\x{23DE}&quot;
+        RenderText {#text} at (638,34) size 5x17
+          text run at (638,34) width 5: &quot; &quot;
+        RenderMathMLMath {math} at (642,40) size 103x8 [padding: 0 1 0 1]
+          RenderMathMLUnderOver {mover} at (1,0) size 100x8
+            RenderMathMLSpace {mspace} at (0,6) size 100x2 [bgcolor=#FF0000]
+            RenderMathMLOperator {mo} at (0,0) size 100x6
+              RenderMathMLBlock (anonymous, flex) at (0,0) size 100x5
+                RenderBlock (anonymous) at (0,0) size 6x5
+                  RenderText at (0,-43) size 6x80
+                    text run at (0,-43) width 6: &quot;\x{23DF}&quot;
+        RenderText {#text} at (0,0) size 0x0
</ins><span class="cx">Property changes on: trunk/LayoutTests/platform/gtk/mathml/opentype/horizontal-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="trunkLayoutTestsplatformgtkmathmlopentypehorizontalLatinModernmunderoverexpectedpng"></a>
<div class="binary"><h4>Added: trunk/LayoutTests/platform/gtk/mathml/opentype/horizontal-LatinModern-munderover-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/horizontal-LatinModern-munderover-expected.png
</span><span class="cx">___________________________________________________________________
</span><a id="svnmimetype"></a>
<div class="addfile"><h4>Added: svn:mime-type</h4></div>
<a id="trunkLayoutTestsplatformgtkmathmlopentypehorizontalLatinModernmunderoverexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/platform/gtk/mathml/opentype/horizontal-LatinModern-munderover-expected.txt (0 => 169607)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/platform/gtk/mathml/opentype/horizontal-LatinModern-munderover-expected.txt                                (rev 0)
+++ trunk/LayoutTests/platform/gtk/mathml/opentype/horizontal-LatinModern-munderover-expected.txt        2014-06-05 06:35:04 UTC (rev 169607)
</span><span class="lines">@@ -0,0 +1,103 @@
</span><ins>+layer at (0,0) size 800x600
+  RenderView at (0,0) size 800x600
+layer at (0,0) size 800x63
+  RenderBlock {HTML} at (0,0) size 800x63
+    RenderBody {BODY} at (8,16) size 784x31
+      RenderBlock {P} at (0,0) size 784x31
+        RenderMathMLMath {math} at (0,4) size 50x16 [padding: 0 1 0 1]
+          RenderMathMLRow {mstyle} at (1,0) size 48x16
+            RenderMathMLUnderOver {mover} at (0,0) size 48x8
+              RenderMathMLOperator {mo} at (0,2) size 48x6
+                RenderMathMLBlock (anonymous, flex) at (0,0) size 48x6
+                  RenderBlock (anonymous) at (0,0) size 8x6
+                    RenderText at (0,-44) size 8x106
+                      text run at (0,-44) width 8: &quot;\x{23DE}&quot;
+              RenderMathMLSpace {mspace} at (0,0) size 48x2 [bgcolor=#FF0000]
+        RenderText {#text} at (50,6) size 4x17
+          text run at (50,6) width 4: &quot; &quot;
+        RenderMathMLMath {math} at (54,7) size 66x13 [padding: 0 1 0 1]
+          RenderMathMLRow {mstyle} at (1,0) size 64x13
+            RenderMathMLUnderOver {mover} at (0,0) size 64x13
+              RenderMathMLSpace {mspace} at (0,11) size 64x2 [bgcolor=#FF0000]
+              RenderMathMLOperator {mo} at (0,0) size 64x11
+                RenderMathMLBlock (anonymous, flex) at (0,0) size 64x11
+                  RenderBlock (anonymous) at (0,0) size 6x11
+                    RenderText at (0,-33) size 6x80
+                      text run at (0,-33) width 6: &quot;\x{23DE}&quot;
+        RenderText {#text} at (120,6) size 4x17
+          text run at (120,6) width 4: &quot; &quot;
+        RenderMathMLMath {math} at (124,6) size 50x14 [padding: 0 1 0 1]
+          RenderMathMLRow {mstyle} at (1,0) size 48x14
+            RenderMathMLUnderOver {munder} at (0,0) size 48x8
+              RenderMathMLOperator {mo} at (0,0) size 48x6
+                RenderMathMLBlock (anonymous, flex) at (0,0) size 48x6
+                  RenderBlock (anonymous) at (0,0) size 8x6
+                    RenderText at (0,-44) size 8x106
+                      text run at (0,-44) width 8: &quot;\x{23DE}&quot;
+              RenderMathMLSpace {mspace} at (0,6) size 48x2 [bgcolor=#FF0000]
+        RenderText {#text} at (174,6) size 4x17
+          text run at (174,6) width 4: &quot; &quot;
+        RenderMathMLMath {math} at (178,7) size 66x24 [padding: 0 1 0 1]
+          RenderMathMLRow {mstyle} at (1,0) size 64x24
+            RenderMathMLUnderOver {munderover} at (0,0) size 64x24
+              RenderMathMLSpace {mspace} at (0,11) size 64x2 [bgcolor=#FF0000]
+              RenderMathMLOperator {mo} at (0,13) size 64x11
+                RenderMathMLBlock (anonymous, flex) at (0,0) size 64x11
+                  RenderBlock (anonymous) at (0,0) size 6x11
+                    RenderText at (0,-33) size 6x80
+                      text run at (0,-33) width 6: &quot;\x{23DE}&quot;
+              RenderMathMLOperator {mo} at (0,0) size 64x11
+                RenderMathMLBlock (anonymous, flex) at (0,0) size 64x11
+                  RenderBlock (anonymous) at (0,0) size 6x11
+                    RenderText at (0,-33) size 6x80
+                      text run at (0,-33) width 6: &quot;\x{23DE}&quot;
+        RenderText {#text} at (244,6) size 4x17
+          text run at (244,6) width 4: &quot; &quot;
+        RenderMathMLMath {math} at (248,0) size 50x20 [padding: 0 1 0 1]
+          RenderMathMLRow {mstyle} at (1,0) size 48x20
+            RenderMathMLUnderOver {munderover} at (0,0) size 48x14
+              RenderMathMLOperator {mo} at (0,6) size 48x6
+                RenderMathMLBlock (anonymous, flex) at (0,0) size 48x6
+                  RenderBlock (anonymous) at (0,0) size 8x6
+                    RenderText at (0,-44) size 8x106
+                      text run at (0,-44) width 8: &quot;\x{23DE}&quot;
+              RenderMathMLSpace {mspace} at (0,12) size 48x2 [bgcolor=#FF0000]
+              RenderMathMLOperator {mo} at (0,0) size 48x6
+                RenderMathMLBlock (anonymous, flex) at (0,0) size 48x6
+                  RenderBlock (anonymous) at (0,0) size 6x6
+                    RenderText at (0,-33) size 6x80
+                      text run at (0,-33) width 6: &quot;\x{23DE}&quot;
+        RenderText {#text} at (298,6) size 4x17
+          text run at (298,6) width 4: &quot; &quot;
+        RenderMathMLMath {math} at (302,4) size 50x16 [padding: 0 1 0 1]
+          RenderMathMLRow {mstyle} at (1,0) size 48x16
+            RenderMathMLUnderOver {munderover} at (0,0) size 48x14
+              RenderMathMLOperator {mo} at (0,2) size 48x6
+                RenderMathMLBlock (anonymous, flex) at (0,0) size 48x6
+                  RenderBlock (anonymous) at (0,0) size 8x6
+                    RenderText at (0,-44) size 8x106
+                      text run at (0,-44) width 8: &quot;\x{23DE}&quot;
+              RenderMathMLOperator {mo} at (0,8) size 48x6
+                RenderMathMLBlock (anonymous, flex) at (0,0) size 48x6
+                  RenderBlock (anonymous) at (0,0) size 6x6
+                    RenderText at (0,-33) size 6x80
+                      text run at (0,-33) width 6: &quot;\x{23DE}&quot;
+              RenderMathMLSpace {mspace} at (0,0) size 48x2 [bgcolor=#FF0000]
+        RenderText {#text} at (352,6) size 4x17
+          text run at (352,6) width 4: &quot; &quot;
+        RenderMathMLMath {math} at (356,4) size 50x16 [padding: 0 1 0 1]
+          RenderMathMLRow {mstyle} at (1,0) size 48x16
+            RenderMathMLUnderOver {munder} at (0,0) size 48x14
+              RenderMathMLUnderOver {mover} at (0,0) size 48x8
+                RenderMathMLOperator {mo} at (0,2) size 48x6
+                  RenderMathMLBlock (anonymous, flex) at (0,0) size 48x6
+                    RenderBlock (anonymous) at (0,0) size 8x6
+                      RenderText at (0,-44) size 8x106
+                        text run at (0,-44) width 8: &quot;\x{23DE}&quot;
+                RenderMathMLSpace {mspace} at (0,0) size 48x2 [bgcolor=#FF0000]
+              RenderMathMLOperator {mo} at (0,8) size 48x6
+                RenderMathMLBlock (anonymous, flex) at (0,0) size 48x6
+                  RenderBlock (anonymous) at (0,0) size 6x6
+                    RenderText at (0,-33) size 6x80
+                      text run at (0,-33) width 6: &quot;\x{23DE}&quot;
+        RenderText {#text} at (0,0) size 0x0
</ins><span class="cx">Property changes on: trunk/LayoutTests/platform/gtk/mathml/opentype/horizontal-LatinModern-munderover-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="trunkLayoutTestsplatformgtkmathmlopentypeopentypestretchyhorizontalexpectedpng"></a>
<div class="binary"><h4>Added: trunk/LayoutTests/platform/gtk/mathml/opentype/opentype-stretchy-horizontal-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/opentype-stretchy-horizontal-expected.png
</span><span class="cx">___________________________________________________________________
</span><a id="svnmimetype"></a>
<div class="addfile"><h4>Added: svn:mime-type</h4></div>
<a id="trunkLayoutTestsplatformgtkmathmlopentypeopentypestretchyhorizontalexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/platform/gtk/mathml/opentype/opentype-stretchy-horizontal-expected.txt (0 => 169607)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/platform/gtk/mathml/opentype/opentype-stretchy-horizontal-expected.txt                                (rev 0)
+++ trunk/LayoutTests/platform/gtk/mathml/opentype/opentype-stretchy-horizontal-expected.txt        2014-06-05 06:35:04 UTC (rev 169607)
</span><span class="lines">@@ -0,0 +1,38 @@
</span><ins>+layer at (0,0) size 800x600
+  RenderView at (0,0) size 800x600
+layer at (0,0) size 800x157
+  RenderBlock {HTML} at (0,0) size 800x157
+    RenderBody {BODY} at (8,16) size 784x125
+      RenderBlock {P} at (0,0) size 784x25
+        RenderMathMLMath {math} at (0,2) size 18x23 [padding: 0 1 0 1]
+          RenderMathMLRow {mstyle} at (1,0) size 16x23
+            RenderMathMLUnderOver {mover} at (0,0) size 16x23
+              RenderMathMLOperator {mo} at (-5,1) size 26x22
+                RenderMathMLBlock (anonymous, flex) at (2,0) size 21x4
+                  RenderBlock (anonymous) at (0,0) size 1x4
+                    RenderText at (0,-3) size 1x0
+                      text run at (0,-3) width 1: &quot;\x{219C}&quot;
+              RenderMathMLSpace {mspace} at (4,0) size 8x1
+        RenderText {#text} at (0,0) size 0x0
+      RenderBlock {P} at (0,41) size 784x25
+        RenderMathMLMath {math} at (0,2) size 28x23 [padding: 0 1 0 1]
+          RenderMathMLRow {mstyle} at (1,0) size 26x23
+            RenderMathMLUnderOver {mover} at (0,0) size 26x23
+              RenderMathMLOperator {mo} at (-6,1) size 38x22
+                RenderMathMLBlock (anonymous, flex) at (2,0) size 32x4
+                  RenderBlock (anonymous) at (0,0) size 1x4
+                    RenderText at (0,-3) size 1x0
+                      text run at (0,-3) width 1: &quot;\x{219C}&quot;
+              RenderMathMLSpace {mspace} at (5,0) size 16x1
+        RenderText {#text} at (0,0) size 0x0
+      RenderBlock {P} at (0,82) size 784x43
+        RenderMathMLMath {math} at (0,0) size 158x43 [padding: 0 1 0 1]
+          RenderMathMLRow {mstyle} at (1,0) size 156x43
+            RenderMathMLUnderOver {mover} at (0,0) size 156x43
+              RenderMathMLOperator {mo} at (-3,1) size 162x42
+                RenderMathMLBlock (anonymous, flex) at (2,0) size 157x4
+                  RenderBlock (anonymous) at (0,0) size 1x4
+                    RenderText at (0,-3) size 1x0
+                      text run at (0,-3) width 1: &quot;\x{219C}&quot;
+              RenderMathMLSpace {mspace} at (2,0) size 151x1
+        RenderText {#text} at (0,0) size 0x0
</ins><span class="cx">Property changes on: trunk/LayoutTests/platform/gtk/mathml/opentype/opentype-stretchy-horizontal-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="trunkLayoutTestsplatformmacTestExpectations"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/platform/mac/TestExpectations (169606 => 169607)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/platform/mac/TestExpectations        2014-06-05 04:52:57 UTC (rev 169606)
+++ trunk/LayoutTests/platform/mac/TestExpectations        2014-06-05 06:35:04 UTC (rev 169607)
</span><span class="lines">@@ -1325,6 +1325,9 @@
</span><span class="cx"> webkit.org/b/130322 [ MountainLion Mavericks ] mathml/opentype/large-operators-LatinModern.html [ Failure ]
</span><span class="cx"> webkit.org/b/130322 [ MountainLion Mavericks ] mathml/opentype/opentype-stretchy.html [ Failure ]
</span><span class="cx"> webkit.org/b/130322 [ MountainLion Mavericks ] mathml/opentype/vertical-LatinModern.html [ Failure ]
</span><ins>+webkit.org/b/72828 mathml/opentype/horizontal-LatinModern.html [ Failure ]
+webkit.org/b/72828 mathml/opentype/opentype-stretchy-horizontal.html [ Failure ]
+webkit.org/b/72828 mathml/opentype/horizontal-LatinModern-munderover.html [ Failure ]
</ins><span class="cx"> 
</span><span class="cx"> # WebKitDataCue is supported, not DataCue
</span><span class="cx"> media/track/track-datacue.html [ Skip ]
</span></span></pre></div>
<a id="trunkLayoutTestsplatformwinTestExpectations"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/platform/win/TestExpectations (169606 => 169607)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/platform/win/TestExpectations        2014-06-05 04:52:57 UTC (rev 169606)
+++ trunk/LayoutTests/platform/win/TestExpectations        2014-06-05 06:35:04 UTC (rev 169607)
</span><span class="lines">@@ -2746,3 +2746,6 @@
</span><span class="cx"> webkit.org/b/130322 mathml/opentype/large-operators-LatinModern.html [ Failure ]
</span><span class="cx"> webkit.org/b/130322 mathml/opentype/opentype-stretchy.html [ Failure ]
</span><span class="cx"> webkit.org/b/130322 mathml/opentype/vertical-LatinModern.html [ Failure ]
</span><ins>+webkit.org/b/72828 mathml/opentype/horizontal-LatinModern.html [ Failure ]
+webkit.org/b/72828 mathml/opentype/opentype-stretchy-horizontal.html [ Failure ]
+webkit.org/b/72828 mathml/opentype/horizontal-LatinModern-munderover.html [ Failure ]
</ins></span></pre></div>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (169606 => 169607)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2014-06-05 04:52:57 UTC (rev 169606)
+++ trunk/Source/WebCore/ChangeLog        2014-06-05 06:35:04 UTC (rev 169607)
</span><span class="lines">@@ -1,3 +1,49 @@
</span><ins>+2014-06-05  Frédéric Wang  &lt;fred.wang@free.fr&gt;
+
+        MathML operators not stretched horizontally
+        https://bugs.webkit.org/show_bug.cgi?id=72828
+
+        Reviewed by Chris Fleizach.
+
+        This patch adds basic horizontal stretching rules for operators inside
+        an &lt;munder&gt;, &lt;mover&gt; or &lt;munderover&gt; elements. The stretchy operators
+        in such an element stretch to cover the size of the non-stretchy
+        operators. This only works when fonts that have an OpenType MATH table
+        are used.
+
+        Tests: mathml/opentype/horizontal-LatinModern.html
+               mathml/opentype/opentype-stretchy-horizontal.html
+               mathml/opentype/horizontal-LatinModern-munderover.html
+
+        * rendering/mathml/RenderMathMLOperator.cpp:
+        (WebCore::MathMLOperatorDictionary::ExtractKeyHorizontal): We add an ordered list of operators that have horizontal stretch direction.
+        (WebCore::RenderMathMLOperator::RenderMathMLOperator): init m_Vertical
+        (WebCore::RenderMathMLOperator::SetOperatorProperties): set m_Vertical by checking whether the operator is in the horizontalOperators list.
+        (WebCore::RenderMathMLOperator::stretchTo): We do not stretch vertically
+        if the operator has horizontal direction.
+        We also add a new version stretchTo(LayoutUnit width) for horizontal stretching only.
+        (WebCore::RenderMathMLOperator::computePreferredLogicalWidths): Handle horizontal stretching: the maximumGlyphWidth is the maximum of
+        the base size or of the stretch size.
+        (WebCore::RenderMathMLOperator::getDisplayStyleLargeOperator): Add an ASSERT to ensure that this function is only called for vertical stretching.
+        (WebCore::RenderMathMLOperator::findStretchyData): Add an ASSERT to ensure that this function is not called to get the maximum width of a horizontal stretchy operator.
+        We take into account m_isVertical when calling getMathVariants or computing sizes.
+        There is not any Unicode-only construction for horizontal stretching, so a MATH table is required for horizontal stretching.
+        (WebCore::RenderMathMLOperator::updateStyle): Ignore some code paths specific to vertical stretching and take into account the m_Vertical parameters.
+        For horizontal stretching, the m_stretch*Baseline parameters are now updated to match the metrics of the size variant or of the maximum of the parts in the glyph assembly.
+        (WebCore::RenderMathMLOperator::computeLogicalHeight): logicalHeight is now explicitely the sum of m_stretchHeightAboveBaseline and m_stretchDepthBelowBaseline, since it can be different from the stretchSize() in horizontal stretching.
+        (WebCore::RenderMathMLOperator::paintGlyph): handle trimming for horizontal stretching.
+        (WebCore::RenderMathMLOperator::fillWithVerticalExtensionGlyph): rename the function and ensure it is only call for m_isVertical.
+        (WebCore::RenderMathMLOperator::fillWithHorizontalExtensionGlyph): same as fillWithVerticalExtensionGlyph, but for horizontal stretching.
+        (WebCore::RenderMathMLOperator::paint): For glyph assembly, choose between paintVerticalGlyphAssembly or paintHorizontalGlyphAssembly.
+        (WebCore::RenderMathMLOperator::paintVerticalGlyphAssembly): rename the function and ensure it is only call for m_isVertical.
+        (WebCore::RenderMathMLOperator::paintHorizontalGlyphAssembly): same as paintVerticalGlyphAssembly but for horizontal stretching.
+        * rendering/mathml/RenderMathMLOperator.h: we add a m_isVertical member to indicate the stretch direction and a m_stretchWidth to indicate the width of the stretchy character.
+        We define the horizontal counterparts of fillWith*ExtensionGlyph, paint*GlyphAssembly, GlyphPaintTrimming  StretchyData.
+        Finally stretchSize() takes into account the stretch direction.
+        * rendering/mathml/RenderMathMLUnderOver.cpp: We override the layout() function to stretch munderover children horizontally.
+        (WebCore::RenderMathMLUnderOver::layout):
+        * rendering/mathml/RenderMathMLUnderOver.h: we declare layout().
+
</ins><span class="cx"> 2014-06-04  Bem Jones-Bey  &lt;bjonesbe@adobe.com&gt;
</span><span class="cx"> 
</span><span class="cx">         [CSS Shapes] Image lifetime is not properly handled for gradient shapes
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingmathmlRenderMathMLOperatorcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/mathml/RenderMathMLOperator.cpp (169606 => 169607)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/mathml/RenderMathMLOperator.cpp        2014-06-05 04:52:57 UTC (rev 169606)
+++ trunk/Source/WebCore/rendering/mathml/RenderMathMLOperator.cpp        2014-06-05 06:35:04 UTC (rev 169607)
</span><span class="lines">@@ -1125,6 +1125,12 @@
</span><span class="cx">     { 0x2B46, Infix, 5, 5, Stretchy} // RIGHTWARDS QUADRUPLE ARROW
</span><span class="cx"> };
</span><span class="cx"> 
</span><ins>+// A list of operators that stretch in the horizontal direction. This has been generated from Mozilla's MathML operator dictionary.
+inline UChar ExtractKeyHorizontal(const UChar* entry) { return *entry; }
+static const UChar horizontalOperators[] = {
+    0x003D, 0x005E, 0x005F, 0x007E, 0x00AF, 0x02C6, 0x02C7, 0x02C9, 0x02CD, 0x02DC, 0x02F7, 0x0302, 0x0332, 0x203E, 0x20D0, 0x20D1, 0x20D6, 0x20D7, 0x20E1, 0x2190, 0x2192, 0x2194, 0x2198, 0x2199, 0x219C, 0x219D, 0x219E, 0x21A0, 0x21A2, 0x21A3, 0x21A4, 0x21A6, 0x21A9, 0x21AA, 0x21AB, 0x21AC, 0x21AD, 0x21B4, 0x21B9, 0x21BC, 0x21BD, 0x21C0, 0x21C1, 0x21C4, 0x21C6, 0x21C7, 0x21C9, 0x21CB, 0x21CC, 0x21D0, 0x21D2, 0x21D4, 0x21DA, 0x21DB, 0x21DC, 0x21DD, 0x21E0, 0x21E2, 0x21E4, 0x21E5, 0x21E6, 0x21E8, 0x21F0, 0x21F6, 0x21FD, 0x21FE, 0x21FF, 0x23B4, 0x23B5, 0x23DC, 0x23DD, 0x23DE, 0x23DF, 0x23E0, 0x23E1, 0x2500, 0x27F5, 0x27F6, 0x27F7, 0x27F8, 0x27F9, 0x27FA, 0x27FB, 0x27FC, 0x27FD, 0x27FE, 0x27FF, 0x290C, 0x290D, 0x290E, 0x290F, 0x2910, 0x294E, 0x2950, 0x2952, 0x2953, 0x2956, 0x2957, 0x295A, 0x295B, 0x295E, 0x295F, 0x2B45, 0x2B46, 0xFE35, 0xFE36, 0xFE37, 0xFE38
+};
+
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> RenderMathMLOperator::RenderMathMLOperator(MathMLElement&amp; element, PassRef&lt;RenderStyle&gt; style)
</span><span class="lines">@@ -1132,6 +1138,7 @@
</span><span class="cx">     , m_stretchHeightAboveBaseline(0)
</span><span class="cx">     , m_stretchDepthBelowBaseline(0)
</span><span class="cx">     , m_operator(0)
</span><ins>+    , m_isVertical(true)
</ins><span class="cx"> {
</span><span class="cx">     updateTokenContent();
</span><span class="cx"> }
</span><span class="lines">@@ -1141,6 +1148,7 @@
</span><span class="cx">     , m_stretchHeightAboveBaseline(0)
</span><span class="cx">     , m_stretchDepthBelowBaseline(0)
</span><span class="cx">     , m_operator(0)
</span><ins>+    , m_isVertical(true)
</ins><span class="cx">     , m_operatorForm(form)
</span><span class="cx">     , m_operatorFlags(flag)
</span><span class="cx"> {
</span><span class="lines">@@ -1173,6 +1181,9 @@
</span><span class="cx"> 
</span><span class="cx"> void RenderMathMLOperator::SetOperatorProperties()
</span><span class="cx"> {
</span><ins>+    // We determine the stretch direction (default is vertical).
+    m_isVertical = !(tryBinarySearch&lt;const UChar, UChar&gt;(MathMLOperatorDictionary::horizontalOperators, WTF_ARRAY_LENGTH(MathMLOperatorDictionary::horizontalOperators), m_operator, MathMLOperatorDictionary::ExtractKeyHorizontal));
+
</ins><span class="cx">     // We determine the form of the operator.
</span><span class="cx">     bool explicitForm = true;
</span><span class="cx">     if (!isFencedOperator()) {
</span><span class="lines">@@ -1253,7 +1264,7 @@
</span><span class="cx"> 
</span><span class="cx"> void RenderMathMLOperator::stretchTo(LayoutUnit heightAboveBaseline, LayoutUnit depthBelowBaseline)
</span><span class="cx"> {
</span><del>-    if (heightAboveBaseline == m_stretchHeightAboveBaseline &amp;&amp; depthBelowBaseline == m_stretchDepthBelowBaseline)
</del><ins>+    if (!m_isVertical || (heightAboveBaseline == m_stretchHeightAboveBaseline &amp;&amp; depthBelowBaseline == m_stretchDepthBelowBaseline))
</ins><span class="cx">         return;
</span><span class="cx"> 
</span><span class="cx">     m_stretchHeightAboveBaseline = heightAboveBaseline;
</span><span class="lines">@@ -1283,6 +1294,18 @@
</span><span class="cx">     updateStyle();
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+void RenderMathMLOperator::stretchTo(LayoutUnit width)
+{
+    if (m_isVertical || m_stretchWidth == width)
+        return;
+
+    m_stretchWidth = width;
+
+    SetOperatorProperties();
+
+    updateStyle();
+}
+
</ins><span class="cx"> FloatRect RenderMathMLOperator::boundsForGlyph(const GlyphData&amp; data) const
</span><span class="cx"> {
</span><span class="cx">     return data.fontData-&gt;boundsForGlyph(data.glyph);
</span><span class="lines">@@ -1318,6 +1341,13 @@
</span><span class="cx"> 
</span><span class="cx">     GlyphData data = style().font().glyphDataForCharacter(m_operator, false);
</span><span class="cx">     float maximumGlyphWidth = advanceForGlyph(data);
</span><ins>+    if (!m_isVertical) {
+        if (maximumGlyphWidth &lt; stretchSize())
+            maximumGlyphWidth = stretchSize();
+        m_maxPreferredLogicalWidth = m_leadingSpace + maximumGlyphWidth + m_trailingSpace;
+        m_minPreferredLogicalWidth = m_maxPreferredLogicalWidth;
+        return;
+    }
</ins><span class="cx">     if (isLargeOperatorInDisplayStyle()) {
</span><span class="cx">         // Large operators in STIX Word have incorrect advance width, causing misplacement of superscript, so we use the glyph bound instead (http://sourceforge.net/p/stixfonts/tracking/49/).
</span><span class="cx">         StretchyData largeOperator = getDisplayStyleLargeOperator(m_operator);
</span><span class="lines">@@ -1481,7 +1511,7 @@
</span><span class="cx"> {
</span><span class="cx">     StretchyData data;
</span><span class="cx"> 
</span><del>-    ASSERT(isLargeOperatorInDisplayStyle());
</del><ins>+    ASSERT(m_isVertical &amp;&amp; isLargeOperatorInDisplayStyle());
</ins><span class="cx"> 
</span><span class="cx">     const auto&amp; primaryFontData = style().font().primaryFont();
</span><span class="cx">     GlyphData baseGlyph = style().font().glyphDataForCharacter(character, false);
</span><span class="lines">@@ -1510,6 +1540,8 @@
</span><span class="cx"> 
</span><span class="cx"> RenderMathMLOperator::StretchyData RenderMathMLOperator::findStretchyData(UChar character, float* maximumGlyphWidth)
</span><span class="cx"> {
</span><ins>+    ASSERT(!maximumGlyphWidth || m_isVertical);
+
</ins><span class="cx">     StretchyData data;
</span><span class="cx">     StretchyData assemblyData;
</span><span class="cx"> 
</span><span class="lines">@@ -1519,7 +1551,7 @@
</span><span class="cx">     if (primaryFontData &amp;&amp; primaryFontData-&gt;mathData() &amp;&amp; baseGlyph.fontData == primaryFontData) {
</span><span class="cx">         Vector&lt;Glyph&gt; sizeVariants;
</span><span class="cx">         Vector&lt;OpenTypeMathData::AssemblyPart&gt; assemblyParts;
</span><del>-        primaryFontData-&gt;mathData()-&gt;getMathVariants(baseGlyph.glyph, true, sizeVariants, assemblyParts);
</del><ins>+        primaryFontData-&gt;mathData()-&gt;getMathVariants(baseGlyph.glyph, m_isVertical, sizeVariants, assemblyParts);
</ins><span class="cx">         // We verify the size variants.
</span><span class="cx">         for (auto&amp; variant : sizeVariants) {
</span><span class="cx">             GlyphData sizeVariant;
</span><span class="lines">@@ -1529,7 +1561,8 @@
</span><span class="cx">                 *maximumGlyphWidth = std::max(*maximumGlyphWidth, advanceForGlyph(sizeVariant));
</span><span class="cx">             else {
</span><span class="cx">                 data.setSizeVariantMode(sizeVariant);
</span><del>-                if (heightForGlyph(sizeVariant) &gt;= stretchSize())
</del><ins>+                float size = m_isVertical ? heightForGlyph(sizeVariant) : advanceForGlyph(sizeVariant);
+                if (size &gt;= stretchSize()) 
</ins><span class="cx">                     return data;
</span><span class="cx">             }
</span><span class="cx">         }
</span><span class="lines">@@ -1538,6 +1571,9 @@
</span><span class="cx">         if (!getGlyphAssemblyFallBack(assemblyParts, assemblyData))
</span><span class="cx">             return data;
</span><span class="cx">     } else {
</span><ins>+        if (!m_isVertical)
+            return data;
+
</ins><span class="cx">         // If the font does not have a MATH table, we fallback to the Unicode-only constructions.
</span><span class="cx">         const StretchyCharacter* stretchyCharacter = nullptr;
</span><span class="cx">         const unsigned maxIndex = WTF_ARRAY_LENGTH(stretchyCharacters);
</span><span class="lines">@@ -1574,11 +1610,18 @@
</span><span class="cx">         return assemblyData;
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    // We ensure that the stretch height is large enough to avoid glyph overlaps.
-    float height = heightForGlyph(assemblyData.top()) + heightForGlyph(assemblyData.bottom());
-    if (assemblyData.middle().glyph)
-        height += heightForGlyph(assemblyData.middle());
-    if (height &gt; stretchSize())
</del><ins>+    // We ensure that the size is large enough to avoid glyph overlaps.
+    float size;
+    if (m_isVertical) {
+        size = heightForGlyph(assemblyData.top()) + heightForGlyph(assemblyData.bottom());
+        if (assemblyData.middle().glyph)
+            size += heightForGlyph(assemblyData.middle());
+    } else {
+        size = advanceForGlyph(assemblyData.left()) + advanceForGlyph(assemblyData.right());
+        if (assemblyData.middle().glyph)
+            size += advanceForGlyph(assemblyData.middle());
+    }
+    if (size &gt; stretchSize())
</ins><span class="cx">         return data;
</span><span class="cx"> 
</span><span class="cx">     return assemblyData;
</span><span class="lines">@@ -1606,18 +1649,18 @@
</span><span class="cx">     if (!shouldAllowStretching())
</span><span class="cx">         return;
</span><span class="cx"> 
</span><del>-    if (isLargeOperatorInDisplayStyle())
</del><ins>+    if (m_isVertical &amp;&amp; isLargeOperatorInDisplayStyle())
</ins><span class="cx">         m_stretchyData = getDisplayStyleLargeOperator(m_operator);
</span><span class="cx">     else {
</span><span class="cx">         // We do not stretch if the base glyph is large enough.
</span><span class="cx">         GlyphData baseGlyph = style().font().glyphDataForCharacter(m_operator, false);
</span><del>-        float baseHeight = heightForGlyph(baseGlyph);
-        if (stretchSize() &lt;= baseHeight)
</del><ins>+        float baseSize = m_isVertical ? heightForGlyph(baseGlyph) : advanceForGlyph(baseGlyph);
+        if (stretchSize() &lt;= baseSize)
</ins><span class="cx">             return;
</span><span class="cx">         m_stretchyData = findStretchyData(m_operator, nullptr);
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    if (m_stretchyData.mode() == DrawSizeVariant) {
</del><ins>+    if (m_isVertical &amp;&amp; m_stretchyData.mode() == DrawSizeVariant) {
</ins><span class="cx">         // We resize the operator to match the one of the size variant.
</span><span class="cx">         if (isLargeOperatorInDisplayStyle()) {
</span><span class="cx">             // The stretch size is actually not involved in the selection of the size variant in getDisplayStyleLargeOperator.
</span><span class="lines">@@ -1634,6 +1677,37 @@
</span><span class="cx">             m_stretchDepthBelowBaseline *= aspect;
</span><span class="cx">         }
</span><span class="cx">     }
</span><ins>+
+    if (!m_isVertical) {
+        if (m_stretchyData.mode() == DrawSizeVariant) {
+            FloatRect glyphBounds = boundsForGlyph(m_stretchyData.variant());
+            m_stretchHeightAboveBaseline = -glyphBounds.y();
+            m_stretchDepthBelowBaseline = glyphBounds.maxY();
+            m_stretchWidth = advanceForGlyph(m_stretchyData.variant());
+        } else if (m_stretchyData.mode() == DrawGlyphAssembly) {
+            FloatRect glyphBounds;
+            m_stretchHeightAboveBaseline = 0;
+            m_stretchDepthBelowBaseline = 0;
+
+            glyphBounds = boundsForGlyph(m_stretchyData.left());
+            m_stretchHeightAboveBaseline = std::max&lt;LayoutUnit&gt;(m_stretchHeightAboveBaseline, -glyphBounds.y());
+            m_stretchDepthBelowBaseline = std::max&lt;LayoutUnit&gt;(m_stretchDepthBelowBaseline, glyphBounds.maxY());
+
+            glyphBounds = boundsForGlyph(m_stretchyData.right());
+            m_stretchHeightAboveBaseline = std::max&lt;LayoutUnit&gt;(m_stretchHeightAboveBaseline, -glyphBounds.y());
+            m_stretchDepthBelowBaseline = std::max&lt;LayoutUnit&gt;(m_stretchDepthBelowBaseline, glyphBounds.maxY());
+
+            glyphBounds = boundsForGlyph(m_stretchyData.extension());
+            m_stretchHeightAboveBaseline = std::max&lt;LayoutUnit&gt;(m_stretchHeightAboveBaseline, -glyphBounds.y());
+            m_stretchDepthBelowBaseline = std::max&lt;LayoutUnit&gt;(m_stretchDepthBelowBaseline, glyphBounds.maxY());
+
+            if (m_stretchyData.middle().glyph) {
+                glyphBounds = boundsForGlyph(m_stretchyData.middle());
+                m_stretchHeightAboveBaseline = std::max&lt;LayoutUnit&gt;(m_stretchHeightAboveBaseline, -glyphBounds.y());
+                m_stretchDepthBelowBaseline = std::max&lt;LayoutUnit&gt;(m_stretchDepthBelowBaseline, glyphBounds.maxY());
+            }
+        }
+    }
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> int RenderMathMLOperator::firstLineBaseline() const
</span><span class="lines">@@ -1646,7 +1720,7 @@
</span><span class="cx"> void RenderMathMLOperator::computeLogicalHeight(LayoutUnit logicalHeight, LayoutUnit logicalTop, LogicalExtentComputedValues&amp; computedValues) const
</span><span class="cx"> {
</span><span class="cx">     if (m_stretchyData.mode() != DrawNormal)
</span><del>-        logicalHeight = stretchSize();
</del><ins>+        logicalHeight = m_stretchHeightAboveBaseline + m_stretchDepthBelowBaseline;
</ins><span class="cx">     RenderBox::computeLogicalHeight(logicalHeight, logicalTop, computedValues);
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -1670,14 +1744,30 @@
</span><span class="cx">         glyphPaintRect.shiftMaxYEdgeTo(glyphPaintRect.maxY().floor() - 1);
</span><span class="cx">         clipBounds.shiftMaxYEdgeTo(glyphPaintRect.maxY());
</span><span class="cx">         break;
</span><del>-    case TrimTopAndBottom:
</del><ins>+    case TrimTopAndBottom: {
</ins><span class="cx">         LayoutUnit temp = glyphPaintRect.y() + 1;
</span><span class="cx">         glyphPaintRect.shiftYEdgeTo(temp.ceil());
</span><span class="cx">         glyphPaintRect.shiftMaxYEdgeTo(glyphPaintRect.maxY().floor() - 1);
</span><span class="cx">         clipBounds.shiftYEdgeTo(glyphPaintRect.y());
</span><span class="cx">         clipBounds.shiftMaxYEdgeTo(glyphPaintRect.maxY());
</span><ins>+    }
</ins><span class="cx">         break;
</span><ins>+    case TrimLeft:
+        glyphPaintRect.shiftXEdgeTo(glyphPaintRect.x().ceil() + 1);
+        clipBounds.shiftXEdgeTo(glyphPaintRect.x());
+        break;
+    case TrimRight:
+        glyphPaintRect.shiftMaxXEdgeTo(glyphPaintRect.maxX().floor() - 1);
+        clipBounds.shiftMaxXEdgeTo(glyphPaintRect.maxX());
+        break;
+    case TrimLeftAndRight: {
+        LayoutUnit temp = glyphPaintRect.x() + 1;
+        glyphPaintRect.shiftXEdgeTo(temp.ceil());
+        glyphPaintRect.shiftMaxXEdgeTo(glyphPaintRect.maxX().floor() - 1);
+        clipBounds.shiftXEdgeTo(glyphPaintRect.x());
+        clipBounds.shiftMaxXEdgeTo(glyphPaintRect.maxX());
</ins><span class="cx">     }
</span><ins>+    }
</ins><span class="cx"> 
</span><span class="cx">     // Clipping the enclosing IntRect avoids any potential issues at joined edges.
</span><span class="cx">     GraphicsContextStateSaver stateSaver(*info.context);
</span><span class="lines">@@ -1690,8 +1780,9 @@
</span><span class="cx">     return glyphPaintRect;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void RenderMathMLOperator::fillWithExtensionGlyph(PaintInfo&amp; info, const LayoutPoint&amp; from, const LayoutPoint&amp; to)
</del><ins>+void RenderMathMLOperator::fillWithVerticalExtensionGlyph(PaintInfo&amp; info, const LayoutPoint&amp; from, const LayoutPoint&amp; to)
</ins><span class="cx"> {
</span><ins>+    ASSERT(m_isVertical);
</ins><span class="cx">     ASSERT(m_stretchyData.mode() == DrawGlyphAssembly);
</span><span class="cx">     ASSERT(m_stretchyData.extension().glyph);
</span><span class="cx">     ASSERT(from.y() &lt;= to.y());
</span><span class="lines">@@ -1727,6 +1818,42 @@
</span><span class="cx">     }
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+void RenderMathMLOperator::fillWithHorizontalExtensionGlyph(PaintInfo&amp; info, const LayoutPoint&amp; from, const LayoutPoint&amp; to)
+{
+    ASSERT(!m_isVertical);
+    ASSERT(m_stretchyData.mode() == DrawGlyphAssembly);
+    ASSERT(m_stretchyData.extension().glyph);
+    ASSERT(from.x() &lt;= to.x());
+
+    // If there is no space for the extension glyph, we don't need to do anything.
+    if (from.x() == to.x())
+        return;
+
+    GraphicsContextStateSaver stateSaver(*info.context);
+
+    // Clipping the extender region here allows us to draw the bottom extender glyph into the
+    // regions of the bottom glyph without worrying about overdraw (hairy pixels) and simplifies later clipping.
+    LayoutRect clipBounds = info.rect;
+    clipBounds.shiftXEdgeTo(from.x());
+    clipBounds.shiftMaxXEdgeTo(to.x());
+    info.context-&gt;clip(clipBounds);
+
+    // Trimming may remove up to two pixels from the left of the extender glyph, so we move it left by two pixels.
+    float offsetToGlyphLeft = -2;
+    LayoutPoint glyphOrigin = LayoutPoint(from.x() + offsetToGlyphLeft, std::min(from.y(), to.y()) + m_stretchHeightAboveBaseline);
+    FloatRect lastPaintedGlyphRect(from, FloatSize());
+
+    while (lastPaintedGlyphRect.maxX() &lt; to.x()) {
+        lastPaintedGlyphRect = paintGlyph(info, m_stretchyData.extension(), glyphOrigin, TrimLeftAndRight);
+        glyphOrigin.setX(glyphOrigin.x() + lastPaintedGlyphRect.width());
+
+        // There's a chance that if the font size is small enough the glue glyph has been reduced to an empty rectangle
+        // with trimming. In that case we just draw nothing.
+        if (lastPaintedGlyphRect.isEmpty())
+            break;
+    }
+}
+
</ins><span class="cx"> void RenderMathMLOperator::paint(PaintInfo&amp; info, const LayoutPoint&amp; paintOffset)
</span><span class="cx"> {
</span><span class="cx">     RenderMathMLToken::paint(info, paintOffset);
</span><span class="lines">@@ -1750,6 +1877,15 @@
</span><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx"> 
</span><ins>+    if (m_isVertical)
+        paintVerticalGlyphAssembly(info, paintOffset);
+    else
+        paintHorizontalGlyphAssembly(info, paintOffset);
+}
+
+void RenderMathMLOperator::paintVerticalGlyphAssembly(PaintInfo&amp; info, const LayoutPoint&amp; paintOffset)
+{
+    ASSERT(m_isVertical);
</ins><span class="cx">     ASSERT(m_stretchyData.mode() == DrawGlyphAssembly);
</span><span class="cx">     ASSERT(m_stretchyData.top().glyph);
</span><span class="cx">     ASSERT(m_stretchyData.bottom().glyph);
</span><span class="lines">@@ -1774,12 +1910,41 @@
</span><span class="cx">         middleGlyphOrigin.moveBy(LayoutPoint(0, middleGlyphBounds.height() / 2.0));
</span><span class="cx"> 
</span><span class="cx">         LayoutRect middleGlyphPaintRect = paintGlyph(info, m_stretchyData.middle(), middleGlyphOrigin, TrimTopAndBottom);
</span><del>-        fillWithExtensionGlyph(info, topGlyphPaintRect.minXMaxYCorner(), middleGlyphPaintRect.minXMinYCorner());
-        fillWithExtensionGlyph(info, middleGlyphPaintRect.minXMaxYCorner(), bottomGlyphPaintRect.minXMinYCorner());
</del><ins>+        fillWithVerticalExtensionGlyph(info, topGlyphPaintRect.minXMaxYCorner(), middleGlyphPaintRect.minXMinYCorner());
+        fillWithVerticalExtensionGlyph(info, middleGlyphPaintRect.minXMaxYCorner(), bottomGlyphPaintRect.minXMinYCorner());
</ins><span class="cx">     } else
</span><del>-        fillWithExtensionGlyph(info, topGlyphPaintRect.minXMaxYCorner(), bottomGlyphPaintRect.minXMinYCorner());
</del><ins>+        fillWithVerticalExtensionGlyph(info, topGlyphPaintRect.minXMaxYCorner(), bottomGlyphPaintRect.minXMinYCorner());
</ins><span class="cx"> }
</span><span class="cx"> 
</span><ins>+void RenderMathMLOperator::paintHorizontalGlyphAssembly(PaintInfo&amp; info, const LayoutPoint&amp; paintOffset)
+{
+    ASSERT(!m_isVertical);
+    ASSERT(m_stretchyData.mode() == DrawGlyphAssembly);
+    ASSERT(m_stretchyData.left().glyph);
+    ASSERT(m_stretchyData.right().glyph);
+
+    // We are positioning the glyphs so that the edge of the tight glyph bounds line up exactly with the edges of our paint box.
+    LayoutPoint operatorTopLeft = paintOffset + location();
+    operatorTopLeft.move(m_leadingSpace, 0);
+    operatorTopLeft = ceiledIntPoint(operatorTopLeft);
+    LayoutPoint leftGlyphOrigin(operatorTopLeft.x(), operatorTopLeft.y() + m_stretchHeightAboveBaseline);
+    LayoutRect leftGlyphPaintRect = paintGlyph(info, m_stretchyData.left(), leftGlyphOrigin, TrimRight);
+
+    FloatRect rightGlyphBounds = boundsForGlyph(m_stretchyData.right());
+    LayoutPoint rightGlyphOrigin(operatorTopLeft.x() + offsetWidth() - rightGlyphBounds.width(), operatorTopLeft.y() + m_stretchHeightAboveBaseline);
+    LayoutRect rightGlyphPaintRect = paintGlyph(info, m_stretchyData.right(), rightGlyphOrigin, TrimLeft);
+
+    if (m_stretchyData.middle().glyph) {
+        // Center the glyph origin between the start and end glyph paint extents.
+        LayoutPoint middleGlyphOrigin(operatorTopLeft.x(), leftGlyphOrigin.y());
+        middleGlyphOrigin.moveBy(LayoutPoint((rightGlyphPaintRect.x() - leftGlyphPaintRect.maxX()) / 2.0, 0));
+        LayoutRect middleGlyphPaintRect = paintGlyph(info, m_stretchyData.middle(), middleGlyphOrigin, TrimLeftAndRight);
+        fillWithHorizontalExtensionGlyph(info, leftGlyphPaintRect.maxXMinYCorner(), middleGlyphPaintRect.minXMinYCorner());
+        fillWithHorizontalExtensionGlyph(info, middleGlyphPaintRect.maxXMinYCorner(), rightGlyphPaintRect.minXMinYCorner());
+    } else
+        fillWithHorizontalExtensionGlyph(info, leftGlyphPaintRect.maxXMinYCorner(), rightGlyphPaintRect.minXMinYCorner());
+}
+
</ins><span class="cx"> void RenderMathMLOperator::paintChildren(PaintInfo&amp; paintInfo, const LayoutPoint&amp; paintOffset, PaintInfo&amp; paintInfoForChild, bool usePrintRect)
</span><span class="cx"> {
</span><span class="cx">     // We skip painting for invisible operators too to avoid some &quot;missing character&quot; glyph to appear if appropriate math fonts are not available.
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingmathmlRenderMathMLOperatorh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/mathml/RenderMathMLOperator.h (169606 => 169607)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/mathml/RenderMathMLOperator.h        2014-06-05 04:52:57 UTC (rev 169606)
+++ trunk/Source/WebCore/rendering/mathml/RenderMathMLOperator.h        2014-06-05 06:35:04 UTC (rev 169607)
</span><span class="lines">@@ -64,7 +64,8 @@
</span><span class="cx">     RenderMathMLOperator(Document&amp;, PassRef&lt;RenderStyle&gt;, const String&amp; operatorString, MathMLOperatorDictionary::Form, MathMLOperatorDictionary::Flag);
</span><span class="cx"> 
</span><span class="cx">     void stretchTo(LayoutUnit heightAboveBaseline, LayoutUnit depthBelowBaseline);
</span><del>-    LayoutUnit stretchSize() const { return m_stretchHeightAboveBaseline + m_stretchDepthBelowBaseline; }
</del><ins>+    void stretchTo(LayoutUnit width);
+    LayoutUnit stretchSize() const { return m_isVertical ? m_stretchHeightAboveBaseline + m_stretchDepthBelowBaseline : m_stretchWidth; }
</ins><span class="cx">     
</span><span class="cx">     bool hasOperatorFlag(MathMLOperatorDictionary::Flag flag) const { return m_operatorFlags &amp; flag; }
</span><span class="cx">     // FIXME: The displaystyle property is not implemented (https://bugs.webkit.org/show_bug.cgi?id=118737).
</span><span class="lines">@@ -110,6 +111,8 @@
</span><span class="cx">         GlyphData extension() const { return m_data[1]; }
</span><span class="cx">         GlyphData bottom() const { return m_data[2]; }
</span><span class="cx">         GlyphData middle() const { return m_data[3]; }
</span><ins>+        GlyphData left() const { return m_data[2]; }
+        GlyphData right() const { return m_data[0]; }
</ins><span class="cx"> 
</span><span class="cx">         void setNormalMode()
</span><span class="cx">         {
</span><span class="lines">@@ -157,15 +160,23 @@
</span><span class="cx">         TrimTop,
</span><span class="cx">         TrimBottom,
</span><span class="cx">         TrimTopAndBottom,
</span><ins>+        TrimLeft,
+        TrimRight,
+        TrimLeftAndRight
</ins><span class="cx">     };
</span><span class="cx"> 
</span><span class="cx">     LayoutRect paintGlyph(PaintInfo&amp;, const GlyphData&amp;, const LayoutPoint&amp; origin, GlyphPaintTrimming);
</span><del>-    void fillWithExtensionGlyph(PaintInfo&amp;, const LayoutPoint&amp; from, const LayoutPoint&amp; to);
</del><ins>+    void fillWithVerticalExtensionGlyph(PaintInfo&amp;, const LayoutPoint&amp; from, const LayoutPoint&amp; to);
+    void fillWithHorizontalExtensionGlyph(PaintInfo&amp;, const LayoutPoint&amp; from, const LayoutPoint&amp; to);
+    void paintVerticalGlyphAssembly(PaintInfo&amp;, const LayoutPoint&amp;);
+    void paintHorizontalGlyphAssembly(PaintInfo&amp;, const LayoutPoint&amp;);
</ins><span class="cx"> 
</span><span class="cx">     LayoutUnit m_stretchHeightAboveBaseline;
</span><span class="cx">     LayoutUnit m_stretchDepthBelowBaseline;
</span><ins>+    LayoutUnit m_stretchWidth;
</ins><span class="cx"> 
</span><span class="cx">     UChar m_operator;
</span><ins>+    bool m_isVertical;
</ins><span class="cx">     StretchyData m_stretchyData;
</span><span class="cx">     MathMLOperatorDictionary::Form m_operatorForm;
</span><span class="cx">     unsigned short m_operatorFlags;
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingmathmlRenderMathMLUnderOvercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/mathml/RenderMathMLUnderOver.cpp (169606 => 169607)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/mathml/RenderMathMLUnderOver.cpp        2014-06-05 04:52:57 UTC (rev 169606)
+++ trunk/Source/WebCore/rendering/mathml/RenderMathMLUnderOver.cpp        2014-06-05 06:35:04 UTC (rev 169607)
</span><span class="lines">@@ -30,6 +30,9 @@
</span><span class="cx"> #include &quot;RenderMathMLUnderOver.h&quot;
</span><span class="cx"> 
</span><span class="cx"> #include &quot;MathMLElement.h&quot;
</span><ins>+#include &quot;MathMLNames.h&quot;
+#include &quot;RenderIterator.h&quot;
+#include &quot;RenderMathMLOperator.h&quot;
</ins><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="cx"> 
</span><span class="lines">@@ -68,6 +71,27 @@
</span><span class="cx">     return baseline;
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+void RenderMathMLUnderOver::layout()
+{
+    LayoutUnit stretchWidth = 0;
+    for (RenderObject* child = firstChild(); child; child = child-&gt;nextSibling()) {
+        if (child-&gt;needsLayout())
+            toRenderElement(child)-&gt;layout();
+        // Skipping the embellished op does not work for nested structures like
+        // &lt;munder&gt;&lt;mover&gt;&lt;mo&gt;_&lt;/mo&gt;...&lt;/mover&gt; &lt;mo&gt;_&lt;/mo&gt;&lt;/munder&gt;.
+        if (child-&gt;isBox())
+            stretchWidth = std::max&lt;LayoutUnit&gt;(stretchWidth, toRenderBox(child)-&gt;logicalWidth());
+    }
+
+    // Set the sizes of (possibly embellished) stretchy operator children.
+    for (auto&amp; child : childrenOfType&lt;RenderMathMLBlock&gt;(*this)) {
+        if (auto renderOperator = child.unembellishedOperator())
+            renderOperator-&gt;stretchTo(stretchWidth);
+    }
+
+    RenderMathMLBlock::layout();
</ins><span class="cx"> }
</span><span class="cx"> 
</span><ins>+}
+
</ins><span class="cx"> #endif // ENABLE(MATHML)
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingmathmlRenderMathMLUnderOverh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/mathml/RenderMathMLUnderOver.h (169606 => 169607)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/mathml/RenderMathMLUnderOver.h        2014-06-05 04:52:57 UTC (rev 169606)
+++ trunk/Source/WebCore/rendering/mathml/RenderMathMLUnderOver.h        2014-06-05 06:35:04 UTC (rev 169607)
</span><span class="lines">@@ -40,6 +40,9 @@
</span><span class="cx"> 
</span><span class="cx">     virtual int firstLineBaseline() const override;
</span><span class="cx">     
</span><ins>+protected:
+    virtual void layout();
+
</ins><span class="cx"> private:
</span><span class="cx">     virtual bool isRenderMathMLUnderOver() const override { return true; }
</span><span class="cx">     virtual const char* renderName() const override { return &quot;RenderMathMLUnderOver&quot;; }
</span></span></pre>
</div>
</div>

</body>
</html>