Refactor RenderMathMLUnderOver layout functions to avoid using flexbox
authorfred.wang@free.fr <fred.wang@free.fr@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 11 Apr 2016 12:11:18 +0000 (12:11 +0000)
committerfred.wang@free.fr <fred.wang@free.fr@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 11 Apr 2016 12:11:18 +0000 (12:11 +0000)
https://bugs.webkit.org/show_bug.cgi?id=153742

Patch by Frederic Wang <fwang@igalia.com> on 2016-04-11
Reviewed by Sergio Villar Senin.

Source/WebCore:

Based on a patch by Javier Fernandez <jfernandez@igalia.com>

Refactor the UnderOver renderer to use its own layoutBlock method that
does all the layout calculations without considering the flexbox
restrictions.

* css/mathml.css:
(mo, mfrac, munder, mover, munderover): Delete the underover elements from the line defining
the column direction.
(munder, mover, munderover): Deleted. This flexbox property is no longer needed.
(mover > :last-child, munderover > :last-child): Deleted. This flexbox property is no longer
needed.
* rendering/mathml/RenderMathMLUnderOver.cpp:
(WebCore::RenderMathMLUnderOver::firstLineBaseline): Use ascentForChild.
(WebCore::RenderMathMLUnderOver::computeOperatorsHorizontalStretch): Avoid stretching
operators that are not stretchy.
(WebCore::RenderMathMLUnderOver::isValid): Helper function to ensure that the child list is
valid with respect to the MathML specification.
(WebCore::RenderMathMLUnderOver::base): Added. Helper function.
(WebCore::RenderMathMLUnderOver::under): Added. Helper function.
(WebCore::RenderMathMLUnderOver::over): Added. Helper function.
(WebCore::RenderMathMLUnderOver::computePreferredLogicalWidths): Added.
The preferred width is the maximum preferred width of the base, under and over scripts.
(WebCore::RenderMathMLUnderOver::horizontalOffset): Added, helper to calculate the
horizontal position of children (horizontally centered).
(WebCore::RenderMathMLUnderOver::layoutBlock): Added, it lays out the base, underscript and
overscript. It calculates the exact logical width, which may differ from the preferred width when
one child contains stretchy operators. It later sets the locations of children accordingly
and sets the heigth of the render element.
(WebCore::RenderMathMLUnderOver::paintChildren): Added, we have to use the usual traverse
instead of the one that comes from the flexbox. This will be removed in a follow-up patch.
(WebCore::RenderMathMLUnderOver::layout): Deleted.
* rendering/mathml/RenderMathMLUnderOver.h: Added new functions definitions.

LayoutTests:

Apply some small adjustments to the expectations of MathML tests after
the refactoring of RenderMathMLUnderOver. We also add a test for
non-stretchy horizontal operators in underover.

* platform/gtk/mathml/opentype/horizontal-expected.png:
* platform/gtk/mathml/opentype/horizontal-expected.txt:
* platform/gtk/mathml/opentype/opentype-stretchy-horizontal-expected.png:
* platform/gtk/mathml/opentype/opentype-stretchy-horizontal-expected.txt:
* platform/mac/mathml/opentype/opentype-stretchy-horizontal-expected.png:
* platform/mac/mathml/opentype/opentype-stretchy-horizontal-expected.txt:
* mathml/mn-as-list-item-assert.html: Move the test description out of the invalid munderover
so that it is still displayed.
* mathml/mn-as-list-item-assert-expected.txt: Update the text expectation.
* mathml/presentation/underover-nonstretchy-horizontal.html: Ensure that nonstretchy horizontal operators are not stretched in munderover.
* mathml/presentation/underover-nonstretchy-horizontal-expected.html: Ditto.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@199293 268f45cc-cd09-0410-ab3c-d52691b4dbfc

15 files changed:
LayoutTests/ChangeLog
LayoutTests/mathml/mn-as-list-item-assert-expected.txt
LayoutTests/mathml/mn-as-list-item-assert.html
LayoutTests/mathml/presentation/underover-nonstretchy-horizontal-expected.html [new file with mode: 0644]
LayoutTests/mathml/presentation/underover-nonstretchy-horizontal.html [new file with mode: 0644]
LayoutTests/platform/gtk/mathml/opentype/horizontal-expected.png
LayoutTests/platform/gtk/mathml/opentype/horizontal-expected.txt
LayoutTests/platform/gtk/mathml/opentype/opentype-stretchy-horizontal-expected.png
LayoutTests/platform/gtk/mathml/opentype/opentype-stretchy-horizontal-expected.txt
LayoutTests/platform/mac/mathml/opentype/opentype-stretchy-horizontal-expected.png
LayoutTests/platform/mac/mathml/opentype/opentype-stretchy-horizontal-expected.txt
Source/WebCore/ChangeLog
Source/WebCore/css/mathml.css
Source/WebCore/rendering/mathml/RenderMathMLUnderOver.cpp
Source/WebCore/rendering/mathml/RenderMathMLUnderOver.h

index fc3917f..1e8e991 100644 (file)
@@ -1,3 +1,26 @@
+2016-04-11  Frederic Wang  <fwang@igalia.com>
+
+        Refactor RenderMathMLUnderOver layout functions to avoid using flexbox
+        https://bugs.webkit.org/show_bug.cgi?id=153742
+
+        Reviewed by Sergio Villar Senin.
+
+        Apply some small adjustments to the expectations of MathML tests after
+        the refactoring of RenderMathMLUnderOver. We also add a test for
+        non-stretchy horizontal operators in underover.
+
+        * platform/gtk/mathml/opentype/horizontal-expected.png:
+        * platform/gtk/mathml/opentype/horizontal-expected.txt:
+        * platform/gtk/mathml/opentype/opentype-stretchy-horizontal-expected.png:
+        * platform/gtk/mathml/opentype/opentype-stretchy-horizontal-expected.txt:
+        * platform/mac/mathml/opentype/opentype-stretchy-horizontal-expected.png:
+        * platform/mac/mathml/opentype/opentype-stretchy-horizontal-expected.txt:
+        * mathml/mn-as-list-item-assert.html: Move the test description out of the invalid munderover
+        so that it is still displayed.
+        * mathml/mn-as-list-item-assert-expected.txt: Update the text expectation.
+        * mathml/presentation/underover-nonstretchy-horizontal.html: Ensure that nonstretchy horizontal operators are not stretched in munderover.
+        * mathml/presentation/underover-nonstretchy-horizontal-expected.html: Ditto.
+
 2016-04-11  Antti Koivisto  <antti@apple.com>
 
         Implement functional :host() pseudo class
index c879660..75468ec 100644 (file)
@@ -7,8 +7,9 @@
     </script>
 </head>
 <body>
+  <p>This test PASSES if it does not CRASH or ASSERT.</p>
 <math> 
     <munderover>
-        <mn style="display: list-item;">This test PASSES if it does not CRASH or ASSERT.</mn>
+        <mn style="display: list-item;">mn</mn>
     </munderover>
 </math>
