2009-01-23 Darin Adler <darin@apple.com>
authordarin@apple.com <darin@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Sat, 24 Jan 2009 02:23:12 +0000 (02:23 +0000)
committerdarin@apple.com <darin@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Sat, 24 Jan 2009 02:23:12 +0000 (02:23 +0000)
        Reviewed by Anders Carlsson.

        Bug 23475: fast/text/find-backwards.html fails with ICU disabled SearchBuffer
        https://bugs.webkit.org/show_bug.cgi?id=23475

        * editing/TextIterator.cpp:
        (WebCore::SearchBuffer::search): Set the character start flag to false to
        ensure we won't ever return the same result twice. There are other ways we
        could accomplish this, mentioned in the comment, but this one was the smallest
        and cleanest I could think of.

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

WebCore/ChangeLog
WebCore/editing/TextIterator.cpp

index 9b82388..7b5e796 100644 (file)
@@ -2,6 +2,19 @@
 
         Reviewed by Anders Carlsson.
 
+        Bug 23475: fast/text/find-backwards.html fails with ICU disabled SearchBuffer
+        https://bugs.webkit.org/show_bug.cgi?id=23475
+
+        * editing/TextIterator.cpp:
+        (WebCore::SearchBuffer::search): Set the character start flag to false to
+        ensure we won't ever return the same result twice. There are other ways we
+        could accomplish this, mentioned in the comment, but this one was the smallest
+        and cleanest I could think of.
+
+2009-01-23  Darin Adler  <darin@apple.com>
+
+        Reviewed by Anders Carlsson.
+
         Bug 23510: REGRESSION (r40171): CDATASection objects not getting proper JavaScript wrappers
         https://bugs.webkit.org/show_bug.cgi?id=23510
 
index 9ac697a..dd9f9ab 100644 (file)
@@ -40,7 +40,7 @@
 #include "RenderTextControl.h"
 #include "visible_units.h"
 
-#if USE(ICU_UNICODE)
+#if USE(ICU_UNICODE) && !UCONFIG_NO_COLLATION
 #include <unicode/usearch.h>
 #endif
 
@@ -65,7 +65,7 @@ public:
     void reachedBreak();
 
     // Result is the size in characters of what was found.
-    // And <startOffset> is the number of charactesrs back to the start of what was found.
+    // And <startOffset> is the number of characters back to the start of what was found.
     size_t search(size_t& startOffset);
     bool atBreak() const;
 
@@ -1396,6 +1396,14 @@ inline size_t SearchBuffer::search(size_t& start)
         return 0;
 
     start = length();
+
+    // Now that we've found a match once, we don't want to find it again, because those
+    // are the SearchBuffer semantics, allowing for a buffer where you append more than one
+    // character at a time. To do this we take advantage of m_isCharacterStartBuffer, but if
+    // we want to get rid of that in the future we could track this with a separate boolean
+    // or even move the characters to the start of the buffer and set m_isBufferFull to false.
+    m_isCharacterStartBuffer[m_cursor] = false;
+
     return start;
 }