LayoutTests:
authorddkilzer <ddkilzer@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Sun, 25 Mar 2007 06:28:19 +0000 (06:28 +0000)
committerddkilzer <ddkilzer@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Sun, 25 Mar 2007 06:28:19 +0000 (06:28 +0000)
        Reviewed by Darin.

        - test for http://bugs.webkit.org/show_bug.cgi?id=13156
          REGRESSION (r19621): Pasting breakable content where wrapped line is too long to fit in a textarea fails to draw a horizontal scrollbar

        * fast/text/midword-break-after-breakable-char-expected.checksum: Added.
        * fast/text/midword-break-after-breakable-char-expected.png: Added.
        * fast/text/midword-break-after-breakable-char-expected.txt: Added.
        * fast/text/midword-break-after-breakable-char.html: Added.

WebCore:

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=13156
          REGRESSION (r19621): Pasting breakable content where wrapped line is too long to fit in a textarea fails to draw a horizontal scrollbar

        Test: fast/text/midword-break-after-breakable-char.html

        Breaking in the middle of the word
        is allowed only if no breaking opportunity between words has occurred yet. The
        first position on the line should not be considered "between words" even if
        it is a breaking opportunity.

        * rendering/bidi.cpp:
        (WebCore::RenderBlock::findNextLineBreak): Changed according to the above. Also
        cleaned up a couple of lines.

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

LayoutTests/ChangeLog
LayoutTests/fast/text/midword-break-after-breakable-char-expected.checksum [new file with mode: 0644]
LayoutTests/fast/text/midword-break-after-breakable-char-expected.png [new file with mode: 0644]
LayoutTests/fast/text/midword-break-after-breakable-char-expected.txt [new file with mode: 0644]
LayoutTests/fast/text/midword-break-after-breakable-char.html [new file with mode: 0644]
WebCore/ChangeLog
WebCore/rendering/bidi.cpp

index 40e1100e0db8d5676b5f027a0865a7fc4fb88c42..5d0cc884ad703a0e69c18e4a8ef2b8bd8f94b260 100644 (file)
@@ -1,3 +1,15 @@
+2007-03-24  Mitz Pettel  <mitz@webkit.org>
+
+        Reviewed by Darin.
+
+        - test for http://bugs.webkit.org/show_bug.cgi?id=13156
+          REGRESSION (r19621): Pasting breakable content where wrapped line is too long to fit in a textarea fails to draw a horizontal scrollbar
+
+        * fast/text/midword-break-after-breakable-char-expected.checksum: Added.
+        * fast/text/midword-break-after-breakable-char-expected.png: Added.
+        * fast/text/midword-break-after-breakable-char-expected.txt: Added.
+        * fast/text/midword-break-after-breakable-char.html: Added.
+
 2007-03-24  Darin Adler  <darin@apple.com>
 
         Reviewed by Mitz.
