[SCM] WebKit Debian packaging branch, debian/experimental, updated. upstream/1.3.3-9427-gc2be6fc

mitz at apple.com mitz at apple.com
Wed Dec 22 13:52:43 UTC 2010


The following commit has been merged in the debian/experimental branch:
commit 20e3445d1dd5780f2aaee3dc38b042b1fd4e7ce2
Author: mitz at apple.com <mitz at apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Date:   Tue Sep 28 19:38:15 2010 +0000

    WebCore: Improved the handling of soft hyphens in Copy and Find operations, addressing the following
    bugs:
    
    Reviewed by Darin Adler.
    
    <rdar://problem/7938878> Soft hyphenation and the clipboard
    https://bugs.webkit.org/show_bug.cgi?id=11154
    
    window.getSelection().toString() breaks soft hyphen &shy;
    https://bugs.webkit.org/show_bug.cgi?id=26774
    
    <rdar://problem/5640505> soft hyphen breaks search function
    https://bugs.webkit.org/show_bug.cgi?id=16675
    
    Test: fast/text/find-soft-hyphen.html
    
    Changed line layout code to not skip over soft hyphens but rather include them in the text
    boxes. Changed font code to render the soft hyphen character as a zero width space, so that
    the former change will not affect rendering of soft hyphens in the middle of the line. Also
    changed line layout code to mark text boxes where hyphenation occurred due to a soft hyphen
    as hyphenated, so that the hyphen string specified in CSS will be appended to them.
    
    Not omitting the soft hyphens from the text boxes makes the text iterator emit them, which
    solves the Copy and plain-text conversion issues. Previously, the iterator would emit a space
    to account for non-rendered characters between adjacent boxes, which was wrong in this case.
    
    To make Find work, soft hyphens are folded into 0, which is ignorable in the collation used
    for Find.
    
    * editing/TextIterator.cpp:
    (WebCore::foldQuoteMarkOrSoftHyphen): Renamed foldQuoteMark() to this and added folding of
    soft hyphen to 0.
    (WebCore::foldQuoteMarksAndSoftHyphens): Renamed foldQuoteMarks() to thid and added folding
    of soft hyphen to 0.
    (WebCore::SearchBuffer::SearchBuffer): Updated for renames.
    (WebCore::SearchBuffer::append): Ditto.
    * platform/graphics/Font.h:
    (WebCore::Font::treatAsSpace): Replaced number literal with name.
    (WebCore::Font::treatAsZeroWidthSpace): Added softHyphen.
    * platform/graphics/GlyphPageTreeNode.cpp:
    (WebCore::GlyphPageTreeNode::initializePage): Get the zero width space glyph for soft hyphen.
    * platform/graphics/mac/ComplexTextController.cpp:
    (WebCore::ComplexTextController::collectComplexTextRuns): Removed special handling that made
    a trailing soft hyphen render as hyphen-minus. All soft hyphens are now rendered as zero width
    spaces, and where a line break actually occurs at a soft hyphen, rendering code appends the
    CSS-specified hyphenate character to the text run that is passed to us here.
    * rendering/RenderBlockLineLayout.cpp:
    (WebCore::chopMidpointsAt): Removed this function, which was only used for skipping over soft
    hyphens.
    (WebCore::checkMidpoints): Removed code related to skipping over soft hyphens.
    (WebCore::RenderBlock::findNextLineBreak): Removed code to skip over soft hyphens. Ignore
    a line break opportunity at a soft hyphen if the style specifies 'hyphens: none'. Set
    'hyphenated' to true if a line break occurs at a soft hyphen.
    * rendering/style/RenderStyle.cpp:
    (WebCore::RenderStyle::hyphenString): Changed the assertion to allow querying for the hyphen
    string for 'hyphens: manual'.
    
    LayoutTests: Improved the handling of soft hyphens in copy and find operations, addressing the following
    bugs:
    
    Reviewed by Darin Adler.
    
    <rdar://problem/7938878> Soft hyphenation and the clipboard
    https://bugs.webkit.org/show_bug.cgi?id=11154
    
    window.getSelection().toString() breaks soft hyphen &shy;
    https://bugs.webkit.org/show_bug.cgi?id=26774
    
    <rdar://problem/5640505> soft hyphen breaks search function
    https://bugs.webkit.org/show_bug.cgi?id=16675
    
    * fast/text/find-soft-hyphen-expected.txt: Added.
    * fast/text/find-soft-hyphen.html: Added.
    * fast/text/script-tests/find-soft-hyphen.js: Added.
    (canFind):
    * platform/mac/fast/text/basic/014-expected.checksum:
    * platform/mac/fast/text/basic/014-expected.png:
    * platform/mac/fast/text/basic/014-expected.txt:
    * platform/mac/fast/text/capitalize-boundaries-expected.checksum:
    * platform/mac/fast/text/capitalize-boundaries-expected.png:
    * platform/mac/fast/text/capitalize-boundaries-expected.txt:
    * platform/mac/fast/text/hyphens-expected.checksum:
    * platform/mac/fast/text/hyphens-expected.png:
    * platform/mac/fast/text/hyphens-expected.txt:
    * platform/mac/fast/text/midword-break-after-breakable-char-expected.checksum:
    * platform/mac/fast/text/midword-break-after-breakable-char-expected.png:
    * platform/mac/fast/text/midword-break-after-breakable-char-expected.txt:
    * platform/mac/fast/text/soft-hyphen-2-expected.png:
    * platform/mac/fast/text/soft-hyphen-2-expected.txt:
    * platform/mac/fast/text/soft-hyphen-3-expected.png:
    * platform/mac/fast/text/soft-hyphen-3-expected.txt:
    * platform/mac/fast/text/softHyphen-expected.checksum:
    * platform/mac/fast/text/softHyphen-expected.png:
    * platform/mac/fast/text/softHyphen-expected.txt:
    * platform/mac/fast/text/word-break-soft-hyphen-expected.checksum:
    * platform/mac/fast/text/word-break-soft-hyphen-expected.png:
    * platform/mac/fast/text/word-break-soft-hyphen-expected.txt:
    
    
    
    git-svn-id: http://svn.webkit.org/repository/webkit/trunk@68551 268f45cc-cd09-0410-ab3c-d52691b4dbfc

diff --git a/LayoutTests/ChangeLog b/LayoutTests/ChangeLog
index 5e711a7..460bfae 100644
--- a/LayoutTests/ChangeLog
+++ b/LayoutTests/ChangeLog
@@ -1,3 +1,46 @@
+2010-09-28  Dan Bernstein  <mitz at apple.com>
+
+        Reviewed by Darin Adler.
+
+        Improved the handling of soft hyphens in copy and find operations, addressing the following
+        bugs:
+
+        <rdar://problem/7938878> Soft hyphenation and the clipboard
+        https://bugs.webkit.org/show_bug.cgi?id=11154
+
+        window.getSelection().toString() breaks soft hyphen &shy;
+        https://bugs.webkit.org/show_bug.cgi?id=26774
+
+        <rdar://problem/5640505> soft hyphen breaks search function
+        https://bugs.webkit.org/show_bug.cgi?id=16675
+
+        * fast/text/find-soft-hyphen-expected.txt: Added.
+        * fast/text/find-soft-hyphen.html: Added.
+        * fast/text/script-tests/find-soft-hyphen.js: Added.
+        (canFind):
+        * platform/mac/fast/text/basic/014-expected.checksum:
+        * platform/mac/fast/text/basic/014-expected.png:
+        * platform/mac/fast/text/basic/014-expected.txt:
+        * platform/mac/fast/text/capitalize-boundaries-expected.checksum:
+        * platform/mac/fast/text/capitalize-boundaries-expected.png:
+        * platform/mac/fast/text/capitalize-boundaries-expected.txt:
+        * platform/mac/fast/text/hyphens-expected.checksum:
+        * platform/mac/fast/text/hyphens-expected.png:
+        * platform/mac/fast/text/hyphens-expected.txt:
+        * platform/mac/fast/text/midword-break-after-breakable-char-expected.checksum:
+        * platform/mac/fast/text/midword-break-after-breakable-char-expected.png:
+        * platform/mac/fast/text/midword-break-after-breakable-char-expected.txt:
+        * platform/mac/fast/text/soft-hyphen-2-expected.png:
+        * platform/mac/fast/text/soft-hyphen-2-expected.txt:
+        * platform/mac/fast/text/soft-hyphen-3-expected.png:
+        * platform/mac/fast/text/soft-hyphen-3-expected.txt:
+        * platform/mac/fast/text/softHyphen-expected.checksum:
+        * platform/mac/fast/text/softHyphen-expected.png:
+        * platform/mac/fast/text/softHyphen-expected.txt:
+        * platform/mac/fast/text/word-break-soft-hyphen-expected.checksum:
+        * platform/mac/fast/text/word-break-soft-hyphen-expected.png:
+        * platform/mac/fast/text/word-break-soft-hyphen-expected.txt:
+
 2010-09-28  Andreas Kling  <andreas.kling at nokia.com>
 
         Reviewed by Kenneth Rohde Christiansen.
