Rolled in patch by opendarwin.org@mitzpettel.com
authorggaren <ggaren@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 6 Jul 2005 00:21:53 +0000 (00:21 +0000)
committerggaren <ggaren@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 6 Jul 2005 00:21:53 +0000 (00:21 +0000)
        -fixes http://bugzilla.opendarwin.org/show_bug.cgi?id=3733
        Incorrect bidi layout of ETs, ANs, and ENs in some contexts

        Reviewed by hyatt.

        * khtml/rendering/bidi.cpp:
        (khtml::appendRun):
        (khtml::RenderBlock::bidiReorderLine):
        (khtml::RenderBlock::layoutInlineChildren):

        Modified test results to account for run splitting.
        This is a known bug that we need to fix separately:
        http://bugzilla.opendarwin.org/show_bug.cgi?id=3838

        * layout-tests/css1/basic/containment-expected.txt:
        * layout-tests/css1/box_properties/float_on_text_elements-expected.txt:
        * layout-tests/css1/font_properties/font-expected.txt:
        * layout-tests/css1/formatting_model/inline_elements-expected.txt:
        * layout-tests/css1/pseudo/anchor-expected.txt:
        * layout-tests/editing/deleting/delete-tab-001-expected.txt:
        * layout-tests/editing/deleting/delete-tab-002-expected.txt:
        * layout-tests/editing/deleting/delete-tab-003-expected.txt:
        * layout-tests/editing/deleting/delete-tab-004-expected.txt:
        * layout-tests/editing/inserting/insert-tab-001-expected.txt:
        * layout-tests/editing/inserting/insert-tab-002-expected.txt:
        * layout-tests/editing/inserting/insert-tab-003-expected.txt:
        * layout-tests/editing/inserting/insert-tab-004-expected.txt:
        * layout-tests/editing/style/relative-font-size-change-001-expected.txt:
        * layout-tests/editing/style/relative-font-size-change-004-expected.txt:
        * layout-tests/fast/block/basic/018-expected.txt:
        * layout-tests/fast/dom/quadraticCurveTo-expected.txt:
        * layout-tests/fast/invalid/nestedh3s-expected.txt:
        * layout-tests/fast/js/string-replace-2-expected.txt:
        * layout-tests/fast/lists/003-expected.txt:
        * layout-tests/fast/selectors/166-expected.txt:
        * layout-tests/fast/table/039-expected.txt:
        * layout-tests/fast/table/border-collapsing/004-expected.txt:
        * layout-tests/fast/text/basic/004-expected.txt:
        * layout-tests/fast/tokenizer/script_extra_close-expected.txt:

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

27 files changed:
LayoutTests/css1/basic/containment-expected.txt
LayoutTests/css1/box_properties/float_on_text_elements-expected.txt
LayoutTests/css1/font_properties/font-expected.txt
LayoutTests/css1/formatting_model/inline_elements-expected.txt
LayoutTests/css1/pseudo/anchor-expected.txt
LayoutTests/editing/deleting/delete-tab-001-expected.txt
LayoutTests/editing/deleting/delete-tab-002-expected.txt
LayoutTests/editing/deleting/delete-tab-003-expected.txt
LayoutTests/editing/deleting/delete-tab-004-expected.txt
LayoutTests/editing/inserting/insert-tab-001-expected.txt
LayoutTests/editing/inserting/insert-tab-002-expected.txt
LayoutTests/editing/inserting/insert-tab-003-expected.txt
LayoutTests/editing/inserting/insert-tab-004-expected.txt
LayoutTests/editing/style/relative-font-size-change-001-expected.txt
LayoutTests/editing/style/relative-font-size-change-004-expected.txt
LayoutTests/fast/block/basic/018-expected.txt
LayoutTests/fast/dom/quadraticCurveTo-expected.txt
LayoutTests/fast/invalid/nestedh3s-expected.txt
LayoutTests/fast/js/string-replace-2-expected.txt
LayoutTests/fast/lists/003-expected.txt
LayoutTests/fast/selectors/166-expected.txt
LayoutTests/fast/table/039-expected.txt
LayoutTests/fast/table/border-collapsing/004-expected.txt
LayoutTests/fast/text/basic/004-expected.txt
LayoutTests/fast/tokenizer/script_extra_close-expected.txt
WebCore/ChangeLog-2005-08-23
WebCore/khtml/rendering/bidi.cpp

index 5e62a49..1022065 100644 (file)
@@ -11,7 +11,8 @@ layer at (0,0) size 800x943
           text run at (0,0) width 624: "<LINK rel=\"stylesheet\" type=\"text/css\" href=\"linktest.css\" title=\"Default SS\">"
           text run at (0,15) width 728: "<LINK rel=\"alternate stylesheet\" type=\"text/css\" href=\"linktest2.css\" title=\"Alternate SS\">"
           text run at (0,30) width 208: "@import url(imptest1.css);"
-          text run at (0,45) width 192: "@import \"imptest1a.css\";"
+          text run at (0,45) width 136: "@import \"imptest1"
+          text run at (136,45) width 56: "a.css\";"
           text run at (0,60) width 128: "UL {color: red;}"
           text run at (0,75) width 176: ".four {color: purple;}"
           text run at (0,90) width 208: "@import url(imptest2.css);"
@@ -57,7 +58,8 @@ layer at (0,0) size 800x943
             text run at (0,0) width 395: "This sentence should be purple due to an imported style sheet ["
           RenderInline {CODE} at (0,0) size 184x15
             RenderText {TEXT} at (395,2) size 184x15
