MathML internals - factor code for almost anonymous blocks
authorcommit-queue@webkit.org <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 16 Mar 2012 23:12:37 +0000 (23:12 +0000)
committercommit-queue@webkit.org <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 16 Mar 2012 23:12:37 +0000 (23:12 +0000)
https://bugs.webkit.org/show_bug.cgi?id=81387

Patch by David Barton <dbarton@mathscribe.com> on 2012-03-16
Reviewed by Eric Seidel.

Source/WebCore:

MathML uses "almost anonymous" blocks to layout parts of mathematical expressions. These
will be converted to true anonymous blocks in a later patch. Here we factor out the code
to create them into RenderMathMLBlock::createAlmostAnonymousBlock().

No new tests. Some tree dump output is modified for existing tests. <munder>, <mover>,
and <munderover> renderers already used true anonymous blocks, so we change them to call
RenderBlock::createAnonymousBlock(). In the other direction, <mroot>'s almost anonymous
blocks are now made RenderMathMLBlock not just RenderBlock, in agreement with other
current MathML renderers.

* rendering/mathml/RenderMathMLBlock.cpp:
(WebCore::RenderMathMLBlock::createAlmostAnonymousBlock):
* rendering/mathml/RenderMathMLBlock.h:
(RenderMathMLBlock):
(WebCore::RenderMathMLBlock::getBoxModelObjectWidth):
* rendering/mathml/RenderMathMLFenced.cpp:
(WebCore::RenderMathMLFenced::addChild):
* rendering/mathml/RenderMathMLFraction.cpp:
(WebCore::RenderMathMLFraction::updateFromElement):
    - improve some variable names
(WebCore::RenderMathMLFraction::addChild):
(WebCore::RenderMathMLFraction::layout):
(WebCore::RenderMathMLFraction::paint):
(WebCore::RenderMathMLFraction::baselinePosition):
* rendering/mathml/RenderMathMLRoot.cpp:
(WebCore::RenderMathMLRoot::addChild):
* rendering/mathml/RenderMathMLSubSup.cpp:
(WebCore::RenderMathMLSubSup::addChild):
* rendering/mathml/RenderMathMLSubSup.h:
* rendering/mathml/RenderMathMLUnderOver.cpp:
(WebCore::RenderMathMLUnderOver::addChild):

LayoutTests:

* platform/mac/mathml/presentation/mo-stretch-expected.txt:
* platform/mac/mathml/presentation/over-expected.txt:
* platform/mac/mathml/presentation/roots-expected.txt:
* platform/mac/mathml/presentation/row-alignment-expected.txt:
* platform/mac/mathml/presentation/under-expected.txt:
* platform/mac/mathml/presentation/underover-expected.txt:

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

16 files changed:
LayoutTests/ChangeLog
LayoutTests/platform/mac/mathml/presentation/mo-stretch-expected.txt
LayoutTests/platform/mac/mathml/presentation/over-expected.txt
LayoutTests/platform/mac/mathml/presentation/roots-expected.txt
LayoutTests/platform/mac/mathml/presentation/row-alignment-expected.txt
LayoutTests/platform/mac/mathml/presentation/under-expected.txt
LayoutTests/platform/mac/mathml/presentation/underover-expected.txt
Source/WebCore/ChangeLog
Source/WebCore/rendering/mathml/RenderMathMLBlock.cpp
Source/WebCore/rendering/mathml/RenderMathMLBlock.h
Source/WebCore/rendering/mathml/RenderMathMLFenced.cpp
Source/WebCore/rendering/mathml/RenderMathMLFraction.cpp
Source/WebCore/rendering/mathml/RenderMathMLRoot.cpp
Source/WebCore/rendering/mathml/RenderMathMLSubSup.cpp
Source/WebCore/rendering/mathml/RenderMathMLSubSup.h
Source/WebCore/rendering/mathml/RenderMathMLUnderOver.cpp

index 65c562a..1771542 100644 (file)
@@ -1,3 +1,17 @@
+2012-03-16  David Barton  <dbarton@mathscribe.com>
+
+        MathML internals - factor code for almost anonymous blocks
+        https://bugs.webkit.org/show_bug.cgi?id=81387
+
+        Reviewed by Eric Seidel.
+
+        * platform/mac/mathml/presentation/mo-stretch-expected.txt:
+        * platform/mac/mathml/presentation/over-expected.txt:
+        * platform/mac/mathml/presentation/roots-expected.txt:
+        * platform/mac/mathml/presentation/row-alignment-expected.txt:
+        * platform/mac/mathml/presentation/under-expected.txt:
+        * platform/mac/mathml/presentation/underover-expected.txt:
+
 2012-03-16  Ojan Vafai  <ojan@chromium.org>
 
         Fix some tests that broke with r111042.
index b55ec62..a053a6e 100644 (file)
@@ -122,16 +122,16 @@ layer at (0,0) size 800x109
                       text run at (0,0) width 6: "a"
             RenderMathMLRow {mrow} at (17,7) size 21x44
               RenderMathMLUnderOver {munderover} at (0,0) size 17x44