diff --git a/LayoutTests/fast/text/find-soft-hyphen-expected.txt b/LayoutTests/fast/text/find-soft-hyphen-expected.txt
new file mode 100644
index 0000000..80d465c
--- /dev/null
+++ b/LayoutTests/fast/text/find-soft-hyphen-expected.txt
@@ -0,0 +1,18 @@
+Tests find for strings with soft hyphens in them.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS canFind("ab", "a" + softHyphen + "b") is true
+PASS canFind("ab", "a" + softHyphen + softHyphen + "b") is true
+PASS canFind("àb", "a" + softHyphen + "b") is true
+PASS canFind("ab", "a" + softHyphen + "̀b") is true
+PASS canFind("ab", "à" + softHyphen + "b") is true
+PASS canFind("a" + softHyphen + "b", "a" + softHyphen + "b") is true
+PASS canFind("a" + softHyphen + "b", "ab") is true
+PASS canFind("a" + hyphen + "b", "a" + softHyphen + "b") is false
+PASS canFind("a-b", "a" + softHyphen + "b") is false
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/fast/text/find-soft-hyphen.html b/LayoutTests/fast/text/find-soft-hyphen.html
new file mode 100644
index 0000000..93efd2d
--- /dev/null
+++ b/LayoutTests/fast/text/find-soft-hyphen.html
@@ -0,0 +1,13 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+<head>
+<link rel="stylesheet" href="../js/resources/js-test-style.css">
+<script src="../js/resources/js-test-pre.js"></script>
+</head>
+<body>
+<p id="description"></p>
+<div id="console"></div>
+<script src="script-tests/find-soft-hyphen.js"></script>
+<script src="../js/resources/js-test-post.js"></script>
+</body>
+</html>
diff --git a/LayoutTests/fast/text/script-tests/find-soft-hyphen.js b/LayoutTests/fast/text/script-tests/find-soft-hyphen.js
new file mode 100644
index 0000000..500e4d7
--- /dev/null
+++ b/LayoutTests/fast/text/script-tests/find-soft-hyphen.js
@@ -0,0 +1,34 @@
+description("Tests find for strings with soft hyphens in them.");
+
+function canFind(target, specimen)
+{
+    getSelection().empty();
+    var textNode = document.createTextNode(specimen);
+    document.body.appendChild(textNode);
+    document.execCommand("FindString", false, target);
+    var result = getSelection().rangeCount != 0;
+    getSelection().empty();
+    document.body.removeChild(textNode);
+    return result;
+}
+
+document.getElementById("console").style.display = "none";
+
+var hyphen= String.fromCharCode(0x2010);
+var softHyphen = String.fromCharCode(0x00AD);
+
+shouldBe('canFind("ab", "a" + softHyphen + "b")', 'true');
+shouldBe('canFind("ab", "a" + softHyphen + softHyphen + "b")', 'true');
+shouldBe('canFind("a\u0300b", "a" + softHyphen + "b")', 'true');
+shouldBe('canFind("ab", "a" + softHyphen + "\u0300b")', 'true');
+shouldBe('canFind("ab", "a\u0300" + softHyphen + "b")', 'true');
+shouldBe('canFind("a" + softHyphen + "b", "a" + softHyphen + "b")', 'true');
+shouldBe('canFind("a" + softHyphen + "b", "ab")', 'true');
+
+// Soft hyphen doesn't match hyphen and hyphen-minus.
+shouldBe('canFind("a" + hyphen + "b", "a" + softHyphen + "b")', 'false');
+shouldBe('canFind("a-b", "a" + softHyphen + "b")', 'false');
+
+document.getElementById("console").style.removeProperty("display");
+
+var successfullyParsed = true;
diff --git a/LayoutTests/platform/mac/fast/text/basic/014-expected.checksum b/LayoutTests/platform/mac/fast/text/basic/014-expected.checksum
index 8c9b76e..5be98d4 100644
--- a/LayoutTests/platform/mac/fast/text/basic/014-expected.checksum
+++ b/LayoutTests/platform/mac/fast/text/basic/014-expected.checksum
@@ -1 +1 @@
-1c09cb875b574df8ed91c7d92638524b
\ No newline at end of file
+dc5803e5d1c97daeeac4f91bcf3e5597
\ No newline at end of file
diff --git a/LayoutTests/platform/mac/fast/text/basic/014-expected.png b/LayoutTests/platform/mac/fast/text/basic/014-expected.png
index 309cacc..7e5be22 100644
Binary files a/LayoutTests/platform/mac/fast/text/basic/014-expected.png and b/LayoutTests/platform/mac/fast/text/basic/014-expected.png differ
diff --git a/LayoutTests/platform/mac/fast/text/basic/014-expected.txt b/LayoutTests/platform/mac/fast/text/basic/014-expected.txt
index d257f36..8fa7a3b 100644
--- a/LayoutTests/platform/mac/fast/text/basic/014-expected.txt
+++ b/LayoutTests/platform/mac/fast/text/basic/014-expected.txt
@@ -5,68 +5,31 @@ layer at (0,0) size 800x600
     RenderBody {BODY} at (8,8) size 784x576
       RenderBlock {DIV} at (0,0) size 396x194 [border: (2px solid #FF0000)]
         RenderBlock {P} at (2,18) size 392x36
-          RenderText {#text} at (0,0) size 387x36
-            text run at (0,0) width 387: "I\x{2019}m told this is the longest word in the English language: anti\x{AD}"
-            text run at (0,18) width 18: "dis"
-            text run at (18,18) width 17: "est"
-            text run at (35,18) width 15: "ab"
-            text run at (50,18) width 22: "lish"
-            text run at (72,18) width 31: "ment"
-            text run at (103,18) width 31: "arian"
-            text run at (134,18) width 26: "ism."
+          RenderText {#text} at (0,0) size 388x36
+            text run at (0,0) width 388: "I\x{2019}m told this is the longest word in the English language: anti\x{AD}"
+            text run at (0,18) width 160: "dis\x{AD}est\x{AD}ab\x{AD}lish\x{AD}ment\x{AD}arian\x{AD}ism."
         RenderBlock {P} at (2,70) size 392x36
-          RenderText {#text} at (0,0) size 387x36
-            text run at (0,0) width 387: "I\x{2019}m told this is the longest word in the English language: anti\x{AD}"
-            text run at (0,18) width 18: "dis"
-            text run at (18,18) width 17: "est"
-            text run at (35,18) width 15: "ab"
-            text run at (50,18) width 22: "lish"
-            text run at (72,18) width 31: "ment"
-            text run at (103,18) width 31: "arian"
-            text run at (134,18) width 26: "ism."
+          RenderText {#text} at (0,0) size 388x36
+            text run at (0,0) width 388: "I\x{2019}m told this is the longest word in the English language: anti\x{AD}"
+            text run at (0,18) width 160: "dis\x{AD}est\x{AD}ab\x{AD}lish\x{AD}ment\x{AD}arian\x{AD}ism."
         RenderBlock {P} at (2,122) size 392x54
-          RenderText {#text} at (0,0) size 387x36
-            text run at (0,0) width 387: "I\x{2019}m told this is the longest word in the English language: anti\x{AD}"
-            text run at (0,18) width 18: "dis"
-            text run at (18,18) width 17: "est"
-            text run at (35,18) width 15: "ab"
+          RenderText {#text} at (0,0) size 388x36
+            text run at (0,0) width 388: "I\x{2019}m told this is the longest word in the English language: anti\x{AD}"
+            text run at (0,18) width 50: "dis\x{AD}est\x{AD}ab\x{AD}"
           RenderBR {BR} at (50,32) size 0x0
           RenderText {#text} at (0,36) size 110x18
-            text run at (0,36) width 22: "lish"
-            text run at (22,36) width 31: "ment"
-            text run at (53,36) width 31: "arian"
-            text run at (84,36) width 26: "ism."
+            text run at (0,36) width 110: "lish\x{AD}ment\x{AD}arian\x{AD}ism."
       RenderBlock {P} at (0,210) size 784x0
       RenderBlock (floating) {DIV} at (0,210) size 546x140 [border: (2px solid #FF0000)]
         RenderBlock {P} at (2,18) size 542x18
           RenderText {#text} at (0,0) size 542x18
-            text run at (0,0) width 382: "I\x{2019}m told this is the longest word in the English language: anti"
-            text run at (382,0) width 18: "dis"
-            text run at (400,0) width 17: "est"
-            text run at (417,0) width 15: "ab"
-            text run at (432,0) width 22: "lish"
-            text run at (454,0) width 31: "ment"
-            text run at (485,0) width 31: "arian"
-            text run at (516,0) width 26: "ism."
+            text run at (0,0) width 542: "I\x{2019}m told this is the longest word in the English language: anti\x{AD}dis\x{AD}est\x{AD}ab\x{AD}lish\x{AD}ment\x{AD}arian\x{AD}ism."
         RenderBlock {P} at (2,52) size 542x18
           RenderText {#text} at (0,0) size 542x18
-            text run at (0,0) width 382: "I\x{2019}m told this is the longest word in the English language: anti"
-            text run at (382,0) width 18: "dis"
-            text run at (400,0) width 17: "est"
-            text run at (417,0) width 15: "ab"
-            text run at (432,0) width 22: "lish"
-            text run at (454,0) width 31: "ment"
-            text run at (485,0) width 31: "arian"
-            text run at (516,0) width 26: "ism."
+            text run at (0,0) width 542: "I\x{2019}m told this is the longest word in the English language: anti\x{AD}dis\x{AD}est\x{AD}ab\x{AD}lish\x{AD}ment\x{AD}arian\x{AD}ism."
         RenderBlock {P} at (2,86) size 542x36
           RenderText {#text} at (0,0) size 432x18
-            text run at (0,0) width 382: "I\x{2019}m told this is the longest word in the English language: anti"
-            text run at (382,0) width 18: "dis"
-            text run at (400,0) width 17: "est"
-            text run at (417,0) width 15: "ab"
+            text run at (0,0) width 432: "I\x{2019}m told this is the longest word in the English language: anti\x{AD}dis\x{AD}est\x{AD}ab\x{AD}"
           RenderBR {BR} at (432,14) size 0x0
           RenderText {#text} at (0,18) size 110x18
-            text run at (0,18) width 22: "lish"
-            text run at (22,18) width 31: "ment"
-            text run at (53,18) width 31: "arian"
-            text run at (84,18) width 26: "ism."
+            text run at (0,18) width 110: "lish\x{AD}ment\x{AD}arian\x{AD}ism."
diff --git a/LayoutTests/platform/mac/fast/text/capitalize-boundaries-expected.checksum b/LayoutTests/platform/mac/fast/text/capitalize-boundaries-expected.checksum
index 8fb533a..6f9e522 100644
--- a/LayoutTests/platform/mac/fast/text/capitalize-boundaries-expected.checksum
+++ b/LayoutTests/platform/mac/fast/text/capitalize-boundaries-expected.checksum
@@ -1 +1 @@
-ef506a9d27610f5aed032ba84aa0b6c5
\ No newline at end of file
+2ccf69c8ba374f9285d308e77ce33bce
\ No newline at end of file
diff --git a/LayoutTests/platform/mac/fast/text/capitalize-boundaries-expected.png b/LayoutTests/platform/mac/fast/text/capitalize-boundaries-expected.png
index af79da2..76d7a66 100644
Binary files a/LayoutTests/platform/mac/fast/text/capitalize-boundaries-expected.png and b/LayoutTests/platform/mac/fast/text/capitalize-boundaries-expected.png differ
diff --git a/LayoutTests/platform/mac/fast/text/capitalize-boundaries-expected.txt b/LayoutTests/platform/mac/fast/text/capitalize-boundaries-expected.txt
index d7df7f2..21e5de9 100644
--- a/LayoutTests/platform/mac/fast/text/capitalize-boundaries-expected.txt
+++ b/LayoutTests/platform/mac/fast/text/capitalize-boundaries-expected.txt
@@ -27,61 +27,10 @@ layer at (0,0) size 785x1198
               RenderText {#text} at (2,2) size 49x18
                 text run at (2,2) width 49: "generic"
             RenderTableCell {TD} at (57,2) size 710x58 [border: (1px solid #EEEEEE)] [r=0 c=1 rs=1 cs=1]
-              RenderText {#text} at (2,2) size 705x54
-                text run at (2,2) width 16: "lip"
-                text run at (18,2) width 52: "smackin"
-                text run at (70,2) width 31: "thirst"
-                text run at (101,2) width 58: "quenchin"
-                text run at (159,2) width 54: "acetastin"
-                text run at (213,2) width 59: "motivatin"
-                text run at (272,2) width 32: "good"
-                text run at (304,2) width 42: "buzzin"
-                text run at (346,2) width 27: "cool"
-                text run at (373,2) width 35: "talkin"
-                text run at (408,2) width 28: "high"
-                text run at (436,2) width 43: "walkin"
-                text run at (479,2) width 22: "fast"
-                text run at (501,2) width 28: "livin"
-                text run at (529,2) width 27: "ever"
-                text run at (556,2) width 32: "givin"
-                text run at (588,2) width 27: "cool"
-                text run at (615,2) width 35: "fizzin"
-                text run at (650,2) width 21: "lip\x{AD}"
-                text run at (2,20) width 52: "smackin"
-                text run at (54,20) width 31: "thirst"
-                text run at (85,20) width 58: "quenchin"
-                text run at (143,20) width 54: "acetastin"
-                text run at (197,20) width 59: "motivatin"
-                text run at (256,20) width 32: "good"
-                text run at (288,20) width 42: "buzzin"
-                text run at (330,20) width 27: "cool"
-                text run at (357,20) width 35: "talkin"
-                text run at (392,20) width 28: "high"
-                text run at (420,20) width 43: "walkin"
-                text run at (463,20) width 22: "fast"
-                text run at (485,20) width 28: "livin"
-                text run at (513,20) width 27: "ever"
-                text run at (540,20) width 32: "givin"
-                text run at (572,20) width 27: "cool"
-                text run at (599,20) width 35: "fizzin"
-                text run at (634,20) width 16: "lip"
-                text run at (650,20) width 57: "smackin\x{AD}"
-                text run at (2,38) width 31: "thirst"
-                text run at (33,38) width 58: "quenchin"
-                text run at (91,38) width 54: "acetastin"
-                text run at (145,38) width 59: "motivatin"
-                text run at (204,38) width 32: "good"
-                text run at (236,38) width 42: "buzzin"
-                text run at (278,38) width 27: "cool"
-                text run at (305,38) width 35: "talkin"
-                text run at (340,38) width 28: "high"
-                text run at (368,38) width 43: "walkin"
-                text run at (411,38) width 22: "fast"
-                text run at (433,38) width 28: "livin"
-                text run at (461,38) width 27: "ever"
-                text run at (488,38) width 32: "givin"
-                text run at (520,38) width 27: "cool"
-                text run at (547,38) width 35: "fizzin"
+              RenderText {#text} at (2,2) size 706x54
+                text run at (2,2) width 670: "lip\x{AD}smackin\x{AD}thirst\x{AD}quenchin\x{AD}acetastin\x{AD}motivatin\x{AD}good\x{AD}buzzin\x{AD}cool\x{AD}talkin\x{AD}high\x{AD}walkin\x{AD}fast\x{AD}livin\x{AD}ever\x{AD}givin\x{AD}cool\x{AD}fizzin\x{AD}lip\x{AD}"
+                text run at (2,20) width 706: "smackin\x{AD}thirst\x{AD}quenchin\x{AD}acetastin\x{AD}motivatin\x{AD}good\x{AD}buzzin\x{AD}cool\x{AD}talkin\x{AD}high\x{AD}walkin\x{AD}fast\x{AD}livin\x{AD}ever\x{AD}givin\x{AD}cool\x{AD}fizzin\x{AD}lip\x{AD}smackin\x{AD}"
+                text run at (2,38) width 580: "thirst\x{AD}quenchin\x{AD}acetastin\x{AD}motivatin\x{AD}good\x{AD}buzzin\x{AD}cool\x{AD}talkin\x{AD}high\x{AD}walkin\x{AD}fast\x{AD}livin\x{AD}ever\x{AD}givin\x{AD}cool\x{AD}fizzin"
           RenderTableRow {TR} at (0,62) size 769x22
             RenderTableCell {TH} at (2,62) size 53x22 [bgcolor=#F8F8F8] [border: (1px solid #EEEEEE)] [r=1 c=0 rs=1 cs=1]
               RenderText {#text} at (19,2) size 15x18
@@ -187,61 +136,10 @@ layer at (0,0) size 785x1198
               RenderText {#text} at (2,2) size 49x18
                 text run at (2,2) width 49: "generic"
             RenderTableCell {TD} at (57,2) size 710x58 [border: (1px solid #EEEEEE)] [r=0 c=1 rs=1 cs=1]
-              RenderText {#text} at (2,2) size 705x54
-                text run at (2,2) width 22: "Lip"
-                text run at (24,2) width 52: "smackin"
-                text run at (76,2) width 31: "thirst"
-                text run at (107,2) width 58: "quenchin"
-                text run at (165,2) width 54: "acetastin"
-                text run at (219,2) width 59: "motivatin"
-                text run at (278,2) width 32: "good"
-                text run at (310,2) width 42: "buzzin"
-                text run at (352,2) width 27: "cool"
-                text run at (379,2) width 35: "talkin"
-                text run at (414,2) width 28: "high"
-                text run at (442,2) width 43: "walkin"
-                text run at (485,2) width 22: "fast"
-                text run at (507,2) width 28: "livin"
-                text run at (535,2) width 27: "ever"
-                text run at (562,2) width 32: "givin"
-                text run at (594,2) width 27: "cool"
-                text run at (621,2) width 35: "fizzin"
-                text run at (656,2) width 21: "lip\x{AD}"
-                text run at (2,20) width 52: "smackin"
-                text run at (54,20) width 31: "thirst"
-                text run at (85,20) width 58: "quenchin"
-                text run at (143,20) width 54: "acetastin"
-                text run at (197,20) width 59: "motivatin"
-                text run at (256,20) width 32: "good"
-                text run at (288,20) width 42: "buzzin"
-                text run at (330,20) width 27: "cool"
-                text run at (357,20) width 35: "talkin"
-                text run at (392,20) width 28: "high"
-                text run at (420,20) width 43: "walkin"
-                text run at (463,20) width 22: "fast"
-                text run at (485,20) width 28: "livin"
-                text run at (513,20) width 27: "ever"
-                text run at (540,20) width 32: "givin"
-                text run at (572,20) width 27: "cool"
-                text run at (599,20) width 35: "fizzin"
-                text run at (634,20) width 16: "lip"
-                text run at (650,20) width 57: "smackin\x{AD}"
-                text run at (2,38) width 31: "thirst"
-                text run at (33,38) width 58: "quenchin"
-                text run at (91,38) width 54: "acetastin"
-                text run at (145,38) width 59: "motivatin"
-                text run at (204,38) width 32: "good"
-                text run at (236,38) width 42: "buzzin"
-                text run at (278,38) width 27: "cool"
-                text run at (305,38) width 35: "talkin"
-                text run at (340,38) width 28: "high"
-                text run at (368,38) width 43: "walkin"
-                text run at (411,38) width 22: "fast"
-                text run at (433,38) width 28: "livin"
-                text run at (461,38) width 27: "ever"
-                text run at (488,38) width 32: "givin"
-                text run at (520,38) width 27: "cool"
-                text run at (547,38) width 35: "fizzin"
+              RenderText {#text} at (2,2) size 706x54
+                text run at (2,2) width 676: "Lip\x{AD}smackin\x{AD}thirst\x{AD}quenchin\x{AD}acetastin\x{AD}motivatin\x{AD}good\x{AD}buzzin\x{AD}cool\x{AD}talkin\x{AD}high\x{AD}walkin\x{AD}fast\x{AD}livin\x{AD}ever\x{AD}givin\x{AD}cool\x{AD}fizzin\x{AD}lip\x{AD}"
+                text run at (2,20) width 706: "smackin\x{AD}thirst\x{AD}quenchin\x{AD}acetastin\x{AD}motivatin\x{AD}good\x{AD}buzzin\x{AD}cool\x{AD}talkin\x{AD}high\x{AD}walkin\x{AD}fast\x{AD}livin\x{AD}ever\x{AD}givin\x{AD}cool\x{AD}fizzin\x{AD}lip\x{AD}smackin\x{AD}"
+                text run at (2,38) width 580: "thirst\x{AD}quenchin\x{AD}acetastin\x{AD}motivatin\x{AD}good\x{AD}buzzin\x{AD}cool\x{AD}talkin\x{AD}high\x{AD}walkin\x{AD}fast\x{AD}livin\x{AD}ever\x{AD}givin\x{AD}cool\x{AD}fizzin"
           RenderTableRow {TR} at (0,62) size 769x22
             RenderTableCell {TH} at (2,62) size 53x22 [bgcolor=#F8F8F8] [border: (1px solid #EEEEEE)] [r=1 c=0 rs=1 cs=1]
               RenderText {#text} at (19,2) size 15x18
@@ -331,61 +229,10 @@ layer at (0,0) size 785x1198
               RenderText {#text} at (2,2) size 49x18
                 text run at (2,2) width 49: "generic"
             RenderTableCell {TD} at (57,2) size 710x58 [border: (1px solid #EEEEEE)] [r=0 c=1 rs=1 cs=1]
-              RenderText {#text} at (2,2) size 705x54
-                text run at (2,2) width 22: "Lip"
-                text run at (24,2) width 52: "smackin"
-                text run at (76,2) width 31: "thirst"
-                text run at (107,2) width 58: "quenchin"
-                text run at (165,2) width 54: "acetastin"
-                text run at (219,2) width 59: "motivatin"
-                text run at (278,2) width 32: "good"
-                text run at (310,2) width 42: "buzzin"
-                text run at (352,2) width 27: "cool"
-                text run at (379,2) width 35: "talkin"
-                text run at (414,2) width 28: "high"
-                text run at (442,2) width 43: "walkin"
-                text run at (485,2) width 22: "fast"
-                text run at (507,2) width 28: "livin"
-                text run at (535,2) width 27: "ever"
-                text run at (562,2) width 32: "givin"
-                text run at (594,2) width 27: "cool"
-                text run at (621,2) width 35: "fizzin"
-                text run at (656,2) width 21: "lip\x{AD}"
-                text run at (2,20) width 52: "smackin"
-                text run at (54,20) width 31: "thirst"
-                text run at (85,20) width 58: "quenchin"
-                text run at (143,20) width 54: "acetastin"
-                text run at (197,20) width 59: "motivatin"
-                text run at (256,20) width 32: "good"
-                text run at (288,20) width 42: "buzzin"
-                text run at (330,20) width 27: "cool"
-                text run at (357,20) width 35: "talkin"
-                text run at (392,20) width 28: "high"
-                text run at (420,20) width 43: "walkin"
-                text run at (463,20) width 22: "fast"
-                text run at (485,20) width 28: "livin"
-                text run at (513,20) width 27: "ever"
-                text run at (540,20) width 32: "givin"
-                text run at (572,20) width 27: "cool"
-                text run at (599,20) width 35: "fizzin"
-                text run at (634,20) width 16: "lip"
-                text run at (650,20) width 57: "smackin\x{AD}"
-                text run at (2,38) width 31: "thirst"
-                text run at (33,38) width 58: "quenchin"
-                text run at (91,38) width 54: "acetastin"
-                text run at (145,38) width 59: "motivatin"
-                text run at (204,38) width 32: "good"
-                text run at (236,38) width 42: "buzzin"
-                text run at (278,38) width 27: "cool"
-                text run at (305,38) width 35: "talkin"
-                text run at (340,38) width 28: "high"
-                text run at (368,38) width 43: "walkin"
-                text run at (411,38) width 22: "fast"
-                text run at (433,38) width 28: "livin"
-                text run at (461,38) width 27: "ever"
-                text run at (488,38) width 32: "givin"
-                text run at (520,38) width 27: "cool"
-                text run at (547,38) width 35: "fizzin"
+              RenderText {#text} at (2,2) size 706x54
+                text run at (2,2) width 676: "Lip\x{AD}smackin\x{AD}thirst\x{AD}quenchin\x{AD}acetastin\x{AD}motivatin\x{AD}good\x{AD}buzzin\x{AD}cool\x{AD}talkin\x{AD}high\x{AD}walkin\x{AD}fast\x{AD}livin\x{AD}ever\x{AD}givin\x{AD}cool\x{AD}fizzin\x{AD}lip\x{AD}"
+                text run at (2,20) width 706: "smackin\x{AD}thirst\x{AD}quenchin\x{AD}acetastin\x{AD}motivatin\x{AD}good\x{AD}buzzin\x{AD}cool\x{AD}talkin\x{AD}high\x{AD}walkin\x{AD}fast\x{AD}livin\x{AD}ever\x{AD}givin\x{AD}cool\x{AD}fizzin\x{AD}lip\x{AD}smackin\x{AD}"
+                text run at (2,38) width 580: "thirst\x{AD}quenchin\x{AD}acetastin\x{AD}motivatin\x{AD}good\x{AD}buzzin\x{AD}cool\x{AD}talkin\x{AD}high\x{AD}walkin\x{AD}fast\x{AD}livin\x{AD}ever\x{AD}givin\x{AD}cool\x{AD}fizzin"
           RenderTableRow {TR} at (0,62) size 769x22
             RenderTableCell {TH} at (2,62) size 53x22 [bgcolor=#F8F8F8] [border: (1px solid #EEEEEE)] [r=1 c=0 rs=1 cs=1]
               RenderText {#text} at (19,2) size 15x18
diff --git a/LayoutTests/platform/mac/fast/text/hyphens-expected.checksum b/LayoutTests/platform/mac/fast/text/hyphens-expected.checksum
index 51967db..9045496 100644
--- a/LayoutTests/platform/mac/fast/text/hyphens-expected.checksum
+++ b/LayoutTests/platform/mac/fast/text/hyphens-expected.checksum
@@ -1 +1 @@
-11c391edd6a7a515f6a962cc28f41d38
\ No newline at end of file
+5672afd06eef8cb20bbcbd3004512cc0
\ No newline at end of file
diff --git a/LayoutTests/platform/mac/fast/text/hyphens-expected.png b/LayoutTests/platform/mac/fast/text/hyphens-expected.png
index 4302f67..9186e2e 100644
Binary files a/LayoutTests/platform/mac/fast/text/hyphens-expected.png and b/LayoutTests/platform/mac/fast/text/hyphens-expected.png differ
diff --git a/LayoutTests/platform/mac/fast/text/hyphens-expected.txt b/LayoutTests/platform/mac/fast/text/hyphens-expected.txt
index 08d344e..4bdbffb 100644
--- a/LayoutTests/platform/mac/fast/text/hyphens-expected.txt
+++ b/LayoutTests/platform/mac/fast/text/hyphens-expected.txt
@@ -39,18 +39,14 @@ layer at (0,0) size 800x600
             text run at (7,7) width 245: "The chief difficulty Alice found"
             text run at (7,29) width 245: "at first was in managing her"
             text run at (7,51) width 245: "flamingo: she succeeded in"
-            text run at (7,73) width 22: "get"
-            text run at (29,73) width 223: "ting its body tucked away,"
-            text run at (7,95) width 31: "com"
-            text run at (38,95) width 214: "fortably enough, under her"
+            text run at (7,73) width 245: "get\x{AD}ting its body tucked away,"
+            text run at (7,95) width 245: "com\x{AD}fortably enough, under her"
             text run at (7,117) width 307: "arm, with its legs hanging down, "
             text run at (314,117) width 23: "but"
             text run at (7,139) width 330: "generally, just as she had got its neck nicely"
-            text run at (7,161) width 54: "straight"
-            text run at (61,161) width 41: "ened "
+            text run at (7,161) width 95: "straight\x{AD}ened "
             text run at (102,161) width 235: "out, and was going to give the"
-            text run at (7,183) width 43: "hedge"
-            text run at (50,183) width 242: "hog a blow with its head, it "
+            text run at (7,183) width 285: "hedge\x{AD}hog a blow with its head, it "
             text run at (292,183) width 45: "would"
             text run at (7,205) width 314: "twist itself round and look up in her face\x{2026}"
       RenderBlock (floating) {DIV} at (4,284) size 344x284
diff --git a/LayoutTests/platform/mac/fast/text/midword-break-after-breakable-char-expected.checksum b/LayoutTests/platform/mac/fast/text/midword-break-after-breakable-char-expected.checksum
index dfb443a..e44be53 100644
--- a/LayoutTests/platform/mac/fast/text/midword-break-after-breakable-char-expected.checksum
+++ b/LayoutTests/platform/mac/fast/text/midword-break-after-breakable-char-expected.checksum
@@ -1 +1 @@
-cf7af4ce581479dc5a6b22a1c06ee870
\ No newline at end of file
+110b8fefa4bdff1134f06f588b257b4e
\ No newline at end of file
diff --git a/LayoutTests/platform/mac/fast/text/midword-break-after-breakable-char-expected.png b/LayoutTests/platform/mac/fast/text/midword-break-after-breakable-char-expected.png
index 49d680b..0553c3e 100644
Binary files a/LayoutTests/platform/mac/fast/text/midword-break-after-breakable-char-expected.png and b/LayoutTests/platform/mac/fast/text/midword-break-after-breakable-char-expected.png differ
diff --git a/LayoutTests/platform/mac/fast/text/midword-break-after-breakable-char-expected.txt b/LayoutTests/platform/mac/fast/text/midword-break-after-breakable-char-expected.txt
index ef4570b..84208fc 100644
--- a/LayoutTests/platform/mac/fast/text/midword-break-after-breakable-char-expected.txt
+++ b/LayoutTests/platform/mac/fast/text/midword-break-after-breakable-char-expected.txt
@@ -31,7 +31,7 @@ layer at (0,0) size 800x600
           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,108) width 222: "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]
diff --git a/LayoutTests/platform/mac/fast/text/soft-hyphen-2-expected.png b/LayoutTests/platform/mac/fast/text/soft-hyphen-2-expected.png
index cf0d042..4bdb828 100644
Binary files a/LayoutTests/platform/mac/fast/text/soft-hyphen-2-expected.png and b/LayoutTests/platform/mac/fast/text/soft-hyphen-2-expected.png differ
diff --git a/LayoutTests/platform/mac/fast/text/soft-hyphen-2-expected.txt b/LayoutTests/platform/mac/fast/text/soft-hyphen-2-expected.txt
index b326dc5..fd67dcf 100644
--- a/LayoutTests/platform/mac/fast/text/soft-hyphen-2-expected.txt
+++ b/LayoutTests/platform/mac/fast/text/soft-hyphen-2-expected.txt
@@ -5,8 +5,7 @@ layer at (0,0) size 800x600
     RenderBody {BODY} at (8,8) size 784x584
       RenderBlock {DIV} at (0,0) size 100x40 [color=#008000] [bgcolor=#FF0000]
         RenderText {#text} at (0,0) size 100x40
-          text run at (0,0) width 60: "hen"
-          text run at (60,0) width 40: "a\x{AD}"
+          text run at (0,0) width 100: "hen\x{AD}a\x{AD}"
           text run at (0,20) width 100: "tion."
       RenderBlock {DIV} at (0,40) size 100x40 [color=#008000] [bgcolor=#FF0000]
         RenderText {#text} at (0,0) size 100x40
diff --git a/LayoutTests/platform/mac/fast/text/soft-hyphen-3-expected.png b/LayoutTests/platform/mac/fast/text/soft-hyphen-3-expected.png
index a6db15f..56e8b02 100644
Binary files a/LayoutTests/platform/mac/fast/text/soft-hyphen-3-expected.png and b/LayoutTests/platform/mac/fast/text/soft-hyphen-3-expected.png differ
diff --git a/LayoutTests/platform/mac/fast/text/soft-hyphen-3-expected.txt b/LayoutTests/platform/mac/fast/text/soft-hyphen-3-expected.txt
index 61ec756..5dca858 100644
--- a/LayoutTests/platform/mac/fast/text/soft-hyphen-3-expected.txt
+++ b/LayoutTests/platform/mac/fast/text/soft-hyphen-3-expected.txt
@@ -5,7 +5,7 @@ layer at (0,0) size 800x600
     RenderBody {BODY} at (8,8) size 784x584
       RenderBlock {DIV} at (0,0) size 225x50 [color=#FFFFFF]
         RenderText {#text} at (0,0) size 100x25
-          text run at (0,0) width 100: "Did "
+          text run at (0,0) width 100: "Did \x{AD}"
         RenderInline {SPAN} at (0,0) size 75x25 [color=#008000]
           RenderText {#text} at (100,0) size 75x25
             text run at (100,0) width 75: "not"
diff --git a/LayoutTests/platform/mac/fast/text/softHyphen-expected.checksum b/LayoutTests/platform/mac/fast/text/softHyphen-expected.checksum
index 0542a03..3f7a2dc 100644
--- a/LayoutTests/platform/mac/fast/text/softHyphen-expected.checksum
+++ b/LayoutTests/platform/mac/fast/text/softHyphen-expected.checksum
@@ -1 +1 @@
-a6aec4c059e48ce40649e932e39eeda4
\ No newline at end of file
+abab2967b454bcad311317e8ef300a64
\ No newline at end of file
diff --git a/LayoutTests/platform/mac/fast/text/softHyphen-expected.png b/LayoutTests/platform/mac/fast/text/softHyphen-expected.png
index 371114a..3cde708 100644
Binary files a/LayoutTests/platform/mac/fast/text/softHyphen-expected.png and b/LayoutTests/platform/mac/fast/text/softHyphen-expected.png differ
diff --git a/LayoutTests/platform/mac/fast/text/softHyphen-expected.txt b/LayoutTests/platform/mac/fast/text/softHyphen-expected.txt
index 9c07ce2..dd40a4e 100644
--- a/LayoutTests/platform/mac/fast/text/softHyphen-expected.txt
+++ b/LayoutTests/platform/mac/fast/text/softHyphen-expected.txt
@@ -13,7 +13,7 @@ layer at (0,0) size 785x992
           RenderText {#text} at (1,1) size 12x18
             text run at (1,1) width 12: "X"
         RenderText {#text} at (20,0) size 78x18
-          text run at (20,0) width 78: "lorem ipsum"
+          text run at (20,0) width 78: "\x{AD}lorem ipsum"
       RenderBlock {P} at (0,68) size 769x18
         RenderBlock (floating) {SPAN} at (755,0) size 14x20 [border: (1px solid #FF0000)]
           RenderText {#text} at (1,1) size 12x18
@@ -24,12 +24,12 @@ layer at (0,0) size 785x992
         RenderText {#text} at (0,1) size 20x18
           text run at (0,1) width 20: "Do"
         RenderText {#text} at (34,1) size 78x18
-          text run at (34,1) width 78: "lorem ipsum"
+          text run at (34,1) width 78: "\x{AD}lorem ipsum"
       RenderBlock {P} at (0,138) size 769x18
         RenderText {#text} at (0,0) size 20x18
           text run at (0,0) width 20: "Do"
         RenderText {#text} at (20,0) size 78x18
-          text run at (20,0) width 78: "lorem ipsum"
+          text run at (20,0) width 78: "\x{AD}lorem ipsum"
       RenderBlock (anonymous) at (0,172) size 769x18
         RenderText {#text} at (0,0) size 20x18
           text run at (0,0) width 20: "Do"
@@ -47,7 +47,7 @@ layer at (0,0) size 785x992
           text run at (0,0) width 20: "Do"
         RenderInline {SPAN} at (0,0) size 36x18
           RenderText {#text} at (20,0) size 36x18
-            text run at (20,0) width 36: "lorem"
+            text run at (20,0) width 36: "\x{AD}lorem"
         RenderText {#text} at (56,0) size 42x18
           text run at (56,0) width 42: " ipsum"
       RenderBlock {P} at (0,326) size 769x18
@@ -57,13 +57,13 @@ layer at (0,0) size 785x992
           RenderText {#text} at (12,0) size 8x18
             text run at (12,0) width 8: "o"
         RenderText {#text} at (20,0) size 78x18
-          text run at (20,0) width 78: "lorem ipsum"
+          text run at (20,0) width 78: "\x{AD}lorem ipsum"
       RenderBlock {P} at (0,360) size 769x18
         RenderText {#text} at (0,0) size 24x18
           text run at (0,0) width 24: "Do "
         RenderInline {SPAN} at (0,0) size 36x18
           RenderText {#text} at (24,0) size 36x18
-            text run at (24,0) width 36: "lorem"
+            text run at (24,0) width 36: "\x{AD}lorem"
         RenderText {#text} at (60,0) size 42x18
           text run at (60,0) width 42: " ipsum"
       RenderBlock {P} at (0,394) size 769x18
@@ -73,13 +73,13 @@ layer at (0,0) size 785x992
           RenderText {#text} at (12,0) size 12x18
             text run at (12,0) width 12: "o "
         RenderText {#text} at (24,0) size 78x18
-          text run at (24,0) width 78: "lorem ipsum"
+          text run at (24,0) width 78: "\x{AD}lorem ipsum"
       RenderBlock {P} at (0,428) size 769x18
         RenderText {#text} at (0,0) size 24x18
           text run at (0,0) width 24: "Do "
         RenderInline {SPAN} at (0,0) size 36x18
           RenderText {#text} at (24,0) size 36x18
-            text run at (24,0) width 36: "lorem"
+            text run at (24,0) width 36: "\x{AD}lorem"
         RenderText {#text} at (60,0) size 42x18
           text run at (60,0) width 42: " ipsum"
       RenderBlock {P} at (0,462) size 769x18
@@ -89,60 +89,54 @@ layer at (0,0) size 785x992
           RenderText {#text} at (12,0) size 12x18
             text run at (12,0) width 12: "o "
         RenderText {#text} at (24,0) size 78x18
-          text run at (24,0) width 78: "lorem ipsum"
+          text run at (24,0) width 78: "\x{AD}lorem ipsum"
       RenderBlock {P} at (0,496) size 769x18
         RenderText {#text} at (0,0) size 64x18
-          text run at (0,0) width 24: "Do "
-          text run at (24,0) width 40: " lorem"
+          text run at (0,0) width 64: "Do \x{AD} lorem"
       RenderBlock {P} at (0,530) size 769x18
         RenderText {#text} at (0,0) size 60x18
-          text run at (0,0) width 20: "Do"
-          text run at (20,0) width 4: " "
-          text run at (24,0) width 36: "lorem"
+          text run at (0,0) width 60: "Do\x{AD} \x{AD}lorem"
       RenderBlock {P} at (0,564) size 769x18
         RenderText {#text} at (0,0) size 60x18
           text run at (0,0) width 24: "Do "
-          text run at (24,0) width 36: "lorem"
+          text run at (24,0) width 36: "\x{AD}lorem"
       RenderBlock {P} at (0,598) size 769x18
         RenderText {#text} at (0,0) size 60x18
-          text run at (0,0) width 20: "Do"
-          text run at (20,0) width 4: " "
+          text run at (0,0) width 24: "Do\x{AD} "
           text run at (24,0) width 36: "lorem"
       RenderBlock {P} at (0,632) size 769x18
         RenderText {#text} at (0,0) size 64x18
-          text run at (0,0) width 24: "Do "
-          text run at (24,0) width 4: " "
+          text run at (0,0) width 28: "Do \x{AD} "
           text run at (28,0) width 36: "lorem"
       RenderBlock {P} at (0,666) size 769x18
-        RenderText {#text} at (0,0) size 60x18
+        RenderText {#text} at (0,0) size 64x18
           text run at (0,0) width 24: "Do "
-          text run at (24,0) width 36: "lorem"
+          text run at (24,0) width 40: "\x{AD} lorem"
       RenderBlock {P} at (0,700) size 769x18
         RenderText {#text} at (0,0) size 20x18
           text run at (0,0) width 20: "Do"
         RenderInline {SPAN} at (0,0) size 0x18
         RenderText {#text} at (20,0) size 78x18
-          text run at (20,0) width 78: "lorem ipsum"
+          text run at (20,0) width 78: "\x{AD}lorem ipsum"
       RenderBlock {P} at (0,734) size 769x18
         RenderText {#text} at (0,0) size 98x18
-          text run at (0,0) width 20: "Do"
-          text run at (20,0) width 78: "lorem ipsum"
+          text run at (0,0) width 98: "Do\x{AD}\x{AD}lorem ipsum"
       RenderBlock {P} at (0,768) size 769x18
         RenderInline {SPAN} at (0,0) size 20x18
           RenderText {#text} at (0,0) size 20x18
-            text run at (0,0) width 20: "Do"
+            text run at (0,0) width 20: "Do\x{AD}"
         RenderText {#text} at (20,0) size 78x18
-          text run at (20,0) width 78: "lorem ipsum"
+          text run at (20,0) width 78: "\x{AD}lorem ipsum"
       RenderBlock {P} at (0,802) size 769x18
         RenderText {#text} at (0,0) size 20x18
-          text run at (0,0) width 20: "Do"
+          text run at (0,0) width 20: "Do\x{AD}"
         RenderInline {SPAN} at (0,0) size 78x18
           RenderText {#text} at (20,0) size 78x18
-            text run at (20,0) width 78: "lorem ipsum"
+            text run at (20,0) width 78: "\x{AD}lorem ipsum"
       RenderBlock {P} at (0,836) size 769x18
         RenderInline {SPAN} at (0,0) size 20x18
           RenderText {#text} at (0,0) size 20x18
-            text run at (0,0) width 20: "Do"
+            text run at (0,0) width 20: "Do\x{AD}\x{AD}"
         RenderText {#text} at (20,0) size 78x18
           text run at (20,0) width 78: "lorem ipsum"
       RenderBlock {P} at (0,870) size 769x18
diff --git a/LayoutTests/platform/mac/fast/text/word-break-soft-hyphen-expected.checksum b/LayoutTests/platform/mac/fast/text/word-break-soft-hyphen-expected.checksum
index aec61be..8701814 100644
--- a/LayoutTests/platform/mac/fast/text/word-break-soft-hyphen-expected.checksum
+++ b/LayoutTests/platform/mac/fast/text/word-break-soft-hyphen-expected.checksum
@@ -1 +1 @@
-e7739a90dbfcbb67565e68b33ebc270c
\ No newline at end of file
+a8a2bdaafbcba180d632ea45114161f7
\ No newline at end of file
diff --git a/LayoutTests/platform/mac/fast/text/word-break-soft-hyphen-expected.png b/LayoutTests/platform/mac/fast/text/word-break-soft-hyphen-expected.png
index 38d3ef7..bdab79e 100644
Binary files a/LayoutTests/platform/mac/fast/text/word-break-soft-hyphen-expected.png and b/LayoutTests/platform/mac/fast/text/word-break-soft-hyphen-expected.png differ
diff --git a/LayoutTests/platform/mac/fast/text/word-break-soft-hyphen-expected.txt b/LayoutTests/platform/mac/fast/text/word-break-soft-hyphen-expected.txt
index 1943ee0..6ba4eaf 100644
--- a/LayoutTests/platform/mac/fast/text/word-break-soft-hyphen-expected.txt
+++ b/LayoutTests/platform/mac/fast/text/word-break-soft-hyphen-expected.txt
@@ -22,6 +22,4 @@ layer at (0,0) size 800x600
 layer at (8,94) size 116x24
   RenderBlock (positioned) {DIV} at (8,94) size 116x24 [border: (3px solid #000000)]
     RenderText {#text} at (3,3) size 110x18
-      text run at (3,3) width 57: "Two soft"
-      text run at (60,3) width 24: "hyp"
-      text run at (84,3) width 29: "hens"
+      text run at (3,3) width 110: "Two soft\x{AD}hyp\x{AD}hens"
diff --git a/WebCore/ChangeLog b/WebCore/ChangeLog
index 5fc46de..1611ecc 100644
--- a/WebCore/ChangeLog
+++ b/WebCore/ChangeLog
@@ -1,3 +1,62 @@
+2010-09-28  Dan Bernstein  <mitz at apple.com>
+
+        Reviewed by Darin Adler.
+
+        Improved the handling of soft hyphens in Copy and Find operations, addressing the following
+        bugs:
+
+        <rdar://problem/7938878> Soft hyphenation and the clipboard
+        https://bugs.webkit.org/show_bug.cgi?id=11154
+
+        window.getSelection().toString() breaks soft hyphen &shy;
+        https://bugs.webkit.org/show_bug.cgi?id=26774
+
+        <rdar://problem/5640505> soft hyphen breaks search function
+        https://bugs.webkit.org/show_bug.cgi?id=16675
+
+        Test: fast/text/find-soft-hyphen.html
+
+        Changed line layout code to not skip over soft hyphens but rather include them in the text
+        boxes. Changed font code to render the soft hyphen character as a zero width space, so that
+        the former change will not affect rendering of soft hyphens in the middle of the line. Also
+        changed line layout code to mark text boxes where hyphenation occurred due to a soft hyphen
+        as hyphenated, so that the hyphen string specified in CSS will be appended to them.
+
+        Not omitting the soft hyphens from the text boxes makes the text iterator emit them, which
+        solves the Copy and plain-text conversion issues. Previously, the iterator would emit a space
+        to account for non-rendered characters between adjacent boxes, which was wrong in this case.
+
+        To make Find work, soft hyphens are folded into 0, which is ignorable in the collation used
+        for Find.
+
+        * editing/TextIterator.cpp:
+        (WebCore::foldQuoteMarkOrSoftHyphen): Renamed foldQuoteMark() to this and added folding of
+        soft hyphen to 0.
+        (WebCore::foldQuoteMarksAndSoftHyphens): Renamed foldQuoteMarks() to thid and added folding
+        of soft hyphen to 0.
+        (WebCore::SearchBuffer::SearchBuffer): Updated for renames.
+        (WebCore::SearchBuffer::append): Ditto.
+        * platform/graphics/Font.h:
+        (WebCore::Font::treatAsSpace): Replaced number literal with name.
+        (WebCore::Font::treatAsZeroWidthSpace): Added softHyphen.
+        * platform/graphics/GlyphPageTreeNode.cpp:
+        (WebCore::GlyphPageTreeNode::initializePage): Get the zero width space glyph for soft hyphen.
+        * platform/graphics/mac/ComplexTextController.cpp:
+        (WebCore::ComplexTextController::collectComplexTextRuns): Removed special handling that made
+        a trailing soft hyphen render as hyphen-minus. All soft hyphens are now rendered as zero width
+        spaces, and where a line break actually occurs at a soft hyphen, rendering code appends the
+        CSS-specified hyphenate character to the text run that is passed to us here.
+        * rendering/RenderBlockLineLayout.cpp:
+        (WebCore::chopMidpointsAt): Removed this function, which was only used for skipping over soft
+        hyphens.
+        (WebCore::checkMidpoints): Removed code related to skipping over soft hyphens.
+        (WebCore::RenderBlock::findNextLineBreak): Removed code to skip over soft hyphens. Ignore
+        a line break opportunity at a soft hyphen if the style specifies 'hyphens: none'. Set
+        'hyphenated' to true if a line break occurs at a soft hyphen.
+        * rendering/style/RenderStyle.cpp:
+        (WebCore::RenderStyle::hyphenString): Changed the assertion to allow querying for the hyphen
+        string for 'hyphens: manual'.
+
 2010-09-28  Martin Robinson  <mrobinson at igalia.com>
 
         More GTK+ build fixes after r68521.
diff --git a/WebCore/editing/TextIterator.cpp b/WebCore/editing/TextIterator.cpp
index d5a03ef..e5452b0 100644
--- a/WebCore/editing/TextIterator.cpp
+++ b/WebCore/editing/TextIterator.cpp
@@ -1534,7 +1534,7 @@ const UChar* WordAwareIterator::characters() const
 
 // --------
 
-static inline UChar foldQuoteMark(UChar c)
+static inline UChar foldQuoteMarkOrSoftHyphen(UChar c)
 {
     switch (c) {
         case hebrewPunctuationGershayim:
@@ -1545,12 +1545,16 @@ static inline UChar foldQuoteMark(UChar c)
         case leftSingleQuotationMark:
         case rightSingleQuotationMark:
             return '\'';
+        case softHyphen:
+            // Replace soft hyphen with an ignorable character so that their presence or absence will
+            // not affect string comparison.
+            return 0;
         default:
             return c;
     }
 }
 
-static inline void foldQuoteMarks(String& s)
+static inline void foldQuoteMarksAndSoftHyphens(String& s)
 {
     s.replace(hebrewPunctuationGeresh, '\'');
     s.replace(hebrewPunctuationGershayim, '"');
@@ -1558,14 +1562,17 @@ static inline void foldQuoteMarks(String& s)
     s.replace(leftSingleQuotationMark, '\'');
     s.replace(rightDoubleQuotationMark, '"');
     s.replace(rightSingleQuotationMark, '\'');
+    // Replace soft hyphen with an ignorable character so that their presence or absence will
+    // not affect string comparison.
+    s.replace(softHyphen, 0);
 }
 
 #if USE(ICU_UNICODE) && !UCONFIG_NO_COLLATION
 
-static inline void foldQuoteMarks(UChar* data, size_t length)
+static inline void foldQuoteMarksAndSoftHyphens(UChar* data, size_t length)
 {
     for (size_t i = 0; i < length; ++i)
-        data[i] = foldQuoteMark(data[i]);
+        data[i] = foldQuoteMarkOrSoftHyphen(data[i]);
 }
 
 static const size_t minimumSearchBufferSize = 8192;
@@ -1819,7 +1826,7 @@ inline SearchBuffer::SearchBuffer(const String& target, bool isCaseSensitive)
     // FIXME: We'd like to tailor the searcher to fold quote marks for us instead
     // of doing it in a separate replacement pass here, but ICU doesn't offer a way
     // to add tailoring on top of the locale-specific tailoring as of this writing.
-    foldQuoteMarks(m_target);
+    foldQuoteMarksAndSoftHyphens(m_target);
 
     size_t targetLength = m_target.length();
     m_buffer.reserveInitialCapacity(max(targetLength * 8, minimumSearchBufferSize));
@@ -1869,7 +1876,7 @@ inline size_t SearchBuffer::append(const UChar* characters, size_t length)
     size_t usableLength = min(m_buffer.capacity() - oldLength, length);
     ASSERT(usableLength);
     m_buffer.append(characters, usableLength);
-    foldQuoteMarks(m_buffer.data() + oldLength, usableLength);
+    foldQuoteMarksAndSoftHyphens(m_buffer.data() + oldLength, usableLength);
     return usableLength;
 }
 
@@ -2008,7 +2015,7 @@ inline SearchBuffer::SearchBuffer(const String& target, bool isCaseSensitive)
 {
     ASSERT(!m_target.isEmpty());
     m_target.replace(noBreakSpace, ' ');
-    foldQuoteMarks(m_target);
+    foldQuoteMarksAndSoftHyphens(m_target);
 }
 
 inline SearchBuffer::~SearchBuffer()
@@ -2028,7 +2035,7 @@ inline bool SearchBuffer::atBreak() const
 
 inline void SearchBuffer::append(UChar c, bool isStart)
 {
-    m_buffer[m_cursor] = c == noBreakSpace ? ' ' : foldQuoteMark(c);
+    m_buffer[m_cursor] = c == noBreakSpace ? ' ' : foldQuoteMarkOrSoftHyphen(c);
     m_isCharacterStartBuffer[m_cursor] = isStart;
     if (++m_cursor == m_target.length()) {
         m_cursor = 0;
diff --git a/WebCore/platform/graphics/Font.h b/WebCore/platform/graphics/Font.h
index d6cf140..1a321bd 100644
--- a/WebCore/platform/graphics/Font.h
+++ b/WebCore/platform/graphics/Font.h
@@ -191,8 +191,8 @@ public:
     }
 
     FontSelector* fontSelector() const;
-    static bool treatAsSpace(UChar c) { return c == ' ' || c == '\t' || c == '\n' || c == 0x00A0; }
-    static bool treatAsZeroWidthSpace(UChar c) { return c < 0x20 || (c >= 0x7F && c < 0xA0) || (c >= 0x200c && c <= 0x200f) || (c >= 0x202a && c <= 0x202e) || c == 0xFFFC; }
+    static bool treatAsSpace(UChar c) { return c == ' ' || c == '\t' || c == '\n' || c == noBreakSpace; }
+    static bool treatAsZeroWidthSpace(UChar c) { return c < 0x20 || (c >= 0x7F && c < 0xA0) || c == softHyphen || (c >= 0x200c && c <= 0x200f) || (c >= 0x202a && c <= 0x202e) || c == objectReplacementCharacter; }
 
     static inline UChar normalizeSpaces(UChar character)
     {
diff --git a/WebCore/platform/graphics/GlyphPageTreeNode.cpp b/WebCore/platform/graphics/GlyphPageTreeNode.cpp
index dac26b3..3df14b9 100644
--- a/WebCore/platform/graphics/GlyphPageTreeNode.cpp
+++ b/WebCore/platform/graphics/GlyphPageTreeNode.cpp
@@ -171,6 +171,7 @@ void GlyphPageTreeNode::initializePage(const FontData* fontData, unsigned pageNu
                         buffer[i] = zeroWidthSpace;
                     for (i = 0x7F; i < 0xA0; i++)
                         buffer[i] = zeroWidthSpace;
+                    buffer[softHyphen] = zeroWidthSpace;
 
                     // \n, \t, and nonbreaking space must render as a space.
                     buffer[(int)'\n'] = ' ';
diff --git a/WebCore/platform/graphics/mac/ComplexTextController.cpp b/WebCore/platform/graphics/mac/ComplexTextController.cpp
index 5d27302..a2733f8 100644
--- a/WebCore/platform/graphics/mac/ComplexTextController.cpp
+++ b/WebCore/platform/graphics/mac/ComplexTextController.cpp
@@ -185,25 +185,14 @@ void ComplexTextController::collectComplexTextRuns()
 
     // We break up glyph run generation for the string by FontData and (if needed) the use of small caps.
     const UChar* cp = m_run.characters();
-    bool hasTrailingSoftHyphen = m_run[m_end - 1] == softHyphen;
 
-    if (m_font.isSmallCaps() || hasTrailingSoftHyphen)
+    if (m_font.isSmallCaps())
         m_smallCapsBuffer.resize(m_end);
 
     unsigned indexOfFontTransition = m_run.rtl() ? m_end - 1 : 0;
     const UChar* curr = m_run.rtl() ? cp + m_end  - 1 : cp;
     const UChar* end = m_run.rtl() ? cp - 1 : cp + m_end;
 
-    // FIXME: Using HYPHEN-MINUS rather than HYPHEN because Times has a HYPHEN-MINUS glyph that looks like its
-    // SOFT-HYPHEN glyph, and has no HYPHEN glyph.
-    static const UChar hyphen = '-';
-
-    if (hasTrailingSoftHyphen && m_run.rtl()) {
-        collectComplexTextRunsForCharacters(&hyphen, 1, m_end - 1, m_font.glyphDataForCharacter(hyphen, false).fontData);
-        indexOfFontTransition--;
-        curr--;
-    }
-
     GlyphData glyphData;
     GlyphData nextGlyphData;
 
@@ -267,14 +256,11 @@ void ComplexTextController::collectComplexTextRuns()
         }
     }
 
-    int itemLength = m_run.rtl() ? indexOfFontTransition + 1 : m_end - indexOfFontTransition - (hasTrailingSoftHyphen ? 1 : 0);
+    int itemLength = m_run.rtl() ? indexOfFontTransition + 1 : m_end - indexOfFontTransition;
     if (itemLength) {
         int itemStart = m_run.rtl() ? 0 : indexOfFontTransition;
         collectComplexTextRunsForCharacters((nextIsSmallCaps ? m_smallCapsBuffer.data() : cp) + itemStart, itemLength, itemStart, nextGlyphData.glyph ? nextGlyphData.fontData : 0);
     }
-
-    if (hasTrailingSoftHyphen && m_run.ltr())
-        collectComplexTextRunsForCharacters(&hyphen, 1, m_end - 1, m_font.glyphDataForCharacter(hyphen, false).fontData);
 }
 
 #if USE(CORE_TEXT) && USE(ATSUI)
diff --git a/WebCore/rendering/RenderBlockLineLayout.cpp b/WebCore/rendering/RenderBlockLineLayout.cpp
index 30b0cac..81a15eb 100644
--- a/WebCore/rendering/RenderBlockLineLayout.cpp
+++ b/WebCore/rendering/RenderBlockLineLayout.cpp
@@ -79,20 +79,6 @@ static int inlineWidth(RenderObject* child, bool start = true, bool end = true)
     return extraWidth;
 }
 
-static void chopMidpointsAt(LineMidpointState& lineMidpointState, RenderObject* obj, unsigned pos)
-{
-    if (!lineMidpointState.numMidpoints)
-        return;
-    InlineIterator* midpoints = lineMidpointState.midpoints.data();
-    for (int i = lineMidpointState.numMidpoints - 1; i >= 0; i--) {
-        const InlineIterator& point = midpoints[i];
-        if (point.obj == obj && point.pos == pos) {
-            lineMidpointState.numMidpoints = i;
-            break;
-        }
-    }
-}
-
 static void checkMidpoints(LineMidpointState& lineMidpointState, InlineIterator& lBreak)
 {
     // Check to see if our last midpoint is a start point beyond the line break.  If so,
@@ -108,21 +94,8 @@ static void checkMidpoints(LineMidpointState& lineMidpointState, InlineIterator&
         if (currpoint == lBreak) {
             // We hit the line break before the start point.  Shave off the start point.
             lineMidpointState.numMidpoints--;
-            if (endpoint.obj->style()->collapseWhiteSpace()) {
-                if (endpoint.obj->isText()) {
-                    // Don't shave a character off the endpoint if it was from a soft hyphen.
-                    RenderText* textObj = toRenderText(endpoint.obj);
-                    if (endpoint.pos + 1 < textObj->textLength()) {
-                        if (textObj->characters()[endpoint.pos+1] == softHyphen)
-                            return;
-                    } else if (startpoint.obj->isText()) {
-                        RenderText *startText = toRenderText(startpoint.obj);
-                        if (startText->textLength() && startText->characters()[0] == softHyphen)
-                            return;
-                    }
-                }
+            if (endpoint.obj->style()->collapseWhiteSpace())
                 endpoint.pos--;
-            }
         }
     }    
 }
@@ -1655,6 +1628,7 @@ InlineIterator RenderBlock::findNextLineBreak(InlineBidiResolver& resolver, bool
             bool breakWords = o->style()->breakWords() && ((autoWrap && !w) || currWS == PRE);
             bool midWordBreak = false;
             bool breakAll = o->style()->wordBreak() == BreakAllWordBreak && autoWrap;
+            int hyphenWidth = 0;
 
             if (t->isWordBreak()) {
                 w += tmpW;
@@ -1673,48 +1647,13 @@ InlineIterator RenderBlock::findNextLineBreak(InlineBidiResolver& resolver, bool
 
                 if (!collapseWhiteSpace || !currentCharacterIsSpace)
                     isLineEmpty = false;
-                
-                // Check for soft hyphens.  Go ahead and ignore them.
-                if (c == softHyphen) {
-                    if (!ignoringSpaces) {
-                        // Ignore soft hyphens
-                        InlineIterator beforeSoftHyphen;
-                        if (pos)
-                            beforeSoftHyphen = InlineIterator(0, o, pos - 1);
-                        else
-                            beforeSoftHyphen = InlineIterator(0, last, last->isText() ? toRenderText(last)->textLength() - 1 : 0);
-                        // Two consecutive soft hyphens. Avoid overlapping midpoints.
-                        if (lineMidpointState.numMidpoints && lineMidpointState.midpoints[lineMidpointState.numMidpoints - 1].obj == o && 
-                            lineMidpointState.midpoints[lineMidpointState.numMidpoints - 1].pos == pos)
-                            lineMidpointState.numMidpoints--;
-                        else
-                            addMidpoint(lineMidpointState, beforeSoftHyphen);
-
-                        // Add the width up to but not including the hyphen.
-                        tmpW += textWidth(t, lastSpace, pos - lastSpace, f, w + tmpW, isFixedPitch, collapseWhiteSpace) + lastSpaceWordSpacing;
-
-                        // For wrapping text only, include the hyphen.  We need to ensure it will fit
-                        // on the line if it shows when we break.
-                        if (autoWrap)
-                            tmpW += textWidth(t, pos, 1, f, w + tmpW, isFixedPitch, collapseWhiteSpace);
-
-                        InlineIterator afterSoftHyphen(0, o, pos);
-                        afterSoftHyphen.increment();
-                        addMidpoint(lineMidpointState, afterSoftHyphen);
-                    }
 
-                    pos++;
-                    len--;
-                    lastSpaceWordSpacing = 0;
-                    lastSpace = pos; // Cheesy hack to prevent adding in widths of the run twice.
-                    if (style->hyphens() == HyphensNone) {
-                        // Prevent a line break at the soft hyphen by ensuring that betweenWords is false
-                        // in the next iteration.
-                        atStart = true;
-                    }
-                    continue;
+                if (c == softHyphen && autoWrap && !hyphenWidth && style->hyphens() != HyphensNone) {
+                    const AtomicString& hyphenString = style->hyphenString();
+                    hyphenWidth = f.width(TextRun(hyphenString.characters(), hyphenString.length()));
+                    tmpW += hyphenWidth;
                 }
- 
+
 #if ENABLE(SVG)
                 if (isSVGText) {
                     RenderSVGInlineText* svgInlineText = static_cast<RenderSVGInlineText*>(t);
@@ -1737,8 +1676,8 @@ InlineIterator RenderBlock::findNextLineBreak(InlineBidiResolver& resolver, bool
                     midWordBreak = w + wrapW + charWidth > width;
                 }
 
-                bool betweenWords = c == '\n' || (currWS != PRE && !atStart && isBreakable(str, pos, strlen, nextBreakable, breakNBSP));
-    
+                bool betweenWords = c == '\n' || (currWS != PRE && !atStart && isBreakable(str, pos, strlen, nextBreakable, breakNBSP) && (style->hyphens() != HyphensNone || (pos && str[pos - 1] != softHyphen)));
+
                 if (betweenWords || midWordBreak) {
                     bool stoppedIgnoringSpaces = false;
                     if (ignoringSpaces) {
@@ -1808,13 +1747,17 @@ InlineIterator RenderBlock::findNextLineBreak(InlineBidiResolver& resolver, bool
                                 lBreak.increment();
                                 previousLineBrokeCleanly = true;
                             }
+                            if (lBreak.obj && lBreak.pos && lBreak.obj->isText() && toRenderText(lBreak.obj)->textLength() && toRenderText(lBreak.obj)->characters()[lBreak.pos - 1] == softHyphen && style->hyphens() != HyphensNone)
+                                hyphenated = true;
                             goto end; // Didn't fit. Jump to the end.
                         } else {
                             if (!betweenWords || (midWordBreak && !autoWrap))
                                 tmpW -= additionalTmpW;
-                            if (pos > 0 && str[pos-1] == softHyphen)
+                            if (hyphenWidth) {
                                 // Subtract the width of the soft hyphen out since we fit on a line.
-                                tmpW -= textWidth(t, pos - 1, 1, f, w + tmpW, isFixedPitch, collapseWhiteSpace);
+                                tmpW -= hyphenWidth;
+                                hyphenWidth = 0;
+                            }
                         }
                     }
 
@@ -2059,14 +2002,6 @@ InlineIterator RenderBlock::findNextLineBreak(InlineBidiResolver& resolver, bool
         lBreak.increment();
     }
 
-    if (lBreak.obj && lBreak.pos >= 2 && lBreak.obj->isText()) {
-        // For soft hyphens on line breaks, we have to chop out the midpoints that made us
-        // ignore the hyphen so that it will render at the end of the line.
-        UChar c = toRenderText(lBreak.obj)->characters()[lBreak.pos - 1];
-        if (c == softHyphen)
-            chopMidpointsAt(lineMidpointState, lBreak.obj, lBreak.pos - 2);
-    }
-    
     return lBreak;
 }
 
diff --git a/WebCore/rendering/style/RenderStyle.cpp b/WebCore/rendering/style/RenderStyle.cpp
index 9227b16..d1ad4bb 100644
--- a/WebCore/rendering/style/RenderStyle.cpp
+++ b/WebCore/rendering/style/RenderStyle.cpp
@@ -789,7 +789,7 @@ CounterDirectiveMap& RenderStyle::accessCounterDirectives()
 
 const AtomicString& RenderStyle::hyphenString() const
 {
-    ASSERT(hyphens() == HyphensAuto);
+    ASSERT(hyphens() != HyphensNone);
 
     const AtomicString& hyphenationString = rareInheritedData.get()->hyphenationString;
     if (!hyphenationString.isNull())

-- 
WebKit Debian packaging



More information about the Pkg-webkit-commits mailing list