-              text run at (395,2) width 184: "@import \"imptest1a.css\""
+              text run at (395,2) width 136: "@import \"imptest1"
+              text run at (531,2) width 48: "a.css\""
           RenderText {TEXT} at (579,0) size 9x18
             text run at (579,0) width 9: "]."
         RenderListItem {LI} at (40,36) size 744x18 [color=#008000]
@@ -152,7 +154,8 @@ layer at (0,0) size 800x943
                     text run at (0,0) width 395: "This sentence should be purple due to an imported style sheet ["
                   RenderInline {CODE} at (0,0) size 184x15
                     RenderText {TEXT} at (395,2) size 184x15
-                      text run at (395,2) width 184: "@import \"imptest1a.css\""
+                      text run at (395,2) width 136: "@import \"imptest1"
+                      text run at (531,2) width 48: "a.css\""
                   RenderText {TEXT} at (579,0) size 9x18
                     text run at (579,0) width 9: "]."
                 RenderListItem {LI} at (40,36) size 722x18 [color=#008000]
index b6c2015..1a61fc3 100644 (file)
@@ -73,7 +73,8 @@ layer at (0,0) size 800x2678
         RenderText {TEXT} at (8,8) size 320x180
           text run at (8,8) width 320: "This paragraph should be floated to the right, sort"
           text run at (8,26) width 320: "of like a 'sidebar' in a magazine article. Its width is"
-          text run at (8,44) width 320: "20em so the box should not be reformatted when"
+          text run at (8,44) width 16: "20"
+          text run at (24,44) width 304: "em so the box should not be reformatted when"
           text run at (8,62) width 320: "the size of the viewport is changed (e.g. when the"
           text run at (8,80) width 320: "window is resized). The background color of the"
           text run at (8,98) width 269: "element is yellow, and there should be a 3"
@@ -259,7 +260,8 @@ layer at (0,0) size 800x2678
                 RenderText {TEXT} at (8,8) size 320x180
                   text run at (8,8) width 320: "This paragraph should be floated to the right, sort"
                   text run at (8,26) width 320: "of like a 'sidebar' in a magazine article. Its width is"
-                  text run at (8,44) width 320: "20em so the box should not be reformatted when"
+                  text run at (8,44) width 16: "20"
+                  text run at (24,44) width 304: "em so the box should not be reformatted when"
                   text run at (8,62) width 320: "the size of the viewport is changed (e.g. when the"
                   text run at (8,80) width 320: "window is resized). The background color of the"
                   text run at (8,98) width 269: "element is yellow, and there should be a 3"
index 71ab789..fb42f50 100644 (file)
@@ -74,7 +74,8 @@ layer at (0,0) size 800x4169
           text run at (711,3) width 67: "Its font-"
           text run at (0,30) width 722: "size should be 150% the base font size, and its line-height should be 150% of that value (18"
           text run at (722,30) width 48: "px and"
-          text run at (0,57) width 156: "27px, respectively). "
+          text run at (0,57) width 20: "27"
+          text run at (20,57) width 136: "px, respectively). "
           text run at (156,57) width 559: "Extra text is included for the purposes of testing this more effectively."
       RenderBlock {P} at (0,683) size 784x162
         RenderText {TEXT} at (0,16) size 765x162
@@ -82,14 +83,16 @@ layer at (0,0) size 800x4169
           text run at (698,16) width 67: "Its font-"
           text run at (0,70) width 711: "size should be 150% the base font size, and its line-height should be 300% of that value (18"
           text run at (711,70) width 47: "px and"
-          text run at (0,124) width 155: "54px, respectively). "
+          text run at (0,124) width 20: "54"
+          text run at (20,124) width 135: "px, respectively). "
           text run at (155,124) width 556: "Extra text is included for the purposes of testing this more effectively."
       RenderBlock {P} at (0,863) size 784x144
         RenderText {TEXT} at (0,7) size 750x144
           text run at (0,7) width 750: "This element should be in a monospace font, italicized and small caps, with a weight of"
           text run at (0,43) width 55: "900. "
           text run at (55,43) width 687: "Its font-size should be 150% the base font size, and its line-height should be"
-          text run at (0,79) width 367: "2em, or twice the element's font size (18"
+          text run at (0,79) width 11: "2"
+          text run at (11,79) width 356: "em, or twice the element's font size (18"
           text run at (367,79) width 84: "px and 36"
           text run at (451,79) width 167: "px, respectively). "
           text run at (618,79) width 113: "Extra text is"
@@ -127,7 +130,8 @@ layer at (0,0) size 800x4169
             text run at (698,16) width 67: "Its font-"
             text run at (0,70) width 711: "size should be 150% the base font size, and its line-height should be 300% of that value (18"
             text run at (711,70) width 47: "px and"
-            text run at (0,124) width 774: "54px, respectively). The text should have a silver background. The background color has been set on"
+            text run at (0,124) width 20: "54"
+            text run at (20,124) width 754: "px, respectively). The text should have a silver background. The background color has been set on"
             text run at (0,178) width 655: "an inline element and should therefore only cover the text, not the interline spacing."
         RenderText {TEXT} at (0,0) size 0x0
       RenderTable {TABLE} at (0,1759) size 784x2394 [border: (1px outset #808080)]
index a9d5114..89212a6 100644 (file)
@@ -29,7 +29,8 @@ layer at (0,0) size 800x792
           RenderText {TEXT} at (239,7) size 773x160
             text run at (239,7) width 264: "very long span in it, and the span has a 10"
             text run at (503,7) width 258: "px red border separated from the span by"
-            text run at (0,39) width 147: "2pt, and a margin of 30"
+            text run at (0,39) width 8: "2"
+            text run at (8,39) width 139: "pt, and a margin of 30"
             text run at (147,39) width 20: "pt. "
             text run at (167,39) width 606: "The padding and border should be present on all sides of the span (although vertical lines should"
             text run at (0,71) width 493: "appear only at the beginning and the end of the whole span, not on each line). "
@@ -77,7 +78,8 @@ layer at (0,0) size 800x792
                   RenderText {TEXT} at (239,7) size 761x160
                     text run at (239,7) width 264: "very long span in it, and the span has a 10"
                     text run at (503,7) width 258: "px red border separated from the span by"
-                    text run at (0,39) width 147: "2pt, and a margin of 30"
+                    text run at (0,39) width 8: "2"
+                    text run at (8,39) width 139: "pt, and a margin of 30"
                     text run at (147,39) width 20: "pt. "
                     text run at (167,39) width 560: "The padding and border should be present on all sides of the span (although vertical lines"
                     text run at (0,71) width 539: "should appear only at the beginning and the end of the whole span, not on each line). "
index d8a127b..224bcf2 100644 (file)
@@ -28,7 +28,8 @@ layer at (0,0) size 800x683
               RenderListMarker at (0,0) size 0x14
               RenderInline {A} at (0,0) size 110x18 [color=#800080]
                 RenderText {TEXT} at (0,0) size 110x18
-                  text run at (0,0) width 110: "W3C Web server"
+                  text run at (0,0) width 23: "W3"
+                  text run at (23,0) width 87: "C Web server"
               RenderText {TEXT} at (0,0) size 0x0
             RenderListItem {LI} at (40,18) size 704x18
               RenderListMarker at (0,0) size 0x14
@@ -104,7 +105,8 @@ layer at (0,0) size 800x683
                       RenderListMarker at (0,0) size 0x14
                       RenderInline {A} at (0,0) size 110x18 [color=#800080]
                         RenderText {TEXT} at (0,0) size 110x18
-                          text run at (0,0) width 110: "W3C Web server"
+                          text run at (0,0) width 23: "W3"
+                          text run at (23,0) width 87: "C Web server"
                       RenderText {TEXT} at (0,0) size 0x0
                     RenderListItem {LI} at (40,18) size 682x18
                       RenderListMarker at (0,0) size 0x14
index 87fd304..8082a0f 100644 (file)
@@ -4,8 +4,8 @@ layer at (0,0) size 800x600
   RenderBlock {HTML} at (0,0) size 800x600
     RenderBody {BODY} at (8,8) size 784x584
       RenderBlock {DIV} at (0,0) size 784x56 [border: (2px solid #FF0000)]
-        RenderInline {SPAN} at (0,0) size 56x28
-          RenderText {TEXT} at (14,14) size 56x28
-            text run at (14,14) width 56: "    foo"
+        RenderInline {SPAN} at (0,0) size 32x28
+          RenderText {TEXT} at (14,14) size 32x28
+            text run at (14,14) width 32: "foo"
         RenderText {TEXT} at (0,0) size 0x0
-caret: position 4 of child 0 {TEXT} of child 1 {SPAN} of child 1 {DIV} of child 1 {BODY} of child 0 {HTML} of document
+caret: position 0 of child 0 {TEXT} of child 0 {SPAN} of child 1 {DIV} of child 1 {BODY} of child 0 {HTML} of document
index 4264825..d4e8e1c 100644 (file)
@@ -4,7 +4,7 @@ layer at (0,0) size 800x600
   RenderBlock {HTML} at (0,0) size 800x600
     RenderBody {BODY} at (8,8) size 784x584
       RenderBlock {DIV} at (0,0) size 784x56 [border: (2px solid #FF0000)]
-        RenderInline {SPAN} at (0,0) size 56x28
-          RenderText {TEXT} at (14,14) size 56x28
-            text run at (14,14) width 56: "foo    "
-caret: position 7 of child 0 {TEXT} of child 1 {SPAN} of child 1 {DIV} of child 1 {BODY} of child 0 {HTML} of document
+        RenderInline {SPAN} at (0,0) size 8x28
+          RenderText {TEXT} at (14,14) size 8x28
+            text run at (14,14) width 8: "f"
+caret: position 1 of child 0 {TEXT} of child 1 {SPAN} of child 1 {DIV} of child 1 {BODY} of child 0 {HTML} of document
index bc7d6e4..488a050 100644 (file)
@@ -4,8 +4,8 @@ layer at (0,0) size 800x600
   RenderBlock {HTML} at (0,0) size 800x600
     RenderBody {BODY} at (8,8) size 784x584
       RenderBlock {DIV} at (0,0) size 784x56 [border: (2px solid #FF0000)]
-        RenderInline {SPAN} at (0,0) size 56x28
-          RenderText {TEXT} at (14,14) size 56x28
-            text run at (14,14) width 56: "fo    o"
+        RenderInline {SPAN} at (0,0) size 12x28
+          RenderText {TEXT} at (14,14) size 12x28
+            text run at (14,14) width 12: "o"
         RenderText {TEXT} at (0,0) size 0x0
-caret: position 6 of child 0 {TEXT} of child 1 {SPAN} of child 1 {DIV} of child 1 {BODY} of child 0 {HTML} of document
+caret: position 0 of child 0 {TEXT} of child 0 {SPAN} of child 1 {DIV} of child 1 {BODY} of child 0 {HTML} of document
index 477cf06..8082a0f 100644 (file)
@@ -3,10 +3,9 @@ layer at (0,0) size 800x600
 layer at (0,0) size 800x600
   RenderBlock {HTML} at (0,0) size 800x600
     RenderBody {BODY} at (8,8) size 784x584
-      RenderBlock {DIV} at (0,0) size 784x84 [border: (2px solid #FF0000)]
-        RenderInline {SPAN} at (0,0) size 56x56
-          RenderBR {BR} at (14,14) size 0x28
-          RenderText {TEXT} at (14,42) size 56x28
-            text run at (14,42) width 56: "    foo"
+      RenderBlock {DIV} at (0,0) size 784x56 [border: (2px solid #FF0000)]
+        RenderInline {SPAN} at (0,0) size 32x28
+          RenderText {TEXT} at (14,14) size 32x28
+            text run at (14,14) width 32: "foo"
         RenderText {TEXT} at (0,0) size 0x0
-caret: position 4 of child 1 {TEXT} of child 1 {SPAN} of child 1 {DIV} of child 1 {BODY} of child 0 {HTML} of document
+caret: position 0 of child 0 {TEXT} of child 0 {SPAN} of child 1 {DIV} of child 1 {BODY} of child 0 {HTML} of document
index 87fd304..503a807 100644 (file)
@@ -4,8 +4,11 @@ layer at (0,0) size 800x600
   RenderBlock {HTML} at (0,0) size 800x600
     RenderBody {BODY} at (8,8) size 784x584
       RenderBlock {DIV} at (0,0) size 784x56 [border: (2px solid #FF0000)]
-        RenderInline {SPAN} at (0,0) size 56x28
-          RenderText {TEXT} at (14,14) size 56x28
-            text run at (14,14) width 56: "    foo"
+        RenderInline {SPAN} at (0,0) size 80x28
+          RenderInline {SPAN} at (0,0) size 48x28
+            RenderText {TEXT} at (14,14) size 48x28
+              text run at (14,14) width 48: "\x{9}"
+          RenderText {TEXT} at (62,14) size 32x28
+            text run at (62,14) width 32: "foo"
         RenderText {TEXT} at (0,0) size 0x0
-caret: position 4 of child 0 {TEXT} of child 1 {SPAN} of child 1 {DIV} of child 1 {BODY} of child 0 {HTML} of document
+caret: position 1 of child 0 {TEXT} of child 0 {SPAN} of child 1 {SPAN} of child 1 {DIV} of child 1 {BODY} of child 0 {HTML} of document
index e1571e9..6d3c4f1 100644 (file)
@@ -4,8 +4,11 @@ layer at (0,0) size 800x600
   RenderBlock {HTML} at (0,0) size 800x600
     RenderBody {BODY} at (8,8) size 784x584
       RenderBlock {DIV} at (0,0) size 784x56 [border: (2px solid #FF0000)]
-        RenderInline {SPAN} at (0,0) size 56x28
-          RenderText {TEXT} at (14,14) size 56x28
-            text run at (14,14) width 56: "foo    "
+        RenderInline {SPAN} at (0,0) size 48x28
+          RenderText {TEXT} at (14,14) size 32x28
+            text run at (14,14) width 32: "foo"
+          RenderInline {SPAN} at (0,0) size 16x28
+            RenderText {TEXT} at (46,14) size 16x28
+              text run at (46,14) width 16: "\x{9}"
         RenderText {TEXT} at (0,0) size 0x0
-caret: position 7 of child 0 {TEXT} of child 1 {SPAN} of child 1 {DIV} of child 1 {BODY} of child 0 {HTML} of document
+caret: position 1 of child 0 {TEXT} of child 1 {SPAN} of child 1 {SPAN} of child 1 {DIV} of child 1 {BODY} of child 0 {HTML} of document
index bc7d6e4..7d46631 100644 (file)
@@ -4,8 +4,13 @@ layer at (0,0) size 800x600
   RenderBlock {HTML} at (0,0) size 800x600
     RenderBody {BODY} at (8,8) size 784x584
       RenderBlock {DIV} at (0,0) size 784x56 [border: (2px solid #FF0000)]
-        RenderInline {SPAN} at (0,0) size 56x28
-          RenderText {TEXT} at (14,14) size 56x28
-            text run at (14,14) width 56: "fo    o"
+        RenderInline {SPAN} at (0,0) size 60x28
+          RenderText {TEXT} at (14,14) size 20x28
+            text run at (14,14) width 20: "fo"
+          RenderInline {SPAN} at (0,0) size 28x28
+            RenderText {TEXT} at (34,14) size 28x28
+              text run at (34,14) width 28: "\x{9}"
+          RenderText {TEXT} at (62,14) size 12x28
+            text run at (62,14) width 12: "o"
         RenderText {TEXT} at (0,0) size 0x0
-caret: position 6 of child 0 {TEXT} of child 1 {SPAN} of child 1 {DIV} of child 1 {BODY} of child 0 {HTML} of document
+caret: position 1 of child 0 {TEXT} of child 1 {SPAN} of child 1 {SPAN} of child 1 {DIV} of child 1 {BODY} of child 0 {HTML} of document
index 477cf06..30bac16 100644 (file)
@@ -4,9 +4,12 @@ layer at (0,0) size 800x600
   RenderBlock {HTML} at (0,0) size 800x600
     RenderBody {BODY} at (8,8) size 784x584
       RenderBlock {DIV} at (0,0) size 784x84 [border: (2px solid #FF0000)]
-        RenderInline {SPAN} at (0,0) size 56x56
+        RenderInline {SPAN} at (0,0) size 80x56
           RenderBR {BR} at (14,14) size 0x28
-          RenderText {TEXT} at (14,42) size 56x28
-            text run at (14,42) width 56: "    foo"
+          RenderInline {SPAN} at (0,0) size 48x28
+            RenderText {TEXT} at (14,42) size 48x28
+              text run at (14,42) width 48: "\x{9}"
+          RenderText {TEXT} at (62,42) size 32x28
+            text run at (62,42) width 32: "foo"
         RenderText {TEXT} at (0,0) size 0x0
-caret: position 4 of child 1 {TEXT} of child 1 {SPAN} of child 1 {DIV} of child 1 {BODY} of child 0 {HTML} of document
+caret: position 1 of child 0 {TEXT} of child 1 {SPAN} of child 1 {SPAN} of child 1 {DIV} of child 1 {BODY} of child 0 {HTML} of document
index 656baeb..f9cadd6 100644 (file)
@@ -7,7 +7,8 @@ layer at (0,0) size 800x600
         RenderText {TEXT} at (14,14) size 715x56
           text run at (14,14) width 250: "Size check should say: 30"
           text run at (264,14) width 465: "px. All text in the red boxes should appear to be"
-          text run at (14,42) width 54: "30px."
+          text run at (14,42) width 24: "30"
+          text run at (38,42) width 30: "px."
       RenderBlock {DIV} at (0,108) size 784x28
         RenderText {TEXT} at (0,0) size 118x28
           text run at (0,0) width 118: "Size check: "
index 9ac587a..ae2c2a7 100644 (file)
@@ -7,7 +7,8 @@ layer at (0,0) size 800x600
         RenderText {TEXT} at (14,14) size 715x84
           text run at (14,14) width 250: "Size check should say: 30"
           text run at (264,14) width 465: "px. All text in the red boxes should appear to be"
-          text run at (14,42) width 688: "24px. This test checks removing font size tags when they are no longer"
+          text run at (14,42) width 24: "24"
+          text run at (38,42) width 664: "px. This test checks removing font size tags when they are no longer"
           text run at (14,70) width 100: "necessary."
       RenderBlock {DIV} at (0,136) size 784x28
         RenderText {TEXT} at (0,0) size 118x28
index a7949a6..b4f4319 100644 (file)
@@ -21,7 +21,8 @@ layer at (0,0) size 800x258
       RenderBlock {HR} at (293,190) size 198x2 [border: (1px inset #000000)]
       RenderBlock {P} at (0,208) size 784x18
         RenderText {TEXT} at (0,0) size 54x18
-          text run at (0,0) width 54: "(W3C: \x{201C}"
+          text run at (0,0) width 28: "(W3"
+          text run at (28,0) width 26: "C: \x{201C}"
         RenderInline {A} at (0,0) size 196x18 [color=#0000EE]
           RenderText {TEXT} at (54,0) size 196x18
             text run at (54,0) width 196: "By default, the rule is centered."
index db8fa09..d3bd5cd 100644 (file)
@@ -4,9 +4,8 @@ layer at (0,0) size 800x414
   RenderBlock {HTML} at (0,0) size 800x414
     RenderBody {BODY} at (8,16) size 784x18
       RenderBlock {P} at (0,0) size 784x18
-        RenderText {TEXT} at (0,0) size 420x18
-          text run at (0,0) width 358: "\x{9}\x{9}\x{9}This test case should produce a sine-wave stroked with 1"
-          text run at (358,0) width 62: "px black. "
-          text run at (420,0) width 0: "\x{9}\x{9}"
+        RenderText {TEXT} at (0,0) size 416x18
+          text run at (0,0) width 358: "This test case should produce a sine-wave stroked with 1"
+          text run at (358,0) width 58: "px black."
     RenderBlock (anonymous) at (0,50) size 800x364
       RenderCanvasImage {CANVAS} at (0,0) size 480x360
index dcbd29f..a5d0621 100644 (file)
@@ -5,10 +5,12 @@ layer at (0,0) size 800x600
     RenderBody {BODY} at (8,8) size 784x574
       RenderBlock (anonymous) at (0,0) size 784x54
         RenderText {TEXT} at (0,0) size 758x54
-          text run at (0,0) width 285: "In this sample, the H3s should not be nested. "
+          text run at (0,0) width 138: "In this sample, the H3"
+          text run at (138,0) width 147: "s should not be nested. "
           text run at (285,0) width 347: "While WinIE does allow the nesting, Firefox does not. "
           text run at (632,0) width 120: "We have chosen to"
-          text run at (0,18) width 758: "match Firefox, since we size H3s based off the current font size, and therefore nesting would lead to ever-increasing font"
+          text run at (0,18) width 203: "match Firefox, since we size H3"
+          text run at (203,18) width 555: "s based off the current font size, and therefore nesting would lead to ever-increasing font"
           text run at (0,36) width 34: "sizes."
       RenderBlock {H3} at (0,72) size 784x30 [border: (2px solid #FF0000)]
         RenderInline {I} at (0,0) size 33x22
index 3968b0a..f657389 100644 (file)
@@ -17,7 +17,7 @@ Your result: "-t's th- -nd -f th- w-rld -s w- kn-w -t, -nd - f--l f-n-."
 Support for String.replace(/…/,myFunction)
 
 function Capitalize(s){
-        return s.toUpperCase();
+       return s.toUpperCase();
 }
 result = foo.replace(vowels,Capitalize);
 Expected result: "It's thE End Of thE wOrld As wE knOw It, And I fEEl fInE."
@@ -26,7 +26,7 @@ Your result: "It's thE End Of thE wOrld As wE knOw It, And I fEEl fInE."
 Support for String.replace(/…/,myFunction), using RegExp
 
 function Capitalize(){
-        return RegExp.$1.toUpperCase()+RegExp.$2;
+       return RegExp.$1.toUpperCase()+RegExp.$2;
 }
 result = foo.replace(/([aeiou])([a-z])/g,Capitalize);
 Expected result: "It's the End Of the wOrld As we knOw It, And I fEel fIne."
@@ -35,7 +35,7 @@ Your result: "It's the End Of the wOrld As we knOw It, And I fEel fIne."
 Support for String.replace(/…/,myFunction), using parameters
 
 function Capitalize(orig,re1,re2){
-        return re1.toUpperCase()+re2;
+       return re1.toUpperCase()+re2;
 }
 result = foo.replace(/([aeiou])([a-z])/g,Capitalize);
 Expected result: "It's the End Of the wOrld As we knOw It, And I fEel fIne."
index f30ae64..35ac7a4 100644 (file)
@@ -190,7 +190,8 @@ layer at (0,0) size 800x334
             RenderListMarker at (646,0) size 0x14
             RenderInline {A} at (0,0) size 98x18 [color=#0000EE]
               RenderText {TEXT} at (646,0) size 98x18
-                text run at (646,0) width 98: "Dive Into J2EE"
+                text run at (646,0) width 78: "Dive Into J2"
+                text run at (724,0) width 20: "EE"
           RenderListItem {LI} at (40,72) size 744x18
             RenderListMarker at (635,0) size 0x14
             RenderInline {A} at (0,0) size 109x18 [color=#0000EE]
index dd1c9fd..8f87fba 100644 (file)
@@ -1358,7 +1358,8 @@ layer at (0,0) size 800x3319
             RenderText {TEXT} at (0,0) size 263x18
               text run at (0,0) width 263: "NEGATED Dynamic handling of :empty"
           RenderText {TEXT} at (263,0) size 46x18
-            text run at (263,0) width 46: " (#d1b)"
+            text run at (263,0) width 33: " (#d1"
+            text run at (296,0) width 13: "b)"
         RenderListItem {LI} at (40,2664) size 744x18
           RenderListMarker at (0,0) size 0x14
           RenderInline {A} at (0,0) size 215x18 [color=#0000EE]
@@ -1386,35 +1387,40 @@ layer at (0,0) size 800x3319
             RenderText {TEXT} at (0,0) size 176x18
               text run at (0,0) width 176: ":indeterminate and :checked"
           RenderText {TEXT} at (176,0) size 45x18
-            text run at (176,0) width 45: " (#d5a)"
+            text run at (176,0) width 33: " (#d5"
+            text run at (209,0) width 12: "a)"
         RenderListItem {LI} at (40,2736) size 744x18
           RenderListMarker at (0,0) size 0x14
           RenderInline {A} at (0,0) size 258x18 [color=#0000EE]
             RenderText {TEXT} at (0,0) size 258x18
               text run at (0,0) width 258: "NEGATED :indeterminate and :checked"
           RenderText {TEXT} at (258,0) size 46x18
-            text run at (258,0) width 46: " (#d5b)"
+            text run at (258,0) width 33: " (#d5"
+            text run at (291,0) width 13: "b)"
         RenderListItem {LI} at (40,2754) size 744x18
           RenderListMarker at (0,0) size 0x14
           RenderInline {A} at (0,0) size 176x18 [color=#0000EE]
             RenderText {TEXT} at (0,0) size 176x18
               text run at (0,0) width 176: ":indeterminate and :checked"
           RenderText {TEXT} at (176,0) size 45x18
-            text run at (176,0) width 45: " (#d5c)"
+            text run at (176,0) width 33: " (#d5"
+            text run at (209,0) width 12: "c)"
         RenderListItem {LI} at (40,2772) size 744x18
           RenderListMarker at (0,0) size 0x14
           RenderInline {A} at (0,0) size 181x18 [color=#0000EE]
             RenderText {TEXT} at (0,0) size 181x18
               text run at (0,0) width 181: ":indeterminate with :checked"
           RenderText {TEXT} at (181,0) size 46x18
-            text run at (181,0) width 46: " (#d5d)"
+            text run at (181,0) width 33: " (#d5"
+            text run at (214,0) width 13: "d)"
         RenderListItem {LI} at (40,2790) size 744x18
           RenderListMarker at (0,0) size 0x14
           RenderInline {A} at (0,0) size 263x18 [color=#0000EE]
             RenderText {TEXT} at (0,0) size 263x18
               text run at (0,0) width 263: "NEGATED :indeterminate with :checked"
           RenderText {TEXT} at (263,0) size 45x18
-            text run at (263,0) width 45: " (#d5e)"
+            text run at (263,0) width 33: " (#d5"
+            text run at (296,0) width 12: "e)"
       RenderBlock {P} at (0,3264) size 784x18
         RenderText {TEXT} at (0,0) size 60x18
           text run at (0,0) width 60: "See also: "
index 2b8a6bb..410d41c 100644 (file)
@@ -42,19 +42,11 @@ layer at (0,0) size 800x600
           RenderText {TEXT} at (0,0) size 49x18
             text run at (0,0) width 49: "Row 0:"
         RenderText {TEXT} at (49,0) size 170x18
-          text run at (49,0) width 38: " (1,1) "
-          text run at (87,0) width 34: "(1,2) "
-          text run at (121,0) width 34: "(1,3) "
-          text run at (155,0) width 34: "(1,4) "
-          text run at (189,0) width 30: "(1,5)"
+          text run at (49,0) width 170: " (1,1)\x{9}(1,2)\x{9}(1,3)\x{9}(1,4)\x{9}(1,5)"
         RenderBR {BR} at (0,0) size 0x0
         RenderInline {B} at (0,0) size 49x18
           RenderText {TEXT} at (0,18) size 49x18
             text run at (0,18) width 49: "Row 1:"
         RenderText {TEXT} at (49,18) size 170x18
-          text run at (49,18) width 38: " (2,1) "
-          text run at (87,18) width 34: "(2,2) "
-          text run at (121,18) width 34: "(2,3) "
-          text run at (155,18) width 34: "(2,4) "
-          text run at (189,18) width 30: "(2,5)"
+          text run at (49,18) width 170: " (2,1)\x{9}(2,2)\x{9}(2,3)\x{9}(2,4)\x{9}(2,5)"
         RenderBR {BR} at (0,0) size 0x0
index e1fefbf..17c9c52 100644 (file)
@@ -17,9 +17,9 @@ layer at (0,0) size 800x1438
           text run at (333,0) width 172: "The styles applied here are:"
       RenderBlock {PRE} at (0,92) size 784x180
         RenderText {TEXT} at (0,0) size 688x180
-          text run at (0,0) width 152: "TABLE   { margin: 1"
+          text run at (0,0) width 152: "TABLE\x{9}{ margin: 1"
           text run at (152,0) width 256: "em; border: medium solid blue; }"
-          text run at (0,15) width 368: "TD      { border: thin solid green; padding: 5"
+          text run at (0,15) width 368: "TD\x{9}{ border: thin solid green; padding: 5"
           text run at (368,15) width 40: "px; }"
           text run at (0,30) width 352: "TH { border: medium solid purple; padding: 5"
           text run at (352,30) width 40: "px; }"
@@ -34,7 +34,7 @@ layer at (0,0) size 800x1438
           text run at (0,120) width 328: "TABLE.five { border-collapse: separate; }"
           text run at (0,135) width 464: "TABLE.five, TABLE.five TD, TABLE.five TH { border: none; }"
           text run at (0,150) width 688: "TABLE.five TR, TABLE.five COL, TABLE.five COLGROUP, TABLE.five TBODY, TABLE.five THEAD"
-          text run at (0,165) width 296: "        { border: medium solid red; }"
+          text run at (0,165) width 296: "\x{9}{ border: medium solid red; }"
       RenderTable {TABLE} at (16,288) size 752x163
         RenderTableSection {TBODY} at (0,0) size 0x163
           RenderTableRow {TR} at (0,0) size 0x0
index f27fcbc..1d865d5 100644 (file)
@@ -16,7 +16,8 @@ layer at (0,0) size 800x600
                 RenderText {TEXT} at (2,2) size 85x126
                   text run at (2,2) width 37: "There"
                   text run at (2,20) width 76: "should be"
-                  text run at (2,38) width 64: "15px of"
+                  text run at (2,38) width 16: "15"
+                  text run at (18,38) width 48: "px of"
                   text run at (2,56) width 33: "word"
                   text run at (2,74) width 48: "spacing"
                   text run at (2,92) width 53: "between"
index cafc5c3..3b09c37 100644 (file)
@@ -4,7 +4,7 @@ layer at (0,0) size 800x600
   RenderBlock {HTML} at (0,0) size 800x600
     RenderBody {BODY} at (8,8) size 784x584
       RenderText {TEXT} at (0,0) size 55x18
-        text run at (0,0) width 55: "TEST... "
+        text run at (0,0) width 55: "TEST...\x{9}"
       RenderText {TEXT} at (0,0) size 0x0
       RenderText {TEXT} at (0,0) size 0x0
       RenderText {TEXT} at (55,0) size 232x18
index 84cd90a..2c264d9 100644 (file)
@@ -1,3 +1,47 @@
+2005-07-05  Geoffrey Garen  <ggaren@apple.com>
+
+        Rolled in patch by opendarwin.org@mitzpettel.com
+
+        -fixes http://bugzilla.opendarwin.org/show_bug.cgi?id=3733
+        Incorrect bidi layout of ETs, ANs, and ENs in some contexts
+        
+        Reviewed by hyatt.
+
+        * khtml/rendering/bidi.cpp:
+        (khtml::appendRun):
+        (khtml::RenderBlock::bidiReorderLine):
+        (khtml::RenderBlock::layoutInlineChildren):
+
+        Modified test results to account for run splitting.
+        This is a known bug that we need to fix separately:
+        http://bugzilla.opendarwin.org/show_bug.cgi?id=3838
+        
+        * layout-tests/css1/basic/containment-expected.txt:
+        * layout-tests/css1/box_properties/float_on_text_elements-expected.txt:
+        * layout-tests/css1/font_properties/font-expected.txt:
+        * layout-tests/css1/formatting_model/inline_elements-expected.txt:
+        * layout-tests/css1/pseudo/anchor-expected.txt:
+        * layout-tests/editing/deleting/delete-tab-001-expected.txt:
+        * layout-tests/editing/deleting/delete-tab-002-expected.txt:
+        * layout-tests/editing/deleting/delete-tab-003-expected.txt:
+        * layout-tests/editing/deleting/delete-tab-004-expected.txt:
+        * layout-tests/editing/inserting/insert-tab-001-expected.txt:
+        * layout-tests/editing/inserting/insert-tab-002-expected.txt:
+        * layout-tests/editing/inserting/insert-tab-003-expected.txt:
+        * layout-tests/editing/inserting/insert-tab-004-expected.txt:
+        * layout-tests/editing/style/relative-font-size-change-001-expected.txt:
+        * layout-tests/editing/style/relative-font-size-change-004-expected.txt:
+        * layout-tests/fast/block/basic/018-expected.txt:
+        * layout-tests/fast/dom/quadraticCurveTo-expected.txt:
+        * layout-tests/fast/invalid/nestedh3s-expected.txt:
+        * layout-tests/fast/js/string-replace-2-expected.txt:
+        * layout-tests/fast/lists/003-expected.txt:
+        * layout-tests/fast/selectors/166-expected.txt:
+        * layout-tests/fast/table/039-expected.txt:
+        * layout-tests/fast/table/border-collapsing/004-expected.txt:
+        * layout-tests/fast/text/basic/004-expected.txt:
+        * layout-tests/fast/tokenizer/script_extra_close-expected.txt:
+
 2005-07-05  Adele Peterson  <adele@apple.com>
 
        Rolling out changes for <rdar://problem/3792529> REGRESSION (Mail): Tabs do not work the way they did in Panther (especially useful in plain text mail)
index acb2203..7b8be2e 100644 (file)
@@ -541,7 +541,8 @@ static void appendRunsForObject(int start, int end, RenderObject* obj, BidiState
 
 static void appendRun( BidiState &bidi )
 {
-    if ( emptyRun ) return;
+    if (emptyRun || !bidi.eor.obj)
+        return;
 #if BIDI_DEBUG > 1
     kdDebug(6041) << "appendRun: dir="<<(int)dir<<endl;
 #endif
@@ -867,21 +868,10 @@ void RenderBlock::bidiReorderLine(const BidiIterator &start, const BidiIterator
     
     //    context->ref();
 
-    dir = QChar::DirON;
-    
-    // Adopt the directionality of the text's element if specified as RTL
-    // and the first position is neutral.
-    if (start.direction() == QChar::DirON) {
-        if (start.obj) {
-            if (start.obj->style()->direction() == RTL)
-                dir = QChar::DirR;
-        }
-        else if (style()->direction() == RTL) {
-            dir = QChar::DirR;
-        }
-    }
+    dir = bidi.context->dir;
 
     emptyRun = true;
+    bidi.eor.obj = 0;
 
     numSpaces = 0;
 
@@ -926,13 +916,18 @@ void RenderBlock::bidiReorderLine(const BidiIterator &start, const BidiIterator
                 dir = QChar::DirL;
             switch(bidi.status.last)
                 {
-                case QChar::DirL:
-                    bidi.eor = bidi.current; bidi.status.eor = QChar::DirL; break;
                 case QChar::DirR:
                 case QChar::DirAL:
                 case QChar::DirEN:
                 case QChar::DirAN:
+                    // to avoid many unncessary splits, the following appendRun can
+                    // be done only if (bidi.status.last != QChar::DirEN || bidi.status.lastStrong != QChar::DirL )
                     appendRun( bidi );
+                    dir = QChar::DirL;
+                    // fall through
+                case QChar::DirL:
+                    bidi.eor = bidi.current;
+                    bidi.status.eor = QChar::DirL;
                     break;
                 case QChar::DirES:
                 case QChar::DirET:
@@ -942,29 +937,42 @@ void RenderBlock::bidiReorderLine(const BidiIterator &start, const BidiIterator
                 case QChar::DirS:
                 case QChar::DirWS:
                 case QChar::DirON:
-                    if( bidi.status.eor != QChar::DirL ) {
+                    if (bidi.status.eor == QChar::DirEN) {
+                        if (bidi.status.lastStrong != QChar::DirL) {
+                            // the numbers need to be on a higher embedding level, so let's close that run
+                            dir = QChar::DirEN;
+                            appendRun(bidi);
+                            if (bidi.context->dir != QChar::DirL) {
+                                // the neutrals take the embedding direction, which is R
+                                bidi.eor = bidi.last;
+                                dir = QChar::DirR;
+                                appendRun(bidi);
+                            }
+                        }
+                    } else if (bidi.status.eor == QChar::DirAN) {
+                        // Arabic numbers are always on a higher embedding level, so let's close that run
+                        dir = QChar::DirAN;
+                        appendRun(bidi);
+                        if (bidi.context->dir != QChar::DirL) {
+                            // the neutrals take the embedding direction, which is R
+                            bidi.eor = bidi.last;
+                            dir = QChar::DirR;
+                            appendRun(bidi);
+                        }
+                    } else if(bidi.status.eor != QChar::DirL) {
                         //last stuff takes embedding dir
                         if(bidi.context->dir == QChar::DirL || bidi.status.lastStrong == QChar::DirL) { 
-                            if ( bidi.status.eor != QChar::DirEN && bidi.status.eor != QChar::DirAN && bidi.status.eor != QChar::DirON 
+                            if (bidi.status.eor != QChar::DirON
                             appendRun( bidi );
-                            dir = QChar::DirL;
-                            bidi.eor = bidi.current; 
-                            bidi.status.eor = QChar::DirL;
                         } else {
-                            if ( bidi.status.eor == QChar::DirEN || bidi.status.eor == QChar::DirAN ) 
-                            { 
-                                dir = bidi.status.eor; 
-                                appendRun( bidi );
-                            }
                             dir = QChar::DirR; 
                             bidi.eor = bidi.last; 
                             appendRun( bidi ); 
-                            dir = QChar::DirL; 
-                            bidi.status.eor = QChar::DirL; 
                         }
-                    } else {
-                        bidi.eor = bidi.current; bidi.status.eor = QChar::DirL;
                     }
+                    bidi.eor = bidi.current;
+                    bidi.status.eor = QChar::DirL;
+                    dir = QChar::DirL;
                 default:
                     break;
                 }
@@ -1112,28 +1120,32 @@ void RenderBlock::bidiReorderLine(const BidiIterator &start, const BidiIterator
                 case QChar::DirS:
                 case QChar::DirWS:
                 case QChar::DirON:
-                    if(bidi.status.eor == QChar::DirR) {
-                        // neutrals go to R
-                        bidi.eor = bidi.last;
-                        appendRun( bidi );
-                        dir = QChar::DirAN;
-                        bidi.status.eor = QChar::DirAN;
-                    } else if( bidi.status.eor == QChar::DirL ||
-                               (bidi.status.eor == QChar::DirEN && bidi.status.lastStrong == QChar::DirL)) {
-                        bidi.eor = bidi.current; bidi.status.eor = dirCurrent;
-                    } else {
-                        // numbers on both sides, neutrals get right to left direction
-                        if(dir != QChar::DirL) {
+                    if(bidi.status.eor != QChar::DirR && bidi.status.eor != QChar::DirAL) {
+                        // run of L before neutrals, neutrals take embedding dir (N2)
+                        if(bidi.context->dir == QChar::DirR || bidi.status.lastStrong == QChar::DirR 
+                            || bidi.status.lastStrong == QChar::DirAL) { 
+                            // the embedding direction is R
+                            // close the L run
                             appendRun( bidi );
+                            // neutrals become an R run
                             bidi.eor = bidi.last;
                             dir = QChar::DirR;
                             appendRun( bidi );
-                            dir = QChar::DirAN;
-                            bidi.status.eor = QChar::DirAN;
+                            bidi.eor = bidi.current;
                         } else {
-                            bidi.eor = bidi.current; bidi.status.eor = dirCurrent;
+                            // the embedding direction is L
+                            // append neutrals to the L run and close it
+                            dir = QChar::DirL; 
+                            bidi.eor = bidi.last;
+                            appendRun(bidi);
                         }
+                    } else {
+                        bidi.eor = bidi.last;
+                        appendRun(bidi);
+                        bidi.eor = bidi.current;
                     }
+                    dir = QChar::DirAN;
+                    bidi.status.eor = QChar::DirAN;
                 default:
                     break;
                 }
@@ -1146,6 +1158,17 @@ void RenderBlock::bidiReorderLine(const BidiIterator &start, const BidiIterator
                 dirCurrent = QChar::DirEN;
                 bidi.eor = bidi.current; bidi.status.eor = dirCurrent;
                 break;
+            } else if ((bidi.status.eor == QChar::DirR || bidi.status.eor == QChar::DirAL || bidi.status.eor == QChar::DirAN || (bidi.status.eor == QChar::DirEN && bidi.status.lastStrong == QChar::DirR)) && bidi.last!=bidi.current) {
+                // most of the time this is unnecessary, but we need to secure the R run in case
+                // the ET ends up being neutral and followed by L
+                if (bidi.status.last!=QChar::DirET) {
+                    dir = bidi.status.eor;
+                    appendRun(bidi);
+                    bidi.eor = bidi.last;
+                }
+                bidi.status.eor = QChar::DirR;
+                dir = QChar::DirR;
+                break;
             }
             break;
 
@@ -1175,6 +1198,9 @@ void RenderBlock::bidiReorderLine(const BidiIterator &start, const BidiIterator
         switch(dirCurrent)
             {
             case QChar::DirET:
+                if (bidi.status.last != QChar::DirEN)
+                    bidi.status.last = QChar::DirET;
+                break;
             case QChar::DirES:
             case QChar::DirCS:
             case QChar::DirS:
@@ -1198,9 +1224,6 @@ void RenderBlock::bidiReorderLine(const BidiIterator &start, const BidiIterator
                 // ignore these
                 break;
             case QChar::DirEN:
-                if ( bidi.status.last == QChar::DirL ) {
-                    break;
-                }
                 // fall through
             default:
                 bidi.status.last = dirCurrent;
@@ -1212,7 +1235,6 @@ void RenderBlock::bidiReorderLine(const BidiIterator &start, const BidiIterator
 
        if ( emptyRun ) {
            bidi.sor = bidi.current;
-           bidi.eor = bidi.current;
            emptyRun = false;
        }
 
@@ -1435,8 +1457,8 @@ QRect RenderBlock::layoutInlineChildren(bool relayoutChildren)
         }
         startEmbed->ref();
 
-       bidi.status.lastStrong = QChar::DirON;
-       bidi.status.last = QChar::DirON;
+        bidi.status.lastStrong = startEmbed->dir;
+        bidi.status.last = startEmbed->dir;
         bidi.context = startEmbed;
         
         if (!smidpoints)