WebCore:
authormitz@apple.com <mitz@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 18 Apr 2008 21:18:26 +0000 (21:18 +0000)
committermitz@apple.com <mitz@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 18 Apr 2008 21:18:26 +0000 (21:18 +0000)
        Reviewed by Darin Adler.

        - fix https://bugs.webkit.org/show_bug.cgi?id=17921
          Extra white space at the end of right-aligned or justified text with -webkit-line-break: after-white-space

        Test: fast/text/trailing-white-space.html

        Made trailing white space on the line always behave like it has the base
        bidi level of the block, meaning it will always go on the right (left)
        of the line in a left-to-right (right-to-left) block. Made the trailing
        white space vanish when it is next to a margin that the text should
        be touching, and made its width not count when computing the center
        point for center alignment.

        * platform/text/BidiResolver.h:
        (WebCore::::prependRun): Added.
        * rendering/RenderBlock.h:
        * rendering/bidi.cpp:
        (WebCore::RenderBlock::computeHorizontalPositionsForLine): Changed the
        logicallyLastRun parameter to an optional trailingSpaceRun and changed
        the alignment logic to implement the above rules.
        (WebCore::RenderBlock::layoutInlineChildren): Added code to identify
        when there is trailing white space that needs to be split into its own
        run and optionally re-ordered.
        (WebCore::RenderBlock::findNextLineBreak): Removed code that split some
        trailing space into a separate run in one special case.

LayoutTests:

        Reviewed by Darin Adler.

        - test and updated results for https://bugs.webkit.org/show_bug.cgi?id=17921
          Extra white space at the end of right-aligned or justified text with -webkit-line-break: after-white-space

        * fast/text/trailing-white-space.html: Added.
        * http/tests/misc/acid3-expected.txt:
        * platform/mac/editing/deleting/delete-block-table-expected.txt:
        * platform/mac/editing/deleting/delete-to-select-table-expected.txt:
        * platform/mac/editing/deleting/deletionUI-single-instance-expected.txt:
        * platform/mac/editing/execCommand/5482023-expected.txt:
        * platform/mac/editing/execCommand/boldSelection-expected.txt:
        * platform/mac/editing/execCommand/italicizeByCharacter-expected.txt:
        * platform/mac/editing/execCommand/modifyForeColorByCharacter-expected.txt:
        * platform/mac/editing/execCommand/print-expected.txt:
        * platform/mac/editing/execCommand/selectAll-expected.txt:
        * platform/mac/editing/execCommand/strikethroughSelection-expected.txt:
        * platform/mac/editing/inserting/editable-html-element-expected.txt:
        * platform/mac/editing/inserting/insert-div-027-expected.txt:
        * platform/mac/editing/pasteboard/5028447-expected.txt:
        * platform/mac/editing/pasteboard/block-wrappers-necessary-expected.checksum:
        * platform/mac/editing/pasteboard/block-wrappers-necessary-expected.png:
        * platform/mac/editing/pasteboard/block-wrappers-necessary-expected.txt:
        * platform/mac/editing/pasteboard/nested-blocks-with-text-area-expected.checksum:
        * platform/mac/editing/pasteboard/nested-blocks-with-text-area-expected.png:
        * platform/mac/editing/pasteboard/nested-blocks-with-text-area-expected.txt:
        * platform/mac/editing/pasteboard/nested-blocks-with-text-field-expected.checksum:
        * platform/mac/editing/pasteboard/nested-blocks-with-text-field-expected.png:
        * platform/mac/editing/pasteboard/nested-blocks-with-text-field-expected.txt:
        * platform/mac/editing/selection/5081257-1-expected.txt:
        * platform/mac/editing/selection/after-line-wrap-expected.txt:
        * platform/mac/editing/selection/mixed-editability-1-expected.txt:
        * platform/mac/editing/selection/select-all-001-expected.txt:
        * platform/mac/editing/selection/select-all-002-expected.txt:
        * platform/mac/editing/selection/select-all-003-expected.txt:
        * platform/mac/editing/style/apple-style-editable-mix-expected.txt:
        * platform/mac/editing/style/create-block-for-style-012-expected.checksum:
        * platform/mac/editing/style/create-block-for-style-012-expected.png:
        * platform/mac/editing/style/create-block-for-style-012-expected.txt:
        * platform/mac/fast/clip/outline-overflowClip-expected.txt:
        * platform/mac/fast/forms/textarea-rows-cols-expected.txt:
        * platform/mac/fast/replaced/width100percent-textarea-expected.txt:
        * platform/mac/fast/text/embed-at-end-of-pre-wrap-line-expected.txt:
        * platform/mac/fast/text/justified-text-rect-expected.txt:
        * platform/mac/fast/text/trailing-white-space-expected.checksum: Added.
        * platform/mac/fast/text/trailing-white-space-expected.png: Added.
        * platform/mac/fast/text/trailing-white-space-expected.txt: Added.
        * platform/mac/fast/text/whitespace/pre-wrap-last-char-expected.txt:
        * platform/mac/fast/text/whitespace/pre-wrap-overflow-selection-expected.txt:
        * platform/mac/fast/text/whitespace/pre-wrap-spaces-after-newline-expected.txt:

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

50 files changed:
LayoutTests/ChangeLog
LayoutTests/fast/text/trailing-white-space.html [new file with mode: 0644]
LayoutTests/http/tests/misc/acid3-expected.txt
LayoutTests/platform/mac/editing/deleting/delete-block-table-expected.txt
LayoutTests/platform/mac/editing/deleting/delete-to-select-table-expected.txt
LayoutTests/platform/mac/editing/deleting/deletionUI-single-instance-expected.txt
LayoutTests/platform/mac/editing/execCommand/5482023-expected.txt
LayoutTests/platform/mac/editing/execCommand/boldSelection-expected.txt
LayoutTests/platform/mac/editing/execCommand/italicizeByCharacter-expected.txt
LayoutTests/platform/mac/editing/execCommand/modifyForeColorByCharacter-expected.txt
LayoutTests/platform/mac/editing/execCommand/print-expected.txt
LayoutTests/platform/mac/editing/execCommand/selectAll-expected.txt
LayoutTests/platform/mac/editing/execCommand/strikethroughSelection-expected.txt
LayoutTests/platform/mac/editing/inserting/editable-html-element-expected.txt
LayoutTests/platform/mac/editing/inserting/insert-div-027-expected.txt
LayoutTests/platform/mac/editing/pasteboard/5028447-expected.txt
LayoutTests/platform/mac/editing/pasteboard/block-wrappers-necessary-expected.checksum
LayoutTests/platform/mac/editing/pasteboard/block-wrappers-necessary-expected.png
LayoutTests/platform/mac/editing/pasteboard/block-wrappers-necessary-expected.txt
LayoutTests/platform/mac/editing/pasteboard/nested-blocks-with-text-area-expected.checksum
LayoutTests/platform/mac/editing/pasteboard/nested-blocks-with-text-area-expected.png
LayoutTests/platform/mac/editing/pasteboard/nested-blocks-with-text-area-expected.txt
LayoutTests/platform/mac/editing/pasteboard/nested-blocks-with-text-field-expected.checksum
LayoutTests/platform/mac/editing/pasteboard/nested-blocks-with-text-field-expected.png
LayoutTests/platform/mac/editing/pasteboard/nested-blocks-with-text-field-expected.txt
LayoutTests/platform/mac/editing/selection/5081257-1-expected.txt
LayoutTests/platform/mac/editing/selection/after-line-wrap-expected.txt
LayoutTests/platform/mac/editing/selection/mixed-editability-1-expected.txt
LayoutTests/platform/mac/editing/selection/select-all-001-expected.txt
LayoutTests/platform/mac/editing/selection/select-all-002-expected.txt
LayoutTests/platform/mac/editing/selection/select-all-003-expected.txt
LayoutTests/platform/mac/editing/style/apple-style-editable-mix-expected.txt
LayoutTests/platform/mac/editing/style/create-block-for-style-012-expected.checksum
LayoutTests/platform/mac/editing/style/create-block-for-style-012-expected.png
LayoutTests/platform/mac/editing/style/create-block-for-style-012-expected.txt
LayoutTests/platform/mac/fast/clip/outline-overflowClip-expected.txt
LayoutTests/platform/mac/fast/forms/textarea-rows-cols-expected.txt
LayoutTests/platform/mac/fast/replaced/width100percent-textarea-expected.txt
LayoutTests/platform/mac/fast/text/embed-at-end-of-pre-wrap-line-expected.txt
LayoutTests/platform/mac/fast/text/justified-text-rect-expected.txt
LayoutTests/platform/mac/fast/text/trailing-white-space-expected.checksum [new file with mode: 0644]
LayoutTests/platform/mac/fast/text/trailing-white-space-expected.png [new file with mode: 0644]
LayoutTests/platform/mac/fast/text/trailing-white-space-expected.txt [new file with mode: 0644]
LayoutTests/platform/mac/fast/text/whitespace/pre-wrap-last-char-expected.txt
LayoutTests/platform/mac/fast/text/whitespace/pre-wrap-overflow-selection-expected.txt
LayoutTests/platform/mac/fast/text/whitespace/pre-wrap-spaces-after-newline-expected.txt
WebCore/ChangeLog
WebCore/platform/text/BidiResolver.h
WebCore/rendering/RenderBlock.h
WebCore/rendering/bidi.cpp

index 128b615bc00cef300e28d6fa3d82555fe66b46a8..63ce50a3640fe07ba8aef6669f03256c9bb65103 100644 (file)
@@ -1,3 +1,56 @@
+2008-04-18  Dan Bernstein  <mitz@apple.com>
+
+        Reviewed by Darin Adler.
+
+        - test and updated results for https://bugs.webkit.org/show_bug.cgi?id=17921
+          Extra white space at the end of right-aligned or justified text with -webkit-line-break: after-white-space
+
+        * fast/text/trailing-white-space.html: Added.
+        * http/tests/misc/acid3-expected.txt:
+        * platform/mac/editing/deleting/delete-block-table-expected.txt:
+        * platform/mac/editing/deleting/delete-to-select-table-expected.txt:
+        * platform/mac/editing/deleting/deletionUI-single-instance-expected.txt:
+        * platform/mac/editing/execCommand/5482023-expected.txt:
+        * platform/mac/editing/execCommand/boldSelection-expected.txt:
+        * platform/mac/editing/execCommand/italicizeByCharacter-expected.txt:
+        * platform/mac/editing/execCommand/modifyForeColorByCharacter-expected.txt:
+        * platform/mac/editing/execCommand/print-expected.txt:
+        * platform/mac/editing/execCommand/selectAll-expected.txt:
+        * platform/mac/editing/execCommand/strikethroughSelection-expected.txt:
+        * platform/mac/editing/inserting/editable-html-element-expected.txt:
+        * platform/mac/editing/inserting/insert-div-027-expected.txt:
+        * platform/mac/editing/pasteboard/5028447-expected.txt:
+        * platform/mac/editing/pasteboard/block-wrappers-necessary-expected.checksum:
+        * platform/mac/editing/pasteboard/block-wrappers-necessary-expected.png:
+        * platform/mac/editing/pasteboard/block-wrappers-necessary-expected.txt:
+        * platform/mac/editing/pasteboard/nested-blocks-with-text-area-expected.checksum:
+        * platform/mac/editing/pasteboard/nested-blocks-with-text-area-expected.png:
+        * platform/mac/editing/pasteboard/nested-blocks-with-text-area-expected.txt:
+        * platform/mac/editing/pasteboard/nested-blocks-with-text-field-expected.checksum:
+        * platform/mac/editing/pasteboard/nested-blocks-with-text-field-expected.png:
+        * platform/mac/editing/pasteboard/nested-blocks-with-text-field-expected.txt:
+        * platform/mac/editing/selection/5081257-1-expected.txt:
+        * platform/mac/editing/selection/after-line-wrap-expected.txt:
+        * platform/mac/editing/selection/mixed-editability-1-expected.txt:
+        * platform/mac/editing/selection/select-all-001-expected.txt:
+        * platform/mac/editing/selection/select-all-002-expected.txt:
+        * platform/mac/editing/selection/select-all-003-expected.txt:
+        * platform/mac/editing/style/apple-style-editable-mix-expected.txt:
+        * platform/mac/editing/style/create-block-for-style-012-expected.checksum:
+        * platform/mac/editing/style/create-block-for-style-012-expected.png:
+        * platform/mac/editing/style/create-block-for-style-012-expected.txt:
+        * platform/mac/fast/clip/outline-overflowClip-expected.txt:
+        * platform/mac/fast/forms/textarea-rows-cols-expected.txt:
+        * platform/mac/fast/replaced/width100percent-textarea-expected.txt:
+        * platform/mac/fast/text/embed-at-end-of-pre-wrap-line-expected.txt:
+        * platform/mac/fast/text/justified-text-rect-expected.txt:
+        * platform/mac/fast/text/trailing-white-space-expected.checksum: Added.
+        * platform/mac/fast/text/trailing-white-space-expected.png: Added.
+        * platform/mac/fast/text/trailing-white-space-expected.txt: Added.
+        * platform/mac/fast/text/whitespace/pre-wrap-last-char-expected.txt:
+        * platform/mac/fast/text/whitespace/pre-wrap-overflow-selection-expected.txt:
+        * platform/mac/fast/text/whitespace/pre-wrap-spaces-after-newline-expected.txt:
+
 2008-04-18  Dan Bernstein  <mitz@apple.com>
 
         - add css2.1/t1506-c525-font-wt-00-b.html to the Windows skipped list