-                RenderMathMLBlock (anonymous) at (0,0) size 17x16
+                RenderBlock (anonymous) at (0,0) size 17x16
                   RenderInline {mi} at (0,0) size 7x12
                     RenderText {#text} at (5,3) size 7x12
                       text run at (5,3) width 7: "n"
-                RenderMathMLBlock (anonymous) at (0,12) size 17x16
+                RenderBlock (anonymous) at (0,12) size 17x16
                   RenderMathMLOperator {mo} at (3,0) size 11x16
                     RenderMathMLBlock {mo} at (0,0) size 11x16
                       RenderText {mo} at (0,0) size 11x16
                         text run at (0,0) width 11: "\x{2211}"
-                RenderMathMLBlock (anonymous) at (0,28) size 17x16
+                RenderBlock (anonymous) at (0,28) size 17x16
                   RenderMathMLRow {mrow} at (0,3) size 17x12
                     RenderInline {mi} at (0,0) size 3x12
                       RenderText {#text} at (0,0) size 3x12
index 725de37..2357523 100644 (file)
@@ -8,11 +8,11 @@ layer at (0,0) size 800x285
           text run at (0,9) width 36: "over: "
         RenderMathMLMath {math} at (36,0) size 12x28
           RenderMathMLUnderOver {mover} at (1,0) size 10x28
-            RenderMathMLBlock (anonymous) at (0,0) size 10x16
+            RenderBlock (anonymous) 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: "x"
-            RenderMathMLBlock (anonymous) at (0,12) size 10x16
+            RenderBlock (anonymous) at (0,12) size 10x16
               RenderInline {mi} at (0,0) size 10x16
                 RenderText {#text} at (0,0) size 10x16
                   text run at (0,0) width 10: "B"
@@ -22,11 +22,11 @@ layer at (0,0) size 800x285
           text run at (0,9) width 36: "over: "
         RenderMathMLMath {math} at (36,0) size 12x28
           RenderMathMLUnderOver {mover} at (1,0) size 10x28
-            RenderMathMLBlock (anonymous) at (0,0) size 10x16
+            RenderBlock (anonymous) 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"
-            RenderMathMLBlock (anonymous) at (0,12) size 10x16
+            RenderBlock (anonymous) at (0,12) size 10x16
               RenderInline {mi} at (0,0) size 10x16
                 RenderText {#text} at (0,0) size 10x16
                   text run at (0,0) width 10: "B"
@@ -36,11 +36,11 @@ layer at (0,0) size 800x285
           text run at (0,15) width 36: "over: "
         RenderMathMLMath {math} at (36,0) size 17x36
           RenderMathMLUnderOver {mover} at (1,0) size 15x36
-            RenderMathMLBlock (anonymous) at (0,0) size 15x16
+            RenderBlock (anonymous) at (0,0) size 15x16
               RenderInline {mi} at (0,0) size 5x12
                 RenderText {#text} at (0,3) size 5x12
                   text run at (0,3) width 5: "y"
-            RenderMathMLBlock (anonymous) at (0,12) size 15x24
+            RenderBlock (anonymous) 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"
@@ -50,11 +50,11 @@ layer at (0,0) size 800x285
           text run at (0,15) width 36: "over: "
         RenderMathMLMath {math} at (36,0) size 19x36
           RenderMathMLUnderOver {mover} at (1,0) size 17x36
-            RenderMathMLBlock (anonymous) at (0,0) size 17x16
+            RenderBlock (anonymous) at (0,0) size 17x16
               RenderInline {mi} at (0,0) size 5x12
                 RenderText {#text} at (0,3) size 5x12
                   text run at (0,3) width 5: "y"
-            RenderMathMLBlock (anonymous) at (0,12) size 17x24
+            RenderBlock (anonymous) at (0,12) size 17x24
               RenderMathMLOperator {mo} at (0,0) size 17x24
                 RenderMathMLBlock {mo} at (0,0) size 17x24
                   RenderText {mo} at (0,0) size 17x24
@@ -65,11 +65,11 @@ layer at (0,0) size 800x285
           text run at (0,26) width 36: "over: "
         RenderMathMLMath {math} at (36,0) size 52x61
           RenderMathMLUnderOver {mover} at (1,0) size 10x61
-            RenderMathMLBlock (anonymous) at (0,0) size 10x16
+            RenderBlock (anonymous) 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"
-            RenderMathMLBlock (anonymous) at (0,12) size 10x49
+            RenderBlock (anonymous) at (0,12) size 10x49
               RenderMathMLOperator {mo} at (0,0) size 10x49
           RenderBlock {div} at (11,0) size 40x40
         RenderText {#text} at (0,0) size 0x0
index 592c217..aeae320 100644 (file)
@@ -171,8 +171,8 @@ layer at (0,0) size 800x537
         RenderText {#text} at (0,0) size 0x0
 layer at (182,180) size 20x20
   RenderMathMLRoot {mroot} at (1,0) size 20x20
-    RenderBlock {mroot} at (12,15) size 0x0
-    RenderBlock {mroot} at (12,4) size 8x16
+    RenderMathMLBlock {mroot} at (12,15) size 0x0
+    RenderMathMLBlock {mroot} at (12,4) size 8x16
       RenderInline {mn} at (0,0) size 8x16
         RenderText {#text} at (0,0) size 8x16
           text run at (0,0) width 8: "2"
@@ -182,8 +182,8 @@ layer at (182,180) size 12x14
       text run at (2,0) width 6: "3"
 layer at (84,216) size 45x22
   RenderMathMLRoot {mroot} at (1,0) size 45x22
-    RenderBlock {mroot} at (37,17) size 0x0
-    RenderBlock {mroot} at (37,6) size 8x16
+    RenderMathMLBlock {mroot} at (37,17) size 0x0
+    RenderMathMLBlock {mroot} at (37,6) size 8x16
       RenderInline {mn} at (0,0) size 8x16
         RenderText {#text} at (0,0) size 8x16
           text run at (0,0) width 8: "2"
@@ -208,8 +208,8 @@ layer at (84,216) size 37x16
         text run at (28,0) width 5: "z"
 layer at (194,254) size 71x40
   RenderMathMLRoot {mroot} at (1,0) size 71x40
-    RenderBlock {mroot} at (39,24) size 0x0
-    RenderBlock {mroot} at (39,3) size 32x34
+    RenderMathMLBlock {mroot} at (39,24) size 0x0
+    RenderMathMLBlock {mroot} at (39,3) size 32x34
       RenderMathMLFraction {mfrac} at (1,0) size 31x34
         RenderMathMLBlock {mfrac} at (0,0) size 31x16
           RenderMathMLRow {mrow} at (3,0) size 25x16
@@ -256,8 +256,8 @@ layer at (194,263) size 37x16
         text run at (28,0) width 5: "z"
 layer at (84,310) size 27x48
   RenderMathMLRoot {mroot} at (1,0) size 27x48
-    RenderBlock {mroot} at (19,43) size 0x0
-    RenderBlock {mroot} at (19,32) size 8x16
+    RenderMathMLBlock {mroot} at (19,43) size 0x0
+    RenderMathMLBlock {mroot} at (19,32) size 8x16
       RenderInline {mn} at (0,0) size 8x16
         RenderText {#text} at (0,0) size 8x16
           text run at (0,0) width 8: "2"
@@ -279,8 +279,8 @@ layer at (84,310) size 19x42
           text run at (4,2) width 5: "z"
 layer at (119,445) size 326x76
   RenderMathMLRoot {mroot} at (1,0) size 326x76
-    RenderBlock {mroot} at (18,50) size 0x0
-    RenderBlock {mroot} at (18,3) size 308x70
+    RenderMathMLBlock {mroot} at (18,50) size 0x0
+    RenderMathMLBlock {mroot} at (18,3) size 308x70
       RenderMathMLRow {mrow} at (11,0) size 297x70
         RenderInline {mn} at (0,0) size 8x16
           RenderText {#text} at (0,36) size 8x16
@@ -295,8 +295,8 @@ layer at (119,478) size 12x14
       text run at (2,0) width 6: "3"
 layer at (166,448) size 279x70
   RenderMathMLRoot {mroot} at (18,0) size 279x70
-    RenderBlock {mroot} at (18,47) size 0x0
-    RenderBlock {mroot} at (18,3) size 261x64
+    RenderMathMLBlock {mroot} at (18,47) size 0x0
+    RenderMathMLBlock {mroot} at (18,3) size 261x64
       RenderMathMLRow {mrow} at (9,0) size 252x64
         RenderInline {mn} at (0,0) size 8x16
           RenderText {#text} at (0,33) size 8x16
@@ -311,8 +311,8 @@ layer at (166,477) size 12x14
       text run at (2,0) width 6: "4"
 layer at (211,451) size 234x64
   RenderMathMLRoot {mroot} at (18,0) size 234x64
-    RenderBlock {mroot} at (18,44) size 0x0
-    RenderBlock {mroot} at (18,3) size 216x58
+    RenderMathMLBlock {mroot} at (18,44) size 0x0
+    RenderMathMLBlock {mroot} at (18,3) size 216x58
       RenderMathMLRow {mrow} at (8,0) size 208x58
         RenderInline {mn} at (0,0) size 8x16
           RenderText {#text} at (0,30) size 8x16
@@ -327,8 +327,8 @@ layer at (211,477) size 12x14
       text run at (2,0) width 6: "5"
 layer at (255,454) size 190x58
   RenderMathMLRoot {mroot} at (18,0) size 190x58
-    RenderBlock {mroot} at (18,41) size 0x0
-    RenderBlock {mroot} at (18,3) size 172x52
+    RenderMathMLBlock {mroot} at (18,41) size 0x0
+    RenderMathMLBlock {mroot} at (18,3) size 172x52
       RenderMathMLRow {mrow} at (6,0) size 166x52
         RenderInline {mn} at (0,0) size 8x16
           RenderText {#text} at (0,27) size 8x16
@@ -343,8 +343,8 @@ layer at (255,476) size 12x14
       text run at (2,0) width 6: "6"
 layer at (297,457) size 148x52
   RenderMathMLRoot {mroot} at (18,0) size 148x52
-    RenderBlock {mroot} at (17,38) size 0x0
-    RenderBlock {mroot} at (17,3) size 131x46
+    RenderMathMLBlock {mroot} at (17,38) size 0x0
+    RenderMathMLBlock {mroot} at (17,3) size 131x46
       RenderMathMLRow {mrow} at (4,0) size 127x46
         RenderInline {mn} at (0,0) size 8x16
           RenderText {#text} at (0,24) size 8x16
@@ -359,8 +359,8 @@ layer at (297,475) size 12x14
       text run at (2,0) width 6: "7"
 layer at (336,460) size 109x46
   RenderMathMLRoot {mroot} at (18,0) size 109x46
-    RenderBlock {mroot} at (16,35) size 0x0
-    RenderBlock {mroot} at (16,3) size 93x40
+    RenderMathMLBlock {mroot} at (16,35) size 0x0
+    RenderMathMLBlock {mroot} at (16,3) size 93x40
       RenderMathMLRow {mrow} at (3,0) size 90x40
         RenderInline {mn} at (0,0) size 8x16
           RenderText {#text} at (0,21) size 8x16
@@ -375,8 +375,8 @@ layer at (336,474) size 12x14
       text run at (2,0) width 6: "8"
 layer at (373,463) size 72x40
   RenderMathMLRoot {mroot} at (18,0) size 72x40
-    RenderBlock {mroot} at (14,32) size 0x0
-    RenderBlock {mroot} at (14,3) size 58x34
+    RenderMathMLBlock {mroot} at (14,32) size 0x0
+    RenderMathMLBlock {mroot} at (14,3) size 58x34
       RenderMathMLRow {mrow} at (2,0) size 56x34
         RenderInline {mn} at (0,0) size 8x16
           RenderText {#text} at (0,18) size 8x16
@@ -391,8 +391,8 @@ layer at (373,474) size 12x14
       text run at (2,0) width 6: "9"
 layer at (407,466) size 38x34
   RenderMathMLRoot {mroot} at (18,0) size 38x34
-    RenderBlock {mroot} at (28,29) size 0x0
-    RenderBlock {mroot} at (28,18) size 10x16
+    RenderMathMLBlock {mroot} at (28,29) size 0x0
+    RenderMathMLBlock {mroot} at (28,18) size 10x16
       RenderInline {mi} at (0,0) size 10x16
         RenderText {#text} at (0,0) size 10x16
           text run at (0,0) width 10: "A"
index c6bf1d7..c160e3d 100644 (file)
@@ -122,11 +122,11 @@ layer at (0,0) size 800x544
                 text run at (1,38) width 7: "y"
             RenderMathMLOperator {mo} at (8,0) size 6x85
             RenderMathMLUnderOver {munder} at (14,38) size 13x27
-              RenderMathMLBlock (anonymous) at (0,0) size 13x16
+              RenderBlock (anonymous) at (0,0) size 13x16
                 RenderInline {mi} at (0,0) size 13x16
                   RenderText {#text} at (0,0) size 13x16
                     text run at (0,0) width 13: "\x{220F}"
-              RenderMathMLBlock (anonymous) at (0,11) size 13x16
+              RenderBlock (anonymous) at (0,11) size 13x16
                 RenderInline {mi} at (0,0) size 5x12
                   RenderText {#text} at (0,3) size 5x12
                     text run at (0,3) width 5: "x"
index 292dc1d..c021301 100644 (file)
@@ -8,11 +8,11 @@ layer at (0,0) size 800x108
           text run at (0,0) width 44: "under: "
         RenderMathMLMath {math} at (44,3) size 12x27
           RenderMathMLUnderOver {munder} at (1,0) size 10x27
-            RenderMathMLBlock (anonymous) at (0,0) size 10x16
+            RenderBlock (anonymous) at (0,0) size 10x16
               RenderInline {mi} at (0,0) size 10x16
                 RenderText {#text} at (0,0) size 10x16
                   text run at (0,0) width 10: "B"
-            RenderMathMLBlock (anonymous) at (0,11) size 10x16
+            RenderBlock (anonymous) at (0,11) size 10x16
               RenderInline {mi} at (0,0) size 5x12
                 RenderText {#text} at (0,3) size 5x12
                   text run at (0,3) width 5: "x"
@@ -22,11 +22,11 @@ layer at (0,0) size 800x108
           text run at (0,0) width 44: "under: "
         RenderMathMLMath {math} at (44,3) size 12x27
           RenderMathMLUnderOver {munder} at (1,0) size 10x27
-            RenderMathMLBlock (anonymous) at (0,0) size 10x16
+            RenderBlock (anonymous) at (0,0) size 10x16
               RenderInline {mi} at (0,0) size 10x16
                 RenderText {#text} at (0,0) size 10x16
                   text run at (0,0) width 10: "B"
-            RenderMathMLBlock (anonymous) at (0,11) size 10x16
+            RenderBlock (anonymous) at (0,11) size 10x16
               RenderInline {mi} at (0,0) size 7x12
                 RenderText {#text} at (0,3) size 7x12
                   text run at (0,3) width 7: "X"
index e1e2bb7..03c3bd4 100644 (file)
@@ -8,15 +8,15 @@ layer at (0,0) size 800x262
           text run at (0,9) width 92: "under & over: "
         RenderMathMLMath {math} at (92,0) size 12x39
           RenderMathMLUnderOver {munderover} at (1,0) size 10x39
-            RenderMathMLBlock (anonymous) at (0,0) size 10x16
+            RenderBlock (anonymous) 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"
-            RenderMathMLBlock (anonymous) at (0,12) size 10x16
+            RenderBlock (anonymous) at (0,12) size 10x16
               RenderInline {mi} at (0,0) size 10x16
                 RenderText {#text} at (0,0) size 10x16
                   text run at (0,0) width 10: "B"
-            RenderMathMLBlock (anonymous) at (0,23) size 10x16
+            RenderBlock (anonymous) at (0,23) size 10x16
               RenderInline {mi} at (0,0) size 5x12
                 RenderText {#text} at (0,3) size 5x12
                   text run at (0,3) width 5: "x"
@@ -26,15 +26,15 @@ layer at (0,0) size 800x262
           text run at (0,9) width 92: "under & over: "
         RenderMathMLMath {math} at (92,0) size 12x39
           RenderMathMLUnderOver {munderover} at (1,0) size 10x39
-            RenderMathMLBlock (anonymous) at (0,0) size 10x16
+            RenderBlock (anonymous) 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"
-            RenderMathMLBlock (anonymous) at (0,12) size 10x16
+            RenderBlock (anonymous) at (0,12) size 10x16
               RenderInline {mi} at (0,0) size 10x16
                 RenderText {#text} at (0,0) size 10x16
                   text run at (0,0) width 10: "B"
-            RenderMathMLBlock (anonymous) at (0,23) size 10x16
+            RenderBlock (anonymous) at (0,23) size 10x16
               RenderInline {mi} at (0,0) size 7x12
                 RenderText {#text} at (0,3) size 7x12
                   text run at (0,3) width 7: "X"
@@ -44,7 +44,7 @@ layer at (0,0) size 800x262
           text run at (0,15) width 92: "under & over: "
         RenderMathMLMath {math} at (92,0) size 20x52
           RenderMathMLUnderOver {munderover} at (1,0) size 18x52
-            RenderMathMLBlock (anonymous) at (0,0) size 18x16
+            RenderBlock (anonymous) at (0,0) size 18x16
               RenderMathMLRow {mrow} at (0,3) size 18x12
                 RenderInline {mi} at (0,0) size 5x12
                   RenderText {#text} at (0,0) size 5x12
@@ -56,12 +56,12 @@ layer at (0,0) size 800x262
                 RenderInline {mi} at (0,0) size 5x12
                   RenderText {#text} at (13,0) size 5x12
                     text run at (13,0) width 5: "y"
-            RenderMathMLBlock (anonymous) at (0,12) size 18x24
+            RenderBlock (anonymous) at (0,12) size 18x24
               RenderMathMLOperator {mo} at (0,0) size 17x24
                 RenderMathMLBlock {mo} at (0,0) size 17x24
                   RenderText {mo} at (0,0) size 17x24
                     text run at (0,0) width 17: "\x{2211}"
-            RenderMathMLBlock (anonymous) at (0,36) size 18x16
+            RenderBlock (anonymous) at (0,36) size 18x16
               RenderMathMLRow {mrow} at (0,3) size 17x12
                 RenderInline {mi} at (0,0) size 3x12
                   RenderText {#text} at (0,0) size 3x12
@@ -79,7 +79,7 @@ layer at (0,0) size 800x262
           text run at (0,15) width 92: "under & over: "
         RenderMathMLMath {math} at (92,0) size 22x52
           RenderMathMLUnderOver {munderover} at (1,0) size 20x52
-            RenderMathMLBlock (anonymous) at (0,0) size 20x16
+            RenderBlock (anonymous) at (0,0) size 20x16
               RenderMathMLRow {mrow} at (0,3) size 20x12
                 RenderInline {mi} at (0,0) size 7x12
                   RenderText {#text} at (0,0) size 7x12
@@ -91,12 +91,12 @@ layer at (0,0) size 800x262
                 RenderInline {mi} at (0,0) size 5x12
                   RenderText {#text} at (15,0) size 5x12
                     text run at (15,0) width 5: "y"
-            RenderMathMLBlock (anonymous) at (0,12) size 20x24
+            RenderBlock (anonymous) at (0,12) size 20x24
               RenderMathMLOperator {mo} at (0,0) size 17x24
                 RenderMathMLBlock {mo} at (0,0) size 17x24
                   RenderText {mo} at (0,0) size 17x24
                     text run at (0,0) width 17: "\x{2211}"
-            RenderMathMLBlock (anonymous) at (0,36) size 20x16
+            RenderBlock (anonymous) at (0,36) size 20x16
               RenderMathMLRow {mrow} at (0,3) size 18x12
                 RenderInline {mi} at (0,0) size 4x12
                   RenderText {#text} at (0,0) size 4x12
index 761d187..7ad4482 100644 (file)
@@ -1,3 +1,42 @@
+2012-03-16  David Barton  <dbarton@mathscribe.com>
+
+        MathML internals - factor code for almost anonymous blocks
+        https://bugs.webkit.org/show_bug.cgi?id=81387
+
+        Reviewed by Eric Seidel.
+
+        MathML uses "almost anonymous" blocks to layout parts of mathematical expressions. These
+        will be converted to true anonymous blocks in a later patch. Here we factor out the code
+        to create them into RenderMathMLBlock::createAlmostAnonymousBlock().
+
+        No new tests. Some tree dump output is modified for existing tests. <munder>, <mover>,
+        and <munderover> renderers already used true anonymous blocks, so we change them to call
+        RenderBlock::createAnonymousBlock(). In the other direction, <mroot>'s almost anonymous
+        blocks are now made RenderMathMLBlock not just RenderBlock, in agreement with other
+        current MathML renderers.
+
+        * rendering/mathml/RenderMathMLBlock.cpp:
+        (WebCore::RenderMathMLBlock::createAlmostAnonymousBlock):
+        * rendering/mathml/RenderMathMLBlock.h:
+        (RenderMathMLBlock):
+        (WebCore::RenderMathMLBlock::getBoxModelObjectWidth):
+        * rendering/mathml/RenderMathMLFenced.cpp:
+        (WebCore::RenderMathMLFenced::addChild):
+        * rendering/mathml/RenderMathMLFraction.cpp:
+        (WebCore::RenderMathMLFraction::updateFromElement):
+            - improve some variable names
+        (WebCore::RenderMathMLFraction::addChild):
+        (WebCore::RenderMathMLFraction::layout):
+        (WebCore::RenderMathMLFraction::paint):
+        (WebCore::RenderMathMLFraction::baselinePosition):
+        * rendering/mathml/RenderMathMLRoot.cpp:
+        (WebCore::RenderMathMLRoot::addChild):
+        * rendering/mathml/RenderMathMLSubSup.cpp:
+        (WebCore::RenderMathMLSubSup::addChild):
+        * rendering/mathml/RenderMathMLSubSup.h:
+        * rendering/mathml/RenderMathMLUnderOver.cpp:
+        (WebCore::RenderMathMLUnderOver::addChild):
+
 2012-03-16  Levi Weintraub  <leviw@chromium.org>
 
         Prepare RenderObject for FractionalLayoutUnits
index bbf0d65..0e61917 100644 (file)
@@ -49,12 +49,14 @@ bool RenderMathMLBlock::isChildAllowed(RenderObject* child, RenderStyle*) const
     return child->node() && child->node()->nodeType() == Node::ELEMENT_NODE;
 }
 
-PassRefPtr<RenderStyle> RenderMathMLBlock::createBlockStyle()
+RenderMathMLBlock* RenderMathMLBlock::createAlmostAnonymousBlock(EDisplay display)
 {
-    RefPtr<RenderStyle> newStyle = RenderStyle::create();
-    newStyle->inheritFrom(style());
-    newStyle->setDisplay(BLOCK);
-    return newStyle;
+    RefPtr<RenderStyle> newStyle = RenderStyle::createAnonymousStyle(style());
+    newStyle->setDisplay(display);
+    
+    RenderMathMLBlock* newBlock = new (renderArena()) RenderMathMLBlock(node() /* "almost" anonymous block */);
+    newBlock->setStyle(newStyle.release());
+    return newBlock;
 }
 
 void RenderMathMLBlock::stretchToHeight(int height) 
index 5d4d780..0e0bdb3 100644 (file)
@@ -60,6 +60,10 @@ public:
     virtual void paint(PaintInfo&, const LayoutPoint&);
 #endif
     
+    // Create a new RenderBlock, with a new style inheriting from this->style().
+    // FIXME: Create a true anonymous block, like RenderBlock::createAnonymousBlock().
+    RenderMathMLBlock* createAlmostAnonymousBlock(EDisplay = BLOCK);
+    
 protected:
     static LayoutUnit getBoxModelObjectHeight(const RenderObject* object)
     {
@@ -79,7 +83,6 @@ protected:
         
         return 0;
     }
-    virtual PassRefPtr<RenderStyle> createBlockStyle();
 
 private:
     virtual const char* renderName() const { return isAnonymous() ? "RenderMathMLBlock (anonymous)" : "RenderMathMLBlock"; }
index c2f67ea..4297dd7 100644 (file)
@@ -131,11 +131,7 @@ void RenderMathMLFenced::addChild(RenderObject* child, RenderObject*)
     if (child->isBlockFlow() && child->style()->display() != INLINE_BLOCK) {
         // Block objects wrapper.
 
-        RenderBlock* block = new (renderArena()) RenderBlock(node());
-        RefPtr<RenderStyle> newStyle = RenderStyle::create();
-        newStyle->inheritFrom(style());
-        newStyle->setDisplay(INLINE_BLOCK);
-        block->setStyle(newStyle.release());
+        RenderBlock* block = createAlmostAnonymousBlock(INLINE_BLOCK);
         
         RenderBlock::addChild(block, lastChild());
         block->addChild(child);    
index d3bf26a..296548a 100644 (file)
@@ -61,26 +61,26 @@ void RenderMathMLFraction::updateFromElement()
     
     Element* fraction = static_cast<Element*>(node());
     
-    RenderObject* numerator = firstChild();
+    RenderObject* numeratorWrapper = firstChild();
     String nalign = fraction->getAttribute(MathMLNames::numalignAttr);
     if (equalIgnoringCase(nalign, "left"))
-        numerator->style()->setTextAlign(LEFT);
+        numeratorWrapper->style()->setTextAlign(LEFT);
     else if (equalIgnoringCase(nalign, "right"))
-        numerator->style()->setTextAlign(RIGHT);
+        numeratorWrapper->style()->setTextAlign(RIGHT);
     else
-        numerator->style()->setTextAlign(CENTER);
+        numeratorWrapper->style()->setTextAlign(CENTER);
     
-    RenderObject* denominator = numerator->nextSibling();
-    if (!denominator)
+    RenderObject* denominatorWrapper = numeratorWrapper->nextSibling();
+    if (!denominatorWrapper)
         return;
     
     String dalign = fraction->getAttribute(MathMLNames::denomalignAttr);
     if (equalIgnoringCase(dalign, "left"))
-        denominator->style()->setTextAlign(LEFT);
+        denominatorWrapper->style()->setTextAlign(LEFT);
     else if (equalIgnoringCase(dalign, "right"))
-        denominator->style()->setTextAlign(RIGHT);
+        denominatorWrapper->style()->setTextAlign(RIGHT);
     else
-        denominator->style()->setTextAlign(CENTER);
+        denominatorWrapper->style()->setTextAlign(CENTER);
     
     // FIXME: parse units
     String thickness = fraction->getAttribute(MathMLNames::linethicknessAttr);
@@ -100,20 +100,18 @@ void RenderMathMLFraction::updateFromElement()
 
 void RenderMathMLFraction::addChild(RenderObject* child, RenderObject* beforeChild)
 {
-    RenderBlock* row = new (renderArena()) RenderMathMLBlock(node());
-    RefPtr<RenderStyle> rowStyle = createBlockStyle();
+    RenderBlock* row = createAlmostAnonymousBlock();
     
-    rowStyle->setTextAlign(CENTER);
-    Length pad(static_cast<int>(rowStyle->fontSize() * gHorizontalPad), Fixed);
-    rowStyle->setPaddingLeft(pad);
-    rowStyle->setPaddingRight(pad);
+    row->style()->setTextAlign(CENTER);
+    Length pad(static_cast<int>(style()->fontSize() * gHorizontalPad), Fixed);
+    row->style()->setPaddingLeft(pad);
+    row->style()->setPaddingRight(pad);
     
     // Only add padding for rows as denominators
     bool isNumerator = isEmpty();
     if (!isNumerator) 
-        rowStyle->setPaddingTop(Length(2, Fixed));
+        row->style()->setPaddingTop(Length(2, Fixed));
     
-    row->setStyle(rowStyle.release());
     RenderBlock::addChild(row, beforeChild);
     row->addChild(child);
     updateFromElement();
@@ -139,7 +137,6 @@ void RenderMathMLFraction::layout()
         m_lineThickness *= ceilf(gFractionBarWidth * style()->fontSize());
 
     RenderBlock::layout();
-
 }
 
 void RenderMathMLFraction::paint(PaintInfo& info, const LayoutPoint& paintOffset)
@@ -157,6 +154,7 @@ void RenderMathMLFraction::paint(PaintInfo& info, const LayoutPoint& paintOffset
         int adjustForThickness = m_lineThickness > 1 ? int(m_lineThickness / 2) : 1;
         if (int(m_lineThickness) % 2 == 1)
             adjustForThickness++;
+        // FIXME: This is numeratorWrapper, not numerator.
         RenderMathMLBlock* numerator = toRenderMathMLBlock(firstChild());
         if (numerator->isRenderMathMLRow())
             verticalOffset = numerator->pixelSnappedOffsetHeight() + adjustForThickness;
@@ -179,14 +177,14 @@ void RenderMathMLFraction::paint(PaintInfo& info, const LayoutPoint& paintOffset
 LayoutUnit RenderMathMLFraction::baselinePosition(FontBaseline, bool firstLine, LineDirectionMode lineDirection, LinePositionMode linePositionMode) const
 {
     if (firstChild() && firstChild()->isRenderMathMLBlock()) {
-        RenderMathMLBlock* numerator = toRenderMathMLBlock(firstChild());
+        RenderMathMLBlock* numeratorWrapper = toRenderMathMLBlock(firstChild());
         RenderStyle* refStyle = style();
         if (previousSibling())
             refStyle = previousSibling()->style();
         else if (nextSibling())
             refStyle = nextSibling()->style();
         int shift = int(ceil((refStyle->fontMetrics().xHeight() + 1) / 2));
-        return numerator->pixelSnappedOffsetHeight() + shift;
+        return numeratorWrapper->pixelSnappedOffsetHeight() + shift;
     }
     return RenderBlock::baselinePosition(AlphabeticBaseline, firstLine, lineDirection, linePositionMode);
 }
index c442314..d035453 100644 (file)
@@ -73,21 +73,15 @@ void RenderMathMLRoot::addChild(RenderObject* child, RenderObject* )
 {
     if (isEmpty()) {
         // Add a block for the index
-        RenderBlock* block = new (renderArena()) RenderBlock(node());
-        RefPtr<RenderStyle> indexStyle = createBlockStyle();
-        indexStyle->setDisplay(INLINE_BLOCK);
-        block->setStyle(indexStyle.release());
-        RenderBlock::addChild(block);
+        RenderBlock* indexWrapper = createAlmostAnonymousBlock(INLINE_BLOCK);
+        RenderBlock::addChild(indexWrapper);
         
         // FIXME: the wrapping does not seem to be needed anymore.
         // this is the base, so wrap it so we can pad it
-        block = new (renderArena()) RenderBlock(node());
-        RefPtr<RenderStyle> baseStyle = createBlockStyle();
-        baseStyle->setDisplay(INLINE_BLOCK);
-        baseStyle->setPaddingLeft(Length(5 * gRadicalWidth , Percent));
-        block->setStyle(baseStyle.release());
-        RenderBlock::addChild(block);
-        block->addChild(child);
+        RenderBlock* baseWrapper = createAlmostAnonymousBlock(INLINE_BLOCK);
+        baseWrapper->style()->setPaddingLeft(Length(5 * gRadicalWidth, Percent));
+        RenderBlock::addChild(baseWrapper);
+        baseWrapper->addChild(child);
     } else {
         // always add to the index
         firstChild()->addChild(child);
index c71cbd9..b393526 100644 (file)
@@ -70,27 +70,21 @@ void RenderMathMLSubSup::addChild(RenderObject* child, RenderObject* beforeChild
 
     if (childElement && !childElement->previousElementSibling()) {
         // Position 1 is always the base of the msub/msup/msubsup.
-        RenderMathMLBlock* wrapper = new (renderArena()) RenderMathMLBlock(node());
-        RefPtr<RenderStyle> wrapperStyle = RenderStyle::create();
-        wrapperStyle->inheritFrom(style());
-        wrapperStyle->setDisplay(INLINE_BLOCK);
-        wrapperStyle->setVerticalAlign(BASELINE);
-        wrapper->setStyle(wrapperStyle.release());
-        RenderMathMLBlock::addChild(wrapper, firstChild());
-        wrapper->addChild(child);
+        RenderBlock* baseWrapper = createAlmostAnonymousBlock(INLINE_BLOCK);
+        RenderMathMLBlock::addChild(baseWrapper, firstChild());
+        baseWrapper->addChild(child);
             
         // Make sure we have a script block for rendering.
         if (m_kind == SubSup && !m_scripts) {
-            m_scripts = new (renderArena()) RenderMathMLBlock(node());
-            RefPtr<RenderStyle> scriptsStyle = RenderStyle::create();
-            scriptsStyle->inheritFrom(style());
+            RefPtr<RenderStyle> scriptsStyle = RenderStyle::createAnonymousStyle(style());
             scriptsStyle->setDisplay(INLINE_BLOCK);
             scriptsStyle->setVerticalAlign(TOP);
             scriptsStyle->setMarginLeft(Length(gSubsupScriptMargin, Fixed));
             scriptsStyle->setTextAlign(LEFT);
             // Set this wrapper's font-size for its line-height & baseline position.
             scriptsStyle->setBlendedFontSize(static_cast<int>(0.75 * style()->fontSize()));
-            m_scripts->setStyle(scriptsStyle.release());
+            m_scripts = new (renderArena()) RenderMathMLBlock(node());
+            m_scripts->setStyle(scriptsStyle);
             RenderMathMLBlock::addChild(m_scripts, beforeChild);
         }
     } else {
@@ -99,11 +93,7 @@ void RenderMathMLSubSup::addChild(RenderObject* child, RenderObject* beforeChild
             if (!childElement)
                 return;
 
-            RenderBlock* script = new (renderArena()) RenderMathMLBlock(node());
-            RefPtr<RenderStyle> scriptStyle = RenderStyle::create();
-            scriptStyle->inheritFrom(m_scripts->style());
-            scriptStyle->setDisplay(BLOCK);
-            script->setStyle(scriptStyle.release());
+            RenderBlock* script = m_scripts->createAlmostAnonymousBlock();
 
             // The order is always backwards so the first script is the subscript and the superscript 
             // is last. That means the superscript is the first to render vertically.
index 0a291de..6920f4a 100644 (file)
@@ -52,7 +52,7 @@ private:
     
     enum SubSupType { Sub, Sup, SubSup };
     SubSupType m_kind;
-    RenderBlock* m_scripts;
+    RenderMathMLBlock* m_scripts;
 };
     
 }
index e1b26dc..5b16d8e 100644 (file)
@@ -29,7 +29,6 @@
 
 #include "RenderMathMLUnderOver.h"
 
-#include "FontSelector.h"
 #include "MathMLNames.h"
 
 namespace WebCore {
@@ -67,10 +66,7 @@ RenderBoxModelObject* RenderMathMLUnderOver::base() const
 
 void RenderMathMLUnderOver::addChild(RenderObject* child, RenderObject* beforeChild)
 {    
-    RenderMathMLBlock* row = new (renderArena()) RenderMathMLBlock(node());
-    RefPtr<RenderStyle> rowStyle = createBlockStyle();
-    row->setStyle(rowStyle.release());
-    row->setIsAnonymous(true);
+    RenderBlock* row = createAnonymousBlock();
     
     // look through the children for rendered elements counting the blocks so we know what child
     // we are adding