2011-03-30 Yael Aharon <yael.aharon@nokia.com>
authoryael.aharon@nokia.com <yael.aharon@nokia.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 30 Mar 2011 10:09:29 +0000 (10:09 +0000)
committeryael.aharon@nokia.com <yael.aharon@nokia.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 30 Mar 2011 10:09:29 +0000 (10:09 +0000)
        Reviewed by Eric Seidel.

        Left/Right borders/padding/margins are not always added correctly when rendering multiline inline boxes with bidi elements
        https://bugs.webkit.org/show_bug.cgi?id=9272

        * fast/borders/rtl-border-01.html: Added.
        * fast/borders/rtl-border-02.html: Added.
        * fast/borders/rtl-border-03.html: Added.
        * fast/borders/rtl-border-04.html: Added.
        * fast/borders/rtl-border-05.html: Added.
        * platform/mac/css2.1/t090501-c414-flt-ln-02-d-expected.checksum:
        * platform/mac/css2.1/t090501-c414-flt-ln-02-d-expected.png:
        * platform/mac/css2.1/t090501-c414-flt-ln-02-d-expected.txt:
        * platform/mac/fast/borders/rtl-border-01-expected.checksum: Added.
        * platform/mac/fast/borders/rtl-border-01-expected.png: Added.
        * platform/mac/fast/borders/rtl-border-01-expected.txt: Added.
        * platform/mac/fast/borders/rtl-border-02-expected.checksum: Added.
        * platform/mac/fast/borders/rtl-border-02-expected.png: Added.
        * platform/mac/fast/borders/rtl-border-02-expected.txt: Added.
        * platform/mac/fast/borders/rtl-border-03-expected.checksum: Added.
        * platform/mac/fast/borders/rtl-border-03-expected.png: Added.
        * platform/mac/fast/borders/rtl-border-03-expected.txt: Added.
        * platform/mac/fast/borders/rtl-border-04-expected.checksum: Added.
        * platform/mac/fast/borders/rtl-border-04-expected.png: Added.
        * platform/mac/fast/borders/rtl-border-04-expected.txt: Added.
        * platform/mac/fast/borders/rtl-border-05-expected.checksum: Added.
        * platform/mac/fast/borders/rtl-border-05-expected.png: Added.
        * platform/mac/fast/borders/rtl-border-05-expected.txt: Added.
2011-03-30  Yael Aharon  <yael.aharon@nokia.com>

        Reviewed by Eric Seidel.

        Left/Right borders/padding/margins are not always added correctly when rendering multiline inline boxes with bidi elements
        https://bugs.webkit.org/show_bug.cgi?id=9272

        Also fixes https://bugs.webkit.org/show_bug.cgi?id=47210 and https://bugs.webkit.org/show_bug.cgi?id=8392.

        Change how we decide if an InlineFlowBox is the last one for its renderer. Use the position of resolver's logicallyLastRun
        to decide if there is more text in the next line.

        Tests: fast/borders/rtl-border-01.html
               fast/borders/rtl-border-02.html
               fast/borders/rtl-border-03.html
               fast/borders/rtl-border-04.html
               fast/borders/rtl-border-05.html

        * rendering/InlineFlowBox.cpp:
        (WebCore::isAnsectorAndWithinBlock):
        (WebCore::InlineFlowBox::determineSpacingForFlowBoxes):
        * rendering/InlineFlowBox.h:
        * rendering/RenderBlock.h:
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::constructLine):
        (WebCore::reachedEndOfTextRenderer):
        (WebCore::RenderBlock::layoutInlineChildren):

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

29 files changed:
LayoutTests/ChangeLog
LayoutTests/fast/borders/rtl-border-01.html [new file with mode: 0644]
LayoutTests/fast/borders/rtl-border-02.html [new file with mode: 0644]
LayoutTests/fast/borders/rtl-border-03.html [new file with mode: 0644]
LayoutTests/fast/borders/rtl-border-04.html [new file with mode: 0644]
LayoutTests/fast/borders/rtl-border-05.html [new file with mode: 0644]
LayoutTests/platform/mac/css2.1/t090501-c414-flt-ln-02-d-expected.checksum
LayoutTests/platform/mac/css2.1/t090501-c414-flt-ln-02-d-expected.png
LayoutTests/platform/mac/css2.1/t090501-c414-flt-ln-02-d-expected.txt
LayoutTests/platform/mac/fast/borders/rtl-border-01-expected.checksum [new file with mode: 0644]
LayoutTests/platform/mac/fast/borders/rtl-border-01-expected.png [new file with mode: 0644]
LayoutTests/platform/mac/fast/borders/rtl-border-01-expected.txt [new file with mode: 0644]
LayoutTests/platform/mac/fast/borders/rtl-border-02-expected.checksum [new file with mode: 0644]
LayoutTests/platform/mac/fast/borders/rtl-border-02-expected.png [new file with mode: 0644]
LayoutTests/platform/mac/fast/borders/rtl-border-02-expected.txt [new file with mode: 0644]
LayoutTests/platform/mac/fast/borders/rtl-border-03-expected.checksum [new file with mode: 0644]
LayoutTests/platform/mac/fast/borders/rtl-border-03-expected.png [new file with mode: 0644]
LayoutTests/platform/mac/fast/borders/rtl-border-03-expected.txt [new file with mode: 0644]
LayoutTests/platform/mac/fast/borders/rtl-border-04-expected.checksum [new file with mode: 0644]
LayoutTests/platform/mac/fast/borders/rtl-border-04-expected.png [new file with mode: 0644]
LayoutTests/platform/mac/fast/borders/rtl-border-04-expected.txt [new file with mode: 0644]
LayoutTests/platform/mac/fast/borders/rtl-border-05-expected.checksum [new file with mode: 0644]
LayoutTests/platform/mac/fast/borders/rtl-border-05-expected.png [new file with mode: 0644]
LayoutTests/platform/mac/fast/borders/rtl-border-05-expected.txt [new file with mode: 0644]
Source/WebCore/ChangeLog
Source/WebCore/rendering/InlineFlowBox.cpp
Source/WebCore/rendering/InlineFlowBox.h
Source/WebCore/rendering/RenderBlock.h
Source/WebCore/rendering/RenderBlockLineLayout.cpp

index d1285d9..d574b29 100644 (file)
@@ -1,3 +1,34 @@
+2011-03-30  Yael Aharon  <yael.aharon@nokia.com>
+
+        Reviewed by Eric Seidel.
+
+        Left/Right borders/padding/margins are not always added correctly when rendering multiline inline boxes with bidi elements
+        https://bugs.webkit.org/show_bug.cgi?id=9272
+
+        * fast/borders/rtl-border-01.html: Added.
+        * fast/borders/rtl-border-02.html: Added.
+        * fast/borders/rtl-border-03.html: Added.
+        * fast/borders/rtl-border-04.html: Added.
+        * fast/borders/rtl-border-05.html: Added.
+        * platform/mac/css2.1/t090501-c414-flt-ln-02-d-expected.checksum:
+        * platform/mac/css2.1/t090501-c414-flt-ln-02-d-expected.png:
+        * platform/mac/css2.1/t090501-c414-flt-ln-02-d-expected.txt:
+        * platform/mac/fast/borders/rtl-border-01-expected.checksum: Added.
+        * platform/mac/fast/borders/rtl-border-01-expected.png: Added.
+        * platform/mac/fast/borders/rtl-border-01-expected.txt: Added.
+        * platform/mac/fast/borders/rtl-border-02-expected.checksum: Added.
+        * platform/mac/fast/borders/rtl-border-02-expected.png: Added.
+        * platform/mac/fast/borders/rtl-border-02-expected.txt: Added.
+        * platform/mac/fast/borders/rtl-border-03-expected.checksum: Added.
+        * platform/mac/fast/borders/rtl-border-03-expected.png: Added.
+        * platform/mac/fast/borders/rtl-border-03-expected.txt: Added.
+        * platform/mac/fast/borders/rtl-border-04-expected.checksum: Added.
+        * platform/mac/fast/borders/rtl-border-04-expected.png: Added.
+        * platform/mac/fast/borders/rtl-border-04-expected.txt: Added.
+        * platform/mac/fast/borders/rtl-border-05-expected.checksum: Added.
+        * platform/mac/fast/borders/rtl-border-05-expected.png: Added.
+        * platform/mac/fast/borders/rtl-border-05-expected.txt: Added.
+
 2011-03-30  Yuta Kitamura  <yutak@chromium.org>
 
         Unreviewed, add/update new Chromium test results.