diff --git a/LayoutTests/fast/text/trailing-white-space.html b/LayoutTests/fast/text/trailing-white-space.html
new file mode 100644 (file)
index 0000000..7495d65
--- /dev/null
@@ -0,0 +1,60 @@
+<style>
+    div {
+        width: 200px;
+        font-size: 20px;
+        background-color: lightyellow;
+        text-decoration: underline;
+        font-family: 'Lucida Grande';
+        -webkit-line-break: after-white-space;
+        margin: 8px;
+        float: left;
+    }
+</style>
+<div>
+Lorem ipsum dolor sit amet
+</div>
+<div style="text-align: center;">
+Lorem ipsum dolor sit amet
+</div>
+<div style="text-align: right;">
+Lorem ipsum dolor sit amet
+</div>
+<div style="text-align: justify;">
+Lorem ipsum dolor sit amet
+</div>
+<div style="direction: rtl; text-align: left;">
+Lorem ipsum dolor sit amet
+</div>
+<div style="direction: rtl; text-align: center;">
+Lorem ipsum dolor sit amet
+</div>
+<div style="direction: rtl; text-align: right;">
+Lorem ipsum dolor sit amet
+</div>
+<div style="direction: rtl; text-align: justify;">
+Lorem ipsum dolor sit amet
+</div>
+<div>
+Lorem ipsum &#x05d0;&#x05e0;&#x05d8;&#x05e3; &#x05e9;&#x05dc;&#x05d2;&#x05d9; amet
+</div>
+<div style="text-align: center;">
+Lorem ipsum &#x05d0;&#x05e0;&#x05d8;&#x05e3; &#x05e9;&#x05dc;&#x05d2;&#x05d9; amet
+</div>
+<div style="text-align: right;">
+Lorem ipsum &#x05d0;&#x05e0;&#x05d8;&#x05e3; &#x05e9;&#x05dc;&#x05d2;&#x05d9; amet
+</div>
+<div style="text-align: justify;">
+Lorem ipsum &#x05d0;&#x05e0;&#x05d8;&#x05e3; &#x05e9;&#x05dc;&#x05d2;&#x05d9; amet
+</div>
+<div style="direction: rtl; text-align: left;">
+Lorem ipsum &#x05d0;&#x05e0;&#x05d8;&#x05e3; &#x05e9;&#x05dc;&#x05d2;&#x05d9; amet
+</div>
+<div style="direction: rtl; text-align: center;">
+Lorem ipsum &#x05d0;&#x05e0;&#x05d8;&#x05e3; &#x05e9;&#x05dc;&#x05d2;&#x05d9; amet
+</div>
+<div style="direction: rtl; text-align: right;">
+Lorem ipsum &#x05d0;&#x05e0;&#x05d8;&#x05e3; &#x05e9;&#x05dc;&#x05d2;&#x05d9; amet
+</div>
+<div style="direction: rtl; text-align: justify;">
+Lorem ipsum &#x05d0;&#x05e0;&#x05d8;&#x05e3; &#x05e9;&#x05dc;&#x05d2;&#x05d9; amet
+</div>
index 3ad353fc204bb980cd102f7de190aa2b29e5d843..434fa9c2e777707a399e03be702ce859ab8cf2d4 100644 (file)
@@ -35,155 +35,155 @@ layer at (20,20) size 644x457
                 RenderBody {BODY} at (0,0) size 0x1
                   RenderImage {IMG} at (0,0) size 1x1
           RenderPartObject {IFRAME} at (0,0) size 0x0
-            layer at (0,0) size 8x2151
+            layer at (0,0) size 16x2151
               RenderView at (0,0) size 0x0
-            layer at (0,0) size 8x2151
+            layer at (0,0) size 16x2151
               RenderBlock {HTML} at (0,0) size 0x2151
                 RenderBody {BODY} at (8,8) size 0x2130
                   RenderBlock {PRE} at (0,0) size 0x2130
