[SCM] WebKit Debian packaging branch, webkit-1.2, updated. upstream/1.1.90-6072-g9a69373

eric at webkit.org eric at webkit.org
Thu Apr 8 02:11:59 UTC 2010


The following commit has been merged in the webkit-1.2 branch:
commit 9c3f2ba9f91862c406976c36590ab810c304f524
Author: eric at webkit.org <eric at webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Date:   Sat Mar 6 02:52:45 2010 +0000

    2010-03-05  Alex Milowski  <alex at milowski.com>
    
            Reviewed by Kenneth Rohde Christiansen.
    
            Added tests for row and operator stretching.
            Updated over, underover, and subsup due to row/operators in use.
    
            * mathml/presentation/mo.xhtml: Added.
            * mathml/presentation/row.xhtml: Added.
            * platform/mac/mathml/presentation/mo-expected.checksum: Added.
            * platform/mac/mathml/presentation/mo-expected.png: Added.
            * platform/mac/mathml/presentation/mo-expected.txt: Added.
            * platform/mac/mathml/presentation/over-expected.checksum:
            * platform/mac/mathml/presentation/over-expected.png:
            * platform/mac/mathml/presentation/over-expected.txt:
            * platform/mac/mathml/presentation/row-expected.checksum: Added.
            * platform/mac/mathml/presentation/row-expected.png: Added.
            * platform/mac/mathml/presentation/row-expected.txt: Added.
            * platform/mac/mathml/presentation/subsup-expected.txt:
            * platform/mac/mathml/presentation/underover-expected.checksum:
            * platform/mac/mathml/presentation/underover-expected.png:
            * platform/mac/mathml/presentation/underover-expected.txt:
    2010-03-05  Alex Milowski  <alex at milowski.com>
    
            Reviewed by Kenneth Rohde Christiansen.
    
            Added support for row layout with stretchy operators and
            adjusted the over spacing for over and underover accordingly.
    
            Tests: mathml/presentation/mo.xhtml
                   mathml/presentation/row.xhtml
    
            * WebCore.xcodeproj/project.pbxproj:
            * mathml/MathMLInlineContainerElement.cpp:
            * mathml/MathMLTextElement.cpp:
            * mathml/RenderMathMLMath.cpp: Added.
            * mathml/RenderMathMLMath.h: Added.
            * mathml/RenderMathMLOperator.cpp: Added.
            * mathml/RenderMathMLOperator.h: Added.
            * mathml/RenderMathMLRow.cpp: Added.
            * mathml/RenderMathMLRow.h: Added.
            * mathml/RenderMathMLUnderOver.cpp:
            * mathml/mathtags.in:
    
    git-svn-id: http://svn.webkit.org/repository/webkit/trunk@55607 268f45cc-cd09-0410-ab3c-d52691b4dbfc

diff --git a/LayoutTests/ChangeLog b/LayoutTests/ChangeLog
index d7d26c8..a9cf3cc 100644
--- a/LayoutTests/ChangeLog
+++ b/LayoutTests/ChangeLog
@@ -1,3 +1,26 @@
+2010-03-05  Alex Milowski  <alex at milowski.com>
+
+        Reviewed by Kenneth Rohde Christiansen.
+
+        Added tests for row and operator stretching.
+        Updated over, underover, and subsup due to row/operators in use.
+
+        * mathml/presentation/mo.xhtml: Added.
+        * mathml/presentation/row.xhtml: Added.
+        * platform/mac/mathml/presentation/mo-expected.checksum: Added.
+        * platform/mac/mathml/presentation/mo-expected.png: Added.
+        * platform/mac/mathml/presentation/mo-expected.txt: Added.
+        * platform/mac/mathml/presentation/over-expected.checksum:
+        * platform/mac/mathml/presentation/over-expected.png:
+        * platform/mac/mathml/presentation/over-expected.txt:
+        * platform/mac/mathml/presentation/row-expected.checksum: Added.
+        * platform/mac/mathml/presentation/row-expected.png: Added.
+        * platform/mac/mathml/presentation/row-expected.txt: Added.
+        * platform/mac/mathml/presentation/subsup-expected.txt:
+        * platform/mac/mathml/presentation/underover-expected.checksum:
+        * platform/mac/mathml/presentation/underover-expected.png:
+        * platform/mac/mathml/presentation/underover-expected.txt:
+
 2010-03-05  Dean Jackson  <dino at apple.com>
 
         Reviewed by Simon Fraser.