diff --git a/LayoutTests/fast/borders/rtl-border-01.html b/LayoutTests/fast/borders/rtl-border-01.html
new file mode 100644 (file)
index 0000000..1eaf343
--- /dev/null
@@ -0,0 +1,80 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
+    "http://www.w3.org/TR/html4/strict.dtd">
+<html>
+<head>
+  <style>
+    h1 {
+        font-weight: bold;
+        font-size: 1em;
+    }
+    div {
+        border: 1px solid black;
+        padding: 5px;
+    }
+    div p {
+        line-height: 2em;
+    }
+    #ltor p {
+        direction: ltr;
+    }
+    #rtol p {
+        direction: rtl;
+    }
+    span {
+        display: inline;
+        margin: 0 10px 0 25px;
+        padding: 0 25px 0 10px;
+        border: 1px solid blue;
+        border-left: 10px solid green;
+        border-right: 10px solid orange;
+    }
+  </style>
+</head>
+<body>
+  <p>There should be a SPAN in the middle of all four paragraphs that has padding, a green border, and a margin on the left,
+     and padding, an orange border, and a margin on the right.</p>
+
+  <h1>Left-to-Right</h1>
+  <div id="ltor">
+    <p> 
+      Lorem ipsum dolor 
+      <span>
+        sit amet, consectetur
+      </span>
+      adipisicing elit, sed do eiusmod tempor incididunt ut.
+    </p>
+    <p> 
+      Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut
+      labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco
+      <span>
+        laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in
+        voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat
+        non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Lorem ipsum dolor
+      </span>
+      sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore
+    </p>
+  </div>
+  
+  <h1>Right-to-Left</h1>
+  <div id="rtol">
+    <p> 
+      Lorem ipsum dolor 
+      <span>
+        sit amet, consectetur
+      </span>
+      adipisicing elit, sed do eiusmod tempor incididunt ut.
+    </p>
+    <p> 
+      Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut
+      labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco
+      <span>
+        laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in
+        voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat
+        non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Lorem ipsum dolor
+      </span>
+      sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore
+      magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip.
+    </p>
+  </div>
+</body>
+</html>
diff --git a/LayoutTests/fast/borders/rtl-border-02.html b/LayoutTests/fast/borders/rtl-border-02.html
new file mode 100644 (file)
index 0000000..aae8922
--- /dev/null
@@ -0,0 +1,90 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
+    "http://www.w3.org/TR/html4/strict.dtd">
+<html>
+<head>
+  <style>
+    h1 {
+        font-weight: bold;
+        font-size: 1em;
+    }
+    div {
+        border: 1px solid black;
+        padding: 5px;
+    }
+    div p {
+        line-height: 2em;
+    }
+    #ltor p {
+        direction: ltr;
+        unicode-bidi: normal;
+    }
+    #rtol p {
+        direction: rtl;
+        unicode-bidi: bidi-override;
+    }
+    span {
+        display: inline;
+        margin: 0 10px 0 25px;
+        padding: 0 25px 0 10px;
+        border: 1px solid blue;
+        border-left: 10px solid green;
+        border-right: 10px solid orange;
+    }
+    #ltor span {
+        direction: rtl;
+        unicode-bidi: bidi-override;
+    }
+    #rtol span {
+        direction: ltr;
+        unicode-bidi: normal;
+    }
+  </style>
+</head>
+<body>
+  <p>There should be a SPAN in the middle of all four paragraphs that has padding, a green border, and a margin on the left,
+     and padding, an orange border, and a margin on the right.</p>
+    
+  <h1>Left-to-Right</h1>
+  <div id="ltor">
+    <p> 
+      Lorem ipsum dolor 
+      <span>
+        sit amet, consectetur
+      </span>
+      adipisicing elit, sed do eiusmod tempor incididunt ut.
+    </p>
+    <p> 
+      Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut
+      labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco
+      <span>
+        laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in
+        voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat
+        non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Lorem ipsum dolor
+      </span>
+      sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore
+    </p>
+  </div>
+  
+  <h1>Right-to-Left</h1>
+  <div id="rtol">
+    <p> 
+      Lorem ipsum dolor 
+      <span>
+        sit amet, consectetur
+      </span>
+      adipisicing elit, sed do eiusmod tempor incididunt ut.
+    </p>
+    <p> 
+      Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut
+      labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco
+      <span >
+        laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in
+        voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat
+        non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Lorem ipsum dolor
+      </span>
+      sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore
+      magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip.
+    </p>
+  </div>
+</body>
+</html>
diff --git a/LayoutTests/fast/borders/rtl-border-03.html b/LayoutTests/fast/borders/rtl-border-03.html
new file mode 100644 (file)
index 0000000..76496bb
--- /dev/null
@@ -0,0 +1,86 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
+    "http://www.w3.org/TR/html4/strict.dtd">
+<html>
+<head>
+  <style>
+    h1 {
+        font-weight: bold;
+        font-size: 1em;
+    }
+    div {
+        border: 1px solid black;
+        padding: 5px;
+    }
+    div p {
+        line-height: 2em;
+    }
+    #ltor p {
+        direction: ltr;
+    }
+    #rtol p {
+        direction: rtl;
+    }
+    span {
+        display: inline;
+        margin: 0 10px 0 25px;
+        padding: 0 25px 0 10px;
+        border: 1px solid blue;
+        border-left: 10px solid green;
+        border-right: 10px solid orange;
+    }
+    #ltor span {
+        direction: rtl;
+    }
+    #rtol span {
+        direction: ltr;
+    }
+  </style>
+</head>
+<body>
+  <p>There should be a SPAN in the middle of all four paragraphs that has padding, a green border, and a margin on the left,
+     and padding, an orange border, and a margin on the right.</p>
+    
+  <h1>Left-to-Right</h1>
+  <div id="ltor">
+    <p> 
+      Lorem ipsum dolor 
+      <span>
+        sit amet, consectetur
+      </span>
+      adipisicing elit, sed do eiusmod tempor incididunt ut.
+    </p>
+    <p> 
+      Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut
+      labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco
+      <span>
+        laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in
+        voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat
+        non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Lorem ipsum dolor
+      </span>
+      sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore
+    </p>
+  </div>
+  
+  <h1>Right-to-Left</h1>
+  <div id="rtol">
+    <p> 
+      Lorem ipsum dolor 
+      <span>
+        sit amet, consectetur
+      </span>
+      adipisicing elit, sed do eiusmod tempor incididunt ut.
+    </p>
+    <p> 
+      Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut
+      labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco
+      <span >
+        laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in
+        voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat
+        non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Lorem ipsum dolor
+      </span>
+      sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore
+      magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip.
+    </p>
+  </div>
+</body>
+</html>
diff --git a/LayoutTests/fast/borders/rtl-border-04.html b/LayoutTests/fast/borders/rtl-border-04.html
new file mode 100644 (file)
index 0000000..3948ac1
--- /dev/null
@@ -0,0 +1,47 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
+    "http://www.w3.org/TR/html4/strict.dtd">
+<html>
+<head>
+  <meta http-equiv="Content-type" content="text/html; charset=utf-8">
+  <style>
+    div {
+        border: 1px solid black;
+        padding: 5px;
+    }
+    div p {
+        line-height: 2em;
+        direction: rtl;
+    }
+    span {
+        display: inline;
+        margin: 0 10px 0 25px;
+        padding: 0 25px 0 10px;
+        border: 1px solid blue;
+        border-left: 10px solid green;
+        border-right: 10px solid orange;
+    }
+  </style>
+</head>
+<body>
+  <div>
+    <p lang="he">
+      למה עשיתי זאת – איני יודע בעצמי.  מהלך הייתי בשעת ערבית ברחוב.  בחוץ היה קור
+<span>
+וטחב, גשם של בציר דק, קר, עגום וממושך הסתנן בלי הפסק מלמעלה, כמו מתוך נפה דקה, ומלמטה התבוסס רפש דק לכל מדרך כף רגל...  לשהות יותר בחוץ לא היה נעים כלל, ובבית
+</span>
+        היו צפויים לי ארבעת כתלי חדרי הקודרים והאלמים יחד עם בדידות כבדה ומעיקה
+    </p>
+    <p>
+      Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut
+      labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco
+      <span>
+        laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in
+        voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat
+        non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Lorem ipsum dolor
+      </span>
+      sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore
+      magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip.
+    </p>
+  </div>
+</body>
+</html>
diff --git a/LayoutTests/fast/borders/rtl-border-05.html b/LayoutTests/fast/borders/rtl-border-05.html
new file mode 100644 (file)
index 0000000..a9e0964
--- /dev/null
@@ -0,0 +1,64 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
+    "http://www.w3.org/TR/html4/strict.dtd">
+<html>
+<head>
+  <meta http-equiv="Content-type" content="text/html; charset=utf-8">
+  <style>
+    h1 {
+        font-weight: bold;
+        font-size: 1em;
+    }
+    div {
+        border: 1px solid black;
+        padding: 5px;
+        width: 200px;
+    }
+    div p {
+        line-height: 2em;
+    }
+    #ltor p {
+        direction: ltr;
+    }
+    #rtol p {
+        direction: rtl;
+    }
+    #ltor span {
+        direction: ltr;
+        display: inline;
+        margin: 0 10px 0 25px;
+        padding: 0 25px 0 10px;
+        border: 1px solid blue;
+        border-left: 10px solid green;
+        border-right: 10px solid orange;
+    }
+    #rtol span {
+        direction: rtl;
+        display: inline;
+        margin: 0 10px 0 25px;
+        padding: 0 25px 0 10px;
+        border: 1px solid blue;
+        border-left: 10px solid green;
+        border-right: 10px solid orange;
+    }
+  </style>
+</head>
+<body>
+  <p>Test that when we have images sprinkled within a span, borders, paddings and margins are still calculated correctly .</p>
+<div id="ltor">
+<p> aaa bbb ccc ddd eee fff למה עשיתי זאת  gg<span> dgnjk <img src="#" style="border:1px solid blue;">njkng
+</span> 
+     זאת – איני יודע בעצמ
+qqq rrr sss ttt uuu vvv</p>
+<p><span>Some fill text<img src="#"></span></p>
+</div>
+<div id="rtol">
+<p> aaa bbb ccc ddd eee fff למה עשיתי זאת  gg<span> dgnjk <img src="#" style="border:1px solid blue;">njkng
+</span> 
+     זאת – איני יודע בעצמ
+qqq rrr sss ttt uuu vvv</p>
+<p><span>Some fill text<img src="#"></span></p>
+</div>
+  
+  
+</body>
+</html>
index a297376..e988446 100644 (file)
Binary files a/LayoutTests/platform/mac/css2.1/t090501-c414-flt-ln-02-d-expected.png and b/LayoutTests/platform/mac/css2.1/t090501-c414-flt-ln-02-d-expected.png differ
index f920f59..937b1d5 100644 (file)
@@ -27,7 +27,7 @@ layer at (0,0) size 800x544
         RenderText {#text} at (596,22) size 552x38
           text run at (596,22) width 127: "dummy text dummy"
           text run at (171,42) width 343: "text dummy text dummy text dummy text dummy text "
-        RenderInline {SPAN} at (0,0) size 14x24 [color=#FFFFFF] [bgcolor=#800080] [border: (3px solid #FF00FF)]
+        RenderInline {SPAN} at (0,0) size 17x24 [color=#FFFFFF] [bgcolor=#800080] [border: (3px solid #FF00FF)]
           RenderText {#text} at (517,42) size 11x18
             text run at (517,42) width 11: "B"
         RenderText {#text} at (0,0) size 0x0
@@ -36,7 +36,7 @@ layer at (0,0) size 800x544
             text run at (19,20) width 44: "BBBB"
         RenderText {#text} at (321,62) size 237x18
           text run at (321,62) width 237: "dummy text dummy text dummy text "
-        RenderInline {SPAN} at (0,0) size 14x24 [color=#FFFFFF] [bgcolor=#FFA500] [border: (3px solid #FFFF00)]
+        RenderInline {SPAN} at (0,0) size 17x24 [color=#FFFFFF] [bgcolor=#FFA500] [border: (3px solid #FFFF00)]
           RenderText {#text} at (561,62) size 11x18
             text run at (561,62) width 11: "C"
         RenderText {#text} at (0,0) size 0x0
@@ -46,7 +46,7 @@ layer at (0,0) size 800x544
         RenderText {#text} at (321,82) size 387x38
           text run at (321,82) width 233: "dummy text dummy text dummy text"
           text run at (471,102) width 237: "dummy text dummy text dummy text "
-        RenderInline {SPAN} at (0,0) size 15x24 [color=#FFFFFF] [bgcolor=#008000] [border: (3px solid #00FF00)]
+        RenderInline {SPAN} at (0,0) size 18x24 [color=#FFFFFF] [bgcolor=#008000] [border: (3px solid #00FF00)]
           RenderText {#text} at (711,102) size 12x18
             text run at (711,102) width 12: "D"
         RenderText {#text} at (0,0) size 0x0
diff --git a/LayoutTests/platform/mac/fast/borders/rtl-border-01-expected.checksum b/LayoutTests/platform/mac/fast/borders/rtl-border-01-expected.checksum
new file mode 100644 (file)
index 0000000..2a412d4
--- /dev/null
@@ -0,0 +1 @@
+23b0de940b48582896b2f49223b8a3c7
\ No newline at end of file
diff --git a/LayoutTests/platform/mac/fast/borders/rtl-border-01-expected.png b/LayoutTests/platform/mac/fast/borders/rtl-border-01-expected.png
new file mode 100644 (file)
index 0000000..e0df8e5
Binary files /dev/null and b/LayoutTests/platform/mac/fast/borders/rtl-border-01-expected.png differ
diff --git a/LayoutTests/platform/mac/fast/borders/rtl-border-01-expected.txt b/LayoutTests/platform/mac/fast/borders/rtl-border-01-expected.txt
new file mode 100644 (file)
index 0000000..32803e3
--- /dev/null
@@ -0,0 +1,65 @@
+layer at (0,0) size 794x678
+  RenderView at (0,0) size 785x585
+layer at (0,0) size 785x678
+  RenderBlock {HTML} at (0,0) size 785x678
+    RenderBody {BODY} at (8,16) size 769x654
+      RenderBlock {P} at (0,0) size 769x36
+        RenderText {#text} at (0,0) size 751x36
+          text run at (0,0) width 751: "There should be a SPAN in the middle of all four paragraphs that has padding, a green border, and a margin on the left,"
+          text run at (0,18) width 363: "and padding, an orange border, and a margin on the right."
+      RenderBlock {H1} at (0,52) size 769x18
+        RenderText {#text} at (0,0) size 89x18
+          text run at (0,0) width 89: "Left-to-Right"
+      RenderBlock {DIV} at (0,80) size 769x252 [border: (1px solid #000000)]
+        RenderBlock {P} at (6,22) size 757x32
+          RenderText {#text} at (0,7) size 125x18
+            text run at (0,7) width 125: "Lorem ipsum dolor "
+          RenderInline {SPAN} at (0,0) size 186x20 [border: (1px solid #0000FF) (10px solid #FFA500) (1px solid #0000FF) (10px solid #008000)]
+            RenderText {#text} at (170,7) size 131x18
+              text run at (170,7) width 131: "sit amet, consectetur "
+          RenderText {#text} at (346,7) size 332x18
+            text run at (346,7) width 332: "adipisicing elit, sed do eiusmod tempor incididunt ut."
+        RenderBlock {P} at (6,70) size 757x160
+          RenderText {#text} at (0,7) size 732x50
+            text run at (0,7) width 588: "Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut "
+            text run at (588,7) width 144: "labore et dolore magna"
+            text run at (0,39) width 430: "aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco "
+          RenderInline {SPAN} at (0,0) size 770x84 [border: (1px solid #0000FF) (10px solid #FFA500) (1px solid #0000FF) (10px solid #008000)]
+            RenderText {#text} at (475,39) size 748x82
+              text run at (475,39) width 235: "laboris nisi ut aliquip ex ea commodo"
+              text run at (0,71) width 324: "consequat. Duis aute irure dolor in reprehenderit in "
+              text run at (324,71) width 424: "voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur"
+              text run at (0,103) width 145: "sint occaecat cupidatat "
+              text run at (145,103) width 590: "non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Lorem ipsum dolor"
+          RenderText {#text} at (0,135) size 561x18
+            text run at (0,135) width 561: "sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore"
+      RenderBlock {H1} at (0,342) size 769x18
+        RenderText {#text} at (0,0) size 89x18
+          text run at (0,0) width 89: "Right-to-Left"
+      RenderBlock {DIV} at (0,370) size 769x284 [border: (1px solid #000000)]
+        RenderBlock {P} at (6,22) size 757x32
+          RenderText {#text} at (83,7) size 125x18
+            text run at (83,7) width 125: "Lorem ipsum dolor "
+          RenderInline {SPAN} at (0,0) size 186x20 [border: (1px solid #0000FF) (10px solid #FFA500) (1px solid #0000FF) (10px solid #008000)]
+            RenderText {#text} at (253,7) size 131x18
+              text run at (253,7) width 131: "sit amet, consectetur "
+          RenderText {#text} at (79,7) size 678x18
+            text run at (79,7) width 4 RTL: "."
+            text run at (429,7) width 328: "adipisicing elit, sed do eiusmod tempor incididunt ut"
+        RenderBlock {P} at (6,70) size 757x192
+          RenderText {#text} at (25,7) size 732x50
+            text run at (25,7) width 588: "Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut "
+            text run at (613,7) width 144: "labore et dolore magna"
+            text run at (47,39) width 430: "aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco "
+          RenderInline {SPAN} at (0,0) size 755x84 [border: (1px solid #0000FF) (10px solid #FFA500) (1px solid #0000FF) (10px solid #008000)]
+            RenderText {#text} at (477,39) size 748x82
+              text run at (477,39) width 235: "laboris nisi ut aliquip ex ea commodo"
+              text run at (9,71) width 324: "consequat. Duis aute irure dolor in reprehenderit in "
+              text run at (333,71) width 424: "voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur"
+              text run at (22,103) width 145: "sint occaecat cupidatat "
+              text run at (167,103) width 590: "non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Lorem ipsum dolor"
+          RenderText {#text} at (30,135) size 727x50
+            text run at (30,135) width 565: "sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore "
+            text run at (595,135) width 162: "magna aliqua. Ut enim ad"
+            text run at (312,167) width 4 RTL: "."
+            text run at (316,167) width 441: "minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip"
diff --git a/LayoutTests/platform/mac/fast/borders/rtl-border-02-expected.checksum b/LayoutTests/platform/mac/fast/borders/rtl-border-02-expected.checksum
new file mode 100644 (file)
index 0000000..2e7aec2
--- /dev/null
@@ -0,0 +1 @@
+8fe10e0c09cfd1a39a55d96c3a88c8aa
\ No newline at end of file
diff --git a/LayoutTests/platform/mac/fast/borders/rtl-border-02-expected.png b/LayoutTests/platform/mac/fast/borders/rtl-border-02-expected.png
new file mode 100644 (file)
index 0000000..c5af1c9
Binary files /dev/null and b/LayoutTests/platform/mac/fast/borders/rtl-border-02-expected.png differ
diff --git a/LayoutTests/platform/mac/fast/borders/rtl-border-02-expected.txt b/LayoutTests/platform/mac/fast/borders/rtl-border-02-expected.txt
new file mode 100644 (file)
index 0000000..553bb77
--- /dev/null
@@ -0,0 +1,63 @@
+layer at (0,0) size 794x678
+  RenderView at (0,0) size 785x585
+layer at (0,0) size 785x678
+  RenderBlock {HTML} at (0,0) size 785x678
+    RenderBody {BODY} at (8,16) size 769x654
+      RenderBlock {P} at (0,0) size 769x36
+        RenderText {#text} at (0,0) size 751x36
+          text run at (0,0) width 751: "There should be a SPAN in the middle of all four paragraphs that has padding, a green border, and a margin on the left,"
+          text run at (0,18) width 363: "and padding, an orange border, and a margin on the right."
+      RenderBlock {H1} at (0,52) size 769x18
+        RenderText {#text} at (0,0) size 89x18
+          text run at (0,0) width 89: "Left-to-Right"
+      RenderBlock {DIV} at (0,80) size 769x252 [border: (1px solid #000000)]
+        RenderBlock {P} at (6,22) size 757x32
+          RenderText {#text} at (0,7) size 125x18
+            text run at (0,7) width 125: "Lorem ipsum dolor "
+          RenderInline {SPAN} at (0,0) size 186x20 [border: (1px solid #0000FF) (10px solid #FFA500) (1px solid #0000FF) (10px solid #008000)]
+            RenderText {#text} at (170,7) size 131x18
+              text run at (170,7) width 131 RTL override: "sit amet, consectetur "
+          RenderText {#text} at (346,7) size 332x18
+            text run at (346,7) width 332: "adipisicing elit, sed do eiusmod tempor incididunt ut."
+        RenderBlock {P} at (6,70) size 757x160
+          RenderText {#text} at (0,7) size 732x50
+            text run at (0,7) width 588: "Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut "
+            text run at (588,7) width 144: "labore et dolore magna"
+            text run at (0,39) width 430: "aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco "
+          RenderInline {SPAN} at (0,0) size 780x84 [border: (1px solid #0000FF) (10px solid #FFA500) (1px solid #0000FF) (10px solid #008000)]
+            RenderText {#text} at (430,39) size 780x82
+              text run at (430,39) width 235 RTL override: "laboris nisi ut aliquip ex ea commodo"
+              text run at (0,71) width 424 RTL override: "voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur"
+              text run at (424,71) width 324 RTL override: "consequat. Duis aute irure dolor in reprehenderit in "
+              text run at (45,103) width 590 RTL override: "non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Lorem ipsum dolor"
+              text run at (635,103) width 145 RTL override: "sint occaecat cupidatat "
+          RenderText {#text} at (0,135) size 561x18
+            text run at (0,135) width 561: "sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore"
+      RenderBlock {H1} at (0,342) size 769x18
+        RenderText {#text} at (0,0) size 89x18
+          text run at (0,0) width 89: "Right-to-Left"
+      RenderBlock {DIV} at (0,370) size 769x284 [border: (1px solid #000000)]
+        RenderBlock {P} at (6,22) size 757x32
+          RenderText {#text} at (632,7) size 125x18
+            text run at (632,7) width 125 RTL override: "Lorem ipsum dolor "
+          RenderInline {SPAN} at (0,0) size 186x20 [border: (1px solid #0000FF) (10px solid #FFA500) (1px solid #0000FF) (10px solid #008000)]
+            RenderText {#text} at (456,7) size 131x18
+              text run at (456,7) width 131 RTL override: "sit amet, consectetur "
+          RenderText {#text} at (79,7) size 332x18
+            text run at (79,7) width 332 RTL override: "adipisicing elit, sed do eiusmod tempor incididunt ut."
+        RenderBlock {P} at (6,70) size 757x192
+          RenderText {#text} at (25,7) size 732x50
+            text run at (25,7) width 144 RTL override: "labore et dolore magna"
+            text run at (169,7) width 588 RTL override: "Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut "
+            text run at (327,39) width 430 RTL override: "aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco "
+          RenderInline {SPAN} at (0,0) size 780x84 [border: (1px solid #0000FF) (10px solid #FFA500) (1px solid #0000FF) (10px solid #008000)]
+            RenderText {#text} at (92,39) size 780x82
+              text run at (92,39) width 235 RTL override: "laboris nisi ut aliquip ex ea commodo"
+              text run at (9,71) width 424 RTL override: "voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur"
+              text run at (433,71) width 324 RTL override: "consequat. Duis aute irure dolor in reprehenderit in "
+              text run at (-23,103) width 590 RTL override: "non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Lorem ipsum dolor"
+              text run at (567,103) width 145 RTL override: "sint occaecat cupidatat "
+          RenderText {#text} at (30,135) size 727x50
+            text run at (30,135) width 162 RTL override: "magna aliqua. Ut enim ad"
+            text run at (192,135) width 565 RTL override: "sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore "
+            text run at (312,167) width 445 RTL override: "minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip."
diff --git a/LayoutTests/platform/mac/fast/borders/rtl-border-03-expected.checksum b/LayoutTests/platform/mac/fast/borders/rtl-border-03-expected.checksum
new file mode 100644 (file)
index 0000000..87e4803
--- /dev/null
@@ -0,0 +1 @@
+70d1c9bf6499d60e20e83c4aa04f98ba
\ No newline at end of file
diff --git a/LayoutTests/platform/mac/fast/borders/rtl-border-03-expected.png b/LayoutTests/platform/mac/fast/borders/rtl-border-03-expected.png
new file mode 100644 (file)
index 0000000..6a71461
Binary files /dev/null and b/LayoutTests/platform/mac/fast/borders/rtl-border-03-expected.png differ
diff --git a/LayoutTests/platform/mac/fast/borders/rtl-border-03-expected.txt b/LayoutTests/platform/mac/fast/borders/rtl-border-03-expected.txt
new file mode 100644 (file)
index 0000000..5eff073
--- /dev/null
@@ -0,0 +1,65 @@
+layer at (0,0) size 794x678
+  RenderView at (0,0) size 785x585
+layer at (0,0) size 785x678
+  RenderBlock {HTML} at (0,0) size 785x678
+    RenderBody {BODY} at (8,16) size 769x654
+      RenderBlock {P} at (0,0) size 769x36
+        RenderText {#text} at (0,0) size 751x36
+          text run at (0,0) width 751: "There should be a SPAN in the middle of all four paragraphs that has padding, a green border, and a margin on the left,"
+          text run at (0,18) width 363: "and padding, an orange border, and a margin on the right."
+      RenderBlock {H1} at (0,52) size 769x18
+        RenderText {#text} at (0,0) size 89x18
+          text run at (0,0) width 89: "Left-to-Right"
+      RenderBlock {DIV} at (0,80) size 769x252 [border: (1px solid #000000)]
+        RenderBlock {P} at (6,22) size 757x32
+          RenderText {#text} at (0,7) size 125x18
+            text run at (0,7) width 125: "Lorem ipsum dolor "
+          RenderInline {SPAN} at (0,0) size 186x20 [border: (1px solid #0000FF) (10px solid #FFA500) (1px solid #0000FF) (10px solid #008000)]
+            RenderText {#text} at (170,7) size 131x18
+              text run at (170,7) width 131: "sit amet, consectetur "
+          RenderText {#text} at (346,7) size 332x18
+            text run at (346,7) width 332: "adipisicing elit, sed do eiusmod tempor incididunt ut."
+        RenderBlock {P} at (6,70) size 757x160
+          RenderText {#text} at (0,7) size 732x50
+            text run at (0,7) width 588: "Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut "
+            text run at (588,7) width 144: "labore et dolore magna"
+            text run at (0,39) width 430: "aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco "
+          RenderInline {SPAN} at (0,0) size 780x84 [border: (1px solid #0000FF) (10px solid #FFA500) (1px solid #0000FF) (10px solid #008000)]
+            RenderText {#text} at (430,39) size 780x82
+              text run at (430,39) width 235: "laboris nisi ut aliquip ex ea commodo"
+              text run at (0,71) width 324: "consequat. Duis aute irure dolor in reprehenderit in "
+              text run at (324,71) width 424: "voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur"
+              text run at (45,103) width 145: "sint occaecat cupidatat "
+              text run at (190,103) width 590: "non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Lorem ipsum dolor"
+          RenderText {#text} at (0,135) size 561x18
+            text run at (0,135) width 561: "sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore"
+      RenderBlock {H1} at (0,342) size 769x18
+        RenderText {#text} at (0,0) size 89x18
+          text run at (0,0) width 89: "Right-to-Left"
+      RenderBlock {DIV} at (0,370) size 769x284 [border: (1px solid #000000)]
+        RenderBlock {P} at (6,22) size 757x32
+          RenderText {#text} at (83,7) size 125x18
+            text run at (83,7) width 125: "Lorem ipsum dolor "
+          RenderInline {SPAN} at (0,0) size 186x20 [border: (1px solid #0000FF) (10px solid #FFA500) (1px solid #0000FF) (10px solid #008000)]
+            RenderText {#text} at (253,7) size 131x18
+              text run at (253,7) width 131: "sit amet, consectetur "
+          RenderText {#text} at (79,7) size 678x18
+            text run at (79,7) width 4 RTL: "."
+            text run at (429,7) width 328: "adipisicing elit, sed do eiusmod tempor incididunt ut"
+        RenderBlock {P} at (6,70) size 757x192
+          RenderText {#text} at (25,7) size 732x50
+            text run at (25,7) width 588: "Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut "
+            text run at (613,7) width 144: "labore et dolore magna"
+            text run at (47,39) width 430: "aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco "
+          RenderInline {SPAN} at (0,0) size 780x84 [border: (1px solid #0000FF) (10px solid #FFA500) (1px solid #0000FF) (10px solid #008000)]
+            RenderText {#text} at (522,39) size 780x82
+              text run at (522,39) width 235: "laboris nisi ut aliquip ex ea commodo"
+              text run at (9,71) width 324: "consequat. Duis aute irure dolor in reprehenderit in "
+              text run at (333,71) width 424: "voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur"
+              text run at (-23,103) width 145: "sint occaecat cupidatat "
+              text run at (122,103) width 590: "non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Lorem ipsum dolor"
+          RenderText {#text} at (30,135) size 727x50
+            text run at (30,135) width 565: "sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore "
+            text run at (595,135) width 162: "magna aliqua. Ut enim ad"
+            text run at (312,167) width 4 RTL: "."
+            text run at (316,167) width 441: "minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip"
diff --git a/LayoutTests/platform/mac/fast/borders/rtl-border-04-expected.checksum b/LayoutTests/platform/mac/fast/borders/rtl-border-04-expected.checksum
new file mode 100644 (file)
index 0000000..82bc5d2
--- /dev/null
@@ -0,0 +1 @@
+edb422305de3543fbe584d2636b5aecf
\ No newline at end of file
diff --git a/LayoutTests/platform/mac/fast/borders/rtl-border-04-expected.png b/LayoutTests/platform/mac/fast/borders/rtl-border-04-expected.png
new file mode 100644 (file)
index 0000000..f3a25e3
Binary files /dev/null and b/LayoutTests/platform/mac/fast/borders/rtl-border-04-expected.png differ
diff --git a/LayoutTests/platform/mac/fast/borders/rtl-border-04-expected.txt b/LayoutTests/platform/mac/fast/borders/rtl-border-04-expected.txt
new file mode 100644 (file)
index 0000000..3341739
--- /dev/null
@@ -0,0 +1,36 @@
+layer at (0,0) size 800x600
+  RenderView at (0,0) size 800x600
+layer at (0,0) size 800x396
+  RenderBlock {HTML} at (0,0) size 800x396
+    RenderBody {BODY} at (8,8) size 784x380
+      RenderBlock {DIV} at (0,0) size 784x380 [border: (1px solid #000000)]
+        RenderBlock {P} at (6,22) size 772x128
+          RenderText {#text} at (207,7) size 565x18
+            text run at (207,7) width 98 RTL: "\x{5D1}\x{5D7}\x{5D5}\x{5E5} \x{5D4}\x{5D9}\x{5D4} \x{5E7}\x{5D5}\x{5E8} "
+            text run at (304,7) width 229 RTL: "\x{5DE}\x{5D4}\x{5DC}\x{5DA} \x{5D4}\x{5D9}\x{5D9}\x{5EA}\x{5D9} \x{5D1}\x{5E9}\x{5E2}\x{5EA} \x{5E2}\x{5E8}\x{5D1}\x{5D9}\x{5EA} \x{5D1}\x{5E8}\x{5D7}\x{5D5}\x{5D1}. "
+            text run at (532,7) width 240 RTL: "\x{5DC}\x{5DE}\x{5D4} \x{5E2}\x{5E9}\x{5D9}\x{5EA}\x{5D9} \x{5D6}\x{5D0}\x{5EA} \x{2013} \x{5D0}\x{5D9}\x{5E0}\x{5D9} \x{5D9}\x{5D5}\x{5D3}\x{5E2} \x{5D1}\x{5E2}\x{5E6}\x{5DE}\x{5D9}. "
+          RenderInline {SPAN} at (0,0) size 769x84 [border: (1px solid #0000FF) (10px solid #FFA500) (1px solid #0000FF) (10px solid #008000)]
+            RenderText {#text} at (3,7) size 769x82
+              text run at (3,7) width 160 RTL: "\x{5D5}\x{5D8}\x{5D7}\x{5D1}, \x{5D2}\x{5E9}\x{5DD} \x{5E9}\x{5DC} \x{5D1}\x{5E6}\x{5D9}\x{5E8} \x{5D3}\x{5E7},"
+              text run at (18,39) width 754 RTL: "\x{5E7}\x{5E8}, \x{5E2}\x{5D2}\x{5D5}\x{5DD} \x{5D5}\x{5DE}\x{5DE}\x{5D5}\x{5E9}\x{5DA} \x{5D4}\x{5E1}\x{5EA}\x{5E0}\x{5DF} \x{5D1}\x{5DC}\x{5D9} \x{5D4}\x{5E4}\x{5E1}\x{5E7} \x{5DE}\x{5DC}\x{5DE}\x{5E2}\x{5DC}\x{5D4}, \x{5DB}\x{5DE}\x{5D5} \x{5DE}\x{5EA}\x{5D5}\x{5DA} \x{5E0}\x{5E4}\x{5D4} \x{5D3}\x{5E7}\x{5D4}, \x{5D5}\x{5DE}\x{5DC}\x{5DE}\x{5D8}\x{5D4} \x{5D4}\x{5EA}\x{5D1}\x{5D5}\x{5E1}\x{5E1} \x{5E8}\x{5E4}\x{5E9} \x{5D3}\x{5E7} \x{5DC}\x{5DB}\x{5DC} \x{5DE}\x{5D3}\x{5E8}\x{5DA} \x{5DB}\x{5E3} \x{5E8}\x{5D2}\x{5DC}..."
+              text run at (480,71) width 292 RTL: "\x{5DC}\x{5E9}\x{5D4}\x{5D5}\x{5EA} \x{5D9}\x{5D5}\x{5EA}\x{5E8} \x{5D1}\x{5D7}\x{5D5}\x{5E5} \x{5DC}\x{5D0} \x{5D4}\x{5D9}\x{5D4} \x{5E0}\x{5E2}\x{5D9}\x{5DD} \x{5DB}\x{5DC}\x{5DC}, \x{5D5}\x{5D1}\x{5D1}\x{5D9}\x{5EA} "
+          RenderText {#text} at (37,71) size 735x50
+            text run at (37,71) width 399 RTL: "\x{5D4}\x{5D9}\x{5D5} \x{5E6}\x{5E4}\x{5D5}\x{5D9}\x{5D9}\x{5DD} \x{5DC}\x{5D9} \x{5D0}\x{5E8}\x{5D1}\x{5E2}\x{5EA} \x{5DB}\x{5EA}\x{5DC}\x{5D9} \x{5D7}\x{5D3}\x{5E8}\x{5D9} \x{5D4}\x{5E7}\x{5D5}\x{5D3}\x{5E8}\x{5D9}\x{5DD} \x{5D5}\x{5D4}\x{5D0}\x{5DC}\x{5DE}\x{5D9}\x{5DD} \x{5D9}\x{5D7}\x{5D3} \x{5E2}\x{5DD}"
+            text run at (627,103) width 145 RTL: "\x{5D1}\x{5D3}\x{5D9}\x{5D3}\x{5D5}\x{5EA} \x{5DB}\x{5D1}\x{5D3}\x{5D4} \x{5D5}\x{5DE}\x{5E2}\x{5D9}\x{5E7}\x{5D4}"
+        RenderBlock {P} at (6,166) size 772x192
+          RenderText {#text} at (40,7) size 732x50
+            text run at (40,7) width 588: "Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut "
+            text run at (628,7) width 144: "labore et dolore magna"
+            text run at (62,39) width 430: "aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco "
+          RenderInline {SPAN} at (0,0) size 755x84 [border: (1px solid #0000FF) (10px solid #FFA500) (1px solid #0000FF) (10px solid #008000)]
+            RenderText {#text} at (492,39) size 748x82
+              text run at (492,39) width 235: "laboris nisi ut aliquip ex ea commodo"
+              text run at (24,71) width 324: "consequat. Duis aute irure dolor in reprehenderit in "
+              text run at (348,71) width 424: "voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur"
+              text run at (37,103) width 145: "sint occaecat cupidatat "
+              text run at (182,103) width 590: "non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Lorem ipsum dolor"
+          RenderText {#text} at (1,135) size 771x50
+            text run at (1,135) width 565: "sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore "
+            text run at (566,135) width 206: "magna aliqua. Ut enim ad minim"
+            text run at (371,167) width 4 RTL: "."
+            text run at (375,167) width 397: "veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip"
diff --git a/LayoutTests/platform/mac/fast/borders/rtl-border-05-expected.checksum b/LayoutTests/platform/mac/fast/borders/rtl-border-05-expected.checksum
new file mode 100644 (file)
index 0000000..1ed822f
--- /dev/null
@@ -0,0 +1 @@
+bbab875aa18e2b2c41f028b71b0f6b5e
\ No newline at end of file
diff --git a/LayoutTests/platform/mac/fast/borders/rtl-border-05-expected.png b/LayoutTests/platform/mac/fast/borders/rtl-border-05-expected.png
new file mode 100644 (file)
index 0000000..1b8b3bb
Binary files /dev/null and b/LayoutTests/platform/mac/fast/borders/rtl-border-05-expected.png differ
diff --git a/LayoutTests/platform/mac/fast/borders/rtl-border-05-expected.txt b/LayoutTests/platform/mac/fast/borders/rtl-border-05-expected.txt
new file mode 100644 (file)
index 0000000..5342776
--- /dev/null
@@ -0,0 +1,56 @@
+layer at (0,0) size 800x600
+  RenderView at (0,0) size 800x600
+layer at (0,0) size 800x564
+  RenderBlock {HTML} at (0,0) size 800x564
+    RenderBody {BODY} at (8,16) size 784x540
+      RenderBlock {P} at (0,0) size 784x18
+        RenderText {#text} at (0,0) size 732x18
+          text run at (0,0) width 732: "Test that when we have images sprinkled within a span, borders, paddings and margins are still calculated correctly ."
+      RenderBlock {DIV} at (0,34) size 212x253 [border: (1px solid #000000)]
+        RenderBlock {P} at (6,22) size 200x161
+          RenderText {#text} at (0,7) size 181x50
+            text run at (0,7) width 150: "aaa bbb ccc ddd eee fff "
+            text run at (150,7) width 31 RTL: "\x{5DC}\x{5DE}\x{5D4}"
+            text run at (0,39) width 74 RTL: "\x{5E2}\x{5E9}\x{5D9}\x{5EA}\x{5D9} \x{5D6}\x{5D0}\x{5EA}"
+            text run at (73,39) width 5: " "
+            text run at (77,39) width 17: "gg"
+          RenderInline {SPAN} at (0,0) size 183x53 [border: (1px solid #0000FF) (10px solid #FFA500) (1px solid #0000FF) (10px solid #008000)]
+            RenderText {#text} at (138,39) size 45x18
+              text run at (138,39) width 45: " dgnjk "
+            RenderImage {IMG} at (0,64) size 22x22 [border: (1px solid #0000FF)]
+            RenderText {#text} at (22,72) size 40x18
+              text run at (22,72) width 40: "njkng "
+          RenderText {#text} at (107,72) size 184x82
+            text run at (107,72) width 70 RTL: "\x{5D6}\x{5D0}\x{5EA} \x{2013} \x{5D0}\x{5D9}\x{5E0}\x{5D9}"
+            text run at (0,104) width 71 RTL: "\x{5D9}\x{5D5}\x{5D3}\x{5E2} \x{5D1}\x{5E2}\x{5E6}\x{5DE}"
+            text run at (70,104) width 114: " qqq rrr sss ttt uuu"
+            text run at (0,136) width 24: "vvv"
+        RenderBlock {P} at (6,199) size 200x32
+          RenderInline {SPAN} at (0,0) size 159x20 [border: (1px solid #0000FF) (10px solid #FFA500) (1px solid #0000FF) (10px solid #008000)]
+            RenderText {#text} at (45,7) size 84x18
+              text run at (45,7) width 84: "Some fill text"
+            RenderImage {IMG} at (129,1) size 20x20
+      RenderBlock {DIV} at (0,287) size 212x253 [border: (1px solid #000000)]
+        RenderBlock {P} at (6,22) size 200x161
+          RenderText {#text} at (19,7) size 183x50
+            text run at (19,7) width 35 RTL: " \x{5DC}\x{5DE}\x{5D4}"
+            text run at (54,7) width 146: "aaa bbb ccc ddd eee fff"
+            text run at (17,39) width 17: "gg"
+            text run at (122,39) width 78 RTL: "\x{5E2}\x{5E9}\x{5D9}\x{5EA}\x{5D9} \x{5D6}\x{5D0}\x{5EA} "
+          RenderInline {SPAN} at (0,0) size 167x53 [border: (1px solid #0000FF) (10px solid #FFA500) (1px solid #0000FF) (10px solid #008000)]
+            RenderText {#text} at (33,39) size 45x18
+              text run at (33,39) width 45: " dgnjk "
+            RenderImage {IMG} at (142,64) size 22x22 [border: (1px solid #0000FF)]
+            RenderText {#text} at (138,72) size 62x18
+              text run at (138,72) width 4 RTL: " "
+              text run at (164,72) width 36: "njkng"
+          RenderText {#text} at (23,72) size 184x82
+            text run at (23,72) width 70 RTL: "\x{5D6}\x{5D0}\x{5EA} \x{2013} \x{5D0}\x{5D9}\x{5E0}\x{5D9}"
+            text run at (16,104) width 110: "qqq rrr sss ttt uuu"
+            text run at (125,104) width 75 RTL: "\x{5D9}\x{5D5}\x{5D3}\x{5E2} \x{5D1}\x{5E2}\x{5E6}\x{5DE} "
+            text run at (176,136) width 24: "vvv"
+        RenderBlock {P} at (6,199) size 200x32
+          RenderInline {SPAN} at (0,0) size 159x20 [border: (1px solid #0000FF) (10px solid #FFA500) (1px solid #0000FF) (10px solid #008000)]
+            RenderText {#text} at (71,7) size 84x18
+              text run at (71,7) width 84: "Some fill text"
+            RenderImage {IMG} at (51,1) size 20x20
index b5dfc02..91d79b9 100644 (file)
@@ -1,3 +1,32 @@
+2011-03-30  Yael Aharon  <yael.aharon@nokia.com>
+
+        Reviewed by Eric Seidel.
+
+        Left/Right borders/padding/margins are not always added correctly when rendering multiline inline boxes with bidi elements
+        https://bugs.webkit.org/show_bug.cgi?id=9272
+
+
+        Also fixes https://bugs.webkit.org/show_bug.cgi?id=47210 and https://bugs.webkit.org/show_bug.cgi?id=8392.
+
+        Change how we decide if an InlineFlowBox is the last one for its renderer. Use the position of resolver's logicallyLastRun
+        to decide if there is more text in the next line.
+
+        Tests: fast/borders/rtl-border-01.html
+               fast/borders/rtl-border-02.html
+               fast/borders/rtl-border-03.html
+               fast/borders/rtl-border-04.html
+               fast/borders/rtl-border-05.html
+
+        * rendering/InlineFlowBox.cpp:
+        (WebCore::isAnsectorAndWithinBlock):
+        (WebCore::InlineFlowBox::determineSpacingForFlowBoxes):
+        * rendering/InlineFlowBox.h:
+        * rendering/RenderBlock.h:
+        * rendering/RenderBlockLineLayout.cpp:
+        (WebCore::RenderBlock::constructLine):
+        (WebCore::reachedEndOfTextRenderer):
+        (WebCore::RenderBlock::layoutInlineChildren):
+
 2011-03-29  Nikolas Zimmermann  <nzimmermann@rim.com>
 
         Reviewed by Eric Seidel.
index cd468b6..b58a30e 100644 (file)
@@ -253,7 +253,18 @@ bool InlineFlowBox::onEndChain(RenderObject* endObject)
     return true;
 }
 
-void InlineFlowBox::determineSpacingForFlowBoxes(bool lastLine, RenderObject* endObject)
+static bool isAnsectorAndWithinBlock(RenderObject* ancestor, RenderObject* child)
+{
+    RenderObject* object = child;
+    while (object && !object->isRenderBlock()) {
+        if (object == ancestor)
+            return true;
+        object = object->parent();
+    }
+    return false;
+}
+
+void InlineFlowBox::determineSpacingForFlowBoxes(bool lastLine, RenderObject* endObject, RenderObject* logicallyLastRunRenderer)
 {
     // All boxes start off open.  They will not apply any margins/border/padding on
     // any side.
@@ -273,23 +284,18 @@ void InlineFlowBox::determineSpacingForFlowBoxes(bool lastLine, RenderObject* en
             else if (!ltr && lineBoxList->lastLineBox() == this)
                 includeRightEdge = true;
         }
-    
-        // In order to determine if the inline ends on this line, we check three things:
-        // (1) If we are the last line and we don't have a continuation(), then we can
-        // close up.
-        // (2) If the last line box for the flow has an object following it on the line (ltr,
-        // reverse for rtl), then the inline has closed.
-        // (3) The line may end on the inline.  If we are the last child (climbing up
-        // the end object's chain), then we just closed as well.
+
         if (!lineBoxList->lastLineBox()->isConstructed()) {
             RenderInline* inlineFlow = toRenderInline(renderer());
+            bool isLastObjectOnLine = (endObject && endObject->isText()) ? !isAnsectorAndWithinBlock(renderer(), logicallyLastRunRenderer->parent()) : onEndChain(logicallyLastRunRenderer);
+
             if (ltr) {
-                if (!nextLineBox() &&
-                    ((lastLine && !inlineFlow->continuation()) || nextOnLineExists() || onEndChain(endObject)))
+                if (!nextLineBox()
+                    && ((lastLine || isLastObjectOnLine) && !inlineFlow->continuation()))
                     includeRightEdge = true;
             } else {
-                if ((!prevLineBox() || prevLineBox()->isConstructed()) &&
-                    ((lastLine && !inlineFlow->continuation()) || prevOnLineExists() || onEndChain(endObject)))
+                if ((!prevLineBox() || prevLineBox()->isConstructed())
+                    && ((lastLine || isLastObjectOnLine) && !inlineFlow->continuation()))
                     includeLeftEdge = true;
             }
         }
@@ -301,7 +307,7 @@ void InlineFlowBox::determineSpacingForFlowBoxes(bool lastLine, RenderObject* en
     for (InlineBox* currChild = firstChild(); currChild; currChild = currChild->nextOnLine()) {
         if (currChild->isInlineFlowBox()) {
             InlineFlowBox* currFlow = static_cast<InlineFlowBox*>(currChild);
-            currFlow->determineSpacingForFlowBoxes(lastLine, endObject);
+            currFlow->determineSpacingForFlowBoxes(lastLine, endObject, logicallyLastRunRenderer);
         }
     }
 }
index c1bd0e8..9b6f8e4 100644 (file)
@@ -159,7 +159,7 @@ public:
     }
 
     // Helper functions used during line construction and placement.
-    void determineSpacingForFlowBoxes(bool lastLine, RenderObject* endObject);
+    void determineSpacingForFlowBoxes(bool lastLine, RenderObject* endObject, RenderObject* logicallyLastRunRenderer);
     int getFlowSpacingLogicalWidth();
     bool onEndChain(RenderObject* endObject);
     float placeBoxesInInlineDirection(float logicalLeft, bool& needsWordSpacing, GlyphOverflowAndFallbackFontsMap&);
index 5dc0c94..74751e1 100644 (file)
@@ -497,7 +497,7 @@ private:
     typedef std::pair<RenderText*, LazyLineBreakIterator> LineBreakIteratorInfo;
     InlineIterator findNextLineBreak(InlineBidiResolver&, bool firstLine, bool& isLineEmpty, LineBreakIteratorInfo&, bool& previousLineBrokeCleanly, bool& hyphenated,
                                      EClear*, FloatingObject* lastFloatFromPreviousLine, Vector<RenderBox*>& positionedObjects);
-    RootInlineBox* constructLine(unsigned runCount, BidiRun* firstRun, BidiRun* lastRun, bool firstLine, bool lastLine, RenderObject* endObject);
+    RootInlineBox* constructLine(unsigned runCount, BidiRun* firstRun, BidiRun* lastRun, bool firstLine, bool lastLine, RenderObject* endObject, RenderObject* logicallyLastRunRenderer);
     InlineFlowBox* createLineBoxes(RenderObject*, bool firstLine, InlineBox* childBox);
 
     void computeInlineDirectionPositionsForLine(RootInlineBox*, bool firstLine, BidiRun* firstRun, BidiRun* trailingSpaceRun, bool reachedEnd, GlyphOverflowAndFallbackFontsMap&, VerticalPositionCache&);
index abc511d..73f8c54 100644 (file)
@@ -251,7 +251,7 @@ InlineFlowBox* RenderBlock::createLineBoxes(RenderObject* obj, bool firstLine, I
     return result;
 }
 
-RootInlineBox* RenderBlock::constructLine(unsigned runCount, BidiRun* firstRun, BidiRun* lastRun, bool firstLine, bool lastLine, RenderObject* endObject)
+RootInlineBox* RenderBlock::constructLine(unsigned runCount, BidiRun* firstRun, BidiRun* lastRun, bool firstLine, bool lastLine, RenderObject* endObject, RenderObject* logicallyLastRunRenderer)
 {
     ASSERT(firstRun);
 
@@ -310,7 +310,7 @@ RootInlineBox* RenderBlock::constructLine(unsigned runCount, BidiRun* firstRun,
     // paint borders/margins/padding.  This knowledge will ultimately be used when
     // we determine the horizontal positions and widths of all the inline boxes on
     // the line.
-    lastLineBox()->determineSpacingForFlowBoxes(lastLine, endObject);
+    lastLineBox()->determineSpacingForFlowBoxes(lastLine, endObject, logicallyLastRunRenderer);
 
     // Now mark the line boxes as being constructed.
     lastLineBox()->setConstructed();
@@ -608,6 +608,27 @@ static void setStaticPositions(RenderBlock* block, RenderBox* child)
     child->layer()->setStaticBlockPosition(blockHeight);
 }
 
+static bool reachedEndOfTextRenderer(InlineBidiResolver& resolver)
+{
+    BidiRun* run = resolver.logicallyLastRun();
+    if (!run)
+        return true;
+    unsigned int pos = run->stop();
+    RenderObject* r = run->m_object;
+    if (!r->isText())
+        return false;
+    RenderText* renderText = toRenderText(r);
+    if (pos >= renderText->textLength())
+        return true;
+
+    while (isASCIISpace(renderText->characters()[pos])) {
+        pos++;
+        if (pos >= renderText->textLength())
+            return true;
+    }
+    return false;
+}
+    
 void RenderBlock::layoutInlineChildren(bool relayoutChildren, int& repaintLogicalTop, int& repaintLogicalBottom)
 {
     bool useRepaintBounds = false;
@@ -836,7 +857,8 @@ void RenderBlock::layoutInlineChildren(bool relayoutChildren, int& repaintLogica
                 if (resolver.runCount()) {
                     if (hyphenated)
                         resolver.logicallyLastRun()->m_hasHyphen = true;
-                    lineBox = constructLine(resolver.runCount(), resolver.firstRun(), resolver.lastRun(), firstLine, !end.m_obj, end.m_obj && !end.m_pos ? end.m_obj : 0);
+                    bool lastLine = end.m_obj && end.m_obj->isText() ? reachedEndOfTextRenderer(resolver) : !end.m_obj;
+                    lineBox = constructLine(resolver.runCount(), resolver.firstRun(), resolver.lastRun(), firstLine, lastLine, end.m_obj && !end.m_pos ? end.m_obj : 0, resolver.logicallyLastRun()->m_object);
                     if (lineBox) {
                         lineBox->setEndsWithBreak(previousLineBrokeCleanly);