Reviewed by John
authorkocienda <kocienda@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 9 Dec 2004 15:32:31 +0000 (15:32 +0000)
committerkocienda <kocienda@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 9 Dec 2004 15:32:31 +0000 (15:32 +0000)
        <rdar://problem/3911011> REGRESSION (Mail): Spaces at end of line causing word wrap lost when copied/pasted

        * khtml/xml/dom_nodeimpl.cpp:
        (NodeImpl::renderedText): Fixed the code so that spaces at the end of lines are not skipped.

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

WebCore/ChangeLog-2005-08-23
WebCore/khtml/xml/dom_nodeimpl.cpp

index 5b57416c86e79d0ebf7053a4c991b72e9f4dd43f..96375de307035ea088f7f5147a0161b1d51ac933 100644 (file)
@@ -1,3 +1,12 @@
+2004-12-09  Ken Kocienda  <kocienda@apple.com>
+
+        Reviewed by John
+
+        <rdar://problem/3911011> REGRESSION (Mail): Spaces at end of line causing word wrap lost when copied/pasted
+
+        * khtml/xml/dom_nodeimpl.cpp:
+        (NodeImpl::renderedText): Fixed the code so that spaces at the end of lines are not skipped.
+
 2004-12-07  Richard Williamson   <rjw@apple.com>
 
        Support threaded image decoding on machines w/ > 2 CPUs.
index c20ff0f7683421c0277f5baa31178a8606459682..41ec9a3356ea691397949b3a5063d726f5d49115 100644 (file)
@@ -344,6 +344,28 @@ QString NodeImpl::renderedText(const RangeImpl *range) const
             unsigned s = kMax(start, startOffset);
             unsigned e = kMin(end, endOffset);
             result.append(str.mid(s, e-s));
+
+            // now add in collapsed-away spaces if at the end of the line
+            InlineTextBox *nextBox = box->nextTextBox();
+            if (nextBox && box->root() != nextBox->root()) {
+                static QChar nbsp('0xa0');
+                static QChar space(' ');
+                // count the number of characters between the end of the
+                // current box and the start of the next box.
+                int collapsedStart = e;
+                int collapsedPastEnd = kMin((unsigned)nextBox->m_start, endOffset + 1);
+                bool addNextNonNBSP = true;
+                for (int i = collapsedStart; i < collapsedPastEnd; i++) {
+                    if (str[i] == nbsp) {
+                        result.append(str[i]);
+                        addNextNonNBSP = true;
+                    }
+                    else if (addNextNonNBSP) {
+                        result.append(str[i]);
+                        addNextNonNBSP = false;
+                    }
+                }
+            }
         }
     }