diff --git a/LayoutTests/mathml/presentation/mo.xhtml b/LayoutTests/mathml/presentation/mo.xhtml
new file mode 100644
index 0000000..7bedadf
--- /dev/null
+++ b/LayoutTests/mathml/presentation/mo.xhtml
@@ -0,0 +1,60 @@
+<html xmlns='http://www.w3.org/1999/xhtml'>
+<head>
+<title>Over</title>
+<style type='text/css'>
+</style>
+</head>
+<body>
+<p id='t1'>operator: 
+<math xmlns='http://www.w3.org/1998/Math/MathML'>
+<mo mathsize='small'>&#x2211;</mo>
+</math>
+operator:
+<math xmlns='http://www.w3.org/1998/Math/MathML'>
+<mo mathsize='small'>B</mo>
+</math>
+</p>
+<p id='t2'>operator: 
+<math xmlns='http://www.w3.org/1998/Math/MathML'>
+<mo mathsize='normal'>&#x2211;</mo>
+</math>
+operator:
+<math xmlns='http://www.w3.org/1998/Math/MathML'>
+<mo mathsize='normal'>B</mo>
+</math>
+</p>
+<p id='t3'>operator: 
+<math xmlns='http://www.w3.org/1998/Math/MathML'>
+<mo mathsize='big'>&#x2211;</mo>
+</math>
+operator:
+<math xmlns='http://www.w3.org/1998/Math/MathML'>
+<mo mathsize='big'>&#x2211;</mo>
+</math>
+</p>
+<p id='t4'>operator: 
+<math xmlns='http://www.w3.org/1998/Math/MathML'>
+<mo mathsize='small'>&#x2211;</mo>
+<mo mathsize='normal'>&#x2211;</mo>
+<mo mathsize='big'>&#x2211;</mo>
+</math>
+operator:
+<math xmlns='http://www.w3.org/1998/Math/MathML'>
+<mo mathsize='small'>B</mo>
+<mo mathsize='normal'>B</mo>
+<mo mathsize='big'>B</mo>
+</math>
+</p>
+<p id='t5'>operator: 
+<math xmlns='http://www.w3.org/1998/Math/MathML'>
+<mo>|</mo>
+<mo>∫</mo>
+<mo>{</mo>
+<mo>[</mo>
+<div style="display: inline-block; height: 50px; width: 50px; border: 1px solid black; vertical-align: middle;"/>
+<mo>]</mo>
+<mo>}</mo>
+</math>
+</p>
+</body>
+</html>
diff --git a/LayoutTests/mathml/presentation/row.xhtml b/LayoutTests/mathml/presentation/row.xhtml
new file mode 100644
index 0000000..f384617
--- /dev/null
+++ b/LayoutTests/mathml/presentation/row.xhtml
@@ -0,0 +1,118 @@
+<html xmlns='http://www.w3.org/1999/xhtml'>
+<head>
+<title>Rows and Operators</title>
+<style type="text/css">
+mo {
+   background-color: rgb(200,200,200);
+}
+</style>
+</head>
+<body>
+<p>
+<math xmlns='http://www.w3.org/1998/Math/MathML'><mi>x</mi><mo>+</mo><mn>1</mn></math>
+</p>
+<p id='t1'>
+16px:
+<math xmlns='http://www.w3.org/1998/Math/MathML'>
+<mrow><mo>{</mo><div xmlns='http://www.w3.org/1999/xhtml' style='display: inline-block; vertical-align: middle;height: 16px; width: 16px; background-color: rgb(0,255,0)'/><mo>}</mo></mrow>
+</math>
+<math xmlns='http://www.w3.org/1998/Math/MathML'>
+<mrow><mo>[</mo><div xmlns='http://www.w3.org/1999/xhtml' style='display: inline-block; vertical-align: middle;height: 16px; width: 16px; background-color: rgb(0,255,0)'/><mo>]</mo></mrow>
+</math>
+<math xmlns='http://www.w3.org/1998/Math/MathML'>
+<mrow><mo>(</mo><div xmlns='http://www.w3.org/1999/xhtml' style='display: inline-block; vertical-align: middle; height: 16px; width: 16px; background-color: rgb(0,255,0)'/><mo>)</mo></mrow>
+</math>
+<math xmlns='http://www.w3.org/1998/Math/MathML'>
+<mrow><mo>|</mo><div xmlns='http://www.w3.org/1999/xhtml' style='display: inline-block; vertical-align: middle; height: 16px; width: 16px; background-color: rgb(0,255,0)'/><mo>|</mo></mrow>
+</math>
+<math xmlns='http://www.w3.org/1998/Math/MathML'>
+<mrow><mo>&#x222b;</mo><div xmlns='http://www.w3.org/1999/xhtml' style='display: inline-block; vertical-align: middle; vertical-align: middle; height: 16px; width: 16px; background-color: rgb(0,255,0);'/></mrow>
+</math>
+</p>
+<p id='t1'>
+24px:
+<math xmlns='http://www.w3.org/1998/Math/MathML'>
+<mrow><mo>{</mo><div xmlns='http://www.w3.org/1999/xhtml' style='display: inline-block; vertical-align: middle; height: 24px; width: 24px; background-color: rgb(0,255,0)'/><mo>}</mo></mrow>
+</math>
+<math xmlns='http://www.w3.org/1998/Math/MathML'>
+<mrow><mo>[</mo><div xmlns='http://www.w3.org/1999/xhtml' style='display: inline-block; vertical-align: middle; height: 24px; width: 24px; background-color: rgb(0,255,0)'/><mo>]</mo></mrow>
+</math>
+<math xmlns='http://www.w3.org/1998/Math/MathML'>
+<mrow><mo>(</mo><div xmlns='http://www.w3.org/1999/xhtml' style='display: inline-block; vertical-align: middle; height: 24px; width: 24px; background-color: rgb(0,255,0)'/><mo>)</mo></mrow>
+</math>
+<math xmlns='http://www.w3.org/1998/Math/MathML'>
+<mrow><mo>|</mo><div xmlns='http://www.w3.org/1999/xhtml' style='display: inline-block; vertical-align: middle; height: 24px; width: 24px; background-color: rgb(0,255,0)'/><mo>|</mo></mrow>
+</math>
+<math xmlns='http://www.w3.org/1998/Math/MathML'>
+<mrow><mo>&#x222b;</mo><div xmlns='http://www.w3.org/1999/xhtml' style='display: inline-block; vertical-align: middle; height: 24px; width: 24px; background-color: rgb(0,255,0)'/></mrow>
+</math>
+</p>
+<p id='t1'>
+32px:
+<math xmlns='http://www.w3.org/1998/Math/MathML'>
+<mrow><mo>{</mo><div xmlns='http://www.w3.org/1999/xhtml' style='display: inline-block; vertical-align: middle; height: 32px; width: 32px; background-color: rgb(0,255,0)'/><mo>}</mo></mrow>
+</math>
+<math xmlns='http://www.w3.org/1998/Math/MathML'>
+<mrow><mo>[</mo><div xmlns='http://www.w3.org/1999/xhtml' style='display: inline-block; vertical-align: middle; height: 32px; width: 32px; background-color: rgb(0,255,0)'/><mo>]</mo></mrow>
+</math>
+<math xmlns='http://www.w3.org/1998/Math/MathML'>
+<mrow><mo>(</mo><div xmlns='http://www.w3.org/1999/xhtml' style='display: inline-block; vertical-align: middle; height: 32px; width: 32px; background-color: rgb(0,255,0)'/><mo>)</mo></mrow>
+</math>
+<math xmlns='http://www.w3.org/1998/Math/MathML'>
+<mrow><mo>|</mo><div xmlns='http://www.w3.org/1999/xhtml' style='display: inline-block; vertical-align: middle; height: 32px; width: 32px; background-color: rgb(0,255,0)'/><mo>|</mo></mrow>
+</math>
+<math xmlns='http://www.w3.org/1998/Math/MathML'>
+<mrow><mo>&#x222b;</mo><div xmlns='http://www.w3.org/1999/xhtml' style='display: inline-block; vertical-align: middle; height: 32px; width: 32px; background-color: rgb(0,255,0)'/></mrow>
+</math>
+</p>
+<p id='t1'>
+48px:
+<math xmlns='http://www.w3.org/1998/Math/MathML'>
+<mrow><mo>{</mo><div xmlns='http://www.w3.org/1999/xhtml' style='display: inline-block; vertical-align: middle; height: 48px; width: 48px; background-color: rgb(0,255,0)'/><mo>}</mo></mrow>
+</math>
+<math xmlns='http://www.w3.org/1998/Math/MathML'>
+<mrow><mo>[</mo><div xmlns='http://www.w3.org/1999/xhtml' style='display: inline-block; vertical-align: middle; height: 48px; width: 48px; background-color: rgb(0,255,0)'/><mo>]</mo></mrow>
+</math>
+<math xmlns='http://www.w3.org/1998/Math/MathML'>
+<mrow><mo>(</mo><div xmlns='http://www.w3.org/1999/xhtml' style='display: inline-block; vertical-align: middle; height: 48px; width: 48px; background-color: rgb(0,255,0)'/><mo>)</mo></mrow>
+</math>
+<math xmlns='http://www.w3.org/1998/Math/MathML'>
+<mrow><mo>|</mo><div xmlns='http://www.w3.org/1999/xhtml' style='display: inline-block; vertical-align: middle; height: 48px; width: 48px; background-color: rgb(0,255,0)'/><mo>|</mo></mrow>
+</math>
+<math xmlns='http://www.w3.org/1998/Math/MathML'>
+<mrow><mo>&#x222b;</mo><div xmlns='http://www.w3.org/1999/xhtml' style='display: inline-block; vertical-align: middle; height: 48px; width: 48px; background-color: rgb(0,255,0)'/></mrow>
+</math>
+</p>
+<p id='t1'>
+120px:
+<math xmlns='http://www.w3.org/1998/Math/MathML'>
+<mrow><mo>{</mo><div xmlns='http://www.w3.org/1999/xhtml' style='display: inline-block; vertical-align: middle; height: 120px; width: 120px; background-color: rgb(0,255,0)'/><mo>}</mo></mrow>
+</math>
+<math xmlns='http://www.w3.org/1998/Math/MathML'>
+<mrow><mo>[</mo><div xmlns='http://www.w3.org/1999/xhtml' style='display: inline-block; vertical-align: middle; height: 120px; width: 120px; background-color: rgb(0,255,0)'/><mo>]</mo></mrow>
+</math>
+<math xmlns='http://www.w3.org/1998/Math/MathML'>
+<mrow><mo>(</mo><div xmlns='http://www.w3.org/1999/xhtml' style='display: inline-block; vertical-align: middle; height: 120px; width: 120px; background-color: rgb(0,255,0)'/><mo>)</mo></mrow>
+</math>
+<math xmlns='http://www.w3.org/1998/Math/MathML'>
+<mrow><mo>|</mo><div xmlns='http://www.w3.org/1999/xhtml' style='display: inline-block; vertical-align: middle; height: 120px; width: 120px; background-color: rgb(0,255,0)'/><mo>|</mo></mrow>
+</math>
+<math xmlns='http://www.w3.org/1998/Math/MathML'>
+<mrow><mo>&#x222b;</mo><div xmlns='http://www.w3.org/1999/xhtml' style='display: inline-block; vertical-align: middle; height: 120px; width: 120px; background-color: rgb(0,255,0)'/></mrow>
+</math>
+</p>
+<p id='t5'>
+<math xmlns='http://www.w3.org/1998/Math/MathML'>
+<mrow>
+<mo>(</mo>
+<div xmlns='http://www.w3.org/1999/xhtml' style='display: inline-block; vertical-align: middle; height: 40px; width: 40px; background-color: rgb(0,255,0)'/>
+<mo>,</mo>
+<div xmlns='http://www.w3.org/1999/xhtml' style='display: inline-block; vertical-align: middle; height: 40px; width: 40px; background-color: rgb(0,255,0)'/>
+<mo>,</mo>
+<div xmlns='http://www.w3.org/1999/xhtml' style='display: inline-block; vertical-align: middle; height: 40px; width: 40px; background-color: rgb(0,255,0)'/>
+<mo>)</mo>
+</mrow>
+</math>
+</p>
+</body>
+</html>
diff --git a/LayoutTests/platform/mac/mathml/presentation/mo-expected.checksum b/LayoutTests/platform/mac/mathml/presentation/mo-expected.checksum
new file mode 100644
index 0000000..6e9bda5
--- /dev/null
+++ b/LayoutTests/platform/mac/mathml/presentation/mo-expected.checksum
@@ -0,0 +1 @@
+4c87fc1d1f541c5fd9c9336f94d4e350
\ No newline at end of file
diff --git a/LayoutTests/platform/mac/mathml/presentation/mo-expected.png b/LayoutTests/platform/mac/mathml/presentation/mo-expected.png
new file mode 100644
index 0000000..645aefe
Binary files /dev/null and b/LayoutTests/platform/mac/mathml/presentation/mo-expected.png differ
diff --git a/LayoutTests/platform/mac/mathml/presentation/mo-expected.txt b/LayoutTests/platform/mac/mathml/presentation/mo-expected.txt
new file mode 100644
index 0000000..d46ae1f
--- /dev/null
+++ b/LayoutTests/platform/mac/mathml/presentation/mo-expected.txt
@@ -0,0 +1,265 @@
+layer at (0,0) size 800x600
+  RenderView at (0,0) size 800x600
+layer at (0,0) size 800x234
+  RenderBlock {html} at (0,0) size 800x234
+    RenderBody {body} at (8,16) size 784x202
+      RenderBlock {p} at (0,0) size 784x18
+        RenderText {#text} at (0,0) size 60x18
+          text run at (0,0) width 60: "operator: "
+        RenderBlock {math} at (60,3) size 9x12
+          RenderBlock {mo} at (0,2) size 9x12
+            RenderBlock {mo} at (0,0) size 9x12
+              RenderText {mo} at (0,0) size 9x12
+                text run at (0,0) width 9: "\x{2211}"
+        RenderText {#text} at (69,0) size 64x18
+          text run at (69,0) width 64: " operator: "
+        RenderBlock {math} at (133,3) size 8x12
+          RenderBlock {mo} at (0,2) size 8x12
+            RenderBlock {mo} at (0,0) size 8x12
+              RenderText {mo} at (0,0) size 8x12
+                text run at (0,0) width 8: "B"
+        RenderText {#text} at (0,0) size 0x0
+      RenderBlock {p} at (0,34) size 784x20
+        RenderText {#text} at (0,0) size 60x18
+          text run at (0,0) width 60: "operator: "
+        RenderBlock {math} at (60,3) size 11x16
+          RenderBlock {mo} at (0,0) size 11x16
+            RenderBlock {mo} at (0,0) size 11x16
+              RenderText {mo} at (0,0) size 11x16
+                text run at (0,0) width 11: "\x{2211}"
+        RenderText {#text} at (71,0) size 64x18
+          text run at (71,0) width 64: " operator: "
+        RenderBlock {math} at (135,3) size 11x17
+          RenderBlock {mo} at (0,0) size 11x17
+            RenderBlock {mo} at (0,0) size 11x17
+              RenderText {mo} at (0,1) size 11x16
+                text run at (0,1) width 11: "B"
+        RenderText {#text} at (0,0) size 0x0
+      RenderBlock {p} at (0,70) size 784x24
+        RenderText {#text} at (0,1) size 60x18
+          text run at (0,1) width 60: "operator: "
+        RenderBlock {math} at (60,0) size 19x24
+          RenderBlock {mo} at (0,0) size 19x24
+            RenderBlock {mo} at (1,0) size 17x24
+              RenderText {mo} at (0,0) size 17x24
+                text run at (0,0) width 17: "\x{2211}"
+        RenderText {#text} at (79,1) size 64x18
+          text run at (79,1) width 64: " operator: "
+        RenderBlock {math} at (143,0) size 19x24
+          RenderBlock {mo} at (0,0) size 19x24
+            RenderBlock {mo} at (1,0) size 17x24
+              RenderText {mo} at (0,0) size 17x24
+                text run at (0,0) width 17: "\x{2211}"
+        RenderText {#text} at (0,0) size 0x0
+      RenderBlock {p} at (0,110) size 784x24
+        RenderText {#text} at (0,1) size 60x18
+          text run at (0,1) width 60: "operator: "
+        RenderBlock {math} at (60,0) size 39x24
+          RenderBlock {mo} at (0,6) size 9x12
+            RenderBlock {mo} at (0,0) size 9x12
+              RenderText {mo} at (0,0) size 9x12
+                text run at (0,0) width 9: "\x{2211}"
+          RenderBlock {mo} at (9,4) size 11x16
+            RenderBlock {mo} at (0,0) size 11x16
+              RenderText {mo} at (0,0) size 11x16
+                text run at (0,0) width 11: "\x{2211}"
+          RenderBlock {mo} at (20,0) size 19x24
+            RenderBlock {mo} at (1,0) size 17x24
+              RenderText {mo} at (0,0) size 17x24
+                text run at (0,0) width 17: "\x{2211}"
+        RenderText {#text} at (99,1) size 64x18
+          text run at (99,1) width 64: " operator: "
+        RenderBlock {math} at (163,0) size 37x24
+          RenderBlock {mo} at (0,6) size 8x12
+            RenderBlock {mo} at (0,0) size 8x12
+              RenderText {mo} at (0,0) size 8x12
+                text run at (0,0) width 8: "B"
+          RenderBlock {mo} at (8,4) size 11x17
+            RenderBlock {mo} at (0,0) size 11x17
+              RenderText {mo} at (0,1) size 11x16
+                text run at (0,1) width 11: "B"
+          RenderBlock {mo} at (19,0) size 18x24
+            RenderBlock {mo} at (1,0) size 16x24
+              RenderText {mo} at (0,0) size 16x24
+                text run at (0,0) width 16: "B"
+        RenderText {#text} at (0,0) size 0x0
+      RenderBlock {p} at (0,150) size 784x52
+        RenderText {#text} at (0,16) size 60x18
+          text run at (0,16) width 60: "operator: "
+        RenderBlock {math} at (60,0) size 94x52
+          RenderBlock {mo} at (0,0) size 8x54
+          RenderBlock {mo} at (8,0) size 10x54
+          RenderBlock {mo} at (18,0) size 7x54
+          RenderBlock {mo} at (25,0) size 5x54
+          RenderBlock {div} at (30,1) size 52x52 [border: (1px solid #000000)]
+          RenderBlock {mo} at (82,0) size 5x54
+          RenderBlock {mo} at (87,0) size 7x54
+        RenderText {#text} at (0,0) size 0x0
+layer at (68,166) size 8x10 scrollHeight 15
+  RenderBlock {mo} at (0,0) size 8x10
+    RenderText {mo} at (0,-2) size 8x17
+      text run at (0,-2) width 8: "\x{23D0}"
+layer at (68,176) size 8x10 scrollHeight 15
+  RenderBlock {mo} at (0,10) size 8x10
+    RenderText {mo} at (0,-2) size 8x17
+      text run at (0,-2) width 8: "\x{23D0}"
+layer at (68,186) size 8x10 scrollHeight 15
+  RenderBlock {mo} at (0,20) size 8x10
+    RenderText {mo} at (0,-2) size 8x17
+      text run at (0,-2) width 8: "\x{23D0}"
+layer at (68,196) size 8x10 scrollHeight 15
+  RenderBlock {mo} at (0,30) size 8x10
+    RenderText {mo} at (0,-2) size 8x17
+      text run at (0,-2) width 8: "\x{23D0}"
+layer at (68,206) size 8x2 scrollHeight 15
+  RenderBlock {mo} at (0,40) size 8x2
+    RenderText {mo} at (0,-2) size 8x17
+      text run at (0,-2) width 8: "\x{23D0}"
+layer at (68,208) size 8x12 scrollHeight 15
+  RenderBlock {mo} at (0,42) size 8x12
+layer at (76,166) size 10x10 scrollHeight 15
+  RenderBlock {mo} at (0,0) size 10x10
+    RenderText {mo} at (0,-2) size 10x17
+      text run at (0,-2) width 10: "\x{2320}"
+layer at (76,176) size 10x10 scrollHeight 15
+  RenderBlock {mo} at (0,10) size 10x10
+    RenderText {mo} at (0,-2) size 10x17
+      text run at (0,-2) width 10: "\x{23AE}"
+layer at (76,186) size 10x10 scrollHeight 15
+  RenderBlock {mo} at (0,20) size 10x10
+    RenderText {mo} at (0,-2) size 10x17
+      text run at (0,-2) width 10: "\x{23AE}"
+layer at (76,196) size 10x10 scrollHeight 15
+  RenderBlock {mo} at (0,30) size 10x10
+    RenderText {mo} at (0,-2) size 10x17
+      text run at (0,-2) width 10: "\x{23AE}"
+layer at (76,206) size 10x2 scrollHeight 15
+  RenderBlock {mo} at (0,40) size 10x2
+    RenderText {mo} at (0,-2) size 10x17
+      text run at (0,-2) width 10: "\x{23AE}"
+layer at (76,208) size 10x12 scrollHeight 15
+  RenderBlock {mo} at (0,42) size 10x12
+layer at (86,166) size 7x10 scrollHeight 15
+  RenderBlock {mo} at (0,0) size 7x10
+    RenderText {mo} at (0,-2) size 7x17
+      text run at (0,-2) width 7: "\x{23A7}"
+layer at (86,176) size 7x10 scrollHeight 15
+  RenderBlock {mo} at (0,10) size 7x10
+    RenderText {mo} at (0,-2) size 7x17
+      text run at (0,-2) width 7: "\x{23AA}"
+layer at (86,186) size 7x1 scrollHeight 15
+  RenderBlock {mo} at (0,20) size 7x1
+    RenderText {mo} at (0,-2) size 7x17
+      text run at (0,-2) width 7: "\x{23AA}"
+layer at (86,187) size 7x10 scrollHeight 15
+  RenderBlock {mo} at (0,21) size 7x10
+layer at (86,197) size 7x10 scrollHeight 15
+  RenderBlock {mo} at (0,31) size 7x10
+    RenderText {mo} at (0,-2) size 7x17
+      text run at (0,-2) width 7: "\x{23AA}"
+layer at (86,207) size 7x1 scrollHeight 15
+  RenderBlock {mo} at (0,41) size 7x1
+    RenderText {mo} at (0,-2) size 7x17
+      text run at (0,-2) width 7: "\x{23AA}"
+layer at (86,208) size 7x12 scrollHeight 15
+  RenderBlock {mo} at (0,42) size 7x12
+layer at (93,166) size 5x10 scrollHeight 15
+  RenderBlock {mo} at (0,0) size 5x10
+    RenderText {mo} at (0,-2) size 5x17
+      text run at (0,-2) width 5: "\x{23A1}"
+layer at (93,176) size 5x10 scrollHeight 15
+  RenderBlock {mo} at (0,10) size 5x10
+    RenderText {mo} at (0,-2) size 5x17
+      text run at (0,-2) width 5: "\x{23A2}"
+layer at (93,186) size 5x10 scrollHeight 15
+  RenderBlock {mo} at (0,20) size 5x10
+    RenderText {mo} at (0,-2) size 5x17
+      text run at (0,-2) width 5: "\x{23A2}"
+layer at (93,196) size 5x10 scrollHeight 15
+  RenderBlock {mo} at (0,30) size 5x10
+    RenderText {mo} at (0,-2) size 5x17
+      text run at (0,-2) width 5: "\x{23A2}"
+layer at (93,206) size 5x2 scrollHeight 15
+  RenderBlock {mo} at (0,40) size 5x2
+    RenderText {mo} at (0,-2) size 5x17
+      text run at (0,-2) width 5: "\x{23A2}"
+layer at (93,208) size 5x12 scrollHeight 15
+  RenderBlock {mo} at (0,42) size 5x12
+layer at (150,166) size 5x10 scrollHeight 15
+  RenderBlock {mo} at (0,0) size 5x10
+    RenderText {mo} at (0,-2) size 5x17
+      text run at (0,-2) width 5: "\x{23A4}"
+layer at (150,176) size 5x10 scrollHeight 15
+  RenderBlock {mo} at (0,10) size 5x10
+    RenderText {mo} at (0,-2) size 5x17
+      text run at (0,-2) width 5: "\x{23A5}"
+layer at (150,186) size 5x10 scrollHeight 15
+  RenderBlock {mo} at (0,20) size 5x10
+    RenderText {mo} at (0,-2) size 5x17
+      text run at (0,-2) width 5: "\x{23A5}"
+layer at (150,196) size 5x10 scrollHeight 15
+  RenderBlock {mo} at (0,30) size 5x10
+    RenderText {mo} at (0,-2) size 5x17
+      text run at (0,-2) width 5: "\x{23A5}"
+layer at (150,206) size 5x2 scrollHeight 15
+  RenderBlock {mo} at (0,40) size 5x2
+    RenderText {mo} at (0,-2) size 5x17
+      text run at (0,-2) width 5: "\x{23A5}"
+layer at (150,208) size 5x12 scrollHeight 15
+  RenderBlock {mo} at (0,42) size 5x12
+layer at (155,166) size 7x10 scrollHeight 15
+  RenderBlock {mo} at (0,0) size 7x10
+    RenderText {mo} at (0,-2) size 7x17
+      text run at (0,-2) width 7: "\x{23AB}"
+layer at (155,176) size 7x10 scrollHeight 15
+  RenderBlock {mo} at (0,10) size 7x10
+    RenderText {mo} at (0,-2) size 7x17
+      text run at (0,-2) width 7: "\x{23AA}"
+layer at (155,186) size 7x1 scrollHeight 15
+  RenderBlock {mo} at (0,20) size 7x1
+    RenderText {mo} at (0,-2) size 7x17
+      text run at (0,-2) width 7: "\x{23AA}"
+layer at (155,187) size 7x10 scrollHeight 15
+  RenderBlock {mo} at (0,21) size 7x10
+layer at (155,197) size 7x10 scrollHeight 15
+  RenderBlock {mo} at (0,31) size 7x10
+    RenderText {mo} at (0,-2) size 7x17
+      text run at (0,-2) width 7: "\x{23AA}"
+layer at (155,207) size 7x1 scrollHeight 15
+  RenderBlock {mo} at (0,41) size 7x1
+    RenderText {mo} at (0,-2) size 7x17
+      text run at (0,-2) width 7: "\x{23AA}"
+layer at (155,208) size 7x12 scrollHeight 15
+  RenderBlock {mo} at (0,42) size 7x12
+layer at (68,204) size 8x15 backgroundClip at (68,208) size 8x12 clip at (68,208) size 8x12 outlineClip at (68,208) size 8x12
+  RenderBlock (relative positioned) {mo} at (0,0) size 8x12
+    RenderText {mo} at (0,-2) size 8x17
+      text run at (0,-2) width 8: "\x{23D0}"
+layer at (76,204) size 10x15 backgroundClip at (76,208) size 10x12 clip at (76,208) size 10x12 outlineClip at (76,208) size 10x12
+  RenderBlock (relative positioned) {mo} at (0,0) size 10x12
+    RenderText {mo} at (0,-2) size 10x17
+      text run at (0,-2) width 10: "\x{2321}"
+layer at (86,185) size 7x15 backgroundClip at (86,187) size 7x10 clip at (86,187) size 7x10 outlineClip at (86,187) size 7x10
+  RenderBlock (relative positioned) {mo} at (0,0) size 7x12
+    RenderText {mo} at (0,-2) size 7x17
+      text run at (0,-2) width 7: "\x{23A8}"
+layer at (86,204) size 7x15 backgroundClip at (86,208) size 7x12 clip at (86,208) size 7x12 outlineClip at (86,208) size 7x12
+  RenderBlock (relative positioned) {mo} at (0,0) size 7x12
+    RenderText {mo} at (0,-2) size 7x17
+      text run at (0,-2) width 7: "\x{23A9}"
+layer at (93,204) size 5x15 backgroundClip at (93,208) size 5x12 clip at (93,208) size 5x12 outlineClip at (93,208) size 5x12
+  RenderBlock (relative positioned) {mo} at (0,0) size 5x12
+    RenderText {mo} at (0,-2) size 5x17
+      text run at (0,-2) width 5: "\x{23A3}"
+layer at (150,204) size 5x15 backgroundClip at (150,208) size 5x12 clip at (150,208) size 5x12 outlineClip at (150,208) size 5x12
+  RenderBlock (relative positioned) {mo} at (0,0) size 5x12
+    RenderText {mo} at (0,-2) size 5x17
+      text run at (0,-2) width 5: "\x{23A6}"
+layer at (155,185) size 7x15 backgroundClip at (155,187) size 7x10 clip at (155,187) size 7x10 outlineClip at (155,187) size 7x10
+  RenderBlock (relative positioned) {mo} at (0,0) size 7x12
+    RenderText {mo} at (0,-2) size 7x17
+      text run at (0,-2) width 7: "\x{23AC}"
+layer at (155,204) size 7x15 backgroundClip at (155,208) size 7x12 clip at (155,208) size 7x12 outlineClip at (155,208) size 7x12
+  RenderBlock (relative positioned) {mo} at (0,0) size 7x12
+    RenderText {mo} at (0,-2) size 7x17
+      text run at (0,-2) width 7: "\x{23AD}"
diff --git a/LayoutTests/platform/mac/mathml/presentation/over-expected.checksum b/LayoutTests/platform/mac/mathml/presentation/over-expected.checksum
index 2bb0fc0..93c092f 100644
--- a/LayoutTests/platform/mac/mathml/presentation/over-expected.checksum
+++ b/LayoutTests/platform/mac/mathml/presentation/over-expected.checksum
@@ -1 +1 @@
-50c949213dabeae465a5e931bb0ae983
\ No newline at end of file
+de7bc8c50672376bf83e7f20aefea8bd
\ No newline at end of file
diff --git a/LayoutTests/platform/mac/mathml/presentation/over-expected.png b/LayoutTests/platform/mac/mathml/presentation/over-expected.png
index a195015..6427bed 100644
Binary files a/LayoutTests/platform/mac/mathml/presentation/over-expected.png and b/LayoutTests/platform/mac/mathml/presentation/over-expected.png differ
diff --git a/LayoutTests/platform/mac/mathml/presentation/over-expected.txt b/LayoutTests/platform/mac/mathml/presentation/over-expected.txt
index dec94d2..15786f2 100644
--- a/LayoutTests/platform/mac/mathml/presentation/over-expected.txt
+++ b/LayoutTests/platform/mac/mathml/presentation/over-expected.txt
@@ -1,76 +1,93 @@
 layer at (0,0) size 800x600
   RenderView at (0,0) size 800x600
-layer at (0,0) size 800x267
-  RenderBlock {html} at (0,0) size 800x267
-    RenderBody {body} at (8,16) size 784x235
-      RenderBlock {p} at (0,0) size 784x28
-        RenderText {#text} at (0,8) size 36x18
-          text run at (0,8) width 36: "over: "
-        RenderBlock {math} at (36,0) size 10x28
-          RenderBlock {mover} at (0,0) size 10x28
+layer at (0,0) size 800x285
+  RenderBlock {html} at (0,0) size 800x285
+    RenderBody {body} at (8,16) size 784x253
+      RenderBlock {p} at (0,0) size 784x29
+        RenderText {#text} at (0,9) size 36x18
+          text run at (0,9) width 36: "over: "
+        RenderBlock {math} at (36,0) size 10x29
+          RenderBlock {mover} at (0,0) size 10x29
             RenderBlock {mover} at (0,0) size 10x16
               RenderInline {mi} at (0,0) size 5x12
                 RenderText {#text} at (2,3) size 5x12
                   text run at (2,3) width 5: "x"
-            RenderBlock {mover} at (0,11) size 10x17
+            RenderBlock {mover} at (0,12) size 10x17
               RenderInline {mi} at (0,0) size 10x16
                 RenderText {#text} at (0,1) size 10x16
                   text run at (0,1) width 10: "B"
         RenderText {#text} at (0,0) size 0x0
-      RenderBlock {p} at (0,44) size 784x28
-        RenderText {#text} at (0,8) size 36x18
-          text run at (0,8) width 36: "over: "
-        RenderBlock {math} at (36,0) size 10x28
-          RenderBlock {mover} at (0,0) size 10x28
+      RenderBlock {p} at (0,45) size 784x29
+        RenderText {#text} at (0,9) size 36x18
+          text run at (0,9) width 36: "over: "
+        RenderBlock {math} at (36,0) size 10x29
+          RenderBlock {mover} at (0,0) size 10x29
             RenderBlock {mover} at (0,0) size 10x16
               RenderInline {mi} at (0,0) size 5x12
                 RenderText {#text} at (2,3) size 5x12
                   text run at (2,3) width 5: "y"
-            RenderBlock {mover} at (0,11) size 10x17
+            RenderBlock {mover} at (0,12) size 10x17
               RenderInline {mi} at (0,0) size 10x16
                 RenderText {#text} at (0,1) size 10x16
                   text run at (0,1) width 10: "B"
         RenderText {#text} at (0,0) size 0x0
-      RenderBlock {p} at (0,88) size 784x35
-        RenderText {#text} at (0,14) size 36x18
-          text run at (0,14) width 36: "over: "
-        RenderBlock {math} at (36,0) size 15x35
-          RenderBlock {mover} at (0,0) size 15x35
+      RenderBlock {p} at (0,90) size 784x36
+        RenderText {#text} at (0,15) size 36x18
+          text run at (0,15) width 36: "over: "
+        RenderBlock {math} at (36,0) size 15x36
+          RenderBlock {mover} at (0,0) size 15x36
             RenderBlock {mover} at (0,0) size 15x16
               RenderInline {mi} at (0,0) size 5x12
                 RenderText {#text} at (5,3) size 5x12
                   text run at (5,3) width 5: "y"
-            RenderBlock {mover} at (0,11) size 15x24
+            RenderBlock {mover} at (0,12) size 15x24
               RenderInline {mi} at (0,0) size 15x24
                 RenderText {#text} at (0,0) size 15x24
                   text run at (0,0) width 15: "B"
         RenderText {#text} at (0,0) size 0x0
-      RenderBlock {p} at (0,139) size 784x35
-        RenderText {#text} at (0,14) size 36x18
-          text run at (0,14) width 36: "over: "
-        RenderBlock {math} at (36,0) size 19x35
-          RenderBlock {mover} at (0,0) size 19x35
+      RenderBlock {p} at (0,142) size 784x36
+        RenderText {#text} at (0,15) size 36x18
+          text run at (0,15) width 36: "over: "
+        RenderBlock {math} at (36,0) size 19x36
+          RenderBlock {mover} at (0,0) size 19x36
             RenderBlock {mover} at (0,0) size 19x16
               RenderInline {mi} at (0,0) size 5x12
                 RenderText {#text} at (7,3) size 5x12
                   text run at (7,3) width 5: "y"
-            RenderBlock {mover} at (0,11) size 19x24
+            RenderBlock {mover} at (0,12) size 19x24
               RenderBlock {mo} at (0,0) size 19x24
-                RenderText {#text} at (1,0) size 17x24
-                  text run at (1,0) width 17: "\x{2211}"
+                RenderBlock {mo} at (1,0) size 17x24
+                  RenderText {mo} at (0,0) size 17x24
+                    text run at (0,0) width 17: "\x{2211}"
         RenderText {#text} at (0,0) size 0x0
-      RenderBlock {p} at (0,190) size 784x45
-        RenderText {#text} at (0,26) size 36x18
-          text run at (0,26) width 36: "over: "
-        RenderBlock {math} at (36,0) size 45x45
-          RenderBlock {mover} at (0,18) size 5x27
-            RenderBlock {mover} at (0,0) size 5x16
+      RenderBlock {p} at (0,194) size 784x59
+        RenderText {#text} at (0,40) size 36x18
+          text run at (0,40) width 36: "over: "
+        RenderBlock {math} at (36,0) size 50x59
+          RenderBlock {mover} at (0,0) size 10x59
+            RenderBlock {mover} at (0,0) size 10x16
               RenderInline {mi} at (0,0) size 5x12
-                RenderText {#text} at (0,3) size 5x12
-                  text run at (0,3) width 5: "y"
-            RenderBlock {mover} at (0,11) size 5x16
-              RenderBlock {mo} at (0,0) size 4x16
-                RenderText {#text} at (0,0) size 4x16
-                  text run at (0,0) width 4: "\x{222B}"
-          RenderBlock {div} at (5,0) size 40x40
+                RenderText {#text} at (2,3) size 5x12
+                  text run at (2,3) width 5: "y"
+            RenderBlock {mover} at (0,12) size 10x47
+              RenderBlock {mo} at (0,0) size 10x42
+          RenderBlock {div} at (10,14) size 40x40
         RenderText {#text} at (0,0) size 0x0
+layer at (44,222) size 10x10 scrollHeight 15
+  RenderBlock {mo} at (0,0) size 10x10
+    RenderText {mo} at (0,-2) size 10x17
+      text run at (0,-2) width 10: "\x{2320}"
+layer at (44,232) size 10x10 scrollHeight 15
+  RenderBlock {mo} at (0,10) size 10x10
+    RenderText {mo} at (0,-2) size 10x17
+      text run at (0,-2) width 10: "\x{23AE}"
+layer at (44,242) size 10x10 scrollHeight 15
+  RenderBlock {mo} at (0,20) size 10x10
+    RenderText {mo} at (0,-2) size 10x17
+      text run at (0,-2) width 10: "\x{23AE}"
+layer at (44,252) size 10x12 scrollHeight 15
+  RenderBlock {mo} at (0,30) size 10x12
+layer at (44,248) size 10x15 backgroundClip at (44,252) size 10x12 clip at (44,252) size 10x12 outlineClip at (44,252) size 10x12
+  RenderBlock (relative positioned) {mo} at (0,0) size 10x12
+    RenderText {mo} at (0,-2) size 10x17
+      text run at (0,-2) width 10: "\x{2321}"
diff --git a/LayoutTests/platform/mac/mathml/presentation/row-expected.checksum b/LayoutTests/platform/mac/mathml/presentation/row-expected.checksum
new file mode 100644
index 0000000..553bd41
--- /dev/null
+++ b/LayoutTests/platform/mac/mathml/presentation/row-expected.checksum
@@ -0,0 +1 @@
+03e1ecdfec8432ca84eae7854d08ff24
\ No newline at end of file
diff --git a/LayoutTests/platform/mac/mathml/presentation/row-expected.png b/LayoutTests/platform/mac/mathml/presentation/row-expected.png
new file mode 100644
index 0000000..e15de58
Binary files /dev/null and b/LayoutTests/platform/mac/mathml/presentation/row-expected.png differ
diff --git a/LayoutTests/platform/mac/mathml/presentation/row-expected.txt b/LayoutTests/platform/mac/mathml/presentation/row-expected.txt
new file mode 100644
index 0000000..b92b7d4
--- /dev/null
+++ b/LayoutTests/platform/mac/mathml/presentation/row-expected.txt
@@ -0,0 +1,1143 @@
+layer at (0,0) size 800x600
+  RenderView at (0,0) size 800x600
+layer at (0,0) size 800x429
+  RenderBlock {html} at (0,0) size 800x429
+    RenderBody {body} at (8,16) size 784x397
+      RenderBlock {p} at (0,0) size 784x18
+        RenderBlock {math} at (0,2) size 24x16
+          RenderInline {mi} at (0,0) size 7x16
+            RenderText {#text} at (0,1) size 7x16
+              text run at (0,1) width 7: "x"
+          RenderBlock {mo} at (7,1) size 9x16 [bgcolor=#C8C8C8]
+            RenderBlock {mo} at (0,0) size 9x16
+              RenderText {mo} at (0,0) size 9x16
+                text run at (0,0) width 9: "+"
+          RenderInline {mn} at (0,0) size 8x16
+            RenderText {#text} at (16,1) size 8x16
+              text run at (16,1) width 8: "1"
+        RenderText {#text} at (0,0) size 0x0
+      RenderBlock {p} at (0,34) size 784x19
+        RenderText {#text} at (0,0) size 40x18
+          text run at (0,0) width 40: "16px: "
+        RenderBlock {math} at (40,3) size 32x16
+          RenderBlock {mrow} at (0,0) size 32x16
+            RenderBlock {mo} at (0,0) size 8x16 [bgcolor=#C8C8C8]
+              RenderBlock {mo} at (0,0) size 8x16
+                RenderText {mo} at (0,0) size 8x16
+                  text run at (0,0) width 8: "{"
+            RenderBlock {div} at (8,0) size 16x16 [bgcolor=#00FF00]
+            RenderBlock {mo} at (24,0) size 8x16 [bgcolor=#C8C8C8]
+              RenderBlock {mo} at (0,0) size 8x16
+                RenderText {mo} at (0,0) size 8x16
+                  text run at (0,0) width 8: "}"
+        RenderText {#text} at (72,0) size 4x18
+          text run at (72,0) width 4: " "
+        RenderBlock {math} at (76,3) size 26x16
+          RenderBlock {mrow} at (0,0) size 26x16
+            RenderBlock {mo} at (0,0) size 5x16 [bgcolor=#C8C8C8]
+              RenderBlock {mo} at (0,0) size 5x16
+                RenderText {mo} at (0,0) size 5x16
+                  text run at (0,0) width 5: "["
+            RenderBlock {div} at (5,0) size 16x16 [bgcolor=#00FF00]
+            RenderBlock {mo} at (21,0) size 5x16 [bgcolor=#C8C8C8]
+              RenderBlock {mo} at (0,0) size 5x16
+                RenderText {mo} at (0,0) size 5x16
+                  text run at (0,0) width 5: "]"
+        RenderText {#text} at (102,0) size 4x18
+          text run at (102,0) width 4: " "
+        RenderBlock {math} at (106,3) size 26x16
+          RenderBlock {mrow} at (0,0) size 26x16
+            RenderBlock {mo} at (0,0) size 5x16 [bgcolor=#C8C8C8]
+              RenderBlock {mo} at (0,0) size 5x16
+                RenderText {mo} at (0,0) size 5x16
+                  text run at (0,0) width 5: "("
+            RenderBlock {div} at (5,0) size 16x16 [bgcolor=#00FF00]
+            RenderBlock {mo} at (21,0) size 5x16 [bgcolor=#C8C8C8]
+              RenderBlock {mo} at (0,0) size 5x16
+                RenderText {mo} at (0,0) size 5x16
+                  text run at (0,0) width 5: ")"
+        RenderText {#text} at (132,0) size 4x18
+          text run at (132,0) width 4: " "
+        RenderBlock {math} at (136,3) size 22x16
+          RenderBlock {mrow} at (0,0) size 22x16
+            RenderBlock {mo} at (0,0) size 3x16 [bgcolor=#C8C8C8]
+              RenderBlock {mo} at (0,0) size 3x16
+                RenderText {mo} at (0,0) size 3x16
+                  text run at (0,0) width 3: "|"
+            RenderBlock {div} at (3,0) size 16x16 [bgcolor=#00FF00]
+            RenderBlock {mo} at (19,0) size 3x16 [bgcolor=#C8C8C8]
+              RenderBlock {mo} at (0,0) size 3x16
+                RenderText {mo} at (0,0) size 3x16
+                  text run at (0,0) width 3: "|"
+        RenderText {#text} at (158,0) size 4x18
+          text run at (158,0) width 4: " "
+        RenderBlock {math} at (162,3) size 20x16
+          RenderBlock {mrow} at (0,0) size 20x16
+            RenderBlock {mo} at (0,0) size 4x16 [bgcolor=#C8C8C8]
+              RenderBlock {mo} at (0,0) size 4x16
+                RenderText {mo} at (0,0) size 4x16
+                  text run at (0,0) width 4: "\x{222B}"
+            RenderBlock {div} at (4,0) size 16x16 [bgcolor=#00FF00]
+        RenderText {#text} at (0,0) size 0x0
+      RenderBlock {p} at (0,69) size 784x24
+        RenderText {#text} at (0,1) size 40x18
+          text run at (0,1) width 40: "24px: "
+        RenderBlock {math} at (40,0) size 48x24
+          RenderBlock {mrow} at (0,0) size 48x24
+            RenderBlock {mo} at (0,0) size 12x24 [bgcolor=#C8C8C8]
+              RenderBlock {mo} at (0,0) size 12x24
+                RenderText {mo} at (0,-2) size 12x28
+                  text run at (0,-2) width 12: "{"
+            RenderBlock {div} at (12,0) size 24x24 [bgcolor=#00FF00]
+            RenderBlock {mo} at (36,0) size 12x24 [bgcolor=#C8C8C8]
+              RenderBlock {mo} at (0,0) size 12x24
+                RenderText {mo} at (0,-2) size 12x28
+                  text run at (0,-2) width 12: "}"
+        RenderText {#text} at (88,1) size 4x18
+          text run at (88,1) width 4: " "
+        RenderBlock {math} at (92,0) size 40x24
+          RenderBlock {mrow} at (0,0) size 40x24
+            RenderBlock {mo} at (0,0) size 8x24 [bgcolor=#C8C8C8]
+              RenderBlock {mo} at (0,0) size 8x24
+                RenderText {mo} at (0,-2) size 8x28
+                  text run at (0,-2) width 8: "["
+            RenderBlock {div} at (8,0) size 24x24 [bgcolor=#00FF00]
+            RenderBlock {mo} at (32,0) size 8x24 [bgcolor=#C8C8C8]
+              RenderBlock {mo} at (0,0) size 8x24
+                RenderText {mo} at (0,-2) size 8x28
+                  text run at (0,-2) width 8: "]"
+        RenderText {#text} at (132,1) size 4x18
+          text run at (132,1) width 4: " "
+        RenderBlock {math} at (136,0) size 40x24
+          RenderBlock {mrow} at (0,0) size 40x24
+            RenderBlock {mo} at (0,0) size 8x24 [bgcolor=#C8C8C8]
+              RenderBlock {mo} at (0,0) size 8x24
+                RenderText {mo} at (0,-2) size 8x28
+                  text run at (0,-2) width 8: "("
+            RenderBlock {div} at (8,0) size 24x24 [bgcolor=#00FF00]
+            RenderBlock {mo} at (32,0) size 8x24 [bgcolor=#C8C8C8]
+              RenderBlock {mo} at (0,0) size 8x24
+                RenderText {mo} at (0,-2) size 8x28
+                  text run at (0,-2) width 8: ")"
+        RenderText {#text} at (176,1) size 4x18
+          text run at (176,1) width 4: " "
+        RenderBlock {math} at (180,0) size 34x24
+          RenderBlock {mrow} at (0,0) size 34x24
+            RenderBlock {mo} at (0,0) size 5x24 [bgcolor=#C8C8C8]
+              RenderBlock {mo} at (0,0) size 5x24
+                RenderText {mo} at (0,-2) size 5x28
+                  text run at (0,-2) width 5: "|"
+            RenderBlock {div} at (5,0) size 24x24 [bgcolor=#00FF00]
+            RenderBlock {mo} at (29,0) size 5x24 [bgcolor=#C8C8C8]
+              RenderBlock {mo} at (0,0) size 5x24
+                RenderText {mo} at (0,-2) size 5x28
+                  text run at (0,-2) width 5: "|"
+        RenderText {#text} at (214,1) size 4x18
+          text run at (214,1) width 4: " "
+        RenderBlock {math} at (218,0) size 31x24
+          RenderBlock {mrow} at (0,0) size 31x24
+            RenderBlock {mo} at (0,0) size 7x24 [bgcolor=#C8C8C8]
+              RenderBlock {mo} at (0,0) size 7x24
+                RenderText {mo} at (0,-2) size 7x28
+                  text run at (0,-2) width 7: "\x{222B}"
+            RenderBlock {div} at (7,0) size 24x24 [bgcolor=#00FF00]
+        RenderText {#text} at (0,0) size 0x0
+      RenderBlock {p} at (0,109) size 784x32
+        RenderText {#text} at (0,5) size 40x18
+          text run at (0,5) width 40: "32px: "
+        RenderBlock {math} at (40,0) size 46x32
+          RenderBlock {mrow} at (0,0) size 46x32
+            RenderBlock {mo} at (0,0) size 7x34 [bgcolor=#C8C8C8]
+            RenderBlock {div} at (7,1) size 32x32 [bgcolor=#00FF00]
+            RenderBlock {mo} at (39,0) size 7x34 [bgcolor=#C8C8C8]
+        RenderText {#text} at (86,5) size 4x18
+          text run at (86,5) width 4: " "
+        RenderBlock {math} at (90,0) size 42x32
+          RenderBlock {mrow} at (0,0) size 42x32
+            RenderBlock {mo} at (0,0) size 5x34 [bgcolor=#C8C8C8]
+            RenderBlock {div} at (5,1) size 32x32 [bgcolor=#00FF00]
+            RenderBlock {mo} at (37,0) size 5x34 [bgcolor=#C8C8C8]
+        RenderText {#text} at (132,5) size 4x18
+          text run at (132,5) width 4: " "
+        RenderBlock {math} at (136,0) size 42x32
+          RenderBlock {mrow} at (0,0) size 42x32
+            RenderBlock {mo} at (0,0) size 5x34 [bgcolor=#C8C8C8]
+            RenderBlock {div} at (5,1) size 32x32 [bgcolor=#00FF00]
+            RenderBlock {mo} at (37,0) size 5x34 [bgcolor=#C8C8C8]
+        RenderText {#text} at (178,5) size 4x18
+          text run at (178,5) width 4: " "
+        RenderBlock {math} at (182,0) size 48x32
+          RenderBlock {mrow} at (0,0) size 48x32
+            RenderBlock {mo} at (0,0) size 8x34 [bgcolor=#C8C8C8]
+            RenderBlock {div} at (8,1) size 32x32 [bgcolor=#00FF00]
+            RenderBlock {mo} at (40,0) size 8x34 [bgcolor=#C8C8C8]
+        RenderText {#text} at (230,5) size 4x18
+          text run at (230,5) width 4: " "
+        RenderBlock {math} at (234,0) size 42x32
+          RenderBlock {mrow} at (0,0) size 42x32
+            RenderBlock {mo} at (0,0) size 10x34 [bgcolor=#C8C8C8]
+            RenderBlock {div} at (10,1) size 32x32 [bgcolor=#00FF00]
+        RenderText {#text} at (0,0) size 0x0
+      RenderBlock {p} at (0,157) size 784x48
+        RenderText {#text} at (0,13) size 40x18
+          text run at (0,13) width 40: "48px: "
+        RenderBlock {math} at (40,0) size 62x48
+          RenderBlock {mrow} at (0,0) size 62x48
+            RenderBlock {mo} at (0,0) size 7x50 [bgcolor=#C8C8C8]
+            RenderBlock {div} at (7,1) size 48x48 [bgcolor=#00FF00]
+            RenderBlock {mo} at (55,0) size 7x50 [bgcolor=#C8C8C8]
+        RenderText {#text} at (102,13) size 4x18
+          text run at (102,13) width 4: " "
+        RenderBlock {math} at (106,0) size 58x48
+          RenderBlock {mrow} at (0,0) size 58x48
+            RenderBlock {mo} at (0,0) size 5x50 [bgcolor=#C8C8C8]
+            RenderBlock {div} at (5,1) size 48x48 [bgcolor=#00FF00]
+            RenderBlock {mo} at (53,0) size 5x50 [bgcolor=#C8C8C8]
+        RenderText {#text} at (164,13) size 4x18
+          text run at (164,13) width 4: " "
+        RenderBlock {math} at (168,0) size 58x48
+          RenderBlock {mrow} at (0,0) size 58x48
+            RenderBlock {mo} at (0,0) size 5x50 [bgcolor=#C8C8C8]
+            RenderBlock {div} at (5,1) size 48x48 [bgcolor=#00FF00]
+            RenderBlock {mo} at (53,0) size 5x50 [bgcolor=#C8C8C8]
+        RenderText {#text} at (226,13) size 4x18
+          text run at (226,13) width 4: " "
+        RenderBlock {math} at (230,0) size 64x48
+          RenderBlock {mrow} at (0,0) size 64x48
+            RenderBlock {mo} at (0,0) size 8x50 [bgcolor=#C8C8C8]
+            RenderBlock {div} at (8,1) size 48x48 [bgcolor=#00FF00]
+            RenderBlock {mo} at (56,0) size 8x50 [bgcolor=#C8C8C8]
+        RenderText {#text} at (294,13) size 4x18
+          text run at (294,13) width 4: " "
+        RenderBlock {math} at (298,0) size 58x48
+          RenderBlock {mrow} at (0,0) size 58x48
+            RenderBlock {mo} at (0,0) size 10x50 [bgcolor=#C8C8C8]
+            RenderBlock {div} at (10,1) size 48x48 [bgcolor=#00FF00]
+        RenderText {#text} at (0,0) size 0x0
+      RenderBlock {p} at (0,221) size 784x120
+        RenderText {#text} at (0,49) size 48x18
+          text run at (0,49) width 48: "120px: "
+        RenderBlock {math} at (48,0) size 134x120
+          RenderBlock {mrow} at (0,0) size 134x120
+            RenderBlock {mo} at (0,0) size 7x122 [bgcolor=#C8C8C8]
+            RenderBlock {div} at (7,1) size 120x120 [bgcolor=#00FF00]
+            RenderBlock {mo} at (127,0) size 7x122 [bgcolor=#C8C8C8]
+        RenderText {#text} at (182,49) size 4x18
+          text run at (182,49) width 4: " "
+        RenderBlock {math} at (186,0) size 130x120
+          RenderBlock {mrow} at (0,0) size 130x120
+            RenderBlock {mo} at (0,0) size 5x122 [bgcolor=#C8C8C8]
+            RenderBlock {div} at (5,1) size 120x120 [bgcolor=#00FF00]
+            RenderBlock {mo} at (125,0) size 5x122 [bgcolor=#C8C8C8]
+        RenderText {#text} at (316,49) size 4x18
+          text run at (316,49) width 4: " "
+        RenderBlock {math} at (320,0) size 130x120
+          RenderBlock {mrow} at (0,0) size 130x120
+            RenderBlock {mo} at (0,0) size 5x122 [bgcolor=#C8C8C8]
+            RenderBlock {div} at (5,1) size 120x120 [bgcolor=#00FF00]
+            RenderBlock {mo} at (125,0) size 5x122 [bgcolor=#C8C8C8]
+        RenderText {#text} at (450,49) size 4x18
+          text run at (450,49) width 4: " "
+        RenderBlock {math} at (454,0) size 136x120
+          RenderBlock {mrow} at (0,0) size 136x120
+            RenderBlock {mo} at (0,0) size 8x122 [bgcolor=#C8C8C8]
+            RenderBlock {div} at (8,1) size 120x120 [bgcolor=#00FF00]
+            RenderBlock {mo} at (128,0) size 8x122 [bgcolor=#C8C8C8]
+        RenderText {#text} at (590,49) size 4x18
+          text run at (590,49) width 4: " "
+        RenderBlock {math} at (594,0) size 130x120
+          RenderBlock {mrow} at (0,0) size 130x120
+            RenderBlock {mo} at (0,0) size 10x122 [bgcolor=#C8C8C8]
+            RenderBlock {div} at (10,1) size 120x120 [bgcolor=#00FF00]
+        RenderText {#text} at (0,0) size 0x0
+      RenderBlock {p} at (0,357) size 784x40
+        RenderBlock {math} at (0,0) size 138x40
+          RenderBlock {mrow} at (0,0) size 138x40
+            RenderBlock {mo} at (0,0) size 5x42 [bgcolor=#C8C8C8]
+            RenderBlock {div} at (5,1) size 40x40 [bgcolor=#00FF00]
+            RenderBlock {mo} at (45,13) size 4x16 [bgcolor=#C8C8C8]
+              RenderBlock {mo} at (0,0) size 4x16
+                RenderText {mo} at (0,0) size 4x16
+                  text run at (0,0) width 4: ","
+            RenderBlock {div} at (49,1) size 40x40 [bgcolor=#00FF00]
+            RenderBlock {mo} at (89,13) size 4x16 [bgcolor=#C8C8C8]
+              RenderBlock {mo} at (0,0) size 4x16
+                RenderText {mo} at (0,0) size 4x16
+                  text run at (0,0) width 4: ","
+            RenderBlock {div} at (93,1) size 40x40 [bgcolor=#00FF00]
+            RenderBlock {mo} at (133,0) size 5x42 [bgcolor=#C8C8C8]
+        RenderText {#text} at (0,0) size 0x0
+layer at (48,125) size 7x10 scrollHeight 15
+  RenderBlock {mo} at (0,0) size 7x10
+    RenderText {mo} at (0,-2) size 7x17
+      text run at (0,-2) width 7: "\x{23A7}"
+layer at (48,135) size 7x1 scrollHeight 15
+  RenderBlock {mo} at (0,10) size 7x1
+    RenderText {mo} at (0,-2) size 7x17
+      text run at (0,-2) width 7: "\x{23AA}"
+layer at (48,136) size 7x10 scrollHeight 15
+  RenderBlock {mo} at (0,11) size 7x10
+layer at (48,146) size 7x1 scrollHeight 15
+  RenderBlock {mo} at (0,21) size 7x1
+    RenderText {mo} at (0,-2) size 7x17
+      text run at (0,-2) width 7: "\x{23AA}"
+layer at (48,147) size 7x12 scrollHeight 15
+  RenderBlock {mo} at (0,22) size 7x12
+layer at (87,125) size 7x10 scrollHeight 15
+  RenderBlock {mo} at (0,0) size 7x10
+    RenderText {mo} at (0,-2) size 7x17
+      text run at (0,-2) width 7: "\x{23AB}"
+layer at (87,135) size 7x1 scrollHeight 15
+  RenderBlock {mo} at (0,10) size 7x1
+    RenderText {mo} at (0,-2) size 7x17
+      text run at (0,-2) width 7: "\x{23AA}"
+layer at (87,136) size 7x10 scrollHeight 15
+  RenderBlock {mo} at (0,11) size 7x10
+layer at (87,146) size 7x1 scrollHeight 15
+  RenderBlock {mo} at (0,21) size 7x1
+    RenderText {mo} at (0,-2) size 7x17
+      text run at (0,-2) width 7: "\x{23AA}"
+layer at (87,147) size 7x12 scrollHeight 15
+  RenderBlock {mo} at (0,22) size 7x12
+layer at (98,125) size 5x10 scrollHeight 15
+  RenderBlock {mo} at (0,0) size 5x10
+    RenderText {mo} at (0,-2) size 5x17
+      text run at (0,-2) width 5: "\x{23A1}"
+layer at (98,135) size 5x10 scrollHeight 15
+  RenderBlock {mo} at (0,10) size 5x10
+    RenderText {mo} at (0,-2) size 5x17
+      text run at (0,-2) width 5: "\x{23A2}"
+layer at (98,145) size 5x2 scrollHeight 15
+  RenderBlock {mo} at (0,20) size 5x2
+    RenderText {mo} at (0,-2) size 5x17
+      text run at (0,-2) width 5: "\x{23A2}"
+layer at (98,147) size 5x12 scrollHeight 15
+  RenderBlock {mo} at (0,22) size 5x12
+layer at (135,125) size 5x10 scrollHeight 15
+  RenderBlock {mo} at (0,0) size 5x10
+    RenderText {mo} at (0,-2) size 5x17
+      text run at (0,-2) width 5: "\x{23A4}"
+layer at (135,135) size 5x10 scrollHeight 15
+  RenderBlock {mo} at (0,10) size 5x10
+    RenderText {mo} at (0,-2) size 5x17
+      text run at (0,-2) width 5: "\x{23A5}"
+layer at (135,145) size 5x2 scrollHeight 15
+  RenderBlock {mo} at (0,20) size 5x2
+    RenderText {mo} at (0,-2) size 5x17
+      text run at (0,-2) width 5: "\x{23A5}"
+layer at (135,147) size 5x12 scrollHeight 15
+  RenderBlock {mo} at (0,22) size 5x12
+layer at (144,125) size 5x10 scrollHeight 15
+  RenderBlock {mo} at (0,0) size 5x10
+    RenderText {mo} at (0,-2) size 5x17
+      text run at (0,-2) width 5: "\x{239B}"
+layer at (144,135) size 5x10 scrollHeight 15
+  RenderBlock {mo} at (0,10) size 5x10
+    RenderText {mo} at (0,-2) size 5x17
+      text run at (0,-2) width 5: "\x{239C}"
+layer at (144,145) size 5x2 scrollHeight 15
+  RenderBlock {mo} at (0,20) size 5x2
+    RenderText {mo} at (0,-2) size 5x17
+      text run at (0,-2) width 5: "\x{239C}"
+layer at (144,147) size 5x12 scrollHeight 15
+  RenderBlock {mo} at (0,22) size 5x12
+layer at (181,125) size 5x10 scrollHeight 15
+  RenderBlock {mo} at (0,0) size 5x10
+    RenderText {mo} at (0,-2) size 5x17
+      text run at (0,-2) width 5: "\x{239E}"
+layer at (181,135) size 5x10 scrollHeight 15
+  RenderBlock {mo} at (0,10) size 5x10
+    RenderText {mo} at (0,-2) size 5x17
+      text run at (0,-2) width 5: "\x{239F}"
+layer at (181,145) size 5x2 scrollHeight 15
+  RenderBlock {mo} at (0,20) size 5x2
+    RenderText {mo} at (0,-2) size 5x17
+      text run at (0,-2) width 5: "\x{239F}"
+layer at (181,147) size 5x12 scrollHeight 15
+  RenderBlock {mo} at (0,22) size 5x12
+layer at (190,125) size 8x10 scrollHeight 15
+  RenderBlock {mo} at (0,0) size 8x10
+    RenderText {mo} at (0,-2) size 8x17
+      text run at (0,-2) width 8: "\x{23D0}"
+layer at (190,135) size 8x10 scrollHeight 15
+  RenderBlock {mo} at (0,10) size 8x10
+    RenderText {mo} at (0,-2) size 8x17
+      text run at (0,-2) width 8: "\x{23D0}"
+layer at (190,145) size 8x2 scrollHeight 15
+  RenderBlock {mo} at (0,20) size 8x2
+    RenderText {mo} at (0,-2) size 8x17
+      text run at (0,-2) width 8: "\x{23D0}"
+layer at (190,147) size 8x12 scrollHeight 15
+  RenderBlock {mo} at (0,22) size 8x12
+layer at (230,125) size 8x10 scrollHeight 15
+  RenderBlock {mo} at (0,0) size 8x10
+    RenderText {mo} at (0,-2) size 8x17
+      text run at (0,-2) width 8: "\x{23D0}"
+layer at (230,135) size 8x10 scrollHeight 15
+  RenderBlock {mo} at (0,10) size 8x10
+    RenderText {mo} at (0,-2) size 8x17
+      text run at (0,-2) width 8: "\x{23D0}"
+layer at (230,145) size 8x2 scrollHeight 15
+  RenderBlock {mo} at (0,20) size 8x2
+    RenderText {mo} at (0,-2) size 8x17
+      text run at (0,-2) width 8: "\x{23D0}"
+layer at (230,147) size 8x12 scrollHeight 15
+  RenderBlock {mo} at (0,22) size 8x12
+layer at (242,125) size 10x10 scrollHeight 15
+  RenderBlock {mo} at (0,0) size 10x10
+    RenderText {mo} at (0,-2) size 10x17
+      text run at (0,-2) width 10: "\x{2320}"
+layer at (242,135) size 10x10 scrollHeight 15
+  RenderBlock {mo} at (0,10) size 10x10
+    RenderText {mo} at (0,-2) size 10x17
+      text run at (0,-2) width 10: "\x{23AE}"
+layer at (242,145) size 10x2 scrollHeight 15
+  RenderBlock {mo} at (0,20) size 10x2
+    RenderText {mo} at (0,-2) size 10x17
+      text run at (0,-2) width 10: "\x{23AE}"
+layer at (242,147) size 10x12 scrollHeight 15
+  RenderBlock {mo} at (0,22) size 10x12
+layer at (48,173) size 7x10 scrollHeight 15
+  RenderBlock {mo} at (0,0) size 7x10
+    RenderText {mo} at (0,-2) size 7x17
+      text run at (0,-2) width 7: "\x{23A7}"
+layer at (48,183) size 7x9 scrollHeight 15
+  RenderBlock {mo} at (0,10) size 7x9
+    RenderText {mo} at (0,-2) size 7x17
+      text run at (0,-2) width 7: "\x{23AA}"
+layer at (48,192) size 7x10 scrollHeight 15
+  RenderBlock {mo} at (0,19) size 7x10
+layer at (48,202) size 7x9 scrollHeight 15
+  RenderBlock {mo} at (0,29) size 7x9
+    RenderText {mo} at (0,-2) size 7x17
+      text run at (0,-2) width 7: "\x{23AA}"
+layer at (48,211) size 7x12 scrollHeight 15
+  RenderBlock {mo} at (0,38) size 7x12
+layer at (103,173) size 7x10 scrollHeight 15
+  RenderBlock {mo} at (0,0) size 7x10
+    RenderText {mo} at (0,-2) size 7x17
+      text run at (0,-2) width 7: "\x{23AB}"
+layer at (103,183) size 7x9 scrollHeight 15
+  RenderBlock {mo} at (0,10) size 7x9
+    RenderText {mo} at (0,-2) size 7x17
+      text run at (0,-2) width 7: "\x{23AA}"
+layer at (103,192) size 7x10 scrollHeight 15
+  RenderBlock {mo} at (0,19) size 7x10
+layer at (103,202) size 7x9 scrollHeight 15
+  RenderBlock {mo} at (0,29) size 7x9
+    RenderText {mo} at (0,-2) size 7x17
+      text run at (0,-2) width 7: "\x{23AA}"
+layer at (103,211) size 7x12 scrollHeight 15
+  RenderBlock {mo} at (0,38) size 7x12
+layer at (114,173) size 5x10 scrollHeight 15
+  RenderBlock {mo} at (0,0) size 5x10
+    RenderText {mo} at (0,-2) size 5x17
+      text run at (0,-2) width 5: "\x{23A1}"
+layer at (114,183) size 5x10 scrollHeight 15
+  RenderBlock {mo} at (0,10) size 5x10
+    RenderText {mo} at (0,-2) size 5x17
+      text run at (0,-2) width 5: "\x{23A2}"
+layer at (114,193) size 5x10 scrollHeight 15
+  RenderBlock {mo} at (0,20) size 5x10
+    RenderText {mo} at (0,-2) size 5x17
+      text run at (0,-2) width 5: "\x{23A2}"
+layer at (114,203) size 5x8 scrollHeight 15
+  RenderBlock {mo} at (0,30) size 5x8
+    RenderText {mo} at (0,-2) size 5x17
+      text run at (0,-2) width 5: "\x{23A2}"
+layer at (114,211) size 5x12 scrollHeight 15
+  RenderBlock {mo} at (0,38) size 5x12
+layer at (167,173) size 5x10 scrollHeight 15
+  RenderBlock {mo} at (0,0) size 5x10
+    RenderText {mo} at (0,-2) size 5x17
+      text run at (0,-2) width 5: "\x{23A4}"
+layer at (167,183) size 5x10 scrollHeight 15
+  RenderBlock {mo} at (0,10) size 5x10
+    RenderText {mo} at (0,-2) size 5x17
+      text run at (0,-2) width 5: "\x{23A5}"
+layer at (167,193) size 5x10 scrollHeight 15
+  RenderBlock {mo} at (0,20) size 5x10
+    RenderText {mo} at (0,-2) size 5x17
+      text run at (0,-2) width 5: "\x{23A5}"
+layer at (167,203) size 5x8 scrollHeight 15
+  RenderBlock {mo} at (0,30) size 5x8
+    RenderText {mo} at (0,-2) size 5x17
+      text run at (0,-2) width 5: "\x{23A5}"
+layer at (167,211) size 5x12 scrollHeight 15
+  RenderBlock {mo} at (0,38) size 5x12
+layer at (176,173) size 5x10 scrollHeight 15
+  RenderBlock {mo} at (0,0) size 5x10
+    RenderText {mo} at (0,-2) size 5x17
+      text run at (0,-2) width 5: "\x{239B}"
+layer at (176,183) size 5x10 scrollHeight 15
+  RenderBlock {mo} at (0,10) size 5x10
+    RenderText {mo} at (0,-2) size 5x17
+      text run at (0,-2) width 5: "\x{239C}"
+layer at (176,193) size 5x10 scrollHeight 15
+  RenderBlock {mo} at (0,20) size 5x10
+    RenderText {mo} at (0,-2) size 5x17
+      text run at (0,-2) width 5: "\x{239C}"
+layer at (176,203) size 5x8 scrollHeight 15
+  RenderBlock {mo} at (0,30) size 5x8
+    RenderText {mo} at (0,-2) size 5x17
+      text run at (0,-2) width 5: "\x{239C}"
+layer at (176,211) size 5x12 scrollHeight 15
+  RenderBlock {mo} at (0,38) size 5x12
+layer at (229,173) size 5x10 scrollHeight 15
+  RenderBlock {mo} at (0,0) size 5x10
+    RenderText {mo} at (0,-2) size 5x17
+      text run at (0,-2) width 5: "\x{239E}"
+layer at (229,183) size 5x10 scrollHeight 15
+  RenderBlock {mo} at (0,10) size 5x10
+    RenderText {mo} at (0,-2) size 5x17
+      text run at (0,-2) width 5: "\x{239F}"
+layer at (229,193) size 5x10 scrollHeight 15
+  RenderBlock {mo} at (0,20) size 5x10
+    RenderText {mo} at (0,-2) size 5x17
+      text run at (0,-2) width 5: "\x{239F}"
+layer at (229,203) size 5x8 scrollHeight 15
+  RenderBlock {mo} at (0,30) size 5x8
+    RenderText {mo} at (0,-2) size 5x17
+      text run at (0,-2) width 5: "\x{239F}"
+layer at (229,211) size 5x12 scrollHeight 15
+  RenderBlock {mo} at (0,38) size 5x12
+layer at (238,173) size 8x10 scrollHeight 15
+  RenderBlock {mo} at (0,0) size 8x10
+    RenderText {mo} at (0,-2) size 8x17
+      text run at (0,-2) width 8: "\x{23D0}"
+layer at (238,183) size 8x10 scrollHeight 15
+  RenderBlock {mo} at (0,10) size 8x10
+    RenderText {mo} at (0,-2) size 8x17
+      text run at (0,-2) width 8: "\x{23D0}"
+layer at (238,193) size 8x10 scrollHeight 15
+  RenderBlock {mo} at (0,20) size 8x10
+    RenderText {mo} at (0,-2) size 8x17
+      text run at (0,-2) width 8: "\x{23D0}"
+layer at (238,203) size 8x8 scrollHeight 15
+  RenderBlock {mo} at (0,30) size 8x8
+    RenderText {mo} at (0,-2) size 8x17
+      text run at (0,-2) width 8: "\x{23D0}"
+layer at (238,211) size 8x12 scrollHeight 15
+  RenderBlock {mo} at (0,38) size 8x12
+layer at (294,173) size 8x10 scrollHeight 15
+  RenderBlock {mo} at (0,0) size 8x10
+    RenderText {mo} at (0,-2) size 8x17
+      text run at (0,-2) width 8: "\x{23D0}"
+layer at (294,183) size 8x10 scrollHeight 15
+  RenderBlock {mo} at (0,10) size 8x10
+    RenderText {mo} at (0,-2) size 8x17
+      text run at (0,-2) width 8: "\x{23D0}"
+layer at (294,193) size 8x10 scrollHeight 15
+  RenderBlock {mo} at (0,20) size 8x10
+    RenderText {mo} at (0,-2) size 8x17
+      text run at (0,-2) width 8: "\x{23D0}"
+layer at (294,203) size 8x8 scrollHeight 15
+  RenderBlock {mo} at (0,30) size 8x8
+    RenderText {mo} at (0,-2) size 8x17
+      text run at (0,-2) width 8: "\x{23D0}"
+layer at (294,211) size 8x12 scrollHeight 15
+  RenderBlock {mo} at (0,38) size 8x12
+layer at (306,173) size 10x10 scrollHeight 15
+  RenderBlock {mo} at (0,0) size 10x10
+    RenderText {mo} at (0,-2) size 10x17
+      text run at (0,-2) width 10: "\x{2320}"
+layer at (306,183) size 10x10 scrollHeight 15
+  RenderBlock {mo} at (0,10) size 10x10
+    RenderText {mo} at (0,-2) size 10x17
+      text run at (0,-2) width 10: "\x{23AE}"
+layer at (306,193) size 10x10 scrollHeight 15
+  RenderBlock {mo} at (0,20) size 10x10
+    RenderText {mo} at (0,-2) size 10x17
+      text run at (0,-2) width 10: "\x{23AE}"
+layer at (306,203) size 10x8 scrollHeight 15
+  RenderBlock {mo} at (0,30) size 10x8
+    RenderText {mo} at (0,-2) size 10x17
+      text run at (0,-2) width 10: "\x{23AE}"
+layer at (306,211) size 10x12 scrollHeight 15
+  RenderBlock {mo} at (0,38) size 10x12
+layer at (56,237) size 7x10 scrollHeight 15
+  RenderBlock {mo} at (0,0) size 7x10
+    RenderText {mo} at (0,-2) size 7x17
+      text run at (0,-2) width 7: "\x{23A7}"
+layer at (56,247) size 7x10 scrollHeight 15
+  RenderBlock {mo} at (0,10) size 7x10
+    RenderText {mo} at (0,-2) size 7x17
+      text run at (0,-2) width 7: "\x{23AA}"
+layer at (56,257) size 7x10 scrollHeight 15
+  RenderBlock {mo} at (0,20) size 7x10
+    RenderText {mo} at (0,-2) size 7x17
+      text run at (0,-2) width 7: "\x{23AA}"
+layer at (56,267) size 7x10 scrollHeight 15
+  RenderBlock {mo} at (0,30) size 7x10
+    RenderText {mo} at (0,-2) size 7x17
+      text run at (0,-2) width 7: "\x{23AA}"
+layer at (56,277) size 7x10 scrollHeight 15
+  RenderBlock {mo} at (0,40) size 7x10
+    RenderText {mo} at (0,-2) size 7x17
+      text run at (0,-2) width 7: "\x{23AA}"
+layer at (56,287) size 7x5 scrollHeight 15
+  RenderBlock {mo} at (0,50) size 7x5
+    RenderText {mo} at (0,-2) size 7x17
+      text run at (0,-2) width 7: "\x{23AA}"
+layer at (56,292) size 7x10 scrollHeight 15
+  RenderBlock {mo} at (0,55) size 7x10
+layer at (56,302) size 7x10 scrollHeight 15
+  RenderBlock {mo} at (0,65) size 7x10
+    RenderText {mo} at (0,-2) size 7x17
+      text run at (0,-2) width 7: "\x{23AA}"
+layer at (56,312) size 7x10 scrollHeight 15
+  RenderBlock {mo} at (0,75) size 7x10
+    RenderText {mo} at (0,-2) size 7x17
+      text run at (0,-2) width 7: "\x{23AA}"
+layer at (56,322) size 7x10 scrollHeight 15
+  RenderBlock {mo} at (0,85) size 7x10
+    RenderText {mo} at (0,-2) size 7x17
+      text run at (0,-2) width 7: "\x{23AA}"
+layer at (56,332) size 7x10 scrollHeight 15
+  RenderBlock {mo} at (0,95) size 7x10
+    RenderText {mo} at (0,-2) size 7x17
+      text run at (0,-2) width 7: "\x{23AA}"
+layer at (56,342) size 7x5 scrollHeight 15
+  RenderBlock {mo} at (0,105) size 7x5
+    RenderText {mo} at (0,-2) size 7x17
+      text run at (0,-2) width 7: "\x{23AA}"
+layer at (56,347) size 7x12 scrollHeight 15
+  RenderBlock {mo} at (0,110) size 7x12
+layer at (183,237) size 7x10 scrollHeight 15
+  RenderBlock {mo} at (0,0) size 7x10
+    RenderText {mo} at (0,-2) size 7x17
+      text run at (0,-2) width 7: "\x{23AB}"
+layer at (183,247) size 7x10 scrollHeight 15
+  RenderBlock {mo} at (0,10) size 7x10
+    RenderText {mo} at (0,-2) size 7x17
+      text run at (0,-2) width 7: "\x{23AA}"
+layer at (183,257) size 7x10 scrollHeight 15
+  RenderBlock {mo} at (0,20) size 7x10
+    RenderText {mo} at (0,-2) size 7x17
+      text run at (0,-2) width 7: "\x{23AA}"
+layer at (183,267) size 7x10 scrollHeight 15
+  RenderBlock {mo} at (0,30) size 7x10
+    RenderText {mo} at (0,-2) size 7x17
+      text run at (0,-2) width 7: "\x{23AA}"
+layer at (183,277) size 7x10 scrollHeight 15
+  RenderBlock {mo} at (0,40) size 7x10
+    RenderText {mo} at (0,-2) size 7x17
+      text run at (0,-2) width 7: "\x{23AA}"
+layer at (183,287) size 7x5 scrollHeight 15
+  RenderBlock {mo} at (0,50) size 7x5
+    RenderText {mo} at (0,-2) size 7x17
+      text run at (0,-2) width 7: "\x{23AA}"
+layer at (183,292) size 7x10 scrollHeight 15
+  RenderBlock {mo} at (0,55) size 7x10
+layer at (183,302) size 7x10 scrollHeight 15
+  RenderBlock {mo} at (0,65) size 7x10
+    RenderText {mo} at (0,-2) size 7x17
+      text run at (0,-2) width 7: "\x{23AA}"
+layer at (183,312) size 7x10 scrollHeight 15
+  RenderBlock {mo} at (0,75) size 7x10
+    RenderText {mo} at (0,-2) size 7x17
+      text run at (0,-2) width 7: "\x{23AA}"
+layer at (183,322) size 7x10 scrollHeight 15
+  RenderBlock {mo} at (0,85) size 7x10
+    RenderText {mo} at (0,-2) size 7x17
+      text run at (0,-2) width 7: "\x{23AA}"
+layer at (183,332) size 7x10 scrollHeight 15
+  RenderBlock {mo} at (0,95) size 7x10
+    RenderText {mo} at (0,-2) size 7x17
+      text run at (0,-2) width 7: "\x{23AA}"
+layer at (183,342) size 7x5 scrollHeight 15
+  RenderBlock {mo} at (0,105) size 7x5
+    RenderText {mo} at (0,-2) size 7x17
+      text run at (0,-2) width 7: "\x{23AA}"
+layer at (183,347) size 7x12 scrollHeight 15
+  RenderBlock {mo} at (0,110) size 7x12
+layer at (194,237) size 5x10 scrollHeight 15
+  RenderBlock {mo} at (0,0) size 5x10
+    RenderText {mo} at (0,-2) size 5x17
+      text run at (0,-2) width 5: "\x{23A1}"
+layer at (194,247) size 5x10 scrollHeight 15
+  RenderBlock {mo} at (0,10) size 5x10
+    RenderText {mo} at (0,-2) size 5x17
+      text run at (0,-2) width 5: "\x{23A2}"
+layer at (194,257) size 5x10 scrollHeight 15
+  RenderBlock {mo} at (0,20) size 5x10
+    RenderText {mo} at (0,-2) size 5x17
+      text run at (0,-2) width 5: "\x{23A2}"
+layer at (194,267) size 5x10 scrollHeight 15
+  RenderBlock {mo} at (0,30) size 5x10
+    RenderText {mo} at (0,-2) size 5x17
+      text run at (0,-2) width 5: "\x{23A2}"
+layer at (194,277) size 5x10 scrollHeight 15
+  RenderBlock {mo} at (0,40) size 5x10
+    RenderText {mo} at (0,-2) size 5x17
+      text run at (0,-2) width 5: "\x{23A2}"
+layer at (194,287) size 5x10 scrollHeight 15
+  RenderBlock {mo} at (0,50) size 5x10
+    RenderText {mo} at (0,-2) size 5x17
+      text run at (0,-2) width 5: "\x{23A2}"
+layer at (194,297) size 5x10 scrollHeight 15
+  RenderBlock {mo} at (0,60) size 5x10
+    RenderText {mo} at (0,-2) size 5x17
+      text run at (0,-2) width 5: "\x{23A2}"
+layer at (194,307) size 5x10 scrollHeight 15
+  RenderBlock {mo} at (0,70) size 5x10
+    RenderText {mo} at (0,-2) size 5x17
+      text run at (0,-2) width 5: "\x{23A2}"
+layer at (194,317) size 5x10 scrollHeight 15
+  RenderBlock {mo} at (0,80) size 5x10
+    RenderText {mo} at (0,-2) size 5x17
+      text run at (0,-2) width 5: "\x{23A2}"
+layer at (194,327) size 5x10 scrollHeight 15
+  RenderBlock {mo} at (0,90) size 5x10
+    RenderText {mo} at (0,-2) size 5x17
+      text run at (0,-2) width 5: "\x{23A2}"
+layer at (194,337) size 5x10 scrollHeight 15
+  RenderBlock {mo} at (0,100) size 5x10
+    RenderText {mo} at (0,-2) size 5x17
+      text run at (0,-2) width 5: "\x{23A2}"
+layer at (194,347) size 5x12 scrollHeight 15
+  RenderBlock {mo} at (0,110) size 5x12
+layer at (319,237) size 5x10 scrollHeight 15
+  RenderBlock {mo} at (0,0) size 5x10
+    RenderText {mo} at (0,-2) size 5x17
+      text run at (0,-2) width 5: "\x{23A4}"
+layer at (319,247) size 5x10 scrollHeight 15
+  RenderBlock {mo} at (0,10) size 5x10
+    RenderText {mo} at (0,-2) size 5x17
+      text run at (0,-2) width 5: "\x{23A5}"
+layer at (319,257) size 5x10 scrollHeight 15
+  RenderBlock {mo} at (0,20) size 5x10
+    RenderText {mo} at (0,-2) size 5x17
+      text run at (0,-2) width 5: "\x{23A5}"
+layer at (319,267) size 5x10 scrollHeight 15
+  RenderBlock {mo} at (0,30) size 5x10
+    RenderText {mo} at (0,-2) size 5x17
+      text run at (0,-2) width 5: "\x{23A5}"
+layer at (319,277) size 5x10 scrollHeight 15
+  RenderBlock {mo} at (0,40) size 5x10
+    RenderText {mo} at (0,-2) size 5x17
+      text run at (0,-2) width 5: "\x{23A5}"
+layer at (319,287) size 5x10 scrollHeight 15
+  RenderBlock {mo} at (0,50) size 5x10
+    RenderText {mo} at (0,-2) size 5x17
+      text run at (0,-2) width 5: "\x{23A5}"
+layer at (319,297) size 5x10 scrollHeight 15
+  RenderBlock {mo} at (0,60) size 5x10
+    RenderText {mo} at (0,-2) size 5x17
+      text run at (0,-2) width 5: "\x{23A5}"
+layer at (319,307) size 5x10 scrollHeight 15
+  RenderBlock {mo} at (0,70) size 5x10
+    RenderText {mo} at (0,-2) size 5x17
+      text run at (0,-2) width 5: "\x{23A5}"
+layer at (319,317) size 5x10 scrollHeight 15
+  RenderBlock {mo} at (0,80) size 5x10
+    RenderText {mo} at (0,-2) size 5x17
+      text run at (0,-2) width 5: "\x{23A5}"
+layer at (319,327) size 5x10 scrollHeight 15
+  RenderBlock {mo} at (0,90) size 5x10
+    RenderText {mo} at (0,-2) size 5x17
+      text run at (0,-2) width 5: "\x{23A5}"
+layer at (319,337) size 5x10 scrollHeight 15
+  RenderBlock {mo} at (0,100) size 5x10
+    RenderText {mo} at (0,-2) size 5x17
+      text run at (0,-2) width 5: "\x{23A5}"
+layer at (319,347) size 5x12 scrollHeight 15
+  RenderBlock {mo} at (0,110) size 5x12
+layer at (328,237) size 5x10 scrollHeight 15
+  RenderBlock {mo} at (0,0) size 5x10
+    RenderText {mo} at (0,-2) size 5x17
+      text run at (0,-2) width 5: "\x{239B}"
+layer at (328,247) size 5x10 scrollHeight 15
+  RenderBlock {mo} at (0,10) size 5x10
+    RenderText {mo} at (0,-2) size 5x17
+      text run at (0,-2) width 5: "\x{239C}"
+layer at (328,257) size 5x10 scrollHeight 15
+  RenderBlock {mo} at (0,20) size 5x10
+    RenderText {mo} at (0,-2) size 5x17
+      text run at (0,-2) width 5: "\x{239C}"
+layer at (328,267) size 5x10 scrollHeight 15
+  RenderBlock {mo} at (0,30) size 5x10
+    RenderText {mo} at (0,-2) size 5x17
+      text run at (0,-2) width 5: "\x{239C}"
+layer at (328,277) size 5x10 scrollHeight 15
+  RenderBlock {mo} at (0,40) size 5x10
+    RenderText {mo} at (0,-2) size 5x17
+      text run at (0,-2) width 5: "\x{239C}"
+layer at (328,287) size 5x10 scrollHeight 15
+  RenderBlock {mo} at (0,50) size 5x10
+    RenderText {mo} at (0,-2) size 5x17
+      text run at (0,-2) width 5: "\x{239C}"
+layer at (328,297) size 5x10 scrollHeight 15
+  RenderBlock {mo} at (0,60) size 5x10
+    RenderText {mo} at (0,-2) size 5x17
+      text run at (0,-2) width 5: "\x{239C}"
+layer at (328,307) size 5x10 scrollHeight 15
+  RenderBlock {mo} at (0,70) size 5x10
+    RenderText {mo} at (0,-2) size 5x17
+      text run at (0,-2) width 5: "\x{239C}"
+layer at (328,317) size 5x10 scrollHeight 15
+  RenderBlock {mo} at (0,80) size 5x10
+    RenderText {mo} at (0,-2) size 5x17
+      text run at (0,-2) width 5: "\x{239C}"
+layer at (328,327) size 5x10 scrollHeight 15
+  RenderBlock {mo} at (0,90) size 5x10
+    RenderText {mo} at (0,-2) size 5x17
+      text run at (0,-2) width 5: "\x{239C}"
+layer at (328,337) size 5x10 scrollHeight 15
+  RenderBlock {mo} at (0,100) size 5x10
+    RenderText {mo} at (0,-2) size 5x17
+      text run at (0,-2) width 5: "\x{239C}"
+layer at (328,347) size 5x12 scrollHeight 15
+  RenderBlock {mo} at (0,110) size 5x12
+layer at (453,237) size 5x10 scrollHeight 15
+  RenderBlock {mo} at (0,0) size 5x10
+    RenderText {mo} at (0,-2) size 5x17
+      text run at (0,-2) width 5: "\x{239E}"
+layer at (453,247) size 5x10 scrollHeight 15
+  RenderBlock {mo} at (0,10) size 5x10
+    RenderText {mo} at (0,-2) size 5x17
+      text run at (0,-2) width 5: "\x{239F}"
+layer at (453,257) size 5x10 scrollHeight 15
+  RenderBlock {mo} at (0,20) size 5x10
+    RenderText {mo} at (0,-2) size 5x17
+      text run at (0,-2) width 5: "\x{239F}"
+layer at (453,267) size 5x10 scrollHeight 15
+  RenderBlock {mo} at (0,30) size 5x10
+    RenderText {mo} at (0,-2) size 5x17
+      text run at (0,-2) width 5: "\x{239F}"
+layer at (453,277) size 5x10 scrollHeight 15
+  RenderBlock {mo} at (0,40) size 5x10
+    RenderText {mo} at (0,-2) size 5x17
+      text run at (0,-2) width 5: "\x{239F}"
+layer at (453,287) size 5x10 scrollHeight 15
+  RenderBlock {mo} at (0,50) size 5x10
+    RenderText {mo} at (0,-2) size 5x17
+      text run at (0,-2) width 5: "\x{239F}"
+layer at (453,297) size 5x10 scrollHeight 15
+  RenderBlock {mo} at (0,60) size 5x10
+    RenderText {mo} at (0,-2) size 5x17
+      text run at (0,-2) width 5: "\x{239F}"
+layer at (453,307) size 5x10 scrollHeight 15
+  RenderBlock {mo} at (0,70) size 5x10
+    RenderText {mo} at (0,-2) size 5x17
+      text run at (0,-2) width 5: "\x{239F}"
+layer at (453,317) size 5x10 scrollHeight 15
+  RenderBlock {mo} at (0,80) size 5x10
+    RenderText {mo} at (0,-2) size 5x17
+      text run at (0,-2) width 5: "\x{239F}"
+layer at (453,327) size 5x10 scrollHeight 15
+  RenderBlock {mo} at (0,90) size 5x10
+    RenderText {mo} at (0,-2) size 5x17
+      text run at (0,-2) width 5: "\x{239F}"
+layer at (453,337) size 5x10 scrollHeight 15
+  RenderBlock {mo} at (0,100) size 5x10
+    RenderText {mo} at (0,-2) size 5x17
+      text run at (0,-2) width 5: "\x{239F}"
+layer at (453,347) size 5x12 scrollHeight 15
+  RenderBlock {mo} at (0,110) size 5x12
+layer at (462,237) size 8x10 scrollHeight 15
+  RenderBlock {mo} at (0,0) size 8x10
+    RenderText {mo} at (0,-2) size 8x17
+      text run at (0,-2) width 8: "\x{23D0}"
+layer at (462,247) size 8x10 scrollHeight 15
+  RenderBlock {mo} at (0,10) size 8x10
+    RenderText {mo} at (0,-2) size 8x17
+      text run at (0,-2) width 8: "\x{23D0}"
+layer at (462,257) size 8x10 scrollHeight 15
+  RenderBlock {mo} at (0,20) size 8x10
+    RenderText {mo} at (0,-2) size 8x17
+      text run at (0,-2) width 8: "\x{23D0}"
+layer at (462,267) size 8x10 scrollHeight 15
+  RenderBlock {mo} at (0,30) size 8x10
+    RenderText {mo} at (0,-2) size 8x17
+      text run at (0,-2) width 8: "\x{23D0}"
+layer at (462,277) size 8x10 scrollHeight 15
+  RenderBlock {mo} at (0,40) size 8x10
+    RenderText {mo} at (0,-2) size 8x17
+      text run at (0,-2) width 8: "\x{23D0}"
+layer at (462,287) size 8x10 scrollHeight 15
+  RenderBlock {mo} at (0,50) size 8x10
+    RenderText {mo} at (0,-2) size 8x17
+      text run at (0,-2) width 8: "\x{23D0}"
+layer at (462,297) size 8x10 scrollHeight 15
+  RenderBlock {mo} at (0,60) size 8x10
+    RenderText {mo} at (0,-2) size 8x17
+      text run at (0,-2) width 8: "\x{23D0}"
+layer at (462,307) size 8x10 scrollHeight 15
+  RenderBlock {mo} at (0,70) size 8x10
+    RenderText {mo} at (0,-2) size 8x17
+      text run at (0,-2) width 8: "\x{23D0}"
+layer at (462,317) size 8x10 scrollHeight 15
+  RenderBlock {mo} at (0,80) size 8x10
+    RenderText {mo} at (0,-2) size 8x17
+      text run at (0,-2) width 8: "\x{23D0}"
+layer at (462,327) size 8x10 scrollHeight 15
+  RenderBlock {mo} at (0,90) size 8x10
+    RenderText {mo} at (0,-2) size 8x17
+      text run at (0,-2) width 8: "\x{23D0}"
+layer at (462,337) size 8x10 scrollHeight 15
+  RenderBlock {mo} at (0,100) size 8x10
+    RenderText {mo} at (0,-2) size 8x17
+      text run at (0,-2) width 8: "\x{23D0}"
+layer at (462,347) size 8x12 scrollHeight 15
+  RenderBlock {mo} at (0,110) size 8x12
+layer at (590,237) size 8x10 scrollHeight 15
+  RenderBlock {mo} at (0,0) size 8x10
+    RenderText {mo} at (0,-2) size 8x17
+      text run at (0,-2) width 8: "\x{23D0}"
+layer at (590,247) size 8x10 scrollHeight 15
+  RenderBlock {mo} at (0,10) size 8x10
+    RenderText {mo} at (0,-2) size 8x17
+      text run at (0,-2) width 8: "\x{23D0}"
+layer at (590,257) size 8x10 scrollHeight 15
+  RenderBlock {mo} at (0,20) size 8x10
+    RenderText {mo} at (0,-2) size 8x17
+      text run at (0,-2) width 8: "\x{23D0}"
+layer at (590,267) size 8x10 scrollHeight 15
+  RenderBlock {mo} at (0,30) size 8x10
+    RenderText {mo} at (0,-2) size 8x17
+      text run at (0,-2) width 8: "\x{23D0}"
+layer at (590,277) size 8x10 scrollHeight 15
+  RenderBlock {mo} at (0,40) size 8x10
+    RenderText {mo} at (0,-2) size 8x17
+      text run at (0,-2) width 8: "\x{23D0}"
+layer at (590,287) size 8x10 scrollHeight 15
+  RenderBlock {mo} at (0,50) size 8x10
+    RenderText {mo} at (0,-2) size 8x17
+      text run at (0,-2) width 8: "\x{23D0}"
+layer at (590,297) size 8x10 scrollHeight 15
+  RenderBlock {mo} at (0,60) size 8x10
+    RenderText {mo} at (0,-2) size 8x17
+      text run at (0,-2) width 8: "\x{23D0}"
+layer at (590,307) size 8x10 scrollHeight 15
+  RenderBlock {mo} at (0,70) size 8x10
+    RenderText {mo} at (0,-2) size 8x17
+      text run at (0,-2) width 8: "\x{23D0}"
+layer at (590,317) size 8x10 scrollHeight 15
+  RenderBlock {mo} at (0,80) size 8x10
+    RenderText {mo} at (0,-2) size 8x17
+      text run at (0,-2) width 8: "\x{23D0}"
+layer at (590,327) size 8x10 scrollHeight 15
+  RenderBlock {mo} at (0,90) size 8x10
+    RenderText {mo} at (0,-2) size 8x17
+      text run at (0,-2) width 8: "\x{23D0}"
+layer at (590,337) size 8x10 scrollHeight 15
+  RenderBlock {mo} at (0,100) size 8x10
+    RenderText {mo} at (0,-2) size 8x17
+      text run at (0,-2) width 8: "\x{23D0}"
+layer at (590,347) size 8x12 scrollHeight 15
+  RenderBlock {mo} at (0,110) size 8x12
+layer at (602,237) size 10x10 scrollHeight 15
+  RenderBlock {mo} at (0,0) size 10x10
+    RenderText {mo} at (0,-2) size 10x17
+      text run at (0,-2) width 10: "\x{2320}"
+layer at (602,247) size 10x10 scrollHeight 15
+  RenderBlock {mo} at (0,10) size 10x10
+    RenderText {mo} at (0,-2) size 10x17
+      text run at (0,-2) width 10: "\x{23AE}"
+layer at (602,257) size 10x10 scrollHeight 15
+  RenderBlock {mo} at (0,20) size 10x10
+    RenderText {mo} at (0,-2) size 10x17
+      text run at (0,-2) width 10: "\x{23AE}"
+layer at (602,267) size 10x10 scrollHeight 15
+  RenderBlock {mo} at (0,30) size 10x10
+    RenderText {mo} at (0,-2) size 10x17
+      text run at (0,-2) width 10: "\x{23AE}"
+layer at (602,277) size 10x10 scrollHeight 15
+  RenderBlock {mo} at (0,40) size 10x10
+    RenderText {mo} at (0,-2) size 10x17
+      text run at (0,-2) width 10: "\x{23AE}"
+layer at (602,287) size 10x10 scrollHeight 15
+  RenderBlock {mo} at (0,50) size 10x10
+    RenderText {mo} at (0,-2) size 10x17
+      text run at (0,-2) width 10: "\x{23AE}"
+layer at (602,297) size 10x10 scrollHeight 15
+  RenderBlock {mo} at (0,60) size 10x10
+    RenderText {mo} at (0,-2) size 10x17
+      text run at (0,-2) width 10: "\x{23AE}"
+layer at (602,307) size 10x10 scrollHeight 15
+  RenderBlock {mo} at (0,70) size 10x10
+    RenderText {mo} at (0,-2) size 10x17
+      text run at (0,-2) width 10: "\x{23AE}"
+layer at (602,317) size 10x10 scrollHeight 15
+  RenderBlock {mo} at (0,80) size 10x10
+    RenderText {mo} at (0,-2) size 10x17
+      text run at (0,-2) width 10: "\x{23AE}"
+layer at (602,327) size 10x10 scrollHeight 15
+  RenderBlock {mo} at (0,90) size 10x10
+    RenderText {mo} at (0,-2) size 10x17
+      text run at (0,-2) width 10: "\x{23AE}"
+layer at (602,337) size 10x10 scrollHeight 15
+  RenderBlock {mo} at (0,100) size 10x10
+    RenderText {mo} at (0,-2) size 10x17
+      text run at (0,-2) width 10: "\x{23AE}"
+layer at (602,347) size 10x12 scrollHeight 15
+  RenderBlock {mo} at (0,110) size 10x12
+layer at (8,373) size 5x10 scrollHeight 15
+  RenderBlock {mo} at (0,0) size 5x10
+    RenderText {mo} at (0,-2) size 5x17
+      text run at (0,-2) width 5: "\x{239B}"
+layer at (8,383) size 5x10 scrollHeight 15
+  RenderBlock {mo} at (0,10) size 5x10
+    RenderText {mo} at (0,-2) size 5x17
+      text run at (0,-2) width 5: "\x{239C}"
+layer at (8,393) size 5x10 scrollHeight 15
+  RenderBlock {mo} at (0,20) size 5x10
+    RenderText {mo} at (0,-2) size 5x17
+      text run at (0,-2) width 5: "\x{239C}"
+layer at (8,403) size 5x12 scrollHeight 15
+  RenderBlock {mo} at (0,30) size 5x12
+layer at (141,373) size 5x10 scrollHeight 15
+  RenderBlock {mo} at (0,0) size 5x10
+    RenderText {mo} at (0,-2) size 5x17
+      text run at (0,-2) width 5: "\x{239E}"
+layer at (141,383) size 5x10 scrollHeight 15
+  RenderBlock {mo} at (0,10) size 5x10
+    RenderText {mo} at (0,-2) size 5x17
+      text run at (0,-2) width 5: "\x{239F}"
+layer at (141,393) size 5x10 scrollHeight 15
+  RenderBlock {mo} at (0,20) size 5x10
+    RenderText {mo} at (0,-2) size 5x17
+      text run at (0,-2) width 5: "\x{239F}"
+layer at (141,403) size 5x12 scrollHeight 15
+  RenderBlock {mo} at (0,30) size 5x12
+layer at (48,134) size 7x15 backgroundClip at (48,136) size 7x10 clip at (48,136) size 7x10 outlineClip at (48,136) size 7x10
+  RenderBlock (relative positioned) {mo} at (0,0) size 7x12
+    RenderText {mo} at (0,-2) size 7x17
+      text run at (0,-2) width 7: "\x{23A8}"
+layer at (48,143) size 7x15 backgroundClip at (48,147) size 7x12 clip at (48,147) size 7x12 outlineClip at (48,147) size 7x12
+  RenderBlock (relative positioned) {mo} at (0,0) size 7x12
+    RenderText {mo} at (0,-2) size 7x17
+      text run at (0,-2) width 7: "\x{23A9}"
+layer at (87,134) size 7x15 backgroundClip at (87,136) size 7x10 clip at (87,136) size 7x10 outlineClip at (87,136) size 7x10
+  RenderBlock (relative positioned) {mo} at (0,0) size 7x12
+    RenderText {mo} at (0,-2) size 7x17
+      text run at (0,-2) width 7: "\x{23AC}"
+layer at (87,143) size 7x15 backgroundClip at (87,147) size 7x12 clip at (87,147) size 7x12 outlineClip at (87,147) size 7x12
+  RenderBlock (relative positioned) {mo} at (0,0) size 7x12
+    RenderText {mo} at (0,-2) size 7x17
+      text run at (0,-2) width 7: "\x{23AD}"
+layer at (98,143) size 5x15 backgroundClip at (98,147) size 5x12 clip at (98,147) size 5x12 outlineClip at (98,147) size 5x12
+  RenderBlock (relative positioned) {mo} at (0,0) size 5x12
+    RenderText {mo} at (0,-2) size 5x17
+      text run at (0,-2) width 5: "\x{23A3}"
+layer at (135,143) size 5x15 backgroundClip at (135,147) size 5x12 clip at (135,147) size 5x12 outlineClip at (135,147) size 5x12
+  RenderBlock (relative positioned) {mo} at (0,0) size 5x12
+    RenderText {mo} at (0,-2) size 5x17
+      text run at (0,-2) width 5: "\x{23A6}"
+layer at (144,143) size 5x15 backgroundClip at (144,147) size 5x12 clip at (144,147) size 5x12 outlineClip at (144,147) size 5x12
+  RenderBlock (relative positioned) {mo} at (0,0) size 5x12
+    RenderText {mo} at (0,-2) size 5x17
+      text run at (0,-2) width 5: "\x{239D}"
+layer at (181,143) size 5x15 backgroundClip at (181,147) size 5x12 clip at (181,147) size 5x12 outlineClip at (181,147) size 5x12
+  RenderBlock (relative positioned) {mo} at (0,0) size 5x12
+    RenderText {mo} at (0,-2) size 5x17
+      text run at (0,-2) width 5: "\x{23A0}"
+layer at (190,143) size 8x15 backgroundClip at (190,147) size 8x12 clip at (190,147) size 8x12 outlineClip at (190,147) size 8x12
+  RenderBlock (relative positioned) {mo} at (0,0) size 8x12
+    RenderText {mo} at (0,-2) size 8x17
+      text run at (0,-2) width 8: "\x{23D0}"
+layer at (230,143) size 8x15 backgroundClip at (230,147) size 8x12 clip at (230,147) size 8x12 outlineClip at (230,147) size 8x12
+  RenderBlock (relative positioned) {mo} at (0,0) size 8x12
+    RenderText {mo} at (0,-2) size 8x17
+      text run at (0,-2) width 8: "\x{23D0}"
+layer at (242,143) size 10x15 backgroundClip at (242,147) size 10x12 clip at (242,147) size 10x12 outlineClip at (242,147) size 10x12
+  RenderBlock (relative positioned) {mo} at (0,0) size 10x12
+    RenderText {mo} at (0,-2) size 10x17
+      text run at (0,-2) width 10: "\x{2321}"
+layer at (48,190) size 7x15 backgroundClip at (48,192) size 7x10 clip at (48,192) size 7x10 outlineClip at (48,192) size 7x10
+  RenderBlock (relative positioned) {mo} at (0,0) size 7x12
+    RenderText {mo} at (0,-2) size 7x17
+      text run at (0,-2) width 7: "\x{23A8}"
+layer at (48,207) size 7x15 backgroundClip at (48,211) size 7x12 clip at (48,211) size 7x12 outlineClip at (48,211) size 7x12
+  RenderBlock (relative positioned) {mo} at (0,0) size 7x12
+    RenderText {mo} at (0,-2) size 7x17
+      text run at (0,-2) width 7: "\x{23A9}"
+layer at (103,190) size 7x15 backgroundClip at (103,192) size 7x10 clip at (103,192) size 7x10 outlineClip at (103,192) size 7x10
+  RenderBlock (relative positioned) {mo} at (0,0) size 7x12
+    RenderText {mo} at (0,-2) size 7x17
+      text run at (0,-2) width 7: "\x{23AC}"
+layer at (103,207) size 7x15 backgroundClip at (103,211) size 7x12 clip at (103,211) size 7x12 outlineClip at (103,211) size 7x12
+  RenderBlock (relative positioned) {mo} at (0,0) size 7x12
+    RenderText {mo} at (0,-2) size 7x17
+      text run at (0,-2) width 7: "\x{23AD}"
+layer at (114,207) size 5x15 backgroundClip at (114,211) size 5x12 clip at (114,211) size 5x12 outlineClip at (114,211) size 5x12
+  RenderBlock (relative positioned) {mo} at (0,0) size 5x12
+    RenderText {mo} at (0,-2) size 5x17
+      text run at (0,-2) width 5: "\x{23A3}"
+layer at (167,207) size 5x15 backgroundClip at (167,211) size 5x12 clip at (167,211) size 5x12 outlineClip at (167,211) size 5x12
+  RenderBlock (relative positioned) {mo} at (0,0) size 5x12
+    RenderText {mo} at (0,-2) size 5x17
+      text run at (0,-2) width 5: "\x{23A6}"
+layer at (176,207) size 5x15 backgroundClip at (176,211) size 5x12 clip at (176,211) size 5x12 outlineClip at (176,211) size 5x12
+  RenderBlock (relative positioned) {mo} at (0,0) size 5x12
+    RenderText {mo} at (0,-2) size 5x17
+      text run at (0,-2) width 5: "\x{239D}"
+layer at (229,207) size 5x15 backgroundClip at (229,211) size 5x12 clip at (229,211) size 5x12 outlineClip at (229,211) size 5x12
+  RenderBlock (relative positioned) {mo} at (0,0) size 5x12
+    RenderText {mo} at (0,-2) size 5x17
+      text run at (0,-2) width 5: "\x{23A0}"
+layer at (238,207) size 8x15 backgroundClip at (238,211) size 8x12 clip at (238,211) size 8x12 outlineClip at (238,211) size 8x12
+  RenderBlock (relative positioned) {mo} at (0,0) size 8x12
+    RenderText {mo} at (0,-2) size 8x17
+      text run at (0,-2) width 8: "\x{23D0}"
+layer at (294,207) size 8x15 backgroundClip at (294,211) size 8x12 clip at (294,211) size 8x12 outlineClip at (294,211) size 8x12
+  RenderBlock (relative positioned) {mo} at (0,0) size 8x12
+    RenderText {mo} at (0,-2) size 8x17
+      text run at (0,-2) width 8: "\x{23D0}"
+layer at (306,207) size 10x15 backgroundClip at (306,211) size 10x12 clip at (306,211) size 10x12 outlineClip at (306,211) size 10x12
+  RenderBlock (relative positioned) {mo} at (0,0) size 10x12
+    RenderText {mo} at (0,-2) size 10x17
+      text run at (0,-2) width 10: "\x{2321}"
+layer at (56,290) size 7x15 backgroundClip at (56,292) size 7x10 clip at (56,292) size 7x10 outlineClip at (56,292) size 7x10
+  RenderBlock (relative positioned) {mo} at (0,0) size 7x12
+    RenderText {mo} at (0,-2) size 7x17
+      text run at (0,-2) width 7: "\x{23A8}"
+layer at (56,343) size 7x15 backgroundClip at (56,347) size 7x12 clip at (56,347) size 7x12 outlineClip at (56,347) size 7x12
+  RenderBlock (relative positioned) {mo} at (0,0) size 7x12
+    RenderText {mo} at (0,-2) size 7x17
+      text run at (0,-2) width 7: "\x{23A9}"
+layer at (183,290) size 7x15 backgroundClip at (183,292) size 7x10 clip at (183,292) size 7x10 outlineClip at (183,292) size 7x10
+  RenderBlock (relative positioned) {mo} at (0,0) size 7x12
+    RenderText {mo} at (0,-2) size 7x17
+      text run at (0,-2) width 7: "\x{23AC}"
+layer at (183,343) size 7x15 backgroundClip at (183,347) size 7x12 clip at (183,347) size 7x12 outlineClip at (183,347) size 7x12
+  RenderBlock (relative positioned) {mo} at (0,0) size 7x12
+    RenderText {mo} at (0,-2) size 7x17
+      text run at (0,-2) width 7: "\x{23AD}"
+layer at (194,343) size 5x15 backgroundClip at (194,347) size 5x12 clip at (194,347) size 5x12 outlineClip at (194,347) size 5x12
+  RenderBlock (relative positioned) {mo} at (0,0) size 5x12
+    RenderText {mo} at (0,-2) size 5x17
+      text run at (0,-2) width 5: "\x{23A3}"
+layer at (319,343) size 5x15 backgroundClip at (319,347) size 5x12 clip at (319,347) size 5x12 outlineClip at (319,347) size 5x12
+  RenderBlock (relative positioned) {mo} at (0,0) size 5x12
+    RenderText {mo} at (0,-2) size 5x17
+      text run at (0,-2) width 5: "\x{23A6}"
+layer at (328,343) size 5x15 backgroundClip at (328,347) size 5x12 clip at (328,347) size 5x12 outlineClip at (328,347) size 5x12
+  RenderBlock (relative positioned) {mo} at (0,0) size 5x12
+    RenderText {mo} at (0,-2) size 5x17
+      text run at (0,-2) width 5: "\x{239D}"
+layer at (453,343) size 5x15 backgroundClip at (453,347) size 5x12 clip at (453,347) size 5x12 outlineClip at (453,347) size 5x12
+  RenderBlock (relative positioned) {mo} at (0,0) size 5x12
+    RenderText {mo} at (0,-2) size 5x17
+      text run at (0,-2) width 5: "\x{23A0}"
+layer at (462,343) size 8x15 backgroundClip at (462,347) size 8x12 clip at (462,347) size 8x12 outlineClip at (462,347) size 8x12
+  RenderBlock (relative positioned) {mo} at (0,0) size 8x12
+    RenderText {mo} at (0,-2) size 8x17
+      text run at (0,-2) width 8: "\x{23D0}"
+layer at (590,343) size 8x15 backgroundClip at (590,347) size 8x12 clip at (590,347) size 8x12 outlineClip at (590,347) size 8x12
+  RenderBlock (relative positioned) {mo} at (0,0) size 8x12
+    RenderText {mo} at (0,-2) size 8x17
+      text run at (0,-2) width 8: "\x{23D0}"
+layer at (602,343) size 10x15 backgroundClip at (602,347) size 10x12 clip at (602,347) size 10x12 outlineClip at (602,347) size 10x12
+  RenderBlock (relative positioned) {mo} at (0,0) size 10x12
+    RenderText {mo} at (0,-2) size 10x17
+      text run at (0,-2) width 10: "\x{2321}"
+layer at (8,399) size 5x15 backgroundClip at (8,403) size 5x12 clip at (8,403) size 5x12 outlineClip at (8,403) size 5x12
+  RenderBlock (relative positioned) {mo} at (0,0) size 5x12
+    RenderText {mo} at (0,-2) size 5x17
+      text run at (0,-2) width 5: "\x{239D}"
+layer at (141,399) size 5x15 backgroundClip at (141,403) size 5x12 clip at (141,403) size 5x12 outlineClip at (141,403) size 5x12
+  RenderBlock (relative positioned) {mo} at (0,0) size 5x12
+    RenderText {mo} at (0,-2) size 5x17
+      text run at (0,-2) width 5: "\x{23A0}"
diff --git a/LayoutTests/platform/mac/mathml/presentation/subsup-expected.txt b/LayoutTests/platform/mac/mathml/presentation/subsup-expected.txt
index eb32e81..c446d52 100644
--- a/LayoutTests/platform/mac/mathml/presentation/subsup-expected.txt
+++ b/LayoutTests/platform/mac/mathml/presentation/subsup-expected.txt
@@ -32,24 +32,26 @@ layer at (0,0) size 800x224
                 RenderText {#text} at (0,1) size 9x16
                   text run at (0,1) width 9: "Z"
             RenderBlock {msubsup} at (10,4) size 30x32
-              RenderBlock {msubsup} at (0,0) size 30x16
+              RenderBlock {msubsup} at (0,0) size 16x16
                 RenderInline {mi} at (0,0) size 3x12
                   RenderText {#text} at (0,3) size 3x12
                     text run at (0,3) width 3: "j"
-              RenderBlock {msubsup} at (0,16) size 30x16
-                RenderBlock {mrow} at (1,2) size 29x13
+              RenderBlock {msubsup} at (0,16) size 16x16
+                RenderBlock {mrow} at (1,2) size 29x12
                   RenderInline {mi} at (0,0) size 5x12
                     RenderText {#text} at (0,1) size 5x12
                       text run at (0,1) width 5: "x"
                   RenderBlock {mo} at (5,1) size 7x12
-                    RenderText {#text} at (0,0) size 7x12
-                      text run at (0,0) width 7: "+"
+                    RenderBlock {mo} at (0,0) size 7x12
+                      RenderText {mo} at (0,0) size 7x12
+                        text run at (0,0) width 7: "+"
                   RenderInline {mi} at (0,0) size 5x12
                     RenderText {#text} at (12,1) size 5x12
                       text run at (12,1) width 5: "y"
                   RenderBlock {mo} at (17,1) size 7x12
-                    RenderText {#text} at (0,0) size 7x12
-                      text run at (0,0) width 7: "+"
+                    RenderBlock {mo} at (0,0) size 7x12
+                      RenderText {mo} at (0,0) size 7x12
+                        text run at (0,0) width 7: "+"
                   RenderInline {mi} at (0,0) size 5x12
                     RenderText {#text} at (24,1) size 5x12
                       text run at (24,1) width 5: "z"
@@ -64,18 +66,19 @@ layer at (0,0) size 800x224
                 RenderText {#text} at (0,1) size 9x16
                   text run at (0,1) width 9: "Z"
             RenderBlock {msubsup} at (10,4) size 16x32
-              RenderBlock {msubsup} at (0,0) size 16x16
-                RenderBlock {mrow} at (1,2) size 15x13
+              RenderBlock {msubsup} at (0,0) size 9x16
+                RenderBlock {mrow} at (1,2) size 15x12
                   RenderInline {mi} at (0,0) size 5x12
                     RenderText {#text} at (0,1) size 5x12
                       text run at (0,1) width 5: "k"
                   RenderBlock {mo} at (5,1) size 7x12
-                    RenderText {#text} at (0,0) size 7x12
-                      text run at (0,0) width 7: "+"
+                    RenderBlock {mo} at (0,0) size 7x12
+                      RenderText {mo} at (0,0) size 7x12
+                        text run at (0,0) width 7: "+"
                   RenderInline {mi} at (0,0) size 3x12
                     RenderText {#text} at (12,1) size 3x12
                       text run at (12,1) width 3: "j"
-              RenderBlock {msubsup} at (0,16) size 16x16
+              RenderBlock {msubsup} at (0,16) size 9x16
                 RenderInline {mi} at (0,0) size 5x12
                   RenderText {#text} at (0,3) size 5x12
                     text run at (0,3) width 5: "x"
@@ -90,31 +93,34 @@ layer at (0,0) size 800x224
                 RenderText {#text} at (0,1) size 9x16
                   text run at (0,1) width 9: "Z"
             RenderBlock {msubsup} at (10,4) size 30x32
-              RenderBlock {msubsup} at (0,0) size 30x16
-                RenderBlock {mrow} at (1,2) size 15x13
+              RenderBlock {msubsup} at (0,0) size 16x16
+                RenderBlock {mrow} at (1,2) size 15x12
                   RenderInline {mi} at (0,0) size 5x12
                     RenderText {#text} at (0,1) size 5x12
                       text run at (0,1) width 5: "k"
                   RenderBlock {mo} at (5,1) size 7x12
-                    RenderText {#text} at (0,0) size 7x12
-                      text run at (0,0) width 7: "+"
+                    RenderBlock {mo} at (0,0) size 7x12
+                      RenderText {mo} at (0,0) size 7x12
+                        text run at (0,0) width 7: "+"
                   RenderInline {mi} at (0,0) size 3x12
                     RenderText {#text} at (12,1) size 3x12
                       text run at (12,1) width 3: "j"
-              RenderBlock {msubsup} at (0,16) size 30x16
-                RenderBlock {mrow} at (1,2) size 29x13
+              RenderBlock {msubsup} at (0,16) size 16x16
+                RenderBlock {mrow} at (1,2) size 29x12
                   RenderInline {mi} at (0,0) size 5x12
                     RenderText {#text} at (0,1) size 5x12
                       text run at (0,1) width 5: "x"
                   RenderBlock {mo} at (5,1) size 7x12
-                    RenderText {#text} at (0,0) size 7x12
-                      text run at (0,0) width 7: "+"
+                    RenderBlock {mo} at (0,0) size 7x12
+                      RenderText {mo} at (0,0) size 7x12
+                        text run at (0,0) width 7: "+"
                   RenderInline {mi} at (0,0) size 5x12
                     RenderText {#text} at (12,1) size 5x12
                       text run at (12,1) width 5: "y"
                   RenderBlock {mo} at (17,1) size 7x12
-                    RenderText {#text} at (0,0) size 7x12
-                      text run at (0,0) width 7: "+"
+                    RenderBlock {mo} at (0,0) size 7x12
+                      RenderText {mo} at (0,0) size 7x12
+                        text run at (0,0) width 7: "+"
                   RenderInline {mi} at (0,0) size 5x12
                     RenderText {#text} at (24,1) size 5x12
                       text run at (24,1) width 5: "z"
diff --git a/LayoutTests/platform/mac/mathml/presentation/underover-expected.checksum b/LayoutTests/platform/mac/mathml/presentation/underover-expected.checksum
index 2c64ae9..a332e4f 100644
--- a/LayoutTests/platform/mac/mathml/presentation/underover-expected.checksum
+++ b/LayoutTests/platform/mac/mathml/presentation/underover-expected.checksum
@@ -1 +1 @@
-de04f42cf0dc03f38330bd9b9c803660
\ No newline at end of file
+7d8d13ef4353afbb55e218bdb3fd2e97
\ No newline at end of file
diff --git a/LayoutTests/platform/mac/mathml/presentation/underover-expected.png b/LayoutTests/platform/mac/mathml/presentation/underover-expected.png
index 501fd21..eb8977f 100644
Binary files a/LayoutTests/platform/mac/mathml/presentation/underover-expected.png and b/LayoutTests/platform/mac/mathml/presentation/underover-expected.png differ
diff --git a/LayoutTests/platform/mac/mathml/presentation/underover-expected.txt b/LayoutTests/platform/mac/mathml/presentation/underover-expected.txt
index ec9de08..645a9c3 100644
--- a/LayoutTests/platform/mac/mathml/presentation/underover-expected.txt
+++ b/LayoutTests/platform/mac/mathml/presentation/underover-expected.txt
@@ -1,104 +1,110 @@
 layer at (0,0) size 800x600
   RenderView at (0,0) size 800x600
-layer at (0,0) size 800x260
-  RenderBlock {html} at (0,0) size 800x260
-    RenderBody {body} at (8,16) size 784x228
-      RenderBlock {p} at (0,0) size 784x38
-        RenderText {#text} at (0,8) size 92x18
-          text run at (0,8) width 92: "under & over: "
-        RenderBlock {math} at (92,0) size 10x38
-          RenderBlock {munderover} at (0,0) size 10x38
+layer at (0,0) size 800x264
+  RenderBlock {html} at (0,0) size 800x264
+    RenderBody {body} at (8,16) size 784x232
+      RenderBlock {p} at (0,0) size 784x39
+        RenderText {#text} at (0,9) size 92x18
+          text run at (0,9) width 92: "under & over: "
+        RenderBlock {math} at (92,0) size 10x39
+          RenderBlock {munderover} at (0,0) size 10x39
             RenderBlock {munderover} at (0,0) size 10x16
               RenderInline {mi} at (0,0) size 5x12
                 RenderText {#text} at (2,3) size 5x12
                   text run at (2,3) width 5: "y"
-            RenderBlock {munderover} at (0,11) size 10x17
+            RenderBlock {munderover} at (0,12) size 10x17
               RenderInline {mi} at (0,0) size 10x16
                 RenderText {#text} at (0,1) size 10x16
                   text run at (0,1) width 10: "B"
-            RenderBlock {munderover} at (0,22) size 10x16
+            RenderBlock {munderover} at (0,23) size 10x16
               RenderInline {mi} at (0,0) size 5x12
                 RenderText {#text} at (2,3) size 5x12
                   text run at (2,3) width 5: "x"
         RenderText {#text} at (0,0) size 0x0
-      RenderBlock {p} at (0,54) size 784x38
-        RenderText {#text} at (0,8) size 92x18
-          text run at (0,8) width 92: "under & over: "
-        RenderBlock {math} at (92,0) size 10x38
-          RenderBlock {munderover} at (0,0) size 10x38
+      RenderBlock {p} at (0,55) size 784x39
+        RenderText {#text} at (0,9) size 92x18
+          text run at (0,9) width 92: "under & over: "
+        RenderBlock {math} at (92,0) size 10x39
+          RenderBlock {munderover} at (0,0) size 10x39
             RenderBlock {munderover} at (0,0) size 10x16
               RenderInline {mi} at (0,0) size 5x12
                 RenderText {#text} at (2,3) size 5x12
                   text run at (2,3) width 5: "y"
-            RenderBlock {munderover} at (0,11) size 10x17
+            RenderBlock {munderover} at (0,12) size 10x17
               RenderInline {mi} at (0,0) size 10x16
                 RenderText {#text} at (0,1) size 10x16
                   text run at (0,1) width 10: "B"
-            RenderBlock {munderover} at (0,22) size 10x16
+            RenderBlock {munderover} at (0,23) size 10x16
               RenderInline {mi} at (0,0) size 7x12
                 RenderText {#text} at (1,3) size 7x12
                   text run at (1,3) width 7: "X"
         RenderText {#text} at (0,0) size 0x0
-      RenderBlock {p} at (0,108) size 784x52
-        RenderText {#text} at (0,15) size 92x18
-          text run at (0,15) width 92: "under & over: "
-        RenderBlock {math} at (92,0) size 19x52
-          RenderBlock {munderover} at (0,0) size 19x52
+      RenderBlock {p} at (0,110) size 784x53
+        RenderText {#text} at (0,16) size 92x18
+          text run at (0,16) width 92: "under & over: "
+        RenderBlock {math} at (92,0) size 19x53
+          RenderBlock {munderover} at (0,0) size 19x53
             RenderBlock {munderover} at (0,0) size 19x16
-              RenderBlock {mrow} at (1,2) size 17x13
+              RenderBlock {mrow} at (1,2) size 17x12
                 RenderInline {mi} at (0,0) size 5x12
                   RenderText {#text} at (0,1) size 5x12
                     text run at (0,1) width 5: "x"
                 RenderBlock {mo} at (5,1) size 7x12
-                  RenderText {#text} at (0,0) size 7x12
-                    text run at (0,0) width 7: "+"
+                  RenderBlock {mo} at (0,0) size 7x12
+                    RenderText {mo} at (0,0) size 7x12
+                      text run at (0,0) width 7: "+"
                 RenderInline {mi} at (0,0) size 5x12
                   RenderText {#text} at (12,1) size 5x12
                     text run at (12,1) width 5: "y"
-            RenderBlock {munderover} at (0,12) size 19x24
+            RenderBlock {munderover} at (0,13) size 19x24
               RenderBlock {mo} at (0,0) size 19x24
-                RenderText {#text} at (1,0) size 17x24
-                  text run at (1,0) width 17: "\x{2211}"
-            RenderBlock {munderover} at (0,36) size 19x16
-              RenderBlock {mrow} at (1,2) size 16x13
+                RenderBlock {mo} at (1,0) size 17x24
+                  RenderText {mo} at (0,0) size 17x24
+                    text run at (0,0) width 17: "\x{2211}"
+            RenderBlock {munderover} at (0,37) size 19x16
+              RenderBlock {mrow} at (1,2) size 16x12
                 RenderInline {mi} at (0,0) size 3x12
                   RenderText {#text} at (0,1) size 3x12
                     text run at (0,1) width 3: "i"
                 RenderBlock {mo} at (3,1) size 7x12
-                  RenderText {#text} at (0,0) size 7x12
-                    text run at (0,0) width 7: "="
+                  RenderBlock {mo} at (0,0) size 7x12
+                    RenderText {mo} at (0,0) size 7x12
+                      text run at (0,0) width 7: "="
                 RenderInline {mi} at (0,0) size 6x12
                   RenderText {#text} at (10,1) size 6x12
                     text run at (10,1) width 6: "0"
         RenderText {#text} at (0,0) size 0x0
-      RenderBlock {p} at (0,176) size 784x52
-        RenderText {#text} at (0,15) size 92x18
-          text run at (0,15) width 92: "under & over: "
-        RenderBlock {math} at (92,0) size 19x52
-          RenderBlock {munderover} at (0,0) size 19x52
+      RenderBlock {p} at (0,179) size 784x53
+        RenderText {#text} at (0,16) size 92x18
+          text run at (0,16) width 92: "under & over: "
+        RenderBlock {math} at (92,0) size 19x53
+          RenderBlock {munderover} at (0,0) size 19x53
             RenderBlock {munderover} at (0,0) size 19x16
-              RenderBlock {mrow} at (0,2) size 19x13
+              RenderBlock {mrow} at (0,2) size 19x12
                 RenderInline {mi} at (0,0) size 7x12
                   RenderText {#text} at (0,1) size 7x12
                     text run at (0,1) width 7: "X"
                 RenderBlock {mo} at (7,1) size 7x12
-                  RenderText {#text} at (0,0) size 7x12
-                    text run at (0,0) width 7: "+"
+                  RenderBlock {mo} at (0,0) size 7x12
+                    RenderText {mo} at (0,0) size 7x12
+                      text run at (0,0) width 7: "+"
                 RenderInline {mi} at (0,0) size 5x12
                   RenderText {#text} at (14,1) size 5x12
                     text run at (14,1) width 5: "y"
-            RenderBlock {munderover} at (0,12) size 19x24
+            RenderBlock {munderover} at (0,13) size 19x24
               RenderBlock {mo} at (0,0) size 19x24
-                RenderText {#text} at (1,0) size 17x24
-                  text run at (1,0) width 17: "\x{2211}"
-            RenderBlock {munderover} at (0,36) size 19x16
-              RenderBlock {mrow} at (1,2) size 17x13
+                RenderBlock {mo} at (1,0) size 17x24
+                  RenderText {mo} at (0,0) size 17x24
+                    text run at (0,0) width 17: "\x{2211}"
+            RenderBlock {munderover} at (0,37) size 19x16
+              RenderBlock {mrow} at (1,2) size 17x12
                 RenderInline {mi} at (0,0) size 4x12
                   RenderText {#text} at (0,1) size 4x12
                     text run at (0,1) width 4: "I"
                 RenderBlock {mo} at (4,1) size 7x12
-                  RenderText {#text} at (0,0) size 7x12
-                    text run at (0,0) width 7: "="
+                  RenderBlock {mo} at (0,0) size 7x12
+                    RenderText {mo} at (0,0) size 7x12
+                      text run at (0,0) width 7: "="
                 RenderInline {mi} at (0,0) size 6x12
                   RenderText {#text} at (11,1) size 6x12
                     text run at (11,1) width 6: "0"
diff --git a/WebCore/ChangeLog b/WebCore/ChangeLog
index 35a9200..222fec4 100644
--- a/WebCore/ChangeLog
+++ b/WebCore/ChangeLog
@@ -1,3 +1,25 @@
+2010-03-05  Alex Milowski  <alex at milowski.com>
+
+        Reviewed by Kenneth Rohde Christiansen.
+
+        Added support for row layout with stretchy operators and
+        adjusted the over spacing for over and underover accordingly.
+
+        Tests: mathml/presentation/mo.xhtml
+               mathml/presentation/row.xhtml
+
+        * WebCore.xcodeproj/project.pbxproj:
+        * mathml/MathMLInlineContainerElement.cpp:
+        * mathml/MathMLTextElement.cpp:
+        * mathml/RenderMathMLMath.cpp: Added.
+        * mathml/RenderMathMLMath.h: Added.
+        * mathml/RenderMathMLOperator.cpp: Added.
+        * mathml/RenderMathMLOperator.h: Added.
+        * mathml/RenderMathMLRow.cpp: Added.
+        * mathml/RenderMathMLRow.h: Added.
+        * mathml/RenderMathMLUnderOver.cpp:
+        * mathml/mathtags.in:
+
 2010-03-05  Dean Jackson  <dino at apple.com>
 
         Reviewed by Simon Fraser.
diff --git a/WebCore/WebCore.xcodeproj/project.pbxproj b/WebCore/WebCore.xcodeproj/project.pbxproj
index f47d580..c46545f 100644
--- a/WebCore/WebCore.xcodeproj/project.pbxproj
+++ b/WebCore/WebCore.xcodeproj/project.pbxproj
@@ -4861,6 +4861,12 @@
 		F916C48D0DB510F80076CD83 /* JSXMLHttpRequestProgressEvent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F916C48B0DB510F80076CD83 /* JSXMLHttpRequestProgressEvent.cpp */; };
 		F916C48E0DB510F80076CD83 /* JSXMLHttpRequestProgressEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = F916C48C0DB510F80076CD83 /* JSXMLHttpRequestProgressEvent.h */; };
 		F9F0ED7A0DB50CA200D16DB9 /* XMLHttpRequestProgressEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = F9F0ED770DB50CA200D16DB9 /* XMLHttpRequestProgressEvent.h */; };
+		FA0B1F8611125CEE007F9839 /* RenderMathMLMath.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B1F8211125CEE007F9839 /* RenderMathMLMath.cpp */; };
+		FA0B1F8711125CEE007F9839 /* RenderMathMLMath.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B1F8311125CEE007F9839 /* RenderMathMLMath.h */; };
+		FA0B1F8811125CEE007F9839 /* RenderMathMLRow.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B1F8411125CEE007F9839 /* RenderMathMLRow.cpp */; };
+		FA0B1F8911125CEE007F9839 /* RenderMathMLRow.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B1F8511125CEE007F9839 /* RenderMathMLRow.h */; };
+		FA5FAE4211126A5D00D3750F /* RenderMathMLOperator.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA5FAE4011126A5D00D3750F /* RenderMathMLOperator.cpp */; };
+		FA5FAE4311126A5D00D3750F /* RenderMathMLOperator.h in Headers */ = {isa = PBXBuildFile; fileRef = FA5FAE4111126A5D00D3750F /* RenderMathMLOperator.h */; };
 		FA654A641108ABB7002615E0 /* mathml.css in Resources */ = {isa = PBXBuildFile; fileRef = FA654A631108ABB7002615E0 /* mathml.css */; };
 		FA654A681108ABE2002615E0 /* mathattrs.in in Resources */ = {isa = PBXBuildFile; fileRef = FA654A671108ABE2002615E0 /* mathattrs.in */; };
 		FA654A6B1108ABED002615E0 /* MathMLTextElement.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA654A691108ABED002615E0 /* MathMLTextElement.cpp */; };
@@ -10209,6 +10215,12 @@
 		F916C48C0DB510F80076CD83 /* JSXMLHttpRequestProgressEvent.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = JSXMLHttpRequestProgressEvent.h; sourceTree = "<group>"; };
 		F9F0ED770DB50CA200D16DB9 /* XMLHttpRequestProgressEvent.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = XMLHttpRequestProgressEvent.h; sourceTree = "<group>"; };
 		F9F0ED780DB50CA200D16DB9 /* XMLHttpRequestProgressEvent.idl */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = XMLHttpRequestProgressEvent.idl; sourceTree = "<group>"; };
+		FA0B1F8211125CEE007F9839 /* RenderMathMLMath.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RenderMathMLMath.cpp; sourceTree = "<group>"; };
+		FA0B1F8311125CEE007F9839 /* RenderMathMLMath.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RenderMathMLMath.h; sourceTree = "<group>"; };
+		FA0B1F8411125CEE007F9839 /* RenderMathMLRow.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RenderMathMLRow.cpp; sourceTree = "<group>"; };
+		FA0B1F8511125CEE007F9839 /* RenderMathMLRow.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RenderMathMLRow.h; sourceTree = "<group>"; };
+		FA5FAE4011126A5D00D3750F /* RenderMathMLOperator.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RenderMathMLOperator.cpp; sourceTree = "<group>"; };
+		FA5FAE4111126A5D00D3750F /* RenderMathMLOperator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RenderMathMLOperator.h; sourceTree = "<group>"; };
 		FA654A631108ABB7002615E0 /* mathml.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = mathml.css; sourceTree = "<group>"; };
 		FA654A671108ABE2002615E0 /* mathattrs.in */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = mathattrs.in; sourceTree = "<group>"; };
 		FA654A691108ABED002615E0 /* MathMLTextElement.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MathMLTextElement.cpp; sourceTree = "<group>"; };
@@ -16131,6 +16143,12 @@
 				FABE72F31059C1EB00D999DD /* mathtags.in */,
 				FA654A6D1108ABFF002615E0 /* RenderMathMLBlock.cpp */,
 				FA654A6E1108ABFF002615E0 /* RenderMathMLBlock.h */,
+				FA0B1F8211125CEE007F9839 /* RenderMathMLMath.cpp */,
+				FA0B1F8311125CEE007F9839 /* RenderMathMLMath.h */,
+				FA5FAE4011126A5D00D3750F /* RenderMathMLOperator.cpp */,
+				FA5FAE4111126A5D00D3750F /* RenderMathMLOperator.h */,
+				FA0B1F8411125CEE007F9839 /* RenderMathMLRow.cpp */,
+				FA0B1F8511125CEE007F9839 /* RenderMathMLRow.h */,
 				FAC12CC21120DA6900DACC36 /* RenderMathMLSubSup.cpp */,
 				FAC12CC31120DA6900DACC36 /* RenderMathMLSubSup.h */,
 				FA7EFB031120D25400CF79C7 /* RenderMathMLUnderOver.cpp */,
@@ -18605,6 +18623,9 @@
 				B71FE6DF11091CB300DAEF77 /* PrintContext.h in Headers */,
 				9F72304F11184B4100AD0126 /* ScriptProfile.h in Headers */,
 				9F72305111184B4100AD0126 /* ScriptProfiler.h in Headers */,
+				FA0B1F8711125CEE007F9839 /* RenderMathMLMath.h in Headers */,
+				FA0B1F8911125CEE007F9839 /* RenderMathMLRow.h in Headers */,
+				FA5FAE4311126A5D00D3750F /* RenderMathMLOperator.h in Headers */,
 				FAC12CC51120DA6900DACC36 /* RenderMathMLSubSup.h in Headers */,
 				FA7EFB061120D25400CF79C7 /* RenderMathMLUnderOver.h in Headers */,
 				BCE789161120D6080060ECE5 /* InlineIterator.h in Headers */,
@@ -20802,6 +20823,9 @@
 				84D0C4041115F1D40018AA34 /* AffineTransform.cpp in Sources */,
 				B776D43D1104527500BEB0EC /* PrintContext.cpp in Sources */,
 				9F72305011184B4100AD0126 /* ScriptProfiler.cpp in Sources */,
+				FA0B1F8611125CEE007F9839 /* RenderMathMLMath.cpp in Sources */,
+				FA0B1F8811125CEE007F9839 /* RenderMathMLRow.cpp in Sources */,
+				FA5FAE4211126A5D00D3750F /* RenderMathMLOperator.cpp in Sources */,
 				FAC12CC41120DA6900DACC36 /* RenderMathMLSubSup.cpp in Sources */,
 				FA7EFB051120D25400CF79C7 /* RenderMathMLUnderOver.cpp in Sources */,
 				BCE7898B1120E8020060ECE5 /* BidiRun.cpp in Sources */,
diff --git a/WebCore/mathml/MathMLInlineContainerElement.cpp b/WebCore/mathml/MathMLInlineContainerElement.cpp
index a1e384f..1cf89d5 100644
--- a/WebCore/mathml/MathMLInlineContainerElement.cpp
+++ b/WebCore/mathml/MathMLInlineContainerElement.cpp
@@ -31,6 +31,8 @@
 
 #include "MathMLNames.h"
 #include "RenderMathMLBlock.h"
+#include "RenderMathMLMath.h"
+#include "RenderMathMLRow.h"
 #include "RenderMathMLSubSup.h"
 #include "RenderMathMLUnderOver.h"
 
@@ -51,7 +53,11 @@ PassRefPtr<MathMLInlineContainerElement> MathMLInlineContainerElement::create(co
 RenderObject* MathMLInlineContainerElement::createRenderer(RenderArena *arena, RenderStyle* style)
 {
     RenderObject* object = 0;
-    if (hasLocalName(MathMLNames::msubTag))
+    if (hasLocalName(MathMLNames::mrowTag))
+        object = new (arena) RenderMathMLRow(this);
+    else if (hasLocalName(MathMLNames::mathTag))
+        object = new (arena) RenderMathMLMath(this);
+    else if (hasLocalName(MathMLNames::msubTag))
         object = new (arena) RenderMathMLSubSup(this);
     else if (hasLocalName(MathMLNames::msupTag))
         object = new (arena) RenderMathMLSubSup(this);
diff --git a/WebCore/mathml/MathMLTextElement.cpp b/WebCore/mathml/MathMLTextElement.cpp
index 11d46c4..6f6bcbc 100644
--- a/WebCore/mathml/MathMLTextElement.cpp
+++ b/WebCore/mathml/MathMLTextElement.cpp
@@ -30,7 +30,7 @@
 #include "MathMLTextElement.h"
 
 #include "MathMLNames.h"
-#include "RenderObject.h"
+#include "RenderMathMLOperator.h"
 
 namespace WebCore {
     
@@ -46,8 +46,14 @@ PassRefPtr<MathMLTextElement> MathMLTextElement::create(const QualifiedName& tag
     return new MathMLTextElement(tagName, document);
 }
 
-RenderObject* MathMLTextElement::createRenderer(RenderArena* , RenderStyle* style)
+RenderObject* MathMLTextElement::createRenderer(RenderArena* arena, RenderStyle* style)
 {
+    if (hasLocalName(MathMLNames::moTag)) {
+        RenderObject* object = new (arena) RenderMathMLOperator(this);
+        object->setStyle(style);
+        return object;
+    }
+
     return RenderObject::createObject(this, style);
 }
 
diff --git a/WebCore/mathml/RenderMathMLMath.cpp b/WebCore/mathml/RenderMathMLMath.cpp
new file mode 100644
index 0000000..2b65f69
--- /dev/null
+++ b/WebCore/mathml/RenderMathMLMath.cpp
@@ -0,0 +1,46 @@
+/*
+ * Copyright (C) 2010 Alex Milowski (alex at milowski.com). All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "config.h"
+
+#if ENABLE(MATHML)
+
+#include "RenderMathMLMath.h"
+
+#include "MathMLNames.h"
+
+namespace WebCore {
+
+using namespace MathMLNames;
+
+RenderMathMLMath::RenderMathMLMath(Node* math)
+    : RenderMathMLRow(math)
+{
+}
+
+}
+
+#endif // ENABLE(MATHML)
+
diff --git a/WebCore/mathml/RenderMathMLMath.h b/WebCore/mathml/RenderMathMLMath.h
new file mode 100644
index 0000000..26f2093
--- /dev/null
+++ b/WebCore/mathml/RenderMathMLMath.h
@@ -0,0 +1,45 @@
+/*
+ * Copyright (C) 2010 Alex Milowski (alex at milowski.com). All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef RenderMathMLMath_h
+#define RenderMathMLMath_h
+
+#if ENABLE(MATHML)
+
+#include "RenderMathMLRow.h"
+
+namespace WebCore {
+    
+class RenderMathMLMath : public RenderMathMLRow {
+public:
+    RenderMathMLMath(Node* container);
+    virtual bool isRenderMathMLMath() const { return true; }
+};
+    
+}
+
+
+#endif // ENABLE(MATHML)
+#endif // RenderMathMLMath_h
diff --git a/WebCore/mathml/RenderMathMLOperator.cpp b/WebCore/mathml/RenderMathMLOperator.cpp
new file mode 100644
index 0000000..da9e8ec
--- /dev/null
+++ b/WebCore/mathml/RenderMathMLOperator.cpp
@@ -0,0 +1,328 @@
+/*
+ * Copyright (C) 2010 Alex Milowski (alex at milowski.com). All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "config.h"
+
+#if ENABLE(MATHML)
+
+#include "RenderMathMLOperator.h"
+
+#include "FontSelector.h"
+#include "MathMLNames.h"
+#include "RenderText.h"
+
+namespace WebCore {
+    
+using namespace MathMLNames;
+
+RenderMathMLOperator::RenderMathMLOperator(Node* container)
+    : RenderMathMLBlock(container),
+      m_stretchHeight(0),
+      m_operator(0)
+{
+}
+    
+RenderMathMLOperator::RenderMathMLOperator(Node* container, UChar operatorChar)
+    : RenderMathMLBlock(container),
+      m_stretchHeight(0),
+      m_operator(operatorChar)
+{
+}
+    
+bool RenderMathMLOperator::isChildAllowed(RenderObject*, RenderStyle*) const
+{
+    return false;
+}
+
+void  RenderMathMLOperator::stretchToHeight(int height)
+{
+    if (height == m_stretchHeight)
+        return;
+    m_stretchHeight = height;
+    
+    updateBoxModelInfoFromStyle();
+    setNeedsLayoutAndPrefWidthsRecalc();
+    markContainingBlocksForLayout();
+}
+
+void RenderMathMLOperator::layout() 
+{
+    // FIXME: This probably shouldn't be called here but when the operator
+    // isn't stretched (e.g. outside of a mrow), it needs to be called somehow
+    updateFromElement();
+    RenderBlock::layout();
+}
+
+// This is a table of stretchy characters.
+// FIXME: Should this be read from the unicode characteristics somehow?
+// table:  stretchy operator, top char, extension char, bottom char, middle char
+static struct StretchyCharacter {
+    UChar character;
+    UChar topGlyph;
+    UChar extensionGlyph;
+    UChar bottomGlyph;
+    UChar middleGlyph;
+} stretchyCharacters[9] = {
+{ 0x28  , 0x239b, 0x239c, 0x239d, 0x0    }, // left parenthesis
+{ 0x29  , 0x239e, 0x239f, 0x23a0, 0x0    }, // right parenthesis
+{ 0x5b  , 0x23a1, 0x23a2, 0x23a3, 0x0    }, // left square bracket
+{ 0x5d  , 0x23a4, 0x23a5, 0x23a6, 0x0    }, // right square bracket
+{ 0x7b  , 0x23a7, 0x23aa, 0x23a9, 0x23a8 }, // left curly bracket
+{ 0x7c  , 0x23d0, 0x23d0, 0x23d0, 0x0    }, // vertical bar
+{ 0x7d  , 0x23ab, 0x23aa, 0x23ad, 0x23ac }, // right curly bracket
+{ 0x222b, 0x2320, 0x23ae, 0x2321, 0x0    } // integral sign
+};
+
+// We stack glyphs using a 14px height with a displayed glyph height
+// of 10px.  The line height is set to less than the 14px so that there
+// are no blank spaces between the stacked glyphs.
+//
+// Certain glyphs (e.g. middle and bottom) need to be adjusted upwards
+// in the stack so that there isn't a gap.
+//
+// All of these settings are represented in the constants below.
+
+static const int gGlyphFontSize = 14;
+static const int gGlyphLineHeight = 12;
+static const int gMinimumStretchHeight = 24;
+static const int gGlyphHeight = 10;
+static const int gMiddleGlyphTopAdjust = -2;
+static const int gBottomGlyphTopAdjust = -4;
+
+void RenderMathMLOperator::updateFromElement()
+{
+    // clear our children
+    while (firstChild()) {
+       RenderObject* obj = firstChild();
+       removeChild(obj);
+    }
+    
+    // If the operator is fixed, it will be contained in m_operator
+    UChar firstChar = m_operator;
+    
+    // This boolean indicates whether stretching is disabled via the markup.
+    bool stretchDisabled = false;
+    
+    // We made need the element later if we can't stretch.
+    if (node()->nodeType() == Node::ELEMENT_NODE) {
+        if (Element* mo = static_cast<Element*>(node())) {
+            AtomicString stretchyAttr = mo->getAttribute(MathMLNames::stretchyAttr);
+            stretchDisabled = equalIgnoringCase(stretchyAttr, "false");
+            
+            // If stretching isn't disabled, get the character from the text content.
+            if (!stretchDisabled && !firstChar) {
+                String opText = mo->textContent();
+                for (unsigned int i = 0; !firstChar && i < opText.length(); i++) {
+                    if (!isSpaceOrNewline(opText[i]))
+                       firstChar = opText[i];
+                }
+            }
+        }
+    }
+    
+    // The 'index' holds the stretchable character's glyph information
+    int index = -1;
+    
+    // isStretchy indicates whether the character is streatchable via a number of factors.
+    bool isStretchy = false;
+    
+    // Check for a stretchable character.
+    if (!stretchDisabled && firstChar) {
+        const int maxIndex = sizeof(stretchyCharacters) / sizeof(stretchyCharacters[0]);
+        for (index++; index < maxIndex; index++) {
+            if (stretchyCharacters[index].character == firstChar) {
+                isStretchy = true;
+                break;
+            }
+        }
+    }
+    
+    // We only stretch character if the stretch height is larger than a minimum size (e.g. 24px).
+    bool shouldStretch = isStretchy && m_stretchHeight>gMinimumStretchHeight;
+    
+    // Either stretch is disabled or we don't have a stretchable character over the minimum height
+    if (stretchDisabled || !shouldStretch) {
+        m_isStacked = false;
+        RenderBlock* container = new (renderArena()) RenderBlock(node());
+        
+        RefPtr<RenderStyle> newStyle = RenderStyle::create();
+        newStyle->inheritFrom(style());
+        newStyle->setDisplay(BLOCK);
+
+        // Check for a stretchable character that is under the minimum height and use the
+        // font size to adjust the glyph size.
+        int currentFontSize = style()->fontSize();
+        if (!stretchDisabled && isStretchy && m_stretchHeight > 0 && m_stretchHeight <= gMinimumStretchHeight  && m_stretchHeight > currentFontSize) {
+            FontDescription* desc = new FontDescription();
+            desc->setIsAbsoluteSize(true);
+            desc->setSpecifiedSize(m_stretchHeight);
+            desc->setComputedSize(m_stretchHeight);
+            newStyle->setFontDescription(*desc);
+            newStyle->font().update(newStyle->font().fontSelector());
+        }
+        
+        newStyle->setVerticalAlign(BASELINE);
+        container->setStyle(newStyle.release());
+        addChild(container);
+     
+        // Build the text of the operator.  
+        RenderText* text = 0;
+        if (m_operator) 
+            text = new (renderArena()) RenderText(node(), StringImpl::create(&m_operator, 1));
+        else if (node()->nodeType() == Node::ELEMENT_NODE)
+            if (Element* mo = static_cast<Element*>(node()))
+                text = new (renderArena()) RenderText(node(), StringImpl::create(mo->textContent()));
+        // If we can't figure out the text, leave it blank.
+        if (text) {
+            text->setStyle(container->style());
+            container->addChild(text);
+        }
+    } else {
+        // Build stretchable characters as a stack of glyphs.
+        m_isStacked = true;
+        
+        if (stretchyCharacters[index].middleGlyph) {
+            // We have a middle glyph (e.g. a curly bracket) that requires special processing.
+            int half = (m_stretchHeight - gGlyphHeight) / 2;
+            if (half <= gGlyphHeight) {
+                // We only have enough space for a single middle glyph.
+                createGlyph(stretchyCharacters[index].topGlyph, half);
+                createGlyph(stretchyCharacters[index].middleGlyph, gGlyphHeight, gMiddleGlyphTopAdjust);
+                createGlyph(stretchyCharacters[index].bottomGlyph, 0, gBottomGlyphTopAdjust);
+            } else {
+                // We have to extend both the top and bottom to the middle.
+                createGlyph(stretchyCharacters[index].topGlyph, gGlyphHeight);
+                int remaining = half - gGlyphHeight;
+                while (remaining > 0) {
+                    if (remaining < gGlyphHeight) {
+                        createGlyph(stretchyCharacters[index].extensionGlyph, remaining);
+                        remaining = 0;
+                    } else {
+                        createGlyph(stretchyCharacters[index].extensionGlyph, gGlyphHeight);
+                        remaining -= gGlyphHeight;
+                    }
+                }
+                
+                // The middle glyph in the stack.
+                createGlyph(stretchyCharacters[index].middleGlyph, gGlyphHeight, gMiddleGlyphTopAdjust);
+                
+                // The remaining is the top half minus the middle glyph height.
+                remaining = half - gGlyphHeight;
+                // We need to make sure we have the full height in case the height is odd.
+                if (m_stretchHeight % 2 == 1)
+                    remaining++;
+                
+                // Extend to the bottom glyph.
+                while (remaining > 0) {
+                    if (remaining < gGlyphHeight) {
+                        createGlyph(stretchyCharacters[index].extensionGlyph, remaining);
+                        remaining = 0;
+                    } else {
+                        createGlyph(stretchyCharacters[index].extensionGlyph, gGlyphHeight);
+                        remaining -= gGlyphHeight;
+                    }
+                }
+                
+                // The bottom glyph in the stack.
+                createGlyph(stretchyCharacters[index].bottomGlyph, 0, gBottomGlyphTopAdjust);
+            }
+        } else {
+            // We do not have a middle glyph and so we just extend from the top to the bottom glyph.
+            int remaining = m_stretchHeight - 2 * gGlyphHeight;
+            createGlyph(stretchyCharacters[index].topGlyph, gGlyphHeight);
+            while (remaining > 0) {
+                if (remaining < gGlyphHeight) {
+                    createGlyph(stretchyCharacters[index].extensionGlyph, remaining);
+                    remaining = 0;
+                } else {
+                    createGlyph(stretchyCharacters[index].extensionGlyph, gGlyphHeight);
+                    remaining -= gGlyphHeight;
+                }
+            }
+            createGlyph(stretchyCharacters[index].bottomGlyph, 0, gBottomGlyphTopAdjust);
+        }
+    }
+}
+
+RefPtr<RenderStyle> RenderMathMLOperator::createStackableStyle(int size, int topRelative)
+{
+    RefPtr<RenderStyle> newStyle = RenderStyle::create();
+    newStyle->inheritFrom(style());
+    newStyle->setDisplay(BLOCK);
+
+    FontDescription* desc = new FontDescription();
+    desc->setIsAbsoluteSize(true);
+    desc->setSpecifiedSize(gGlyphFontSize);
+    desc->setComputedSize(gGlyphFontSize);
+    newStyle->setFontDescription(*desc);
+    newStyle->font().update(newStyle->font().fontSelector());
+    newStyle->setLineHeight(Length(gGlyphLineHeight, Fixed));
+    newStyle->setVerticalAlign(TOP);
+    
+    if (size > 0)
+        newStyle->setMaxHeight(Length(size, Fixed));
+        
+    newStyle->setOverflowY(OHIDDEN);
+    newStyle->setOverflowX(OHIDDEN);
+    if (topRelative) {
+        newStyle->setTop(Length(topRelative, Fixed));
+        newStyle->setPosition(RelativePosition);
+    }
+    
+    return newStyle;
+}
+
+RenderBlock* RenderMathMLOperator::createGlyph(UChar glyph, int size, int charRelative, int topRelative)
+{
+    RenderBlock* container = new (renderArena()) RenderBlock(node());
+    container->setStyle(createStackableStyle(size, topRelative).release());
+    addChild(container);
+    RenderBlock* parent = container;
+    if (charRelative) {
+        RenderBlock* charBlock = new (renderArena()) RenderBlock(node());
+        RefPtr<RenderStyle> charStyle = RenderStyle::create();
+        charStyle->inheritFrom(container->style());
+        charStyle->setDisplay(INLINE_BLOCK);
+        charStyle->setTop(Length(charRelative, Fixed));
+        charStyle->setPosition(RelativePosition);
+        charBlock->setStyle(charStyle);
+        parent->addChild(charBlock);
+        parent = charBlock;
+    }
+     
+    RenderText* text = new (renderArena()) RenderText(node(), StringImpl::create(&glyph, 1));
+    text->setStyle(container->style());
+    parent->addChild(text);
+    return container;
+}
+
+int RenderMathMLOperator::baselinePosition(bool firstLine, bool isRootLineBox) const
+{
+    return !m_isStacked && firstChild() ? firstChild()->baselinePosition(firstLine, isRootLineBox) : offsetHeight();
+}
+
+}
+
+#endif
diff --git a/WebCore/mathml/RenderMathMLOperator.h b/WebCore/mathml/RenderMathMLOperator.h
new file mode 100644
index 0000000..6566dd7
--- /dev/null
+++ b/WebCore/mathml/RenderMathMLOperator.h
@@ -0,0 +1,72 @@
+/*
+ * Copyright (C) 2010 Alex Milowski (alex at milowski.com). All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef RenderMathMLOperator_h
+#define RenderMathMLOperator_h
+
+#if ENABLE(MATHML)
+
+#include "RenderMathMLBlock.h"
+
+namespace WebCore {
+    
+class RenderMathMLOperator : public RenderMathMLBlock {
+public:
+    RenderMathMLOperator(Node* container);
+    RenderMathMLOperator(Node* container, UChar operatorChar);
+    virtual bool isRenderMathMLOperator() const { return true; }
+    virtual void stretchToHeight(int pixelHeight);
+    virtual void updateFromElement(); 
+    virtual bool isChildAllowed(RenderObject*, RenderStyle*) const;
+    virtual int baselinePosition(bool , bool) const;    
+    
+protected:
+    virtual void layout();
+    virtual RefPtr<RenderStyle> createStackableStyle(int size, int topRelative);
+    virtual RenderBlock* createGlyph(UChar glyph, int size = 0, int charRelative = 0, int topRelative = 0);
+    
+private:
+    int m_stretchHeight;
+    bool m_isStacked;
+    UChar m_operator;
+};
+
+inline RenderMathMLOperator* toRenderMathMLOperator(RenderMathMLBlock* block)
+{ 
+    ASSERT(!block || block->isRenderMathMLOperator());
+    return static_cast<RenderMathMLOperator*>(block);
+}
+
+inline const RenderMathMLOperator* toRenderMathMLOperator(const RenderMathMLBlock* block)
+{ 
+    ASSERT(!block || block->isRenderMathMLOperator());
+    return static_cast<const RenderMathMLOperator*>(block);
+}
+    
+}
+
+
+#endif // ENABLE(MATHML)
+#endif // RenderMathMLOperator_h
diff --git a/WebCore/mathml/RenderMathMLRow.cpp b/WebCore/mathml/RenderMathMLRow.cpp
new file mode 100644
index 0000000..1bb656f
--- /dev/null
+++ b/WebCore/mathml/RenderMathMLRow.cpp
@@ -0,0 +1,157 @@
+/*
+ * Copyright (C) 2010 Alex Milowski (alex at milowski.com). All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "config.h"
+
+#if ENABLE(MATHML)
+
+#include "RenderMathMLRow.h"
+
+#include "MathMLNames.h"
+#include "RenderMathMLOperator.h"
+
+namespace WebCore {
+
+using namespace MathMLNames;
+
+RenderMathMLRow::RenderMathMLRow(Node* row)
+    : RenderMathMLBlock(row)
+{
+}
+
+int RenderMathMLRow::nonOperatorHeight() const
+{
+    int maxHeight = 0;
+    for (RenderObject* current = firstChild(); current; current = current->nextSibling()) {
+        if (current->isRenderMathMLBlock()) {
+            RenderMathMLBlock* block = toRenderMathMLBlock(current);
+            int blockHeight = block->nonOperatorHeight();
+            // Check to see if this box has a larger height
+            if (blockHeight > maxHeight)
+                maxHeight = blockHeight;
+        } else if (current->isBoxModelObject()) {
+            RenderBoxModelObject* box = toRenderBoxModelObject(current);
+            // Check to see if this box has a larger height
+            if (box->offsetHeight() > maxHeight)
+                maxHeight = box->offsetHeight();
+        }
+        
+    }
+    return maxHeight;
+}
+
+void RenderMathMLRow::layout() 
+{
+    RenderBlock::layout();
+    
+    // Calculate the maximum height of the row without the operators.
+    int maxHeight = nonOperatorHeight();
+    
+    // Set the maximum height of the row for intermediate layouts.
+    style()->setHeight(Length(maxHeight, Fixed));
+
+    // Notify contained operators they may need to re-layout their stretched operators.
+    // We need to keep track of the number of children and operators because a row of
+    // operators needs some special handling.
+    int childCount = 0;
+    int operatorCount = 0;
+    for (RenderObject* current = firstChild(); current; current = current->nextSibling()) {
+        childCount++;
+        if (current->isRenderMathMLBlock()) {
+            RenderMathMLBlock* block = toRenderMathMLBlock(current);
+            block->stretchToHeight(maxHeight);
+            if (block->isRenderMathMLOperator()) 
+                operatorCount++;
+        }
+    }
+    
+    // Layout the non-operators which have just been stretched.
+    setNeedsLayoutAndPrefWidthsRecalc();
+    markContainingBlocksForLayout();
+    RenderBlock::layout();
+
+    // Make a second pass with the real height of the operators.
+    int operatorHeight = 0;
+    for (RenderObject* current = firstChild(); current; current = current->nextSibling()) {
+        if (current->isRenderMathMLBlock()) {
+            RenderMathMLBlock* block = toRenderMathMLBlock(current);
+            if (!block->hasBase() && !block->isRenderMathMLOperator()) {
+                // Check to see if this box has a larger height.
+                if (block->offsetHeight() > maxHeight)
+                    maxHeight = block->offsetHeight();
+            }
+            if (block->isRenderMathMLOperator())
+                if (block->offsetHeight() > operatorHeight)
+                    operatorHeight = block->offsetHeight();
+        } else if (current->isBoxModelObject()) {
+            RenderBoxModelObject* box = toRenderBoxModelObject(current);
+            // Check to see if this box has a larger height.
+            if (box->offsetHeight() > maxHeight)
+                maxHeight = box->offsetHeight();
+        }
+    }
+    
+    if (childCount > 0 && childCount == operatorCount) {
+        // We have only operators and so set the max height to the operator height.
+        maxHeight = operatorHeight;
+    }
+    
+    int stretchHeight = maxHeight;
+    
+    // Stretch the operators again and re-calculate the row height.
+    for (RenderObject* current = firstChild(); current; current = current->nextSibling()) {
+        if (current->isRenderMathMLBlock()) {
+            RenderMathMLBlock* block = toRenderMathMLBlock(current);
+            if (block->isRenderMathMLOperator()) {
+                RenderMathMLOperator* mathop = toRenderMathMLOperator(block);
+                mathop->stretchToHeight(stretchHeight);
+            } else {
+                block->stretchToHeight(stretchHeight);
+                RenderBoxModelObject* box = toRenderBoxModelObject(current);
+                // Check to see if this box has a larger height
+                if (box->offsetHeight() > maxHeight)
+                    maxHeight = box->offsetHeight();
+            }
+        } else if (current->isBoxModelObject()) {
+            RenderBoxModelObject* box = toRenderBoxModelObject(current);
+            // Check to see if this box has a larger height
+            if (box->offsetHeight() > maxHeight)
+                maxHeight = box->offsetHeight();
+        }
+    }
+
+    // Set the maximum height of the row based on the calculations.
+    style()->setHeight(Length(maxHeight, Fixed));
+    
+    // Do the final layout by calling our parent's layout again.
+    setNeedsLayoutAndPrefWidthsRecalc();
+    markContainingBlocksForLayout();
+    RenderBlock::layout();
+}
+
+}
+
+#endif // ENABLE(MATHML)
+
diff --git a/WebCore/mathml/RenderMathMLRow.h b/WebCore/mathml/RenderMathMLRow.h
new file mode 100644
index 0000000..a88b212
--- /dev/null
+++ b/WebCore/mathml/RenderMathMLRow.h
@@ -0,0 +1,48 @@
+/*
+ * Copyright (C) 2010 Alex Milowski (alex at milowski.com). All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef RenderMathMLRow_h
+#define RenderMathMLRow_h
+
+#if ENABLE(MATHML)
+
+#include "RenderMathMLBlock.h"
+
+namespace WebCore {
+    
+class RenderMathMLRow : public RenderMathMLBlock {
+public:
+    RenderMathMLRow(Node* container);
+    virtual bool isRenderMathMLRow() const { return true; }
+    virtual int nonOperatorHeight() const;
+protected:
+    virtual void layout();
+};
+    
+}
+
+
+#endif // ENABLE(MATHML)
+#endif // RenderMathMLRow_h
diff --git a/WebCore/mathml/RenderMathMLUnderOver.cpp b/WebCore/mathml/RenderMathMLUnderOver.cpp
index 4992a08..514b872 100644
--- a/WebCore/mathml/RenderMathMLUnderOver.cpp
+++ b/WebCore/mathml/RenderMathMLUnderOver.cpp
@@ -36,12 +36,7 @@ namespace WebCore {
 
 using namespace MathMLNames;
     
-/*
-static const double gUnderNormalAdjust = -0.4;
-static const double gFontAdjust = 0.75;
-*/
-
-static const double gOverSpacingAdjustment = 0.667;
+static const double gOverSpacingAdjustment = 0.5;
     
 RenderMathMLUnderOver::RenderMathMLUnderOver(Node* expression) 
     : RenderMathMLBlock(expression) 
diff --git a/WebCore/mathml/mathtags.in b/WebCore/mathml/mathtags.in
index c853fca..36333a8 100644
--- a/WebCore/mathml/mathtags.in
+++ b/WebCore/mathml/mathtags.in
@@ -12,9 +12,10 @@ munder interfaceName=MathMLInlineContainerElement
 munderover interfaceName=MathMLInlineContainerElement
 msqrt interfaceName=MathMLInlineContainerElement
 mroot interfaceName=MathMLInlineContainerElement
-mi interfaceName=MathMLElement, createWithNew
-mn interfaceName=MathMLElement, createWithNew
-mo interfaceName=MathMLElement, createWithNew
+mi interfaceName=MathMLTextElement
+mn interfaceName=MathMLTextElement
+mo interfaceName=MathMLTextElement
+mtext interfaceName=MathMLTextElement
 msub interfaceName=MathMLElement, createWithNew
 msup interfaceName=MathMLElement, createWithNew
 

-- 
WebKit Debian packaging



More information about the Pkg-webkit-commits mailing list