diff --git a/LayoutTests/mathml/presentation/underover-nonstretchy-horizontal-expected.html b/LayoutTests/mathml/presentation/underover-nonstretchy-horizontal-expected.html
new file mode 100644 (file)
index 0000000..073c7ec
--- /dev/null
@@ -0,0 +1,8 @@
+<!DOCTYPE html>
+<math>
+  <munderover>
+    <mspace width="100px" height="10px" mathbackground="red"/>
+    <mtext>_</mtext>
+    <mtext>_</mtext>
+  </munderover>
+</math>
diff --git a/LayoutTests/mathml/presentation/underover-nonstretchy-horizontal.html b/LayoutTests/mathml/presentation/underover-nonstretchy-horizontal.html
new file mode 100644 (file)
index 0000000..c757f19
--- /dev/null
@@ -0,0 +1,9 @@
+<!DOCTYPE html>
+<!-- Horizontal operators set to non-stretchy should not stretch. -->
+<math>
+  <munderover>
+    <mspace width="100px" height="10px" mathbackground="red"/>
+    <mo stretchy="false" lspace="0px" rspace="0px">_</mo>
+    <mo stretchy="false" lspace="0px" rspace="0px">_</mo>
+  </munderover>
+</math>
index da1b2c1..b8d036a 100644 (file)
Binary files a/LayoutTests/platform/gtk/mathml/opentype/horizontal-expected.png and b/LayoutTests/platform/gtk/mathml/opentype/horizontal-expected.png differ
index b15ca11..c3c979b 100644 (file)
@@ -4,7 +4,7 @@ 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]
+        RenderMathMLMath {math} at (0,4) size 24x10 [padding: 0 1 0 1]
           RenderMathMLUnderOver {mover} at (1,0) size 29x10
             RenderMathMLSpace {mspace} at (3,8) size 23x2 [bgcolor=#0000FF]
             RenderMathMLOperator {mo} at (0,0) size 29x8
@@ -12,9 +12,9 @@ layer at (0,0) size 800x166
                 RenderBlock (anonymous) at (0,0) size 12x8
                   RenderText at (0,-36) size 12x80
                     text run at (0,-36) width 12: "\x{2190}"
-        RenderText {#text} at (30,0) size 5x17
-          text run at (30,0) width 5: " "
-        RenderMathMLMath {math} at (34,4) size 32x10 [padding: 0 1 0 1]
+        RenderText {#text} at (24,0) size 4x17
+          text run at (24,0) width 4: " "
+        RenderMathMLMath {math} at (28,4) size 24x10 [padding: 0 1 0 1]
           RenderMathMLUnderOver {mover} at (1,0) size 29x10
             RenderMathMLSpace {mspace} at (3,8) size 23x2 [bgcolor=#0000FF]
             RenderMathMLOperator {mo} at (0,0) size 29x8
@@ -22,9 +22,9 @@ layer at (0,0) size 800x166
                 RenderBlock (anonymous) at (0,0) size 12x8
                   RenderText at (0,-36) size 12x80
                     text run at (0,-36) width 12: "\x{2192}"
-        RenderText {#text} at (65,0) size 5x17
-          text run at (65,0) width 5: " "
-        RenderMathMLMath {math} at (69,4) size 31x10 [padding: 0 1 0 1]
+        RenderText {#text} at (52,0) size 4x17
+          text run at (52,0) width 4: " "
+        RenderMathMLMath {math} at (56,4) size 24x10 [padding: 0 1 0 1]
           RenderMathMLUnderOver {mover} at (1,0) size 29x10
             RenderMathMLSpace {mspace} at (3,8) size 23x2 [bgcolor=#0000FF]
             RenderMathMLOperator {mo} at (0,0) size 29x8
@@ -32,9 +32,9 @@ layer at (0,0) size 800x166
                 RenderBlock (anonymous) at (0,0) size 12x8
                   RenderText at (0,-36) size 12x80
                     text run at (0,-36) width 12: "\x{2194}"
-        RenderText {#text} at (99,0) size 5x17
-          text run at (99,0) width 5: " "
-        RenderMathMLMath {math} at (103,4) size 32x10 [padding: 0 1 0 1]
+        RenderText {#text} at (80,0) size 4x17
+          text run at (80,0) width 4: " "
+        RenderMathMLMath {math} at (84,4) size 24x10 [padding: 0 1 0 1]
           RenderMathMLUnderOver {mover} at (1,0) size 29x10
             RenderMathMLSpace {mspace} at (3,8) size 23x2 [bgcolor=#0000FF]
             RenderMathMLOperator {mo} at (0,0) size 29x8
@@ -42,9 +42,9 @@ layer at (0,0) size 800x166
                 RenderBlock (anonymous) at (0,0) size 12x8
                   RenderText at (0,-36) size 12x80
                     text run at (0,-36) width 12: "\x{21A4}"
-        RenderText {#text} at (134,0) size 5x17
-          text run at (134,0) width 5: " "
-        RenderMathMLMath {math} at (138,4) size 32x10 [padding: 0 1 0 1]
+        RenderText {#text} at (108,0) size 4x17
+          text run at (108,0) width 4: " "
+        RenderMathMLMath {math} at (112,4) size 24x10 [padding: 0 1 0 1]
           RenderMathMLUnderOver {mover} at (1,0) size 29x10
             RenderMathMLSpace {mspace} at (3,8) size 23x2 [bgcolor=#0000FF]
             RenderMathMLOperator {mo} at (0,0) size 29x8
@@ -52,9 +52,9 @@ layer at (0,0) size 800x166
                 RenderBlock (anonymous) at (0,0) size 12x8
                   RenderText at (0,-36) size 12x80
                     text run at (0,-36) width 12: "\x{21A6}"
-        RenderText {#text} at (169,0) size 5x17
-          text run at (169,0) width 5: " "
-        RenderMathMLMath {math} at (173,5) size 31x9 [padding: 0 1 0 1]
+        RenderText {#text} at (136,0) size 4x17
+          text run at (136,0) width 4: " "
+        RenderMathMLMath {math} at (140,5) size 24x9 [padding: 0 1 0 1]
           RenderMathMLUnderOver {mover} at (1,0) size 29x9
             RenderMathMLSpace {mspace} at (3,7) size 23x2 [bgcolor=#0000FF]
             RenderMathMLOperator {mo} at (0,0) size 29x7
@@ -62,9 +62,9 @@ layer at (0,0) size 800x166
                 RenderBlock (anonymous) at (0,0) size 12x7
                   RenderText at (0,-36) size 12x80
                     text run at (0,-36) width 12: "\x{21BC}"
-        RenderText {#text} at (203,0) size 5x17
-          text run at (203,0) width 5: " "
-        RenderMathMLMath {math} at (207,7) size 32x7 [padding: 0 1 0 1]
+        RenderText {#text} at (164,0) size 4x17
+          text run at (164,0) width 4: " "
+        RenderMathMLMath {math} at (168,7) size 24x7 [padding: 0 1 0 1]
           RenderMathMLUnderOver {mover} at (1,0) size 29x7
             RenderMathMLSpace {mspace} at (3,5) size 23x2 [bgcolor=#0000FF]
             RenderMathMLOperator {mo} at (0,0) size 29x5
@@ -72,9 +72,9 @@ layer at (0,0) size 800x166
                 RenderBlock (anonymous) at (0,0) size 12x5
                   RenderText at (0,-39) size 12x80
                     text run at (0,-39) width 12: "\x{21BD}"
-        RenderText {#text} at (238,0) size 5x17
-          text run at (238,0) width 5: " "
-        RenderMathMLMath {math} at (242,5) size 32x9 [padding: 0 1 0 1]
+        RenderText {#text} at (192,0) size 4x17
+          text run at (192,0) width 4: " "
+        RenderMathMLMath {math} at (196,5) size 24x9 [padding: 0 1 0 1]
           RenderMathMLUnderOver {mover} at (1,0) size 29x9
             RenderMathMLSpace {mspace} at (3,7) size 23x2 [bgcolor=#0000FF]
             RenderMathMLOperator {mo} at (0,0) size 29x7
@@ -82,9 +82,9 @@ layer at (0,0) size 800x166
                 RenderBlock (anonymous) at (0,0) size 12x7
                   RenderText at (0,-36) size 12x80
                     text run at (0,-36) width 12: "\x{21C0}"
-        RenderText {#text} at (273,0) size 5x17
-          text run at (273,0) width 5: " "
-        RenderMathMLMath {math} at (277,4) size 31x10 [padding: 0 1 0 1]
+        RenderText {#text} at (220,0) size 4x17
+          text run at (220,0) width 4: " "
+        RenderMathMLMath {math} at (224,4) size 24x10 [padding: 0 1 0 1]
           RenderMathMLUnderOver {mover} at (1,0) size 29x10
             RenderMathMLSpace {mspace} at (3,8) size 23x2 [bgcolor=#0000FF]
             RenderMathMLOperator {mo} at (0,0) size 29x8
@@ -92,9 +92,9 @@ layer at (0,0) size 800x166
                 RenderBlock (anonymous) at (0,0) size 12x8
                   RenderText at (0,-36) size 12x80
                     text run at (0,-36) width 12: "\x{21D0}"
-        RenderText {#text} at (307,0) size 5x17
-          text run at (307,0) width 5: " "
-        RenderMathMLMath {math} at (311,4) size 32x10 [padding: 0 1 0 1]
+        RenderText {#text} at (248,0) size 4x17
+          text run at (248,0) width 4: " "
+        RenderMathMLMath {math} at (252,4) size 24x10 [padding: 0 1 0 1]
           RenderMathMLUnderOver {mover} at (1,0) size 29x10
             RenderMathMLSpace {mspace} at (3,8) size 23x2 [bgcolor=#0000FF]
             RenderMathMLOperator {mo} at (0,0) size 29x8
@@ -102,9 +102,9 @@ layer at (0,0) size 800x166
                 RenderBlock (anonymous) at (0,0) size 12x8
                   RenderText at (0,-36) size 12x80
                     text run at (0,-36) width 12: "\x{21D2}"
-        RenderText {#text} at (342,0) size 5x17
-          text run at (342,0) width 5: " "
-        RenderMathMLMath {math} at (346,4) size 32x10 [padding: 0 1 0 1]
+        RenderText {#text} at (276,0) size 4x17
+          text run at (276,0) width 4: " "
+        RenderMathMLMath {math} at (280,4) size 24x10 [padding: 0 1 0 1]
           RenderMathMLUnderOver {mover} at (1,0) size 29x10
             RenderMathMLSpace {mspace} at (3,8) size 23x2 [bgcolor=#0000FF]
             RenderMathMLOperator {mo} at (0,0) size 29x8
@@ -112,9 +112,9 @@ layer at (0,0) size 800x166
                 RenderBlock (anonymous) at (0,0) size 12x8
                   RenderText at (0,-36) size 12x80
                     text run at (0,-36) width 12: "\x{21D4}"
-        RenderText {#text} at (377,0) size 5x17
-          text run at (377,0) width 5: " "
-        RenderMathMLMath {math} at (381,2) size 31x12 [padding: 0 1 0 1]
+        RenderText {#text} at (304,0) size 4x17
+          text run at (304,0) width 4: " "
+        RenderMathMLMath {math} at (308,2) size 24x12 [padding: 0 1 0 1]
           RenderMathMLUnderOver {mover} at (1,0) size 29x12
             RenderMathMLSpace {mspace} at (3,10) size 23x2 [bgcolor=#0000FF]
             RenderMathMLOperator {mo} at (0,0) size 29x10
@@ -122,9 +122,9 @@ layer at (0,0) size 800x166
                 RenderBlock (anonymous) at (0,0) size 12x10
                   RenderText at (0,-35) size 12x80
                     text run at (0,-35) width 12: "\x{21DA}"
-        RenderText {#text} at (411,0) size 5x17
-          text run at (411,0) width 5: " "
-        RenderMathMLMath {math} at (415,2) size 32x12 [padding: 0 1 0 1]
+        RenderText {#text} at (332,0) size 4x17
+          text run at (332,0) width 4: " "
+        RenderMathMLMath {math} at (336,2) size 24x12 [padding: 0 1 0 1]
           RenderMathMLUnderOver {mover} at (1,0) size 29x12
             RenderMathMLSpace {mspace} at (3,10) size 23x2 [bgcolor=#0000FF]
             RenderMathMLOperator {mo} at (0,0) size 29x10
@@ -132,9 +132,9 @@ layer at (0,0) size 800x166
                 RenderBlock (anonymous) at (0,0) size 12x10
                   RenderText at (0,-35) size 12x80
                     text run at (0,-35) width 12: "\x{21DB}"
-        RenderText {#text} at (446,0) size 5x17
-          text run at (446,0) width 5: " "
-        RenderMathMLMath {math} at (450,9) size 25x5 [padding: 0 1 0 1]
+        RenderText {#text} at (360,0) size 4x17
+          text run at (360,0) width 4: " "
+        RenderMathMLMath {math} at (364,9) size 24x5 [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
@@ -142,9 +142,9 @@ layer at (0,0) size 800x166
                 RenderBlock (anonymous) at (0,0) size 4x3
                   RenderText at (0,-34) size 4x80
                     text run at (0,-34) width 4: "\x{23B4}"
-        RenderText {#text} at (474,0) size 5x17
-          text run at (474,0) width 5: " "
-        RenderMathMLMath {math} at (478,9) size 25x5 [padding: 0 1 0 1]
+        RenderText {#text} at (388,0) size 4x17
+          text run at (388,0) width 4: " "
+        RenderMathMLMath {math} at (392,9) size 24x5 [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
@@ -152,9 +152,9 @@ layer at (0,0) size 800x166
                 RenderBlock (anonymous) at (0,0) size 4x3
                   RenderText at (0,-43) size 4x80
                     text run at (0,-43) width 4: "\x{23B5}"
-        RenderText {#text} at (502,0) size 5x17
-          text run at (502,0) width 5: " "
-        RenderMathMLMath {math} at (506,8) size 27x6 [padding: 0 1 0 1]
+        RenderText {#text} at (416,0) size 4x17
+          text run at (416,0) width 4: " "
+        RenderMathMLMath {math} at (420,8) size 24x6 [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
@@ -162,9 +162,9 @@ layer at (0,0) size 800x166
                 RenderBlock (anonymous) at (0,0) size 6x4
                   RenderText at (0,-34) size 6x80
                     text run at (0,-34) width 6: "\x{23DC}"
-        RenderText {#text} at (532,0) size 5x17
-          text run at (532,0) width 5: " "
-        RenderMathMLMath {math} at (536,7) size 27x7 [padding: 0 1 0 1]
+        RenderText {#text} at (444,0) size 4x17
+          text run at (444,0) width 4: " "
+        RenderMathMLMath {math} at (448,7) size 24x7 [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
@@ -172,9 +172,9 @@ layer at (0,0) size 800x166
                 RenderBlock (anonymous) at (0,0) size 6x4
                   RenderText at (0,-43) size 6x80
                     text run at (0,-43) width 6: "\x{23DD}"
-        RenderText {#text} at (562,0) size 5x17
-          text run at (562,0) width 5: " "
-        RenderMathMLMath {math} at (566,8) size 27x6 [padding: 0 1 0 1]
+        RenderText {#text} at (472,0) size 4x17
+          text run at (472,0) width 4: " "
+        RenderMathMLMath {math} at (476,8) size 24x6 [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
@@ -182,9 +182,9 @@ layer at (0,0) size 800x166
                 RenderBlock (anonymous) at (0,0) size 6x4
                   RenderText at (0,-33) size 6x80
                     text run at (0,-33) width 6: "\x{23DE}"
-        RenderText {#text} at (592,0) size 5x17
-          text run at (592,0) width 5: " "
-        RenderMathMLMath {math} at (596,7) size 27x7 [padding: 0 1 0 1]
+        RenderText {#text} at (500,0) size 4x17
+          text run at (500,0) width 4: " "
+        RenderMathMLMath {math} at (504,7) size 24x7 [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
@@ -194,7 +194,7 @@ layer at (0,0) size 800x166
                     text run at (0,-43) width 6: "\x{23DF}"
         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]
+        RenderMathMLMath {math} at (0,4) size 52x10 [padding: 0 1 0 1]
           RenderMathMLUnderOver {mover} at (1,0) size 57x10
             RenderMathMLSpace {mspace} at (3,8) size 51x2 [bgcolor=#008000]
             RenderMathMLOperator {mo} at (0,0) size 57x8
@@ -202,9 +202,9 @@ layer at (0,0) size 800x166
                 RenderBlock (anonymous) at (0,0) size 12x8
                   RenderText at (0,-36) size 12x80
                     text run at (0,-36) width 12: "\x{2190}"
-        RenderText {#text} at (58,0) size 5x17
-          text run at (58,0) width 5: " "
-        RenderMathMLMath {math} at (62,4) size 60x10 [padding: 0 1 0 1]
+        RenderText {#text} at (52,0) size 4x17
+          text run at (52,0) width 4: " "
+        RenderMathMLMath {math} at (56,4) size 52x10 [padding: 0 1 0 1]
           RenderMathMLUnderOver {mover} at (1,0) size 57x10
             RenderMathMLSpace {mspace} at (3,8) size 51x2 [bgcolor=#008000]
             RenderMathMLOperator {mo} at (0,0) size 57x8
@@ -212,9 +212,9 @@ layer at (0,0) size 800x166
                 RenderBlock (anonymous) at (0,0) size 12x8
                   RenderText at (0,-36) size 12x80
                     text run at (0,-36) width 12: "\x{2192}"
-        RenderText {#text} at (121,0) size 5x17
-          text run at (121,0) width 5: " "
-        RenderMathMLMath {math} at (125,4) size 59x10 [padding: 0 1 0 1]
+        RenderText {#text} at (108,0) size 4x17
+          text run at (108,0) width 4: " "
+        RenderMathMLMath {math} at (112,4) size 52x10 [padding: 0 1 0 1]
           RenderMathMLUnderOver {mover} at (1,0) size 57x10
             RenderMathMLSpace {mspace} at (3,8) size 51x2 [bgcolor=#008000]
             RenderMathMLOperator {mo} at (0,0) size 57x8
@@ -222,9 +222,9 @@ layer at (0,0) size 800x166
                 RenderBlock (anonymous) at (0,0) size 12x8
                   RenderText at (0,-36) size 12x80
                     text run at (0,-36) width 12: "\x{2194}"
-        RenderText {#text} at (183,0) size 5x17
-          text run at (183,0) width 5: " "
-        RenderMathMLMath {math} at (187,4) size 60x10 [padding: 0 1 0 1]
+        RenderText {#text} at (164,0) size 4x17
+          text run at (164,0) width 4: " "
+        RenderMathMLMath {math} at (168,4) size 52x10 [padding: 0 1 0 1]
           RenderMathMLUnderOver {mover} at (1,0) size 57x10
             RenderMathMLSpace {mspace} at (3,8) size 51x2 [bgcolor=#008000]
             RenderMathMLOperator {mo} at (0,0) size 57x8
@@ -232,9 +232,9 @@ layer at (0,0) size 800x166
                 RenderBlock (anonymous) at (0,0) size 12x8
                   RenderText at (0,-36) size 12x80
                     text run at (0,-36) width 12: "\x{21A4}"
-        RenderText {#text} at (246,0) size 5x17
-          text run at (246,0) width 5: " "
-        RenderMathMLMath {math} at (250,4) size 60x10 [padding: 0 1 0 1]
+        RenderText {#text} at (220,0) size 4x17
+          text run at (220,0) width 4: " "
+        RenderMathMLMath {math} at (224,4) size 52x10 [padding: 0 1 0 1]
           RenderMathMLUnderOver {mover} at (1,0) size 57x10
             RenderMathMLSpace {mspace} at (3,8) size 51x2 [bgcolor=#008000]
             RenderMathMLOperator {mo} at (0,0) size 57x8
@@ -242,9 +242,9 @@ layer at (0,0) size 800x166
                 RenderBlock (anonymous) at (0,0) size 12x8
                   RenderText at (0,-36) size 12x80
                     text run at (0,-36) width 12: "\x{21A6}"
-        RenderText {#text} at (309,0) size 5x17
-          text run at (309,0) width 5: " "
-        RenderMathMLMath {math} at (313,5) size 59x9 [padding: 0 1 0 1]
+        RenderText {#text} at (276,0) size 4x17
+          text run at (276,0) width 4: " "
+        RenderMathMLMath {math} at (280,5) size 52x9 [padding: 0 1 0 1]
           RenderMathMLUnderOver {mover} at (1,0) size 57x9
             RenderMathMLSpace {mspace} at (3,7) size 51x2 [bgcolor=#008000]
             RenderMathMLOperator {mo} at (0,0) size 57x7
@@ -252,9 +252,9 @@ layer at (0,0) size 800x166
                 RenderBlock (anonymous) at (0,0) size 12x7
                   RenderText at (0,-36) size 12x80
                     text run at (0,-36) width 12: "\x{21BC}"
-        RenderText {#text} at (371,0) size 5x17
-          text run at (371,0) width 5: " "
-        RenderMathMLMath {math} at (375,7) size 60x7 [padding: 0 1 0 1]
+        RenderText {#text} at (332,0) size 4x17
+          text run at (332,0) width 4: " "
+        RenderMathMLMath {math} at (336,7) size 52x7 [padding: 0 1 0 1]
           RenderMathMLUnderOver {mover} at (1,0) size 57x7
             RenderMathMLSpace {mspace} at (3,5) size 51x2 [bgcolor=#008000]
             RenderMathMLOperator {mo} at (0,0) size 57x5
@@ -262,9 +262,9 @@ layer at (0,0) size 800x166
                 RenderBlock (anonymous) at (0,0) size 12x5
                   RenderText at (0,-39) size 12x80
                     text run at (0,-39) width 12: "\x{21BD}"
-        RenderText {#text} at (434,0) size 5x17
-          text run at (434,0) width 5: " "
-        RenderMathMLMath {math} at (438,5) size 60x9 [padding: 0 1 0 1]
+        RenderText {#text} at (388,0) size 4x17
+          text run at (388,0) width 4: " "
+        RenderMathMLMath {math} at (392,5) size 52x9 [padding: 0 1 0 1]
           RenderMathMLUnderOver {mover} at (1,0) size 57x9
             RenderMathMLSpace {mspace} at (3,7) size 51x2 [bgcolor=#008000]
             RenderMathMLOperator {mo} at (0,0) size 57x7
@@ -272,9 +272,9 @@ layer at (0,0) size 800x166
                 RenderBlock (anonymous) at (0,0) size 12x7
                   RenderText at (0,-36) size 12x80
                     text run at (0,-36) width 12: "\x{21C0}"
-        RenderText {#text} at (497,0) size 5x17
-          text run at (497,0) width 5: " "
-        RenderMathMLMath {math} at (501,4) size 59x10 [padding: 0 1 0 1]
+        RenderText {#text} at (444,0) size 4x17
+          text run at (444,0) width 4: " "
+        RenderMathMLMath {math} at (448,4) size 52x10 [padding: 0 1 0 1]
           RenderMathMLUnderOver {mover} at (1,0) size 57x10
             RenderMathMLSpace {mspace} at (3,8) size 51x2 [bgcolor=#008000]
             RenderMathMLOperator {mo} at (0,0) size 57x8
@@ -282,9 +282,9 @@ layer at (0,0) size 800x166
                 RenderBlock (anonymous) at (0,0) size 12x8
                   RenderText at (0,-36) size 12x80
                     text run at (0,-36) width 12: "\x{21D0}"
-        RenderText {#text} at (559,0) size 5x17
-          text run at (559,0) width 5: " "
-        RenderMathMLMath {math} at (563,4) size 60x10 [padding: 0 1 0 1]
+        RenderText {#text} at (500,0) size 4x17
+          text run at (500,0) width 4: " "
+        RenderMathMLMath {math} at (504,4) size 52x10 [padding: 0 1 0 1]
           RenderMathMLUnderOver {mover} at (1,0) size 57x10
             RenderMathMLSpace {mspace} at (3,8) size 51x2 [bgcolor=#008000]
             RenderMathMLOperator {mo} at (0,0) size 57x8
@@ -292,9 +292,9 @@ layer at (0,0) size 800x166
                 RenderBlock (anonymous) at (0,0) size 12x8
                   RenderText at (0,-36) size 12x80
                     text run at (0,-36) width 12: "\x{21D2}"
-        RenderText {#text} at (622,0) size 5x17
-          text run at (622,0) width 5: " "
-        RenderMathMLMath {math} at (626,4) size 60x10 [padding: 0 1 0 1]
+        RenderText {#text} at (556,0) size 4x17
+          text run at (556,0) width 4: " "
+        RenderMathMLMath {math} at (560,4) size 52x10 [padding: 0 1 0 1]
           RenderMathMLUnderOver {mover} at (1,0) size 57x10
             RenderMathMLSpace {mspace} at (3,8) size 51x2 [bgcolor=#008000]
             RenderMathMLOperator {mo} at (0,0) size 57x8
@@ -302,9 +302,9 @@ layer at (0,0) size 800x166
                 RenderBlock (anonymous) at (0,0) size 12x8
                   RenderText at (0,-36) size 12x80
                     text run at (0,-36) width 12: "\x{21D4}"
-        RenderText {#text} at (685,0) size 5x17
-          text run at (685,0) width 5: " "
-        RenderMathMLMath {math} at (689,2) size 59x12 [padding: 0 1 0 1]
+        RenderText {#text} at (612,0) size 4x17
+          text run at (612,0) width 4: " "
+        RenderMathMLMath {math} at (616,2) size 52x12 [padding: 0 1 0 1]
           RenderMathMLUnderOver {mover} at (1,0) size 57x12
             RenderMathMLSpace {mspace} at (3,10) size 51x2 [bgcolor=#008000]
             RenderMathMLOperator {mo} at (0,0) size 57x10
@@ -312,8 +312,9 @@ layer at (0,0) size 800x166
                 RenderBlock (anonymous) at (0,0) size 12x10
                   RenderText at (0,-35) size 12x80
                     text run at (0,-35) width 12: "\x{21DA}"
-        RenderText {#text} at (0,0) size 0x0
-        RenderMathMLMath {math} at (0,19) size 59x12 [padding: 0 1 0 1]
+        RenderText {#text} at (668,0) size 4x17
+          text run at (668,0) width 4: " "
+        RenderMathMLMath {math} at (672,2) size 52x12 [padding: 0 1 0 1]
           RenderMathMLUnderOver {mover} at (1,0) size 57x12
             RenderMathMLSpace {mspace} at (3,10) size 51x2 [bgcolor=#008000]
             RenderMathMLOperator {mo} at (0,0) size 57x10
@@ -321,9 +322,9 @@ layer at (0,0) size 800x166
                 RenderBlock (anonymous) at (0,0) size 12x10
                   RenderText at (0,-35) size 12x80
                     text run at (0,-35) width 12: "\x{21DB}"
-        RenderText {#text} at (58,17) size 5x17
-          text run at (58,17) width 5: " "
-        RenderMathMLMath {math} at (62,19) size 53x12 [padding: 0 1 0 1]
+        RenderText {#text} at (724,0) size 4x17
+          text run at (724,0) width 4: " "
+        RenderMathMLMath {math} at (728,2) size 52x12 [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
@@ -331,9 +332,8 @@ layer at (0,0) size 800x166
                 RenderBlock (anonymous) at (0,0) size 4x10
                   RenderText at (0,-34) size 4x80
                     text run at (0,-34) width 4: "\x{23B4}"
-        RenderText {#text} at (114,17) size 5x17
-          text run at (114,17) width 5: " "
-        RenderMathMLMath {math} at (118,24) size 53x7 [padding: 0 1 0 1]
+        RenderText {#text} at (0,0) size 0x0
+        RenderMathMLMath {math} at (0,24) size 52x7 [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
@@ -341,9 +341,9 @@ layer at (0,0) size 800x166
                 RenderBlock (anonymous) at (0,0) size 4x4
                   RenderText at (0,-43) size 4x80
                     text run at (0,-43) width 4: "\x{23B5}"
-        RenderText {#text} at (170,17) size 5x17
-          text run at (170,17) width 5: " "
-        RenderMathMLMath {math} at (174,19) size 53x12 [padding: 0 1 0 1]
+        RenderText {#text} at (52,17) size 4x17
+          text run at (52,17) width 4: " "
+        RenderMathMLMath {math} at (56,19) size 52x12 [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
@@ -351,9 +351,9 @@ layer at (0,0) size 800x166
                 RenderBlock (anonymous) at (0,0) size 6x10
                   RenderText at (0,-34) size 6x80
                     text run at (0,-34) width 6: "\x{23DC}"
-        RenderText {#text} at (226,17) size 5x17
-          text run at (226,17) width 5: " "
-        RenderMathMLMath {math} at (230,24) size 53x7 [padding: 0 1 0 1]
+        RenderText {#text} at (108,17) size 4x17
+          text run at (108,17) width 4: " "
+        RenderMathMLMath {math} at (112,24) size 52x7 [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
@@ -361,9 +361,9 @@ layer at (0,0) size 800x166
                 RenderBlock (anonymous) at (0,0) size 6x4
                   RenderText at (0,-43) size 6x80
                     text run at (0,-43) width 6: "\x{23DD}"
-        RenderText {#text} at (282,17) size 5x17
-          text run at (282,17) width 5: " "
-        RenderMathMLMath {math} at (286,18) size 53x13 [padding: 0 1 0 1]
+        RenderText {#text} at (164,17) size 4x17
+          text run at (164,17) width 4: " "
+        RenderMathMLMath {math} at (168,18) size 52x13 [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
@@ -371,9 +371,9 @@ layer at (0,0) size 800x166
                 RenderBlock (anonymous) at (0,0) size 6x11
                   RenderText at (0,-33) size 6x80
                     text run at (0,-33) width 6: "\x{23DE}"
-        RenderText {#text} at (338,17) size 5x17
-          text run at (338,17) width 5: " "
-        RenderMathMLMath {math} at (342,23) size 53x8 [padding: 0 1 0 1]
+        RenderText {#text} at (220,17) size 4x17
+          text run at (220,17) width 4: " "
+        RenderMathMLMath {math} at (224,23) size 52x8 [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
@@ -383,7 +383,7 @@ layer at (0,0) size 800x166
                     text run at (0,-43) width 6: "\x{23DF}"
         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]
+        RenderMathMLMath {math} at (0,4) size 102x10 [padding: 0 1 0 1]
           RenderMathMLUnderOver {mover} at (1,0) size 107x10
             RenderMathMLSpace {mspace} at (3,8) size 101x2 [bgcolor=#FF0000]
             RenderMathMLOperator {mo} at (0,0) size 107x8
@@ -391,9 +391,9 @@ layer at (0,0) size 800x166
                 RenderBlock (anonymous) at (0,0) size 12x8
                   RenderText at (0,-36) size 12x80
                     text run at (0,-36) width 12: "\x{2190}"
-        RenderText {#text} at (108,0) size 5x17
-          text run at (108,0) width 5: " "
-        RenderMathMLMath {math} at (112,4) size 110x10 [padding: 0 1 0 1]
+        RenderText {#text} at (102,0) size 4x17
+          text run at (102,0) width 4: " "
+        RenderMathMLMath {math} at (106,4) size 102x10 [padding: 0 1 0 1]
           RenderMathMLUnderOver {mover} at (1,0) size 107x10
             RenderMathMLSpace {mspace} at (3,8) size 101x2 [bgcolor=#FF0000]
             RenderMathMLOperator {mo} at (0,0) size 107x8
@@ -401,9 +401,9 @@ layer at (0,0) size 800x166
                 RenderBlock (anonymous) at (0,0) size 12x8
                   RenderText at (0,-36) size 12x80
                     text run at (0,-36) width 12: "\x{2192}"
-        RenderText {#text} at (221,0) size 5x17
-          text run at (221,0) width 5: " "
-        RenderMathMLMath {math} at (225,4) size 109x10 [padding: 0 1 0 1]
+        RenderText {#text} at (208,0) size 4x17
+          text run at (208,0) width 4: " "
+        RenderMathMLMath {math} at (212,4) size 102x10 [padding: 0 1 0 1]
           RenderMathMLUnderOver {mover} at (1,0) size 107x10
             RenderMathMLSpace {mspace} at (3,8) size 101x2 [bgcolor=#FF0000]
             RenderMathMLOperator {mo} at (0,0) size 107x8
@@ -411,9 +411,9 @@ layer at (0,0) size 800x166
                 RenderBlock (anonymous) at (0,0) size 12x8
                   RenderText at (0,-36) size 12x80
                     text run at (0,-36) width 12: "\x{2194}"
-        RenderText {#text} at (333,0) size 5x17
-          text run at (333,0) width 5: " "
-        RenderMathMLMath {math} at (337,4) size 110x10 [padding: 0 1 0 1]
+        RenderText {#text} at (314,0) size 4x17
+          text run at (314,0) width 4: " "
+        RenderMathMLMath {math} at (318,4) size 102x10 [padding: 0 1 0 1]
           RenderMathMLUnderOver {mover} at (1,0) size 107x10
             RenderMathMLSpace {mspace} at (3,8) size 101x2 [bgcolor=#FF0000]
             RenderMathMLOperator {mo} at (0,0) size 107x8
@@ -421,9 +421,9 @@ layer at (0,0) size 800x166
                 RenderBlock (anonymous) at (0,0) size 12x8
                   RenderText at (0,-36) size 12x80
                     text run at (0,-36) width 12: "\x{21A4}"
-        RenderText {#text} at (446,0) size 5x17
-          text run at (446,0) width 5: " "
-        RenderMathMLMath {math} at (450,4) size 110x10 [padding: 0 1 0 1]
+        RenderText {#text} at (420,0) size 4x17
+          text run at (420,0) width 4: " "
+        RenderMathMLMath {math} at (424,4) size 102x10 [padding: 0 1 0 1]
           RenderMathMLUnderOver {mover} at (1,0) size 107x10
             RenderMathMLSpace {mspace} at (3,8) size 101x2 [bgcolor=#FF0000]
             RenderMathMLOperator {mo} at (0,0) size 107x8
@@ -431,9 +431,9 @@ layer at (0,0) size 800x166
                 RenderBlock (anonymous) at (0,0) size 12x8
                   RenderText at (0,-36) size 12x80
                     text run at (0,-36) width 12: "\x{21A6}"
-        RenderText {#text} at (559,0) size 5x17
-          text run at (559,0) width 5: " "
-        RenderMathMLMath {math} at (563,5) size 109x9 [padding: 0 1 0 1]
+        RenderText {#text} at (526,0) size 4x17
+          text run at (526,0) width 4: " "
+        RenderMathMLMath {math} at (530,5) size 102x9 [padding: 0 1 0 1]
           RenderMathMLUnderOver {mover} at (1,0) size 107x9
             RenderMathMLSpace {mspace} at (3,7) size 101x2 [bgcolor=#FF0000]
             RenderMathMLOperator {mo} at (0,0) size 107x7
@@ -441,8 +441,9 @@ layer at (0,0) size 800x166
                 RenderBlock (anonymous) at (0,0) size 12x7
                   RenderText at (0,-36) size 12x80
                     text run at (0,-36) width 12: "\x{21BC}"
-        RenderText {#text} at (0,0) size 0x0
-        RenderMathMLMath {math} at (0,24) size 109x7 [padding: 0 1 0 1]
+        RenderText {#text} at (632,0) size 4x17
+          text run at (632,0) width 4: " "
+        RenderMathMLMath {math} at (636,7) size 102x7 [padding: 0 1 0 1]
           RenderMathMLUnderOver {mover} at (1,0) size 107x7
             RenderMathMLSpace {mspace} at (3,5) size 101x2 [bgcolor=#FF0000]
             RenderMathMLOperator {mo} at (0,0) size 107x5
@@ -450,9 +451,8 @@ layer at (0,0) size 800x166
                 RenderBlock (anonymous) at (0,0) size 12x5
                   RenderText at (0,-39) size 12x80
                     text run at (0,-39) width 12: "\x{21BD}"
-        RenderText {#text} at (108,17) size 5x17
-          text run at (108,17) width 5: " "
-        RenderMathMLMath {math} at (112,22) size 110x9 [padding: 0 1 0 1]
+        RenderText {#text} at (0,0) size 0x0
+        RenderMathMLMath {math} at (0,22) size 102x9 [padding: 0 1 0 1]
           RenderMathMLUnderOver {mover} at (1,0) size 107x9
             RenderMathMLSpace {mspace} at (3,7) size 101x2 [bgcolor=#FF0000]
             RenderMathMLOperator {mo} at (0,0) size 107x7
@@ -460,9 +460,9 @@ layer at (0,0) size 800x166
                 RenderBlock (anonymous) at (0,0) size 12x7
                   RenderText at (0,-36) size 12x80
                     text run at (0,-36) width 12: "\x{21C0}"
-        RenderText {#text} at (221,17) size 5x17
-          text run at (221,17) width 5: " "
-        RenderMathMLMath {math} at (225,21) size 109x10 [padding: 0 1 0 1]
+        RenderText {#text} at (102,17) size 4x17
+          text run at (102,17) width 4: " "
+        RenderMathMLMath {math} at (106,21) size 102x10 [padding: 0 1 0 1]
           RenderMathMLUnderOver {mover} at (1,0) size 107x10
             RenderMathMLSpace {mspace} at (3,8) size 101x2 [bgcolor=#FF0000]
             RenderMathMLOperator {mo} at (0,0) size 107x8
@@ -470,9 +470,9 @@ layer at (0,0) size 800x166
                 RenderBlock (anonymous) at (0,0) size 12x8
                   RenderText at (0,-36) size 12x80
                     text run at (0,-36) width 12: "\x{21D0}"
-        RenderText {#text} at (333,17) size 5x17
-          text run at (333,17) width 5: " "
-        RenderMathMLMath {math} at (337,21) size 110x10 [padding: 0 1 0 1]
+        RenderText {#text} at (208,17) size 4x17
+          text run at (208,17) width 4: " "
+        RenderMathMLMath {math} at (212,21) size 102x10 [padding: 0 1 0 1]
           RenderMathMLUnderOver {mover} at (1,0) size 107x10
             RenderMathMLSpace {mspace} at (3,8) size 101x2 [bgcolor=#FF0000]
             RenderMathMLOperator {mo} at (0,0) size 107x8
@@ -480,9 +480,9 @@ layer at (0,0) size 800x166
                 RenderBlock (anonymous) at (0,0) size 12x8
                   RenderText at (0,-36) size 12x80
                     text run at (0,-36) width 12: "\x{21D2}"
-        RenderText {#text} at (446,17) size 5x17
-          text run at (446,17) width 5: " "
-        RenderMathMLMath {math} at (450,21) size 110x10 [padding: 0 1 0 1]
+        RenderText {#text} at (314,17) size 4x17
+          text run at (314,17) width 4: " "
+        RenderMathMLMath {math} at (318,21) size 102x10 [padding: 0 1 0 1]
           RenderMathMLUnderOver {mover} at (1,0) size 107x10
             RenderMathMLSpace {mspace} at (3,8) size 101x2 [bgcolor=#FF0000]
             RenderMathMLOperator {mo} at (0,0) size 107x8
@@ -490,9 +490,9 @@ layer at (0,0) size 800x166
                 RenderBlock (anonymous) at (0,0) size 12x8
                   RenderText at (0,-36) size 12x80
                     text run at (0,-36) width 12: "\x{21D4}"
-        RenderText {#text} at (559,17) size 5x17
-          text run at (559,17) width 5: " "
-        RenderMathMLMath {math} at (563,19) size 109x12 [padding: 0 1 0 1]
+        RenderText {#text} at (420,17) size 4x17
+          text run at (420,17) width 4: " "
+        RenderMathMLMath {math} at (424,19) size 102x12 [padding: 0 1 0 1]
           RenderMathMLUnderOver {mover} at (1,0) size 107x12
             RenderMathMLSpace {mspace} at (3,10) size 101x2 [bgcolor=#FF0000]
             RenderMathMLOperator {mo} at (0,0) size 107x10
@@ -500,8 +500,9 @@ layer at (0,0) size 800x166
                 RenderBlock (anonymous) at (0,0) size 12x10
                   RenderText at (0,-35) size 12x80
                     text run at (0,-35) width 12: "\x{21DA}"
-        RenderText {#text} at (0,0) size 0x0
-        RenderMathMLMath {math} at (0,36) size 109x12 [padding: 0 1 0 1]
+        RenderText {#text} at (526,17) size 4x17
+          text run at (526,17) width 4: " "
+        RenderMathMLMath {math} at (530,19) size 102x12 [padding: 0 1 0 1]
           RenderMathMLUnderOver {mover} at (1,0) size 107x12
             RenderMathMLSpace {mspace} at (3,10) size 101x2 [bgcolor=#FF0000]
             RenderMathMLOperator {mo} at (0,0) size 107x10
@@ -509,9 +510,9 @@ layer at (0,0) size 800x166
                 RenderBlock (anonymous) at (0,0) size 12x10
                   RenderText at (0,-35) size 12x80
                     text run at (0,-35) width 12: "\x{21DB}"
-        RenderText {#text} at (108,34) size 5x17
-          text run at (108,34) width 5: " "
-        RenderMathMLMath {math} at (112,36) size 103x12 [padding: 0 1 0 1]
+        RenderText {#text} at (632,17) size 4x17
+          text run at (632,17) width 4: " "
+        RenderMathMLMath {math} at (636,19) size 102x12 [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
@@ -519,9 +520,8 @@ layer at (0,0) size 800x166
                 RenderBlock (anonymous) at (0,0) size 4x10
                   RenderText at (0,-34) size 4x80
                     text run at (0,-34) width 4: "\x{23B4}"
-        RenderText {#text} at (214,34) size 5x17
-          text run at (214,34) width 5: " "
-        RenderMathMLMath {math} at (218,41) size 103x7 [padding: 0 1 0 1]
+        RenderText {#text} at (0,0) size 0x0
+        RenderMathMLMath {math} at (0,41) size 102x7 [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
@@ -529,9 +529,9 @@ layer at (0,0) size 800x166
                 RenderBlock (anonymous) at (0,0) size 4x4
                   RenderText at (0,-43) size 4x80
                     text run at (0,-43) width 4: "\x{23B5}"
-        RenderText {#text} at (320,34) size 5x17
-          text run at (320,34) width 5: " "
-        RenderMathMLMath {math} at (324,36) size 103x12 [padding: 0 1 0 1]
+        RenderText {#text} at (102,34) size 4x17
+          text run at (102,34) width 4: " "
+        RenderMathMLMath {math} at (106,36) size 102x12 [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
@@ -539,9 +539,9 @@ layer at (0,0) size 800x166
                 RenderBlock (anonymous) at (0,0) size 6x10
                   RenderText at (0,-34) size 6x80
                     text run at (0,-34) width 6: "\x{23DC}"
-        RenderText {#text} at (426,34) size 5x17
-          text run at (426,34) width 5: " "
-        RenderMathMLMath {math} at (430,41) size 103x7 [padding: 0 1 0 1]
+        RenderText {#text} at (208,34) size 4x17
+          text run at (208,34) width 4: " "
+        RenderMathMLMath {math} at (212,41) size 102x7 [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
@@ -549,9 +549,9 @@ layer at (0,0) size 800x166
                 RenderBlock (anonymous) at (0,0) size 6x4
                   RenderText at (0,-43) size 6x80
                     text run at (0,-43) width 6: "\x{23DD}"
-        RenderText {#text} at (532,34) size 5x17
-          text run at (532,34) width 5: " "
-        RenderMathMLMath {math} at (536,35) size 103x13 [padding: 0 1 0 1]
+        RenderText {#text} at (314,34) size 4x17
+          text run at (314,34) width 4: " "
+        RenderMathMLMath {math} at (318,35) size 102x13 [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
@@ -559,9 +559,9 @@ layer at (0,0) size 800x166
                 RenderBlock (anonymous) at (0,0) size 6x11
                   RenderText at (0,-33) size 6x80
                     text run at (0,-33) width 6: "\x{23DE}"
-        RenderText {#text} at (638,34) size 5x17
-          text run at (638,34) width 5: " "
-        RenderMathMLMath {math} at (642,40) size 103x8 [padding: 0 1 0 1]
+        RenderText {#text} at (420,34) size 4x17
+          text run at (420,34) width 4: " "
+        RenderMathMLMath {math} at (424,40) size 102x8 [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
index 3d0151c..82306ef 100644 (file)
Binary files a/LayoutTests/platform/gtk/mathml/opentype/opentype-stretchy-horizontal-expected.png and b/LayoutTests/platform/gtk/mathml/opentype/opentype-stretchy-horizontal-expected.png differ
index 52c06e2..7c8a157 100644 (file)
@@ -5,34 +5,34 @@ layer 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 10x23 [padding: 0 1 0 1]
-          RenderMathMLRow {mstyle} at (1,0) size 8x23
-            RenderMathMLUnderOver {mover} at (0,0) size 8x23
-              RenderMathMLOperator {mo} at (-5,1) size 17x22
+          RenderMathMLRow {mstyle} at (1,0) size 16x23
+            RenderMathMLUnderOver {mover} at (0,0) size 16x23
+              RenderMathMLOperator {mo} at (0,1) size 16x22
                 RenderMathMLBlock (anonymous, flex) at (2,0) size 11x4
                   RenderBlock (anonymous) at (0,0) size 1x4
                     RenderText at (0,-3) size 1x0
                       text run at (0,-3) width 1: "\x{219C}"
-              RenderMathMLSpace {mspace} at (0,0) size 8x1
+              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 17x23 [padding: 0 1 0 1]
-          RenderMathMLRow {mstyle} at (1,0) size 15x23
-            RenderMathMLUnderOver {mover} at (0,0) size 15x23
-              RenderMathMLOperator {mo} at (-6,1) size 27x22
+          RenderMathMLRow {mstyle} at (1,0) size 26x23
+            RenderMathMLUnderOver {mover} at (0,0) size 26x23
+              RenderMathMLOperator {mo} at (0,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: "\x{219C}"
-              RenderMathMLSpace {mspace} at (0,0) size 15x1
+              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 152x43 [padding: 0 1 0 1]
-          RenderMathMLRow {mstyle} at (1,0) size 150x43
-            RenderMathMLUnderOver {mover} at (0,0) size 150x43
-              RenderMathMLOperator {mo} at (-3,1) size 156x42
+          RenderMathMLRow {mstyle} at (1,0) size 156x43
+            RenderMathMLUnderOver {mover} at (0,0) size 156x43
+              RenderMathMLOperator {mo} at (0,1) size 156x42
                 RenderMathMLBlock (anonymous, flex) at (2,0) size 151x4
                   RenderBlock (anonymous) at (0,0) size 1x4
                     RenderText at (0,-3) size 1x0
                       text run at (0,-3) width 1: "\x{219C}"
-              RenderMathMLSpace {mspace} at (0,0) size 150x1
+              RenderMathMLSpace {mspace} at (2,0) size 151x1
         RenderText {#text} at (0,0) size 0x0
index 42bccd1..aa1d85b 100644 (file)
Binary files a/LayoutTests/platform/mac/mathml/opentype/opentype-stretchy-horizontal-expected.png and b/LayoutTests/platform/mac/mathml/opentype/opentype-stretchy-horizontal-expected.png differ
index ad37169..044bb33 100644 (file)
@@ -5,34 +5,34 @@ layer at (0,0) size 800x153
     RenderBody {BODY} at (8,16) size 784x121
       RenderBlock {P} at (0,0) size 784x24
         RenderMathMLMath {math} at (0,3) size 10x22 [padding: 0 1 0 1]
-          RenderMathMLRow {mstyle} at (1,0) size 8x22
-            RenderMathMLUnderOver {mover} at (0,0) size 8x22
-              RenderMathMLOperator {mo} at (-5,1) size 17x21
+          RenderMathMLRow {mstyle} at (1,0) size 16x22
+            RenderMathMLUnderOver {mover} at (0,0) size 16x22
+              RenderMathMLOperator {mo} at (0,1) size 16x21
                 RenderMathMLBlock (anonymous, flex) at (2,0) size 11x4
                   RenderBlock (anonymous) at (0,0) size 2x4
                     RenderText at (0,-3) size 2x0
                       text run at (0,-3) width 2: "\x{219C}"
-              RenderMathMLSpace {mspace} at (0,0) size 8x1
+              RenderMathMLSpace {mspace} at (4,0) size 8x1
         RenderText {#text} at (0,0) size 0x0
       RenderBlock {P} at (0,40) size 784x24
         RenderMathMLMath {math} at (0,3) size 17x22 [padding: 0 1 0 1]
-          RenderMathMLRow {mstyle} at (1,0) size 15x22
-            RenderMathMLUnderOver {mover} at (0,0) size 15x22
-              RenderMathMLOperator {mo} at (-6,1) size 27x21
+          RenderMathMLRow {mstyle} at (1,0) size 26x22
+            RenderMathMLUnderOver {mover} at (0,0) size 26x22
+              RenderMathMLOperator {mo} at (0,1) size 26x21
                 RenderMathMLBlock (anonymous, flex) at (2,0) size 22x4
                   RenderBlock (anonymous) at (0,0) size 2x4
                     RenderText at (0,-3) size 2x0
                       text run at (0,-3) width 2: "\x{219C}"
-              RenderMathMLSpace {mspace} at (0,0) size 15x1
+              RenderMathMLSpace {mspace} at (5,0) size 16x1
         RenderText {#text} at (0,0) size 0x0
       RenderBlock {P} at (0,80) size 784x41
         RenderMathMLMath {math} at (0,0) size 152x42 [padding: 0 1 0 1]
-          RenderMathMLRow {mstyle} at (1,0) size 150x42
-            RenderMathMLUnderOver {mover} at (0,0) size 150x42
-              RenderMathMLOperator {mo} at (-3,1) size 156x41
+          RenderMathMLRow {mstyle} at (1,0) size 156x42
+            RenderMathMLUnderOver {mover} at (0,0) size 156x42
+              RenderMathMLOperator {mo} at (0,1) size 156x41
                 RenderMathMLBlock (anonymous, flex) at (2,0) size 151x4
                   RenderBlock (anonymous) at (0,0) size 2x4
                     RenderText at (0,-3) size 2x0
                       text run at (0,-3) width 2: "\x{219C}"
-              RenderMathMLSpace {mspace} at (0,0) size 150x1
+              RenderMathMLSpace {mspace} at (2,0) size 151x1
         RenderText {#text} at (0,0) size 0x0
index e8b100c..c643367 100644 (file)
@@ -1,3 +1,44 @@
+2016-04-11  Frederic Wang  <fwang@igalia.com>
+
+        Refactor RenderMathMLUnderOver layout functions to avoid using flexbox
+        https://bugs.webkit.org/show_bug.cgi?id=153742
+
+        Reviewed by Sergio Villar Senin.
+
+        Based on a patch by Javier Fernandez <jfernandez@igalia.com>
+
+        Refactor the UnderOver renderer to use its own layoutBlock method that
+        does all the layout calculations without considering the flexbox
+        restrictions.
+
+        * css/mathml.css:
+        (mo, mfrac, munder, mover, munderover): Delete the underover elements from the line defining
+        the column direction.
+        (munder, mover, munderover): Deleted. This flexbox property is no longer needed.
+        (mover > :last-child, munderover > :last-child): Deleted. This flexbox property is no longer
+        needed.
+        * rendering/mathml/RenderMathMLUnderOver.cpp:
+        (WebCore::RenderMathMLUnderOver::firstLineBaseline): Use ascentForChild.
+        (WebCore::RenderMathMLUnderOver::computeOperatorsHorizontalStretch): Avoid stretching
+        operators that are not stretchy.
+        (WebCore::RenderMathMLUnderOver::isValid): Helper function to ensure that the child list is
+        valid with respect to the MathML specification.
+        (WebCore::RenderMathMLUnderOver::base): Added. Helper function.
+        (WebCore::RenderMathMLUnderOver::under): Added. Helper function.
+        (WebCore::RenderMathMLUnderOver::over): Added. Helper function.
+        (WebCore::RenderMathMLUnderOver::computePreferredLogicalWidths): Added.
+        The preferred width is the maximum preferred width of the base, under and over scripts.
+        (WebCore::RenderMathMLUnderOver::horizontalOffset): Added, helper to calculate the
+        horizontal position of children (horizontally centered).
+        (WebCore::RenderMathMLUnderOver::layoutBlock): Added, it lays out the base, underscript and
+        overscript. It calculates the exact logical width, which may differ from the preferred width when
+        one child contains stretchy operators. It later sets the locations of children accordingly
+        and sets the heigth of the render element.
+        (WebCore::RenderMathMLUnderOver::paintChildren): Added, we have to use the usual traverse
+        instead of the one that comes from the flexbox. This will be removed in a follow-up patch.
+        (WebCore::RenderMathMLUnderOver::layout): Deleted.
+        * rendering/mathml/RenderMathMLUnderOver.h: Added new functions definitions.
+
 2016-04-07  Carlos Garcia Campos  <cgarcia@igalia.com>
 
         [GTK] Rework the theming code for GTK+ 3.20
index 57ac559..c3038b6 100644 (file)
@@ -44,14 +44,10 @@ ms, mtext, mi, mn, mo, annotation, mtd {
     white-space: nowrap !important;
 }
 
-mo, mfrac, munder, mover, munderover {
+mo, mfrac {
     flex-direction: column;
 }
 
-munder, mover, munderover {
-    align-items: center;
-}
-
 mfrac > * {
     align-self: center;
 }
@@ -78,10 +74,6 @@ mfrac {
     -webkit-margin-end: 1px;
 }
 
-mover > :last-child, munderover > :last-child {
-    order: -1;
-}
-
 msub > * + *, msup > * + *, msubsup > * + *, mmultiscripts > * + *, munder > * + *, mover > * + *, munderover > * + * {
     font-size: 0.75em; /* FIXME: MathML standard is 0.71em */
 }
index b0c34c0..4a62e01 100644 (file)
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2009 Alex Milowski (alex@milowski.com). All rights reserved.
+ * Copyright (C) 2016 Igalia S.L.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -43,12 +44,12 @@ RenderMathMLUnderOver::RenderMathMLUnderOver(Element& element, Ref<RenderStyle>&
 {
     // Determine what kind of under/over expression we have by element name
     if (element.hasTagName(MathMLNames::munderTag))
-        m_kind = Under;
+        m_scriptType = Under;
     else if (element.hasTagName(MathMLNames::moverTag))
-        m_kind = Over;
+        m_scriptType = Over;
     else {
         ASSERT(element.hasTagName(MathMLNames::munderoverTag));
-        m_kind = UnderOver;
+        m_scriptType = UnderOver;
     }
 }
 
@@ -65,13 +66,11 @@ Optional<int> RenderMathMLUnderOver::firstLineBaseline() const
     RenderBox* base = firstChildBox();
     if (!base)
         return Optional<int>();
-    Optional<int> baseline = base->firstLineBaseline();
-    if (baseline)
-        baseline.value() += static_cast<int>(base->logicalTop());
-    return baseline;
+
+    return Optional<int>(static_cast<int>(lroundf(ascentForChild(*base) + base->logicalTop())));
 }
 
-void RenderMathMLUnderOver::layout()
+void RenderMathMLUnderOver::computeOperatorsHorizontalStretch()
 {
     LayoutUnit stretchWidth = 0;
     Vector<RenderMathMLOperator*, 2> renderOperators;
@@ -80,7 +79,7 @@ void RenderMathMLUnderOver::layout()
         if (child->needsLayout()) {
             if (is<RenderMathMLBlock>(child)) {
                 if (auto renderOperator = downcast<RenderMathMLBlock>(*child).unembellishedOperator()) {
-                    if (!renderOperator->isVertical()) {
+                    if (renderOperator->hasOperatorFlag(MathMLOperatorDictionary::Stretchy) && !renderOperator->isVertical()) {
                         renderOperator->resetStretchSize();
                         renderOperators.append(renderOperator);
                     }
@@ -99,8 +98,137 @@ void RenderMathMLUnderOver::layout()
     // Set the sizes of (possibly embellished) stretchy operator children.
     for (auto& renderOperator : renderOperators)
         renderOperator->stretchTo(stretchWidth);
+}
+
+bool RenderMathMLUnderOver::isValid() const
+{
+    // Verify whether the list of children is valid:
+    // <munder> base under </munder>
+    // <mover> base over </mover>
+    // <munderover> base under over </munderover>
+    RenderBox* child = firstChildBox();
+    if (!child)
+        return false;
+    child = child->nextSiblingBox();
+    if (!child)
+        return false;
+    child = child->nextSiblingBox();
+    switch (m_scriptType) {
+    case Over:
+    case Under:
+        return !child;
+    case UnderOver:
+        return child && !child->nextSiblingBox();
+    default:
+        ASSERT_NOT_REACHED();
+        return false;
+    }
+}
+
+RenderBox& RenderMathMLUnderOver::base() const
+{
+    ASSERT(isValid());
+    return *firstChildBox();
+}
+
+RenderBox& RenderMathMLUnderOver::under() const
+{
+    ASSERT(isValid());
+    ASSERT(m_scriptType == Under || m_scriptType == UnderOver);
+    return *firstChildBox()->nextSiblingBox();
+}
+
+RenderBox& RenderMathMLUnderOver::over() const
+{
+    ASSERT(isValid());
+    ASSERT(m_scriptType == Over || m_scriptType == UnderOver);
+    RenderBox* secondChild = firstChildBox()->nextSiblingBox();
+    return m_scriptType == Over ? *secondChild : *secondChild->nextSiblingBox();
+}
+
+
+void RenderMathMLUnderOver::computePreferredLogicalWidths()
+{
+    ASSERT(preferredLogicalWidthsDirty());
+
+    if (!isValid()) {
+        m_minPreferredLogicalWidth = m_maxPreferredLogicalWidth = 0;
+        setPreferredLogicalWidthsDirty(false);
+        return;
+    }
+
+    LayoutUnit preferredWidth = base().maxPreferredLogicalWidth();
+
+    if (m_scriptType == Under || m_scriptType == UnderOver)
+        preferredWidth = std::max(preferredWidth, under().maxPreferredLogicalWidth());
+
+    if (m_scriptType == Over || m_scriptType == UnderOver)
+        preferredWidth = std::max(preferredWidth, over().maxPreferredLogicalWidth());
 
-    RenderMathMLBlock::layout();
+    m_minPreferredLogicalWidth = m_maxPreferredLogicalWidth = preferredWidth;
+
+    setPreferredLogicalWidthsDirty(false);
+}
+
+LayoutUnit RenderMathMLUnderOver::horizontalOffset(const RenderBox& child) const
+{
+    return (logicalWidth() - child.logicalWidth()) / 2;
+}
+
+void RenderMathMLUnderOver::layoutBlock(bool relayoutChildren, LayoutUnit)
+{
+    ASSERT(needsLayout());
+
+    if (!relayoutChildren && simplifiedLayout())
+        return;
+
+    if (!isValid()) {
+        setLogicalWidth(0);
+        setLogicalHeight(0);
+        clearNeedsLayout();
+        return;
+    }
+
+    recomputeLogicalWidth();
+
+    computeOperatorsHorizontalStretch();
+
+    base().layoutIfNeeded();
+    if (m_scriptType == Under || m_scriptType == UnderOver)
+        under().layoutIfNeeded();
+    if (m_scriptType == Over || m_scriptType == UnderOver)
+        over().layoutIfNeeded();
+
+    LayoutUnit logicalWidth = base().logicalWidth();
+    if (m_scriptType == Under || m_scriptType == UnderOver)
+        logicalWidth = std::max(logicalWidth, under().logicalWidth());
+    if (m_scriptType == Over || m_scriptType == UnderOver)
+        logicalWidth = std::max(logicalWidth, over().logicalWidth());
+    setLogicalWidth(logicalWidth);
+
+    LayoutUnit verticalOffset = 0;
+    if (m_scriptType == Over || m_scriptType == UnderOver) {
+        over().setLocation(LayoutPoint(horizontalOffset(over()), 0));
+        verticalOffset += over().logicalHeight();
+    }
+    base().setLocation(LayoutPoint(horizontalOffset(base()), verticalOffset));
+    verticalOffset += base().logicalHeight();
+    if (m_scriptType == Under || m_scriptType == UnderOver) {
+        under().setLocation(LayoutPoint(horizontalOffset(under()), verticalOffset));
+        verticalOffset += under().logicalHeight();
+    }
+
+    setLogicalHeight(verticalOffset);
+
+    clearNeedsLayout();
+}
+
+void RenderMathMLUnderOver::paintChildren(PaintInfo& paintInfo, const LayoutPoint& paintOffset, PaintInfo& paintInfoForChild, bool usePrintRect)
+{
+    for (RenderBox* child = firstChildBox(); child; child = child->nextSiblingBox()) {
+        if (!paintChild(*child, paintInfo, paintOffset, paintInfoForChild, usePrintRect, PaintAsInlineBlock))
+            return;
+    }
 }
 
 }
index f7f8894..5238168 100644 (file)
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2009 Alex Milowski (alex@milowski.com). All rights reserved.
+ * Copyright (C) 2016 Igalia S.L.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -39,16 +40,24 @@ public:
     RenderMathMLOperator* unembellishedOperator() override;
 
     Optional<int> firstLineBaseline() const override;
-    
-protected:
-    void layout() override;
+
+    void computePreferredLogicalWidths() final;
+    void layoutBlock(bool relayoutChildren, LayoutUnit pageLogicalHeight = 0) final;
+    void paintChildren(PaintInfo& forSelf, const LayoutPoint&, PaintInfo& forChild, bool usePrintRect) final;
 
 private:
     bool isRenderMathMLUnderOver() const override { return true; }
     const char* renderName() const override { return "RenderMathMLUnderOver"; }
 
+    void computeOperatorsHorizontalStretch();
+    bool isValid() const;
+    RenderBox& base() const;
+    RenderBox& under() const;
+    RenderBox& over() const;
+    LayoutUnit horizontalOffset(const RenderBox&) const;
+
     enum UnderOverType { Under, Over, UnderOver };
-    UnderOverType m_kind;
+    UnderOverType m_scriptType;
 };
     
 }