-                    RenderText {#text} at (0,0) size 0x2130
-                      text run at (0,0) width 0: "<"
-                      text run at (0,15) width 0: "!"
-                      text run at (0,30) width 0: "D"
-                      text run at (0,45) width 0: "O"
-                      text run at (0,60) width 0: "C"
-                      text run at (0,75) width 0: "T"
-                      text run at (0,90) width 0: "Y"
-                      text run at (0,105) width 0: "P"
-                      text run at (0,120) width 0: "E"
-                      text run at (0,135) width 0: "h"
-                      text run at (0,150) width 0: "t"
-                      text run at (0,165) width 0: "m"
-                      text run at (0,180) width 0: "l"
-                      text run at (0,195) width 0: ">"
-                      text run at (0,210) width 0: "<"
-                      text run at (0,225) width 0: "h"
-                      text run at (0,240) width 0: "t"
-                      text run at (0,255) width 0: "m"
-                      text run at (0,270) width 0: "l"
-                      text run at (0,285) width 0: ">"
-                      text run at (0,300) width 0: "<"
-                      text run at (0,315) width 0: "h"
-                      text run at (0,330) width 0: "e"
-                      text run at (0,345) width 0: "a"
-                      text run at (0,360) width 0: "d"
-                      text run at (0,375) width 0: ">"
-                      text run at (0,390) width 0: "<"
-                      text run at (0,405) width 0: "t"
-                      text run at (0,420) width 0: "i"
-                      text run at (0,435) width 0: "t"
-                      text run at (0,450) width 0: "l"
-                      text run at (0,465) width 0: "e"
-                      text run at (0,480) width 0: ">"
-                      text run at (0,495) width 0: "F"
-                      text run at (0,510) width 0: "A"
-                      text run at (0,525) width 0: "I"
-                      text run at (0,540) width 0: "L"
-                      text run at (0,555) width 0: "<"
-                      text run at (0,570) width 0: "/"
-                      text run at (0,585) width 0: "t"
-                      text run at (0,600) width 0: "i"
-                      text run at (0,615) width 0: "t"
-                      text run at (0,630) width 0: "l"
-                      text run at (0,645) width 0: "e"
-                      text run at (0,660) width 0: ">"
-                      text run at (0,675) width 0: "<"
-                      text run at (0,690) width 0: "/"
-                      text run at (0,705) width 0: "h"
-                      text run at (0,720) width 0: "e"
-                      text run at (0,735) width 0: "a"
-                      text run at (0,750) width 0: "d"
-                      text run at (0,765) width 0: ">"
-                      text run at (0,780) width 0: "<"
-                      text run at (0,795) width 0: "b"
-                      text run at (0,810) width 0: "o"
-                      text run at (0,825) width 0: "d"
-                      text run at (0,840) width 0: "y"
-                      text run at (0,855) width 0: ">"
-                      text run at (0,870) width 0: "<"
-                      text run at (0,885) width 0: "p"
-                      text run at (0,900) width 0: ">"
-                      text run at (0,915) width 0: "F"
-                      text run at (0,930) width 0: "A"
-                      text run at (0,945) width 0: "I"
-                      text run at (0,960) width 0: "L"
-                      text run at (0,975) width 0: "<"
-                      text run at (0,990) width 0: "/"
-                      text run at (0,1005) width 0: "p"
-                      text run at (0,1020) width 0: ">"
-                      text run at (0,1035) width 0: "<"
-                      text run at (0,1050) width 0: "s"
-                      text run at (0,1065) width 0: "c"
-                      text run at (0,1080) width 0: "r"
-                      text run at (0,1095) width 0: "i"
-                      text run at (0,1110) width 0: "p"
-                      text run at (0,1125) width 0: "t"
-                      text run at (0,1140) width 0: ">"
-                      text run at (0,1155) width 0: "p"
-                      text run at (0,1170) width 0: "a"
-                      text run at (0,1185) width 0: "r"
-                      text run at (0,1200) width 0: "e"
-                      text run at (0,1215) width 0: "n"
-                      text run at (0,1230) width 0: "t"
-                      text run at (0,1245) width 0: "."
-                      text run at (0,1260) width 0: "n"
-                      text run at (0,1275) width 0: "o"
-                      text run at (0,1290) width 0: "t"
-                      text run at (0,1305) width 0: "i"
-                      text run at (0,1320) width 0: "f"
-                      text run at (0,1335) width 0: "y"
-                      text run at (0,1350) width 0: "("
-                      text run at (0,1365) width 0: "\""
-                      text run at (0,1380) width 0: "r"
-                      text run at (0,1395) width 0: "e"
-                      text run at (0,1410) width 0: "s"
-                      text run at (0,1425) width 0: "o"
-                      text run at (0,1440) width 0: "u"
-                      text run at (0,1455) width 0: "r"
-                      text run at (0,1470) width 0: "c"
-                      text run at (0,1485) width 0: "e"
-                      text run at (0,1500) width 0: "s"
-                      text run at (0,1515) width 0: "/"
-                      text run at (0,1530) width 0: "a"
-                      text run at (0,1545) width 0: "c"
-                      text run at (0,1560) width 0: "i"
-                      text run at (0,1575) width 0: "d"
-                      text run at (0,1590) width 0: "3"
-                      text run at (0,1605) width 0: "/"
-                      text run at (0,1620) width 0: "e"
-                      text run at (0,1635) width 0: "m"
-                      text run at (0,1650) width 0: "p"
-                      text run at (0,1665) width 0: "t"
-                      text run at (0,1680) width 0: "y"
-                      text run at (0,1695) width 0: "."
-                      text run at (0,1710) width 0: "t"
-                      text run at (0,1725) width 0: "x"
-                      text run at (0,1740) width 0: "t"
-                      text run at (0,1755) width 0: "\""
-                      text run at (0,1770) width 0: ")"
-                      text run at (0,1785) width 0: "<"
-                      text run at (0,1800) width 0: "/"
-                      text run at (0,1815) width 0: "s"
-                      text run at (0,1830) width 0: "c"
-                      text run at (0,1845) width 0: "r"
-                      text run at (0,1860) width 0: "i"
-                      text run at (0,1875) width 0: "p"
-                      text run at (0,1890) width 0: "t"
-                      text run at (0,1905) width 0: ">"
-                      text run at (0,1920) width 0: "<"
-                      text run at (0,1935) width 0: "/"
-                      text run at (0,1950) width 0: "b"
-                      text run at (0,1965) width 0: "o"
-                      text run at (0,1980) width 0: "d"
-                      text run at (0,1995) width 0: "y"
-                      text run at (0,2010) width 0: ">"
-                      text run at (0,2025) width 0: "<"
-                      text run at (0,2040) width 0: "/"
-                      text run at (0,2055) width 0: "h"
-                      text run at (0,2070) width 0: "t"
-                      text run at (0,2085) width 0: "m"
-                      text run at (0,2100) width 0: "l"
-                      text run at (0,2115) width 0: ">"
+                    RenderText {#text} at (0,0) size 8x2130
+                      text run at (0,0) width 8: "<"
+                      text run at (0,15) width 8: "!"
+                      text run at (0,30) width 8: "D"
+                      text run at (0,45) width 8: "O"
+                      text run at (0,60) width 8: "C"
+                      text run at (0,75) width 8: "T"
+                      text run at (0,90) width 8: "Y"
+                      text run at (0,105) width 8: "P"
+                      text run at (0,120) width 8: "E"
+                      text run at (0,135) width 8: "h"
+                      text run at (0,150) width 8: "t"
+                      text run at (0,165) width 8: "m"
+                      text run at (0,180) width 8: "l"
+                      text run at (0,195) width 8: ">"
+                      text run at (0,210) width 8: "<"
+                      text run at (0,225) width 8: "h"
+                      text run at (0,240) width 8: "t"
+                      text run at (0,255) width 8: "m"
+                      text run at (0,270) width 8: "l"
+                      text run at (0,285) width 8: ">"
+                      text run at (0,300) width 8: "<"
+                      text run at (0,315) width 8: "h"
+                      text run at (0,330) width 8: "e"
+                      text run at (0,345) width 8: "a"
+                      text run at (0,360) width 8: "d"
+                      text run at (0,375) width 8: ">"
+                      text run at (0,390) width 8: "<"
+                      text run at (0,405) width 8: "t"
+                      text run at (0,420) width 8: "i"
+                      text run at (0,435) width 8: "t"
+                      text run at (0,450) width 8: "l"
+                      text run at (0,465) width 8: "e"
+                      text run at (0,480) width 8: ">"
+                      text run at (0,495) width 8: "F"
+                      text run at (0,510) width 8: "A"
+                      text run at (0,525) width 8: "I"
+                      text run at (0,540) width 8: "L"
+                      text run at (0,555) width 8: "<"
+                      text run at (0,570) width 8: "/"
+                      text run at (0,585) width 8: "t"
+                      text run at (0,600) width 8: "i"
+                      text run at (0,615) width 8: "t"
+                      text run at (0,630) width 8: "l"
+                      text run at (0,645) width 8: "e"
+                      text run at (0,660) width 8: ">"
+                      text run at (0,675) width 8: "<"
+                      text run at (0,690) width 8: "/"
+                      text run at (0,705) width 8: "h"
+                      text run at (0,720) width 8: "e"
+                      text run at (0,735) width 8: "a"
+                      text run at (0,750) width 8: "d"
+                      text run at (0,765) width 8: ">"
+                      text run at (0,780) width 8: "<"
+                      text run at (0,795) width 8: "b"
+                      text run at (0,810) width 8: "o"
+                      text run at (0,825) width 8: "d"
+                      text run at (0,840) width 8: "y"
+                      text run at (0,855) width 8: ">"
+                      text run at (0,870) width 8: "<"
+                      text run at (0,885) width 8: "p"
+                      text run at (0,900) width 8: ">"
+                      text run at (0,915) width 8: "F"
+                      text run at (0,930) width 8: "A"
+                      text run at (0,945) width 8: "I"
+                      text run at (0,960) width 8: "L"
+                      text run at (0,975) width 8: "<"
+                      text run at (0,990) width 8: "/"
+                      text run at (0,1005) width 8: "p"
+                      text run at (0,1020) width 8: ">"
+                      text run at (0,1035) width 8: "<"
+                      text run at (0,1050) width 8: "s"
+                      text run at (0,1065) width 8: "c"
+                      text run at (0,1080) width 8: "r"
+                      text run at (0,1095) width 8: "i"
+                      text run at (0,1110) width 8: "p"
+                      text run at (0,1125) width 8: "t"
+                      text run at (0,1140) width 8: ">"
+                      text run at (0,1155) width 8: "p"
+                      text run at (0,1170) width 8: "a"
+                      text run at (0,1185) width 8: "r"
+                      text run at (0,1200) width 8: "e"
+                      text run at (0,1215) width 8: "n"
+                      text run at (0,1230) width 8: "t"
+                      text run at (0,1245) width 8: "."
+                      text run at (0,1260) width 8: "n"
+                      text run at (0,1275) width 8: "o"
+                      text run at (0,1290) width 8: "t"
+                      text run at (0,1305) width 8: "i"
+                      text run at (0,1320) width 8: "f"
+                      text run at (0,1335) width 8: "y"
+                      text run at (0,1350) width 8: "("
+                      text run at (0,1365) width 8: "\""
+                      text run at (0,1380) width 8: "r"
+                      text run at (0,1395) width 8: "e"
+                      text run at (0,1410) width 8: "s"
+                      text run at (0,1425) width 8: "o"
+                      text run at (0,1440) width 8: "u"
+                      text run at (0,1455) width 8: "r"
+                      text run at (0,1470) width 8: "c"
+                      text run at (0,1485) width 8: "e"
+                      text run at (0,1500) width 8: "s"
+                      text run at (0,1515) width 8: "/"
+                      text run at (0,1530) width 8: "a"
+                      text run at (0,1545) width 8: "c"
+                      text run at (0,1560) width 8: "i"
+                      text run at (0,1575) width 8: "d"
+                      text run at (0,1590) width 8: "3"
+                      text run at (0,1605) width 8: "/"
+                      text run at (0,1620) width 8: "e"
+                      text run at (0,1635) width 8: "m"
+                      text run at (0,1650) width 8: "p"
+                      text run at (0,1665) width 8: "t"
+                      text run at (0,1680) width 8: "y"
+                      text run at (0,1695) width 8: "."
+                      text run at (0,1710) width 8: "t"
+                      text run at (0,1725) width 8: "x"
+                      text run at (0,1740) width 8: "t"
+                      text run at (0,1755) width 8: "\""
+                      text run at (0,1770) width 8: ")"
+                      text run at (0,1785) width 8: "<"
+                      text run at (0,1800) width 8: "/"
+                      text run at (0,1815) width 8: "s"
+                      text run at (0,1830) width 8: "c"
+                      text run at (0,1845) width 8: "r"
+                      text run at (0,1860) width 8: "i"
+                      text run at (0,1875) width 8: "p"
+                      text run at (0,1890) width 8: "t"
+                      text run at (0,1905) width 8: ">"
+                      text run at (0,1920) width 8: "<"
+                      text run at (0,1935) width 8: "/"
+                      text run at (0,1950) width 8: "b"
+                      text run at (0,1965) width 8: "o"
+                      text run at (0,1980) width 8: "d"
+                      text run at (0,1995) width 8: "y"
+                      text run at (0,2010) width 8: ">"
+                      text run at (0,2025) width 8: "<"
+                      text run at (0,2040) width 8: "/"
+                      text run at (0,2055) width 8: "h"
+                      text run at (0,2070) width 8: "t"
+                      text run at (0,2085) width 8: "m"
+                      text run at (0,2100) width 8: "l"
+                      text run at (0,2115) width 8: ">"
           RenderPartObject {IFRAME} at (0,0) size 0x0
             layer at (0,0) size 8x8
               RenderView at (0,0) size 0x0
index 3dc4537a0f8d93e8856f5392fab888de2595ab34..cb44f0f1a84502b2410d6930ef17fb5972ac574b 100644 (file)
@@ -37,8 +37,7 @@ layer at (0,0) size 800x600
             RenderTableRow {TR} at (0,24) size 93x20
               RenderTableCell {TD} at (2,24) size 27x20 [r=1 c=0 rs=1 cs=1]
                 RenderText {#text} at (1,1) size 25x18
-                  text run at (1,1) width 24: "bar "
-                  text run at (25,1) width 1: "     "
+                  text run at (1,1) width 25: "bar      "
               RenderTableCell {TD} at (31,24) size 60x20 [r=1 c=1 rs=1 cs=1]
                 RenderText {#text} at (1,1) size 37x18
                   text run at (1,1) width 37: "buffal"
index 8aef3c63ed7e1496ac52ff439cc5cf9b0a6cda19..1e82390caf9b13d02330bcd4ea413062cc926023 100644 (file)
@@ -49,8 +49,7 @@ layer at (0,0) size 800x600
             RenderTableRow {TR} at (0,24) size 80x20
               RenderTableCell {TD} at (2,24) size 27x20 [r=1 c=0 rs=1 cs=1]
                 RenderText {#text} at (1,1) size 25x18
-                  text run at (1,1) width 24: "bar "
-                  text run at (25,1) width 1: "     "
+                  text run at (1,1) width 25: "bar      "
               RenderTableCell {TD} at (31,24) size 47x20 [r=1 c=1 rs=1 cs=1]
                 RenderText {#text} at (1,1) size 45x18
                   text run at (1,1) width 45: "buffalo"
index a541cf16183460baec2cbcc6c4471eccc74ac175..24e718666648619e734ef36677322edaee58d1c9 100644 (file)
@@ -19,8 +19,7 @@ layer at (24,94) size 752x78 layerType: foreground only
       RenderTableRow {TR} at (0,2) size 752x74
         RenderTableCell {TD} at (2,2) size 748x74 [r=0 c=0 rs=1 cs=1]
           RenderText {#text} at (1,1) size 746x72
-            text run at (1,1) width 743: "Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas odio. Morbi sed tortor id nisl bibendum commodo."
-            text run at (744,1) width 3: " "
+            text run at (1,1) width 746: "Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas odio. Morbi sed tortor id nisl bibendum commodo. "
             text run at (1,19) width 743: "Donec pede. Praesent accumsan dui vitae mauris. Mauris non dui at neque lacinia pulvinar. Quisque nibh. Nulla vitae "
             text run at (1,37) width 719: "lectus. Pellentesque enim. Mauris hendrerit molestie dui. Etiam pretium ligula a pede. Fusce consectetuer purus sit "
             text run at (1,55) width 353: "amet sem. Morbi tincidunt mollis libero. Maecenas mole"
index 33dd3c0c4df12547fc3ba8b5d66ab13d61c2cfde..6acd594ff62361fe767f56433079aba69f7af7e3 100644 (file)
@@ -6,7 +6,6 @@ layer at (0,0) size 800x600
       RenderBlock {H1} at (0,0) size 784x111
         RenderText {#text} at (0,0) size 784x111
           text run at (0,0) width 729: "This tests for a bug when performing a FormatBlock "
-          text run at (0,37) width 779: "inside a body with no visible content.  This text should be"
-          text run at (779,37) width 5: " "
+          text run at (0,37) width 784: "inside a body with no visible content.  This text should be "
           text run at (0,74) width 287: "inside an h1 element."
 caret: position 132 of child 0 {#text} of child 0 {H1} of child 1 {BODY} of child 0 {HTML} of document
index 71bf39416c63ceea529a5035b2dec1d68fd6e748..f91fbfa879dc147199b388f38ee3c58969cea602 100644 (file)
@@ -172,12 +172,10 @@ layer at (0,0) size 800x600
               text run at (510,56) width 190: "you can quote then,"
               text run at (0,84) width 197: "disagree with them, "
               text run at (197,84) width 218: "glorify or vilify them, "
-              text run at (415,84) width 340: "about the only thing you can't do is"
-              text run at (755,84) width 1: " "
+              text run at (415,84) width 341: "about the only thing you can't do is "
               text run at (0,112) width 129: "ignore them. "
               text run at (129,112) width 281: "Because they change things. "
-              text run at (410,112) width 344: "They push the human race forward."
-              text run at (754,112) width 2: "  "
+              text run at (410,112) width 346: "They push the human race forward.  "
               text run at (0,140) width 481: "And while some may see them as the crazy ones, "
               text run at (481,140) width 146: "we see genius. "
               text run at (627,140) width 123: "Because the "
index 257e597a812bdaac700b1dbba6ad287d0a680521..e3d5c083165404bd6e8a1a4851ff97623a42db9d 100644 (file)
@@ -32,12 +32,10 @@ layer at (0,0) size 800x600
               text run at (510,56) width 190: "you can quote then,"
               text run at (0,84) width 197: "disagree with them, "
               text run at (197,84) width 218: "glorify or vilify them, "
-              text run at (415,84) width 340: "about the only thing you can't do is"
-              text run at (755,84) width 1: " "
+              text run at (415,84) width 341: "about the only thing you can't do is "
               text run at (0,112) width 129: "ignore them. "
               text run at (129,112) width 281: "Because they change things. "
-              text run at (410,112) width 344: "They push the human race forward."
-              text run at (754,112) width 2: "  "
+              text run at (410,112) width 346: "They push the human race forward.  "
               text run at (0,140) width 481: "And while some may see them as the crazy ones, "
               text run at (481,140) width 146: "we see genius. "
               text run at (627,140) width 123: "Because the "
index 5eb00a56c659548a6e842051ab07a797e2397b6a..7a40fc61500efe0aad5ce8d4f9a3f03ed836793c 100644 (file)
@@ -32,12 +32,10 @@ layer at (0,0) size 800x600
               text run at (510,56) width 190: "you can quote then,"
               text run at (0,84) width 197: "disagree with them, "
               text run at (197,84) width 218: "glorify or vilify them, "
-              text run at (415,84) width 340: "about the only thing you can't do is"
-              text run at (755,84) width 1: " "
+              text run at (415,84) width 341: "about the only thing you can't do is "
               text run at (0,112) width 129: "ignore them. "
               text run at (129,112) width 281: "Because they change things. "
-              text run at (410,112) width 344: "They push the human race forward."
-              text run at (754,112) width 2: "  "
+              text run at (410,112) width 346: "They push the human race forward.  "
               text run at (0,140) width 481: "And while some may see them as the crazy ones, "
               text run at (481,140) width 146: "we see genius. "
               text run at (627,140) width 123: "Because the "
index c597f08ac6ff9949888feaeba1b9ec2c793eda02..f837f838c239cfa2aaf8232793330e62c05b533c 100644 (file)
@@ -25,12 +25,10 @@ layer at (0,0) size 800x600
               text run at (510,56) width 190: "you can quote then,"
               text run at (0,84) width 197: "disagree with them, "
               text run at (197,84) width 218: "glorify or vilify them, "
-              text run at (415,84) width 340: "about the only thing you can't do is"
-              text run at (755,84) width 1: " "
+              text run at (415,84) width 341: "about the only thing you can't do is "
               text run at (0,112) width 129: "ignore them. "
               text run at (129,112) width 281: "Because they change things. "
-              text run at (410,112) width 344: "They push the human race forward."
-              text run at (754,112) width 2: "  "
+              text run at (410,112) width 346: "They push the human race forward.  "
               text run at (0,140) width 481: "And while some may see them as the crazy ones, "
               text run at (481,140) width 146: "we see genius. "
               text run at (627,140) width 123: "Because the "
index 51df3289437c66e932becac2e4d9a32a804bcc8f..033e28c7bf7f2a0a8342efc7f61a01568379caaa 100644 (file)
@@ -27,12 +27,10 @@ layer at (0,0) size 800x600
               text run at (510,56) width 190: "you can quote then,"
               text run at (0,84) width 197: "disagree with them, "
               text run at (197,84) width 218: "glorify or vilify them, "
-              text run at (415,84) width 340: "about the only thing you can't do is"
-              text run at (755,84) width 1: " "
+              text run at (415,84) width 341: "about the only thing you can't do is "
               text run at (0,112) width 129: "ignore them. "
               text run at (129,112) width 281: "Because they change things. "
-              text run at (410,112) width 344: "They push the human race forward."
-              text run at (754,112) width 2: "  "
+              text run at (410,112) width 346: "They push the human race forward.  "
               text run at (0,140) width 481: "And while some may see them as the crazy ones, "
               text run at (481,140) width 146: "we see genius. "
               text run at (627,140) width 123: "Because the "
index 9fb7eef9defccb6bef07254da59d47c9d84a71de..940635b0bbac7f72a582643a5cdc532e3d97b88c 100644 (file)
@@ -172,12 +172,10 @@ layer at (0,0) size 800x600
               text run at (510,56) width 190: "you can quote then,"
               text run at (0,84) width 197: "disagree with them, "
               text run at (197,84) width 218: "glorify or vilify them, "
-              text run at (415,84) width 340: "about the only thing you can't do is"
-              text run at (755,84) width 1: " "
+              text run at (415,84) width 341: "about the only thing you can't do is "
               text run at (0,112) width 129: "ignore them. "
               text run at (129,112) width 281: "Because they change things. "
-              text run at (410,112) width 344: "They push the human race forward."
-              text run at (754,112) width 2: "  "
+              text run at (410,112) width 346: "They push the human race forward.  "
               text run at (0,140) width 481: "And while some may see them as the crazy ones, "
               text run at (481,140) width 146: "we see genius. "
               text run at (627,140) width 123: "Because the "
index cbeb55adc4d7d973ad5fda548d20613be47e89ce..0ff3b1b330dde323a85f164aad746cffe0c1b0c8 100644 (file)
@@ -18,8 +18,7 @@ layer at (0,0) size 800x600
     RenderBody {BODY} at (8,8) size 784x584
       RenderBlock (anonymous) at (0,0) size 784x54
         RenderText {#text} at (0,0) size 784x54
-          text run at (0,0) width 783: "This tests to make sure that when the enclosing block is the body element, and when the html element is editable,  inserting a"
-          text run at (783,0) width 1: " "
+          text run at (0,0) width 784: "This tests to make sure that when the enclosing block is the body element, and when the html element is editable,  inserting a "
           text run at (0,18) width 755: "paragraph separator doesn't split the body (inserting a paragraph separator usually splits/clones the enclosing block flow "
           text run at (0,36) width 58: "element)."
         RenderText {#text} at (0,0) size 0x0
index d8b7bcd3bbc9535a40bc8898f9a07cd56c36e253..d38c2b59511e7fc2518ed5218753e450595d6405 100644 (file)
@@ -18,8 +18,7 @@ layer at (0,0) size 800x600
     RenderBody {BODY} at (8,8) size 784x584
       RenderBlock (anonymous) at (0,0) size 784x56
         RenderText {#text} at (0,0) size 784x56
-          text run at (0,0) width 781: "Test inserting paragraphs: should see two blue boxes, where the second blue box"
-          text run at (781,0) width 3: " "
+          text run at (0,0) width 784: "Test inserting paragraphs: should see two blue boxes, where the second blue box "
           text run at (0,28) width 245: "starts with an empty line."
       RenderBlock {DIV} at (0,56) size 784x36
       RenderBlock {DIV} at (0,92) size 784x112 [border: (2px solid #0000FF)]
index 5e56ec02d0e2e5dc94632c5f923080c873968fae..c0d2300d718ce50bf63c7c63aaecdeb87e22dd6d 100644 (file)
@@ -6,8 +6,7 @@ layer at (0,0) size 800x600
       RenderText {#text} at (0,0) size 418x29
         text run at (0,0) width 418: "All the text here should be the same size. "
       RenderText {#text} at (418,0) size 784x58
-        text run at (418,0) width 361: "All the text here should be the same"
-        text run at (779,0) width 5: " "
+        text run at (418,0) width 366: "All the text here should be the same "
         text run at (0,29) width 51: "size. "
       RenderText {#text} at (0,0) size 0x0
       RenderText {#text} at (0,0) size 0x0
index 6d8702b26af34505a98bbdada7424e47021da347..669abd2b50d252053caa222f2ae1fbeb8e8de2fd 100644 (file)
@@ -1 +1 @@
-53b060e628656ef527d733f3d96c943f
\ No newline at end of file
+75b51fb128eb45f45d2e5fd826f91838
\ No newline at end of file
index 5ade9e9e689fddf4c04cdcb826a0c77e7e857afc..f9f559df2478947140448da4d54608551d54f003 100644 (file)
Binary files a/LayoutTests/platform/mac/editing/pasteboard/block-wrappers-necessary-expected.png and b/LayoutTests/platform/mac/editing/pasteboard/block-wrappers-necessary-expected.png differ
index f5bb22f5179ec38ba717f07de18786880d946179..7143e049e3ff5fb2492d4e45951bc24c57adb3fe 100644 (file)
@@ -44,17 +44,18 @@ layer at (0,0) size 800x600
           RenderBlock {CENTER} at (2,20) size 780x150
             RenderBlock {P} at (0,0) size 780x150
               RenderBlock {P} at (0,0) size 780x110
-                RenderText {#text} at (0,0) size 71x22
-                  text run at (0,0) width 71: "This is an"
-                RenderText {#text} at (71,0) size 5x22
-                  text run at (71,0) width 5: " "
+                RenderText {#text} at (2,0) size 71x22
+                  text run at (2,0) width 71: "This is an"
+                RenderText {#text} at (73,0) size 5x22
+                  text run at (73,0) width 5: " "
                 RenderInline {B} at (0,0) size 82x22
-                  RenderText {#text} at (76,0) size 82x22
-                    text run at (76,0) width 82: "interactive"
-                RenderText {#text} at (158,0) size 5x22
-                  text run at (158,0) width 5: " "
-                RenderText {#text} at (163,0) size 617x44
-                  text run at (163,0) width 617: "documentation site, so please help out by posting any useful information that you've "
+                  RenderText {#text} at (78,0) size 82x22
+                    text run at (78,0) width 82: "interactive"
+                RenderText {#text} at (160,0) size 5x22
+                  text run at (160,0) width 5: " "
+                RenderText {#text} at (165,0) size 615x44
+                  text run at (165,0) width 612: "documentation site, so please help out by posting any useful information that you've"
+                  text run at (777,0) width 3: " "
                   text run at (325,22) width 129: "had to search out."
                 RenderBR {BR} at (454,39) size 0x0
                 RenderText {#text} at (20,44) size 110x22
index fc50bc37ba030cd0f2009c97dcae073639164589..801c34a3abce308c5973fe53fe4ab6e3ed43513b 100644 (file)
@@ -1 +1 @@
-3c3b2aa5eae2525fe3e036987986fbe3
\ No newline at end of file
+fd1a438b6a758137fb6421bfb2c149a9
\ No newline at end of file
index 21f32e9bb362dad50ae3c37a8c83b13991f0f8b7..56ab4cd489d2014fb887bec66ffbaad43eddb62a 100644 (file)
Binary files a/LayoutTests/platform/mac/editing/pasteboard/nested-blocks-with-text-area-expected.png and b/LayoutTests/platform/mac/editing/pasteboard/nested-blocks-with-text-area-expected.png differ
index 6c4426db7cd274518a2fbc16db1759c95c093644..1fc7e1e682e8ede7274cb75a5eace7f01c38d658 100644 (file)
@@ -18,8 +18,9 @@ layer at (0,0) size 800x600
           text run at (0,0) width 526: "These demonstrate 11475: the '\\n's at the end of the fragment should be unrendered."
         RenderBR {BR} at (526,14) size 0x0
       RenderBlock {DIV} at (0,18) size 784x36
-        RenderText {#text} at (29,0) size 725x36
-          text run at (29,0) width 725: "This test checks that pasing in a combination of nested blocks where one starts with a text field doesn't crash or fail "
+        RenderText {#text} at (31,0) size 725x36
+          text run at (31,0) width 721: "This test checks that pasing in a combination of nested blocks where one starts with a text field doesn't crash or fail"
+          text run at (752,0) width 4: " "
           text run at (359,18) width 65: "assertions."
       RenderBlock {DIV} at (0,54) size 784x36
         RenderBlock {DIV} at (0,0) size 784x36
index 28fc625a31df4a29bd3590d283698938846bc286..d6123a8175e4ed4b54b7faceeb66eb15e670f726 100644 (file)
@@ -1 +1 @@
-4e57f303fe71cc80791e13d1c3a4ce8d
\ No newline at end of file
+5fb4217d7366ed225f19698dd3faf00d
\ No newline at end of file
index 91755a873c06ad9af1cfa8a21546738c1ac53f94..c5b8007b3574e780491b81d341c61a43b2729574 100644 (file)
Binary files a/LayoutTests/platform/mac/editing/pasteboard/nested-blocks-with-text-field-expected.png and b/LayoutTests/platform/mac/editing/pasteboard/nested-blocks-with-text-field-expected.png differ
index 90fe6384cd45c37ad9c45dd1b15bf0cf298e13bc..e2cbd4b2a4492eda0c6b4426dd1bec0349253df4 100644 (file)
@@ -18,8 +18,9 @@ layer at (0,0) size 800x600
           text run at (0,0) width 526: "These demonstrate 11475: the '\\n's at the end of the fragment should be unrendered."
         RenderBR {BR} at (526,14) size 0x0
       RenderBlock {DIV} at (0,18) size 784x36
-        RenderText {#text} at (29,0) size 725x36
-          text run at (29,0) width 725: "This test checks that pasing in a combination of nested blocks where one starts with a text field doesn't crash or fail "
+        RenderText {#text} at (31,0) size 725x36
+          text run at (31,0) width 721: "This test checks that pasing in a combination of nested blocks where one starts with a text field doesn't crash or fail"
+          text run at (752,0) width 4: " "
           text run at (359,18) width 65: "assertions."
       RenderBlock {DIV} at (0,54) size 784x23
         RenderBlock {DIV} at (0,0) size 784x23
index dc9ae8744799bf6a018ed363b56642bcb84cc61b..c0640e7099c6a57880201984fc4bb122f4001f1f 100644 (file)
@@ -7,7 +7,6 @@ layer at (0,0) size 800x600
         RenderText {#text} at (0,0) size 784x54
           text run at (0,0) width 731: "This tests for setting the selection at a position inside the document when the document node is non-editable and the "
           text run at (0,18) width 251: "document's body element *is* editable. "
-          text run at (251,18) width 532: "The expected behavior is to create a selection at [body, 0]. There should be a caret at"
-          text run at (783,18) width 1: " "
+          text run at (251,18) width 533: "The expected behavior is to create a selection at [body, 0]. There should be a caret at "
           text run at (0,36) width 163: "the start of this paragraph."
 caret: position 0 of child 0 {#text} of child 1 {P} of child 0 {BODY} of child 0 {HTML} of document
index b5f5556d2aa62ba99f4288260a89206791a4c364..bac964bd940868d87eca514f78228335f8f6fa70 100644 (file)
@@ -30,8 +30,7 @@ layer at (0,0) size 800x600
       RenderBlock {P} at (0,104) size 784x0
       RenderBlock {DIV} at (16,104) size 752x38 [border: (1px solid #000000)]
         RenderText {#text} at (1,1) size 750x18
-          text run at (1,1) width 749: "don't select me                                                                                                                                                                    "
-          text run at (750,1) width 1: "                                                                                                                                                                                         "
+          text run at (1,1) width 750: "don't select me                                                                                                                                                                                                                                                                                                                                                             "
         RenderInline {I} at (0,0) size 150x18
           RenderText {#text} at (1,19) size 150x18
             text run at (1,19) width 150: "try to select just this text"
index 1b790da1666f082a49ae12bb5b56ba6993be6c1a..70607380f502e7a80d137435434bd424f1f5163e 100644 (file)
@@ -14,8 +14,7 @@ layer at (0,0) size 800x600
           text run at (0,0) width 20: "On"
       RenderText {#text} at (20,0) size 784x36
         text run at (20,0) width 464: "ly the first two letters of the first word in this sentence should be selected. "
-        text run at (484,0) width 298: "To run this test manually, double click between"
-        text run at (782,0) width 2: " "
+        text run at (484,0) width 300: "To run this test manually, double click between "
         text run at (0,18) width 351: "the first two letters of the first word of the first sentence."
       RenderText {#text} at (0,0) size 0x0
 selection start: position 0 of child 0 {#text} of child 0 {SPAN} of child 1 {BODY} of child 0 {HTML} of document
index ab67ede64c397b6b625dd4978619227ce6289808..90c2e63325e57eaeddf0405d88548e597d0ac854 100644 (file)
@@ -14,16 +14,14 @@ layer at (0,0) size 820x900
             text run at (0,10) width 558: "Four score and seven years ago our fathers brought forth, "
             text run at (0,58) width 589: "upon this continent, a new nation, conceived in Liberty, and "
             text run at (0,106) width 577: "dedicated to the proposition that all men are created equal. "
-            text run at (0,154) width 596: "Now we are engaged in a great civil war, testing whether that"
-            text run at (596,154) width 4: " "
+            text run at (0,154) width 600: "Now we are engaged in a great civil war, testing whether that "
             text run at (0,202) width 565: "nation, or any nation, so conceived, and so dedicated, can "
             text run at (0,250) width 571: "long endure. We are met here on a great battlefield of that "
             text run at (0,298) width 545: "war. We have come to dedicate a portion of it as a final "
             text run at (0,346) width 557: "resting place for those who here gave their lives that that "
             text run at (0,394) width 579: "nation might live. It is altogether fitting and proper that we "
             text run at (0,442) width 565: "should do this. Four score and seven years ago our fathers "
-            text run at (0,490) width 598: "brought forth, upon this continent, a new nation, conceived in"
-            text run at (598,490) width 2: " "
+            text run at (0,490) width 600: "brought forth, upon this continent, a new nation, conceived in "
             text run at (0,538) width 560: "Liberty, and dedicated to the proposition that all men are "
             text run at (0,586) width 136: "created equal."
 selection start: position 1 of child 0 {#text} of child 1 {DIV} of child 1 {DIV} of child 1 {BODY} of child 0 {HTML} of document
index 669e8fd15014687b99098849e886c4c2b6474fb4..0d23c97fc2f90070e04a23fca5a103da7e0bd10e 100644 (file)
@@ -21,8 +21,7 @@ layer at (0,0) size 820x900
             text run at (0,250) width 569: "so dedicated, can long endure. We are met here on a great "
           RenderBR {BR} at (569,272) size 0x0
           RenderText {#text} at (0,298) size 600x172
-            text run at (0,298) width 600: "battlefield of that war. We have come to dedicate a portion of"
-            text run at (600,298) width 0: " "
+            text run at (0,298) width 600: "battlefield of that war. We have come to dedicate a portion of "
             text run at (0,346) width 585: "it as a final resting place for those who here gave their lives "
             text run at (0,394) width 588: "that that nation might live. It is altogether fitting and proper "
             text run at (0,442) width 224: "that we should do this. "
index 13ff2bf4d848e3ead58ad99f3bdff53f2261ec7f..676ead36b6fd4f5d39bb27d7538ef0e53876cbbe 100644 (file)
@@ -15,16 +15,14 @@ layer at (0,0) size 812x1044
           text run at (0,106) width 558: "Four score and seven years ago our fathers brought forth, "
           text run at (0,154) width 589: "upon this continent, a new nation, conceived in Liberty, and "
           text run at (0,202) width 577: "dedicated to the proposition that all men are created equal. "
-          text run at (0,250) width 596: "Now we are engaged in a great civil war, testing whether that"
-          text run at (596,250) width 4: " "
+          text run at (0,250) width 600: "Now we are engaged in a great civil war, testing whether that "
           text run at (0,298) width 565: "nation, or any nation, so conceived, and so dedicated, can "
           text run at (0,346) width 571: "long endure. We are met here on a great battlefield of that "
           text run at (0,394) width 545: "war. We have come to dedicate a portion of it as a final "
           text run at (0,442) width 557: "resting place for those who here gave their lives that that "
           text run at (0,490) width 579: "nation might live. It is altogether fitting and proper that we "
           text run at (0,538) width 565: "should do this. Four score and seven years ago our fathers "
-          text run at (0,586) width 598: "brought forth, upon this continent, a new nation, conceived in"
-          text run at (598,586) width 2: " "
+          text run at (0,586) width 600: "brought forth, upon this continent, a new nation, conceived in "
           text run at (0,634) width 560: "Liberty, and dedicated to the proposition that all men are "
           text run at (0,682) width 142: "created equal. "
         RenderBR {BR} at (142,704) size 0x0
index 50780942c0a45dc9d6284c14dfbdbf396f3659bf..7d855a752dd8d3fee9d52b339141db83d6f8487a 100644 (file)
@@ -13,8 +13,7 @@ layer at (0,0) size 800x600
           RenderTableRow {TR} at (0,2) size 758x20
             RenderTableCell {TD} at (2,2) size 644x20 [r=0 c=0 rs=1 cs=1]
               RenderText {#text} at (1,1) size 642x18
-                text run at (1,1) width 642: "This tests that a style can be applied to a selection that contains both editable and non-editable content."
-                text run at (643,1) width 0: "             "
+                text run at (1,1) width 642: "This tests that a style can be applied to a selection that contains both editable and non-editable content.             "
             RenderTableCell {TD} at (648,2) size 108x20 [r=0 c=1 rs=1 cs=1]
               RenderInline {SPAN} at (0,0) size 106x18
                 RenderInline {B} at (0,0) size 106x18
@@ -27,8 +26,7 @@ layer at (0,0) size 800x600
           RenderTableRow {TR} at (0,2) size 710x20
             RenderTableCell {TD} at (2,2) size 596x20 [r=0 c=0 rs=1 cs=1]
               RenderText {#text} at (1,1) size 594x18
-                text run at (1,1) width 594: "The test passes if the editable content is bold, and the non editable content remains unchanged."
-                text run at (595,1) width 0: "             "
+                text run at (1,1) width 594: "The test passes if the editable content is bold, and the non editable content remains unchanged.             "
             RenderTableCell {TD} at (600,2) size 108x20 [r=0 c=1 rs=1 cs=1]
               RenderInline {SPAN} at (0,0) size 106x18
                 RenderInline {B} at (0,0) size 106x18
index fe547fe788a94bb3b7bf8f7ad87927bb96a5b18d..a947f5d823e383402aa3f84d57ffe4e6439db574 100644 (file)
@@ -1 +1 @@
-b17a5eb73d0d0adb210f702e69e722a6
\ No newline at end of file
+e813eee918036a82e057b87c496d73ba
\ No newline at end of file
index ca84e533a8bd1d8b42c182a85f1150c1558a3372..86128c67da79f44503afae2c06dcaed3d8f6d548 100644 (file)
Binary files a/LayoutTests/platform/mac/editing/style/create-block-for-style-012-expected.png and b/LayoutTests/platform/mac/editing/style/create-block-for-style-012-expected.png differ
index ae870fb56c4b08b678f3a5e69604aba55df8c1ce..89614411538172af9dc042bb706cd253f5a25e79 100644 (file)
@@ -24,8 +24,9 @@ layer at (0,0) size 800x600
               text run at (0,0) width 32: "foo"
           RenderBlock {DIV} at (14,42) size 756x84 [border: (2px solid #FF0000)]
             RenderBlock {DIV} at (14,14) size 728x28
-              RenderText {#text} at (345,0) size 37x28
-                text run at (345,0) width 37: "bar "
+              RenderText {#text} at (348,0) size 37x28
+                text run at (348,0) width 31: "bar"
+                text run at (379,0) width 6: " "
             RenderBlock {DIV} at (14,42) size 728x28
               RenderText {#text} at (347,0) size 34x28
                 text run at (347,0) width 34: "baz"
index 310c7d7c6b17081f026b2bb749c1741fa8d74476..d20a456d84475731ca0b6eb2f6d40d63692ae5c5 100644 (file)
@@ -18,5 +18,4 @@ layer at (8,44) size 304x204 backgroundClip at (83,44) size 229x204 clip at (83,
 layer at (60,64) size 105x24 backgroundClip at (83,64) size 82x24 clip at (83,67) size 79x18 outlineClip at (83,44) size 229x204 scrollWidth 100
   RenderBlock (positioned) {DIV} at (52,20) size 105x24 [bgcolor=#EEEEEE] [border: (3px solid #FF0000)]
     RenderText {#text} at (3,3) size 99x18
-      text run at (3,3) width 99: "text in inner div"
-      text run at (102,3) width 0: " "
+      text run at (3,3) width 99: "text in inner div "
index f62b2bc66d56552077bda4243b371c5b7bb6b920..9b9f1a2029fd71d28534993e8cc6c4093804e3e5 100644 (file)
@@ -109,8 +109,7 @@ layer at (11,481) size 161x26
 layer at (11,513) size 161x26
   RenderBlock {DIV} at (1,1) size 161x26
     RenderText {#text} at (3,0) size 155x26
-      text run at (3,0) width 153: "cols = -1; should be default"
-      text run at (156,0) width 2: " "
+      text run at (3,0) width 155: "cols = -1; should be default "
       text run at (3,13) width 30: "width"
 layer at (11,545) size 161x26
   RenderBlock {DIV} at (1,1) size 161x26
index 540a64ae9185283d5e60c9e529d302cac58bc7c4..95745bced09a9f04d2aa5cdf3fb26ac1a5eb1c27 100644 (file)
@@ -37,35 +37,35 @@ layer at (11,31) size 161x26
   RenderBlock {DIV} at (1,1) size 161x26
     RenderText {#text} at (3,0) size 20x13
       text run at (3,0) width 20: "one"
-layer at (177,31) size 6x26 clip at (0,0) size 0x0 scrollWidth 4 scrollHeight 39
+layer at (177,31) size 6x26 clip at (0,0) size 0x0 scrollWidth 13 scrollHeight 39
   RenderBlock {DIV} at (1,1) size 6x26
-    RenderText {#text} at (3,0) size 0x39
-      text run at (3,0) width 0: "t"
-      text run at (3,13) width 0: "w"
-      text run at (3,26) width 0: "o"
-layer at (182,31) size 6x26 clip at (0,0) size 0x0 scrollWidth 4 scrollHeight 65
+    RenderText {#text} at (3,0) size 9x39
+      text run at (3,0) width 5: "t"
+      text run at (3,13) width 9: "w"
+      text run at (3,26) width 7: "o"
+layer at (182,31) size 6x26 clip at (0,0) size 0x0 scrollWidth 11 scrollHeight 65
   RenderBlock {DIV} at (1,1) size 6x26
-    RenderText {#text} at (3,0) size 0x65
-      text run at (3,0) width 0: "t"
-      text run at (3,13) width 0: "h"
-      text run at (3,26) width 0: "r"
-      text run at (3,39) width 0: "e"
-      text run at (3,52) width 0: "e"
+    RenderText {#text} at (3,0) size 7x65
+      text run at (3,0) width 5: "t"
+      text run at (3,13) width 7: "h"
+      text run at (3,26) width 5: "r"
+      text run at (3,39) width 7: "e"
+      text run at (3,52) width 7: "e"
 layer at (11,103) size 230x26
   RenderBlock {DIV} at (1,1) size 230x26
     RenderText {#text} at (3,0) size 74x13
       text run at (3,0) width 74: "one two three"
-layer at (246,103) size 6x26 clip at (0,0) size 0x0 scrollWidth 4 scrollHeight 39
+layer at (246,103) size 6x26 clip at (0,0) size 0x0 scrollWidth 13 scrollHeight 39
   RenderBlock {DIV} at (1,1) size 6x26
-    RenderText {#text} at (3,0) size 0x39
-      text run at (3,0) width 0: "t"
-      text run at (3,13) width 0: "w"
-      text run at (3,26) width 0: "o"
-layer at (251,103) size 6x26 clip at (0,0) size 0x0 scrollWidth 4 scrollHeight 65
+    RenderText {#text} at (3,0) size 9x39
+      text run at (3,0) width 5: "t"
+      text run at (3,13) width 9: "w"
+      text run at (3,26) width 7: "o"
+layer at (251,103) size 6x26 clip at (0,0) size 0x0 scrollWidth 11 scrollHeight 65
   RenderBlock {DIV} at (1,1) size 6x26
-    RenderText {#text} at (3,0) size 0x65
-      text run at (3,0) width 0: "t"
-      text run at (3,13) width 0: "h"
-      text run at (3,26) width 0: "r"
-      text run at (3,39) width 0: "e"
-      text run at (3,52) width 0: "e"
+    RenderText {#text} at (3,0) size 7x65
+      text run at (3,0) width 5: "t"
+      text run at (3,13) width 7: "h"
+      text run at (3,26) width 5: "r"
+      text run at (3,39) width 7: "e"
+      text run at (3,52) width 7: "e"
index 67da8b63f427cba10a0ea01101053f9d03b8c6fe..5aa734fe3b550e1d24853316afe359a5ce0d1fab 100644 (file)
@@ -8,8 +8,7 @@ layer at (0,0) size 800x600
           text run at (0,0) width 257: "The following boxes should be identical."
       RenderBlock {DIV} at (0,34) size 80x46 [border: (1px solid #000000)]
         RenderText {#text} at (5,5) size 70x18
-          text run at (5,5) width 70: "Lorem......."
-          text run at (75,5) width 0: " "
+          text run at (5,5) width 70: "Lorem....... "
         RenderInline {SPAN} at (0,0) size 38x18
           RenderText {#text} at (5,23) size 38x18
             text run at (5,23) width 38 RTL override: "muspi"
@@ -17,7 +16,6 @@ layer at (0,0) size 800x600
           text run at (43,23) width 0: " "
       RenderBlock {DIV} at (0,88) size 80x46 [border: (1px solid #000000)]
         RenderText {#text} at (5,5) size 70x36
-          text run at (5,5) width 70: "Lorem......."
-          text run at (75,5) width 0: " "
+          text run at (5,5) width 70: "Lorem....... "
           text run at (5,23) width 38: "ipsum"
           text run at (43,23) width 0: " "
index 178bce583a9688493ad14161f3b607551f8a2448..7482c5af7a5a9d34e6437cffcb9a6fdb0f85c4ba 100644 (file)
@@ -17,8 +17,8 @@ layer at (0,0) size 800x600
         RenderInline {SPAN} at (0,0) size 10x18
           RenderText {#text} at (38,0) size 10x18
             text run at (38,0) width 10: "is"
-        RenderText {#text} at (48,0) size 70x36
-          text run at (48,0) width 22: " "
+        RenderText {#text} at (48,0) size 52x36
+          text run at (48,0) width 4: " "
           text run at (0,18) width 50: "justified"
       RenderBlock (anonymous) at (0,136) size 800x18
         RenderText {#text} at (0,0) size 76x18
diff --git a/LayoutTests/platform/mac/fast/text/trailing-white-space-expected.checksum b/LayoutTests/platform/mac/fast/text/trailing-white-space-expected.checksum
new file mode 100644 (file)
index 0000000..6a7855b
--- /dev/null
@@ -0,0 +1 @@
+e5eeeef0b90fed7a4f1e72159c1550a5
\ No newline at end of file
diff --git a/LayoutTests/platform/mac/fast/text/trailing-white-space-expected.png b/LayoutTests/platform/mac/fast/text/trailing-white-space-expected.png
new file mode 100644 (file)
index 0000000..4922510
Binary files /dev/null and b/LayoutTests/platform/mac/fast/text/trailing-white-space-expected.png differ
diff --git a/LayoutTests/platform/mac/fast/text/trailing-white-space-expected.txt b/LayoutTests/platform/mac/fast/text/trailing-white-space-expected.txt
new file mode 100644 (file)
index 0000000..7423695
--- /dev/null
@@ -0,0 +1,100 @@
+layer at (0,0) size 800x600
+  RenderView 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 (floating) {DIV} at (8,8) size 200x46 [bgcolor=#FFFFE0]
+        RenderText {#text} at (0,0) size 191x46
+          text run at (0,0) width 191: "Lorem ipsum dolor "
+          text run at (0,23) width 79: "sit amet"
+      RenderBlock (floating) {DIV} at (224,8) size 200x46 [bgcolor=#FFFFE0]
+        RenderText {#text} at (7,0) size 191x46
+          text run at (7,0) width 185: "Lorem ipsum dolor"
+          text run at (192,0) width 6: " "
+          text run at (60,23) width 79: "sit amet"
+      RenderBlock (floating) {DIV} at (440,8) size 200x46 [bgcolor=#FFFFE0]
+        RenderText {#text} at (15,0) size 185x46
+          text run at (15,0) width 185: "Lorem ipsum dolor"
+          text run at (200,0) width 0: " "
+          text run at (121,23) width 79: "sit amet"
+      RenderBlock (floating) {DIV} at (8,70) size 200x46 [bgcolor=#FFFFE0]
+        RenderText {#text} at (0,0) size 200x46
+          text run at (0,0) width 200: "Lorem ipsum dolor"
+          text run at (200,0) width 0: " "
+          text run at (0,23) width 79: "sit amet"
+      RenderBlock (floating) {DIV} at (224,70) size 200x46 [bgcolor=#FFFFE0]
+        RenderText {#text} at (0,0) size 185x46
+          text run at (0,0) width 0 RTL: " "
+          text run at (0,0) width 185: "Lorem ipsum dolor"
+          text run at (0,23) width 79: "sit amet"
+      RenderBlock (floating) {DIV} at (440,70) size 200x46 [bgcolor=#FFFFE0]
+        RenderText {#text} at (1,0) size 191x46
+          text run at (1,0) width 6 RTL: " "
+          text run at (7,0) width 185: "Lorem ipsum dolor"
+          text run at (60,23) width 79: "sit amet"
+      RenderBlock (floating) {DIV} at (8,132) size 200x46 [bgcolor=#FFFFE0]
+        RenderText {#text} at (9,0) size 191x46
+          text run at (9,0) width 6 RTL: " "
+          text run at (15,0) width 185: "Lorem ipsum dolor"
+          text run at (121,23) width 79: "sit amet"
+      RenderBlock (floating) {DIV} at (224,132) size 200x46 [bgcolor=#FFFFE0]
+        RenderText {#text} at (0,0) size 200x46
+          text run at (0,0) width 0 RTL: " "
+          text run at (0,0) width 200: "Lorem ipsum dolor"
+          text run at (121,23) width 79: "sit amet"
+      RenderBlock (floating) {DIV} at (440,132) size 200x46 [bgcolor=#FFFFE0]
+        RenderText {#text} at (0,0) size 184x46
+          text run at (0,0) width 133: "Lorem ipsum "
+          text run at (133,0) width 45 RTL: "\x{5D0}\x{5E0}\x{5D8}\x{5E3}"
+          text run at (178,0) width 6: " "
+          text run at (0,23) width 40 RTL: "\x{5E9}\x{5DC}\x{5D2}\x{5D9}"
+          text run at (40,23) width 55: " amet"
+      RenderBlock (floating) {DIV} at (8,194) size 200x46 [bgcolor=#FFFFE0]
+        RenderText {#text} at (11,0) size 184x46
+          text run at (11,0) width 133: "Lorem ipsum "
+          text run at (144,0) width 45 RTL: "\x{5D0}\x{5E0}\x{5D8}\x{5E3}"
+          text run at (189,0) width 6: " "
+          text run at (52,23) width 40 RTL: "\x{5E9}\x{5DC}\x{5D2}\x{5D9}"
+          text run at (92,23) width 55: " amet"
+      RenderBlock (floating) {DIV} at (224,194) size 200x46 [bgcolor=#FFFFE0]
+        RenderText {#text} at (22,0) size 178x46
+          text run at (22,0) width 133: "Lorem ipsum "
+          text run at (155,0) width 45 RTL: "\x{5D0}\x{5E0}\x{5D8}\x{5E3}"
+          text run at (200,0) width 0: " "
+          text run at (105,23) width 40 RTL: "\x{5E9}\x{5DC}\x{5D2}\x{5D9}"
+          text run at (145,23) width 55: " amet"
+      RenderBlock (floating) {DIV} at (440,194) size 200x46 [bgcolor=#FFFFE0]
+        RenderText {#text} at (0,0) size 200x46
+          text run at (0,0) width 155: "Lorem ipsum "
+          text run at (155,0) width 45 RTL: "\x{5D0}\x{5E0}\x{5D8}\x{5E3}"
+          text run at (200,0) width 0: " "
+          text run at (0,23) width 40 RTL: "\x{5E9}\x{5DC}\x{5D2}\x{5D9}"
+          text run at (40,23) width 55: " amet"
+      RenderBlock (floating) {DIV} at (8,256) size 200x46 [bgcolor=#FFFFE0]
+        RenderText {#text} at (0,0) size 178x46
+          text run at (0,0) width 0 RTL: " "
+          text run at (0,0) width 51 RTL: " \x{5D0}\x{5E0}\x{5D8}\x{5E3}"
+          text run at (51,0) width 127: "Lorem ipsum"
+          text run at (0,23) width 49: "amet"
+          text run at (49,23) width 46 RTL: "\x{5E9}\x{5DC}\x{5D2}\x{5D9} "
+      RenderBlock (floating) {DIV} at (224,256) size 200x46 [bgcolor=#FFFFE0]
+        RenderText {#text} at (5,0) size 184x46
+          text run at (5,0) width 6 RTL: " "
+          text run at (11,0) width 51 RTL: " \x{5D0}\x{5E0}\x{5D8}\x{5E3}"
+          text run at (62,0) width 127: "Lorem ipsum"
+          text run at (52,23) width 49: "amet"
+          text run at (101,23) width 46 RTL: "\x{5E9}\x{5DC}\x{5D2}\x{5D9} "
+      RenderBlock (floating) {DIV} at (440,256) size 200x46 [bgcolor=#FFFFE0]
+        RenderText {#text} at (16,0) size 184x46
+          text run at (16,0) width 6 RTL: " "
+          text run at (22,0) width 51 RTL: " \x{5D0}\x{5E0}\x{5D8}\x{5E3}"
+          text run at (73,0) width 127: "Lorem ipsum"
+          text run at (105,23) width 49: "amet"
+          text run at (154,23) width 46 RTL: "\x{5E9}\x{5DC}\x{5D2}\x{5D9} "
+      RenderBlock (floating) {DIV} at (8,318) size 200x46 [bgcolor=#FFFFE0]
+        RenderText {#text} at (0,0) size 200x46
+          text run at (0,0) width 0 RTL: " "
+          text run at (0,0) width 62 RTL: " \x{5D0}\x{5E0}\x{5D8}\x{5E3}"
+          text run at (62,0) width 138: "Lorem ipsum"
+          text run at (105,23) width 49: "amet"
+          text run at (154,23) width 46 RTL: "\x{5E9}\x{5DC}\x{5D2}\x{5D9} "
index 780019c191dd8b4478a1965612b7131e28be7dcf..01f54f9baae00bf5fa4cf1bef3476ab9ed7b1c02 100644 (file)
@@ -20,5 +20,5 @@ layer at (0,0) size 800x600
         RenderText {#text} at (0,0) size 227x18
           text run at (0,0) width 227: "The following line should not wrap."
       RenderBlock {DIV} at (0,86) size 150x18 [bgcolor=#D3D3D3]
-        RenderText {#text} at (0,0) size 150x18
-          text run at (0,0) width 150: "abcdefghijklmnopqrstuvwxyz"
+        RenderText {#text} at (0,0) size 188x18
+          text run at (0,0) width 188: "abcdefghijklmnopqrstuvwxyz"
index a566b221e9a2e8906abd708854a53af75d6601fc..fa7bd7769c09bf77efe29791e6823d13004fc159 100644 (file)
@@ -22,8 +22,7 @@ layer at (0,0) size 800x600
       RenderBlock {HR} at (0,197) size 784x2 [border: (1px inset #000000)]
       RenderBlock {PRE} at (0,212) size 108x83 [border: (4px solid #0000FF)]
         RenderText {#text} at (4,4) size 100x75
-          text run at (4,4) width 96: "This   text "
-          text run at (100,4) width 4: "    "
+          text run at (4,4) width 100: "This   text     "
           text run at (4,19) width 72: "will wrap"
           text run at (76,19) width 0: " "
           text run at (4,34) width 96: "and   fit   "
@@ -34,8 +33,7 @@ layer at (0,0) size 800x600
 layer at (8,109) size 108x83 clip at (12,113) size 100x75
   RenderBlock {PRE} at (0,101) size 108x83 [border: (4px solid #A52A2A)]
     RenderText {#text} at (4,4) size 100x75
-      text run at (4,4) width 96: "This   text "
-      text run at (100,4) width 4: "    "
+      text run at (4,4) width 100: "This   text     "
       text run at (4,19) width 72: "will wrap"
       text run at (76,19) width 0: " "
       text run at (4,34) width 96: "and   fit   "
index 35f2b33af7bf63832db0038598987a69d300e326..f7860836d1281a3585fb8eda758f0fdc3f37fc51 100644 (file)
@@ -32,8 +32,7 @@ layer at (0,0) size 785x646
           text run at (225,0) width 4: ":"
       RenderBlock {PRE} at (0,104) size 51x30 [bgcolor=#C0C0C0]
         RenderText {#text} at (0,0) size 51x30
-          text run at (0,0) width 48: "foo   "
-          text run at (48,0) width 3: "   "
+          text run at (0,0) width 51: "foo      "
           text run at (0,15) width 24: "bar"
       RenderBlock {P} at (0,150) size 769x18
         RenderText {#text} at (0,0) size 35x18
@@ -77,9 +76,9 @@ layer at (0,0) size 785x646
           text run at (48,0) width 0: " "
           text run at (0,15) width 48: "   bar"
       RenderBlock {PRE} at (0,442) size 51x30 [bgcolor=#C0C0C0]
-        RenderText {#text} at (0,0) size 51x30
+        RenderText {#text} at (0,0) size 64x30
           text run at (0,0) width 48: "foo   "
-          text run at (48,0) width 3: "  "
+          text run at (48,0) width 16: "  "
           text run at (0,15) width 48: "   bar"
       RenderBlock {P} at (0,488) size 769x18
         RenderText {#text} at (0,0) size 35x18
index 111fbe7f04295f0d18a27e654477ea5150ecb6d8..d558608c9cea728bc1f47036bfafa7a9ae3ae2bf 100644 (file)
@@ -1,3 +1,32 @@
+2008-04-18  Dan Bernstein  <mitz@apple.com>
+
+        Reviewed by Darin Adler.
+
+        - fix https://bugs.webkit.org/show_bug.cgi?id=17921
+          Extra white space at the end of right-aligned or justified text with -webkit-line-break: after-white-space
+
+        Test: fast/text/trailing-white-space.html
+
+        Made trailing white space on the line always behave like it has the base
+        bidi level of the block, meaning it will always go on the right (left)
+        of the line in a left-to-right (right-to-left) block. Made the trailing
+        white space vanish when it is next to a margin that the text should
+        be touching, and made its width not count when computing the center
+        point for center alignment.
+
+        * platform/text/BidiResolver.h:
+        (WebCore::::prependRun): Added.
+        * rendering/RenderBlock.h:
+        * rendering/bidi.cpp:
+        (WebCore::RenderBlock::computeHorizontalPositionsForLine): Changed the
+        logicallyLastRun parameter to an optional trailingSpaceRun and changed
+        the alignment logic to implement the above rules.
+        (WebCore::RenderBlock::layoutInlineChildren): Added code to identify
+        when there is trailing white space that needs to be split into its own
+        run and optionally re-ordered.
+        (WebCore::RenderBlock::findNextLineBreak): Removed code that split some
+        trailing space into a separate run in one special case.
+
 2008-04-10  Mark Rowe  <mrowe@apple.com>
 
         Rubber-stamped by Brady Eidson.
index eec2a48bb41cb617f7a335062db14661e3b0888e..10f0b692e2c31d8fb6f3afad2a59f5e4b2af8764 100644 (file)
@@ -143,6 +143,7 @@ public :
     unsigned runCount() const { return m_runCount; }
 
     void addRun(Run*);
+    void prependRun(Run*);
     void deleteRuns();
 
 protected:
@@ -177,6 +178,19 @@ inline void BidiResolver<Iterator, Run>::addRun(Run* run)
     m_runCount++;
 }
 
+template <class Iterator, class Run>
+inline void BidiResolver<Iterator, Run>::prependRun(Run* run)
+{
+    ASSERT(!run->m_next);
+
+    if (!m_lastRun)
+        m_lastRun = run;
+    else
+        run->m_next = m_firstRun;
+    m_firstRun = run;
+    m_runCount++;
+}
+
 template <class Iterator, class Run>
 void BidiResolver<Iterator, Run>::appendRun()
 {
index 3832e644f68305f56c3ee2631869ba36b7b03545..e3511aebe58d1d3aaa0d45f999cf383b11d48695 100644 (file)
@@ -151,7 +151,7 @@ public:
     BidiIterator findNextLineBreak(BidiState&, EClear* clear = 0);
     RootInlineBox* constructLine(unsigned runCount, BidiRun* firstRun, BidiRun* lastRun, bool lastLine, RenderObject* endObject);
     InlineFlowBox* createLineBoxes(RenderObject*);
-    void computeHorizontalPositionsForLine(RootInlineBox*, BidiRun* firstRun, BidiRun* logicallyLastRun, bool reachedEnd);
+    void computeHorizontalPositionsForLine(RootInlineBox*, BidiRun* firstRun, BidiRun* trailingSpaceRun, bool reachedEnd);
     void computeVerticalPositionsForLine(RootInlineBox*, BidiRun*);
     void checkLinesForOverflow();
     void deleteEllipsisLineBoxes();
index 6930892eb9bc3c203ea8667ee80d38ac3d8f9500..d5802548d169a1df0ec5320cd444e2ce2a1f5dd2 100644 (file)
@@ -559,7 +559,7 @@ RootInlineBox* RenderBlock::constructLine(unsigned runCount, BidiRun* firstRun,
     return lastRootBox();
 }
 
-void RenderBlock::computeHorizontalPositionsForLine(RootInlineBox* lineBox, BidiRun* firstRun, BidiRun* logicallyLastRun, bool reachedEnd)
+void RenderBlock::computeHorizontalPositionsForLine(RootInlineBox* lineBox, BidiRun* firstRun, BidiRun* trailingSpaceRun, bool reachedEnd)
 {
     // First determine our total width.
     int availableWidth = lineWidth(m_height);
@@ -576,7 +576,7 @@ void RenderBlock::computeHorizontalPositionsForLine(RootInlineBox* lineBox, Bidi
         if (r->m_object->isText()) {
             RenderText* rt = static_cast<RenderText*>(r->m_object);
 
-            if (textAlign == JUSTIFY) {
+            if (textAlign == JUSTIFY && r != trailingSpaceRun) {
                 const UChar* characters = rt->characters();
                 for (int i = r->m_start; i < r->m_stop; i++) {
                     UChar c = characters[i];
@@ -603,12 +603,6 @@ void RenderBlock::computeHorizontalPositionsForLine(RootInlineBox* lineBox, Bidi
             totWidth += r->m_box->width();
     }
 
-    if (totWidth > availableWidth && logicallyLastRun->m_object->style(m_firstLine)->autoWrap()
-        && logicallyLastRun->m_object->style(m_firstLine)->breakOnlyAfterWhiteSpace() && !logicallyLastRun->m_compact) {
-        logicallyLastRun->m_box->setWidth(logicallyLastRun->m_box->width() - totWidth + availableWidth);
-        totWidth = availableWidth;
-    }
-
     // Armed with the total width of the line (without justification),
     // we now examine our text-align property in order to determine where to position the
     // objects horizontally.  The total width of the line can be increased if we end up
@@ -619,38 +613,71 @@ void RenderBlock::computeHorizontalPositionsForLine(RootInlineBox* lineBox, Bidi
         case WEBKIT_LEFT:
             // The direction of the block should determine what happens with wide lines.  In
             // particular with RTL blocks, wide lines should still spill out to the left.
-            if (style()->direction() == RTL && totWidth > availableWidth)
-                x -= (totWidth - availableWidth);
+            if (style()->direction() == LTR) {
+                if (totWidth > availableWidth && trailingSpaceRun)
+                    trailingSpaceRun->m_box->setWidth(trailingSpaceRun->m_box->width() - totWidth + availableWidth);
+            } else {
+                if (trailingSpaceRun)
+                    trailingSpaceRun->m_box->setWidth(0);
+                else if (totWidth > availableWidth)
+                    x -= (totWidth - availableWidth);
+            }
             break;
         case JUSTIFY:
-            if (numSpaces && !reachedEnd && !lineBox->endsWithBreak())
+            if (numSpaces && !reachedEnd && !lineBox->endsWithBreak()) {
+                if (trailingSpaceRun) {
+                    totWidth -= trailingSpaceRun->m_box->width();
+                    trailingSpaceRun->m_box->setWidth(0);
+                }
                 break;
+            }
             // fall through
         case TAAUTO:
             numSpaces = 0;
             // for right to left fall through to right aligned
-            if (style()->direction() == LTR)
+            if (style()->direction() == LTR) {
+                if (totWidth > availableWidth && trailingSpaceRun)
+                    trailingSpaceRun->m_box->setWidth(trailingSpaceRun->m_box->width() - totWidth + availableWidth);
                 break;
+            }
         case RIGHT:
         case WEBKIT_RIGHT:
             // Wide lines spill out of the block based off direction.
             // So even if text-align is right, if direction is LTR, wide lines should overflow out of the right
             // side of the block.
-            if (style()->direction() == RTL || totWidth < availableWidth)
-                x += availableWidth - totWidth;
+            if (style()->direction() == LTR) {
+                if (trailingSpaceRun) {
+                    totWidth -= trailingSpaceRun->m_box->width();
+                    trailingSpaceRun->m_box->setWidth(0);
+                }
+                if (totWidth < availableWidth)
+                    x += availableWidth - totWidth;
+            } else {
+                if (totWidth > availableWidth && trailingSpaceRun) {
+                    trailingSpaceRun->m_box->setWidth(trailingSpaceRun->m_box->width() - totWidth + availableWidth);
+                    totWidth -= trailingSpaceRun->m_box->width();
+                } else
+                    x += availableWidth - totWidth;
+            }
             break;
         case CENTER:
         case WEBKIT_CENTER:
+            int trailingSpaceWidth = 0;
+            if (trailingSpaceRun) {
+                totWidth -= trailingSpaceRun->m_box->width();
+                trailingSpaceWidth = min(trailingSpaceRun->m_box->width(), (availableWidth - totWidth + 1) / 2);
+                trailingSpaceRun->m_box->setWidth(trailingSpaceWidth);
+            }
             if (style()->direction() == LTR)
                 x += max((availableWidth - totWidth) / 2, 0);
             else
-                x += totWidth > availableWidth ? (availableWidth - totWidth) : (availableWidth - totWidth) / 2;
+                x += totWidth > availableWidth ? (availableWidth - totWidth) : (availableWidth - totWidth) / 2 - trailingSpaceWidth;
             break;
     }
 
     if (numSpaces) {
         for (BidiRun* r = firstRun; r; r = r->next()) {
-            if (!r->m_box)
+            if (!r->m_box || r == trailingSpaceRun)
                 continue;
 
             int spaceAdd = 0;
@@ -750,6 +777,17 @@ static void buildCompactRuns(RenderObject* compactObj, BidiState& bidi)
     betweenMidpoints = false;
 }
 
+static inline bool isCollapsibleSpace(UChar character, RenderText* renderer)
+{
+    if (character == ' ' || character == '\t' || character == softHyphen)
+        return true;
+    if (character == '\n')
+        return !renderer->style()->preserveNewline();
+    if (character == noBreakSpace)
+        return renderer->style()->nbspMode() == SPACE;
+    return false;
+}
+
 void RenderBlock::layoutInlineChildren(bool relayoutChildren, int& repaintTop, int& repaintBottom)
 {
     bool useRepaintBounds = false;
@@ -907,6 +945,49 @@ void RenderBlock::layoutInlineChildren(bool relayoutChildren, int& repaintTop, i
 
             if (!isLineEmpty) {
                 bidiReorderLine(start, end);
+                ASSERT(start.position() == end);
+
+                BidiRun* trailingSpaceRun = 0;
+                if (!previousLineBrokeCleanly && start.runCount() && start.logicallyLastRun()->m_object->style()->breakOnlyAfterWhiteSpace()) {
+                    trailingSpaceRun = start.logicallyLastRun();
+                    RenderObject* lastObject = trailingSpaceRun->m_object;
+                    if (lastObject->isText()) {
+                        RenderText* lastText = static_cast<RenderText*>(lastObject);
+                        const UChar* characters = lastText->characters();
+                        int firstSpace = trailingSpaceRun->stop();
+                        while (firstSpace > trailingSpaceRun->start()) {
+                            UChar current = characters[firstSpace - 1];
+                            if (!isCollapsibleSpace(current, lastText))
+                                break;
+                            firstSpace--;
+                        }
+                        if (firstSpace == trailingSpaceRun->stop())
+                            trailingSpaceRun = 0;
+                        else if (firstSpace != trailingSpaceRun->start()) {
+                            ETextAlign textAlign = style()->textAlign();
+                            // If the trailing white space is at the right hand side of a left-aligned line, then computeHorizontalPositionsForLine()
+                            // does not care if trailingSpaceRun includes non-spaces at the beginning. In all other cases, trailingSpaceRun has to
+                            // contain only the spaces, either because we re-order them or because computeHorizontalPositionsForLine() needs to know
+                            // their width.
+                            bool shouldSeparateSpaces = textAlign != LEFT && textAlign != WEBKIT_LEFT && textAlign != TAAUTO || trailingSpaceRun->m_level % 2 || style()->direction() == RTL || trailingSpaceRun != start.lastRun();
+
+                            if (shouldSeparateSpaces) {
+                                BidiContext* baseContext = start.context();
+                                while (BidiContext* parent = baseContext->parent())
+                                    baseContext = parent;
+
+                                BidiRun* newTrailingRun = new (renderArena()) BidiRun(firstSpace, trailingSpaceRun->m_stop, trailingSpaceRun->m_object, baseContext, OtherNeutral);
+                                trailingSpaceRun->m_stop = firstSpace;
+                                if (style()->direction() == LTR)
+                                    start.addRun(newTrailingRun);
+                                else
+                                    start.prependRun(newTrailingRun);
+                                trailingSpaceRun = newTrailingRun;
+                            }
+                        }
+                    } else
+                        trailingSpaceRun = 0;
+                }
 
                 // Now that the runs have been ordered, we create the line boxes.
                 // At the same time we figure out where border/padding/margin should be applied for
@@ -919,7 +1000,7 @@ void RenderBlock::layoutInlineChildren(bool relayoutChildren, int& repaintTop, i
                         lineBox->setEndsWithBreak(previousLineBrokeCleanly);
 
                         // Now we position all of our text runs horizontally.
-                        computeHorizontalPositionsForLine(lineBox, start.firstRun(), start.logicallyLastRun(), end.atEnd());
+                        computeHorizontalPositionsForLine(lineBox, start.firstRun(), trailingSpaceRun, end.atEnd());
 
                         // Now position our text runs vertically.
                         computeVerticalPositionsForLine(lineBox, start.firstRun());
@@ -1787,12 +1868,6 @@ BidiIterator RenderBlock::findNextLineBreak(BidiState& start, EClear* clear)
                                 lineWasTooWide = true;
                                 lBreak.obj = o;
                                 lBreak.pos = pos;
-                                if (pos > 0) {
-                                    // Separate the trailing space into its own box, which we will
-                                    // resize to fit on the line in computeHorizontalPositionsForLine().
-                                    addMidpoint(BidiIterator(0, o, pos - 1)); // Stop
-                                    addMidpoint(BidiIterator(0, o, pos)); // Start
-                                }
                                 skipWhitespace(lBreak);
                             }
                         }