diff --git a/LayoutTests/fast/text/midword-break-after-breakable-char-expected.checksum b/LayoutTests/fast/text/midword-break-after-breakable-char-expected.checksum
new file mode 100644 (file)
index 0000000..c34a6c8
--- /dev/null
@@ -0,0 +1 @@
+ec193c0b4fa52794419c7f7d38a58d4c
\ No newline at end of file
diff --git a/LayoutTests/fast/text/midword-break-after-breakable-char-expected.png b/LayoutTests/fast/text/midword-break-after-breakable-char-expected.png
new file mode 100644 (file)
index 0000000..ce80ab8
Binary files /dev/null and b/LayoutTests/fast/text/midword-break-after-breakable-char-expected.png differ
diff --git a/LayoutTests/fast/text/midword-break-after-breakable-char-expected.txt b/LayoutTests/fast/text/midword-break-after-breakable-char-expected.txt
new file mode 100644 (file)
index 0000000..ef4570b
--- /dev/null
@@ -0,0 +1,63 @@
+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 784x576
+      RenderBlock {P} at (0,0) size 784x36
+        RenderText {#text} at (0,0) size 53x18
+          text run at (0,0) width 53: "Test for "
+        RenderInline {I} at (0,0) size 731x36
+          RenderInline {A} at (0,0) size 301x18 [color=#0000EE]
+            RenderText {#text} at (53,0) size 301x18
+              text run at (53,0) width 301: "http://bugs.webkit.org/show_bug.cgi?id=13156"
+          RenderText {#text} at (354,0) size 731x36
+            text run at (354,0) width 4: " "
+            text run at (358,0) width 373: "REGRESSION (r19621): Pasting breakable content where"
+            text run at (0,18) width 492: "wrapped line is too long to fit in a textarea fails to draw a horizontal scrollbar"
+        RenderText {#text} at (492,18) size 4x18
+          text run at (492,18) width 4: "."
+      RenderBlock {P} at (0,52) size 784x36
+        RenderText {#text} at (0,0) size 780x36
+          text run at (0,0) width 780: "This tests that a line break will occur in the middle of the first word on a line if it\x{2019}s too long to fit on the line. The behavior is"
+          text run at (0,18) width 619: "tested after breakable characters (question mark and hyphen), after a space and after a soft hyphen."
+      RenderBlock {P} at (0,104) size 784x18
+        RenderText {#text} at (0,0) size 261x18
+          text run at (0,0) width 261: "The following blocks should be identical."
+      RenderBlock (floating) {DIV} at (4,142) size 300x162 [bgcolor=#FFFFE0]
+        RenderText {#text} at (0,0) size 300x162
+          text run at (0,0) width 186: "Curabiturpretium,quamquiss?"
+          text run at (0,18) width 298: "empermalesuada,estliberofeugiatlibero,velfringi"
+          text run at (0,36) width 131: "llaorcinibhsedneque-"
+          text run at (0,54) width 300: "Quisqueeunullanonnisimolestieaccumsan.Etiam"
+          text run at (0,72) width 191: "tellusurna,laoreetac,laoreetnon"
+          text run at (0,90) width 298: "suscipitsed,sapien.Phasellusvehicula,sematposu"
+          text run at (0,108) width 221: "erevehicula,auguenibhmolestienisl\x{AD}"
+          text run at (0,126) width 298: "necullamcorperlacusantevulputatepede.Nascetu"
+          text run at (0,144) width 89: "rridiculusmus."
+      RenderBlock (floating) {DIV} at (312,142) size 300x162 [bgcolor=#FFFFE0]
+        RenderText {#text} at (0,0) size 186x18
+          text run at (0,0) width 186: "Curabiturpretium,quamquiss?"
+        RenderBR {BR} at (186,14) size 0x0
+        RenderText {#text} at (0,18) size 298x18
+          text run at (0,18) width 298: "empermalesuada,estliberofeugiatlibero,velfringi"
+        RenderBR {BR} at (298,32) size 0x0
+        RenderText {#text} at (0,36) size 131x18
+          text run at (0,36) width 131: "llaorcinibhsedneque-"
+        RenderBR {BR} at (131,50) size 0x0
+        RenderText {#text} at (0,54) size 300x18
+          text run at (0,54) width 300: "Quisqueeunullanonnisimolestieaccumsan.Etiam"
+        RenderBR {BR} at (300,68) size 0x0
+        RenderText {#text} at (0,72) size 191x18
+          text run at (0,72) width 191: "tellusurna,laoreetac,laoreetnon"
+        RenderBR {BR} at (191,86) size 0x0
+        RenderText {#text} at (0,90) size 298x18
+          text run at (0,90) width 298: "suscipitsed,sapien.Phasellusvehicula,sematposu"
+        RenderBR {BR} at (298,104) size 0x0
+        RenderText {#text} at (0,108) size 221x18
+          text run at (0,108) width 221: "erevehicula,auguenibhmolestienisl-"
+        RenderBR {BR} at (221,122) size 0x0
+        RenderText {#text} at (0,126) size 298x18
+          text run at (0,126) width 298: "necullamcorperlacusantevulputatepede.Nascetu"
+        RenderBR {BR} at (298,140) size 0x0
+        RenderText {#text} at (0,144) size 89x18
+          text run at (0,144) width 89: "rridiculusmus."
diff --git a/LayoutTests/fast/text/midword-break-after-breakable-char.html b/LayoutTests/fast/text/midword-break-after-breakable-char.html
new file mode 100644 (file)
index 0000000..58a39f3
--- /dev/null
@@ -0,0 +1,31 @@
+<head>
+    <style>
+        div { margin: 4px; width: 300px; background: lightyellow; word-wrap: break-word; float: left; }
+    </style>
+</head>
+<body>
+    <p>
+        Test for <i><a href="http://bugs.webkit.org/show_bug.cgi?id=13156">http://bugs.webkit.org/show_bug.cgi?id=13156</a>
+        REGRESSION (r19621): Pasting breakable content where wrapped line is too long to fit in a textarea fails to draw a horizontal scrollbar</i>.
+    </p>
+    <p>
+        This tests that a line break will occur in the middle of the first word on a line if it&rsquo;s too long to fit on the line. The behavior is tested after breakable characters (question mark and hyphen), after a space and after a soft hyphen.
+    </p>
+    <p>
+        The following blocks should be identical.
+    </p>
+    <div>
+        Curabiturpretium,quamquiss?empermalesuada,estliberofeugiatlibero,velfringillaorcinibhsedneque-Quisqueeunullanonnisimolestieaccumsan.Etiamtellusurna,laoreetac,laoreetnon suscipitsed,sapien.Phasellusvehicula,sematposuerevehicula,auguenibhmolestienisl&shy;necullamcorperlacusantevulputatepede.Nasceturridiculusmus.
+    </div>
+    <div>
+        Curabiturpretium,quamquiss?<br>
+        empermalesuada,estliberofeugiatlibero,velfringi<br>
+        llaorcinibhsedneque-<br>
+        Quisqueeunullanonnisimolestieaccumsan.Etiam<br>
+        tellusurna,laoreetac,laoreetnon<br>
+        suscipitsed,sapien.Phasellusvehicula,sematposu<br>
+        erevehicula,auguenibhmolestienisl-<br>
+        necullamcorperlacusantevulputatepede.Nascetu<br>
+        rridiculusmus.
+    </div>
+</body>
index d4e47448b6772b1d98ec16a1fb833b6a6c605d6d..939ef90803e8709527c9b628b402e4020088d5de 100644 (file)
@@ -1,3 +1,21 @@
+2007-03-24  Mitz Pettel  <mitz@webkit.org>
+
+        Reviewed by Darin.
+
+        - fix http://bugs.webkit.org/show_bug.cgi?id=13156
+          REGRESSION (r19621): Pasting breakable content where wrapped line is too long to fit in a textarea fails to draw a horizontal scrollbar
+
+        Test: fast/text/midword-break-after-breakable-char.html
+
+        Breaking in the middle of the word
+        is allowed only if no breaking opportunity between words has occurred yet. The
+        first position on the line should not be considered "between words" even if
+        it is a breaking opportunity.
+        
+        * rendering/bidi.cpp:
+        (WebCore::RenderBlock::findNextLineBreak): Changed according to the above. Also
+        cleaned up a couple of lines.
+
 2007-03-24  David Hyatt  <hyatt@apple.com>
 
         Fix for bugzilla bug 13187, place a hard limit on the amount of decoded data that WebCore will keep
index d78dc2973114c158d05d5e3e8f0af0142680741b..444d85560d9ea8b13f4049d91e2f1a8e8c9eeb97 100644 (file)
@@ -2095,6 +2095,7 @@ BidiIterator RenderBlock::findNextLineBreak(BidiIterator &start, BidiState &bidi
     RenderObject *last = o;
     RenderObject *previous = o;
     int pos = start.pos;
+    bool atStart = true;
 
     bool prevLineBrokeCleanly = previousLineBrokeCleanly;
     previousLineBrokeCleanly = false;
@@ -2308,11 +2309,11 @@ BidiIterator RenderBlock::findNextLineBreak(BidiIterator &start, BidiState &bidi
                 currentCharacterIsWS = currentCharacterIsSpace || (breakNBSP && c == noBreakSpace);
 
                 if (breakWords && !midWordBreak) {
-                    wrapW += t->width(pos, 1, f, w+wrapW);
+                    wrapW += t->width(pos, 1, f, w + wrapW);
                     midWordBreak = w + wrapW > width;
                 }
 
-                bool betweenWords = c == '\n' || (currWS != PRE && isBreakable(str, pos, strlen, nextBreakable, breakNBSP));
+                bool betweenWords = c == '\n' || (currWS != PRE && !atStart && isBreakable(str, pos, strlen, nextBreakable, breakNBSP));
 
                 if (betweenWords || midWordBreak) {
                     bool stoppedIgnoringSpaces = false;
@@ -2484,6 +2485,7 @@ BidiIterator RenderBlock::findNextLineBreak(BidiIterator &start, BidiState &bidi
                     
                 pos++;
                 len--;
+                atStart = false;
             }
             
             // IMPORTANT: pos is > length here!
@@ -2513,7 +2515,7 @@ BidiIterator RenderBlock::findNextLineBreak(BidiIterator &start, BidiState &bidi
                             checkForBreak = true;
                     }
                     bool willFitOnLine = (w + tmpW <= width);
-                    bool canPlaceOnLine = willFitOnLine || !willFitOnLine && !autoWrapWasEverTrueOnLine;
+                    bool canPlaceOnLine = willFitOnLine || !autoWrapWasEverTrueOnLine;
                     if (canPlaceOnLine && checkForBreak) {
                         w += tmpW;
                         tmpW = 0;
@@ -2570,6 +2572,7 @@ BidiIterator RenderBlock::findNextLineBreak(BidiIterator &start, BidiState &bidi
             currentCharacterIsSpace = false;
         
         pos = 0;
+        atStart = false;
     }