2006-11-01 Zack Rusin <zack@kde.org>
authorstaikos <staikos@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 3 Nov 2006 16:20:55 +0000 (16:20 +0000)
committerstaikos <staikos@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 3 Nov 2006 16:20:55 +0000 (16:20 +0000)
        Reviewed by Maciej, landed by George.

        Moving the word/sentence seperators into a file of their own
        and implementing findWordBoundary.

        * CMakeLists.txt:
        * platform/qt/TemporaryLinkStubs.cpp:
        * platform/qt/TextBoundaries.cpp: Added.
        (WebCore::findNextSentenceFromIndex):
        (WebCore::findSentenceBoundary):
        (WebCore::findNextWordFromIndex):
        (WebCore::findWordBoundary):

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

WebCore/CMakeLists.txt
WebCore/ChangeLog
WebCore/platform/qt/TemporaryLinkStubs.cpp
WebCore/platform/qt/TextBoundaries.cpp [new file with mode: 0644]

index 885e5a2..89e377b 100644 (file)
@@ -1028,6 +1028,7 @@ set(WebCore_SRCS
     platform/qt/GraphicsContextQt.cpp
     platform/qt/ScrollViewQt.cpp
     platform/qt/TemporaryLinkStubs.cpp
+    platform/qt/TextBoundaries.cpp
     platform/qt/CursorQt.cpp
     platform/qt/WidgetQt.cpp
     platform/qt/SystemTimeQt.cpp
index 2c3f327..77137e9 100644 (file)
@@ -1,3 +1,18 @@
+2006-11-01  Zack Rusin  <zack@kde.org>
+
+        Reviewed by Maciej.
+
+        Moving the word/sentence seperators into a file of their own
+        and implementing findWordBoundary.
+
+        * CMakeLists.txt:
+        * platform/qt/TemporaryLinkStubs.cpp:
+        * platform/qt/TextBoundaries.cpp: Added.
+        (WebCore::findNextSentenceFromIndex):
+        (WebCore::findSentenceBoundary):
+        (WebCore::findNextWordFromIndex):
+        (WebCore::findWordBoundary):
+
 2006-11-03  Zack Rusin  <zack@kde.org>
 
         Reviewed by Maciej.
index 39b0d56..85fcc36 100644 (file)
@@ -157,11 +157,6 @@ String WebCore::searchableIndexIntroduction() { return "Searchable Index"; }
 String WebCore::fileButtonChooseFileLabel() { return "Choose File"; }
 String WebCore::fileButtonNoFileSelectedLabel() { return "No file selected"; }
 
-int WebCore::findNextSentenceFromIndex(UChar const*, int, int, bool) { notImplemented(); return 0; }
-void WebCore::findSentenceBoundary(UChar const*, int, int, int*, int*) { notImplemented(); }
-int WebCore::findNextWordFromIndex(UChar const*, int, int, bool) { notImplemented(); return 0; }
-void WebCore::findWordBoundary(UChar const* str, int len, int position, int* start, int* end) {*start = position; *end = position; notImplemented(); }
-
 void Frame::setNeedsReapplyStyles() { notImplemented(); }
 
 int WebCore::screenDepthPerComponent(const Page*) { notImplemented(); return 0; }
diff --git a/WebCore/platform/qt/TextBoundaries.cpp b/WebCore/platform/qt/TextBoundaries.cpp
new file mode 100644 (file)
index 0000000..cea5d35
--- /dev/null
@@ -0,0 +1,100 @@
+/*
+ * Copyright (C) 2006 Zack Rusin <zack@kde.org>
+ *
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "config.h"
+
+#include "TextBoundaries.h"
+
+#include <QString>
+#include <QChar>
+
+#include <QDebug>
+#include <stdio.h>
+
+#define notImplemented() do { fprintf(stderr, "FIXME: UNIMPLEMENTED: %s:%d\n", __FILE__, __LINE__); } while(0)
+
+
+// This is very primitive. When I'll have time I'll do the "proper" implementation based on
+// http://www.unicode.org/reports/tr29/tr29-4.html
+namespace WebCore
+{
+
+int findNextSentenceFromIndex(UChar const* buffer, int len, int position, bool forward)
+{
+    QString str(reinterpret_cast<QChar const*>(buffer), len);
+    notImplemented();
+    return 0;
+}
+
+void findSentenceBoundary(UChar const* buffer, int len, int position, int* start, int* end)
+{
+    QString str(reinterpret_cast<QChar const*>(buffer), len);
+    notImplemented();
+}
+
+int findNextWordFromIndex(UChar const* buffer, int len, int position, bool forward)
+{
+    QString str(reinterpret_cast<QChar const*>(buffer), len);
+    notImplemented();
+    return 0;
+}
+
+void findWordBoundary(UChar const* buffer, int len, int position, int* start, int* end)
+{
+    QString str(reinterpret_cast<QChar const*>(buffer), len);
+
+    if (position > str.length()) {
+        *start = 0;
+        *end = 0;
+        return;
+    }
+
+    int currentPosition = position - 1;
+    QString foundWord;
+    while (currentPosition >= 0 &&
+           str[currentPosition].isLetter()) {
+        foundWord.prepend(str[currentPosition]);
+        --currentPosition;
+    }
+
+    // currentPosition == 0 means the first char is not letter
+    // currentPosition == -1 means we reached the beginning
+    int startPos = (currentPosition < 0) ? 0 : ++currentPosition;
+    currentPosition = position;
+    if (str[currentPosition].isLetter()) {
+            while (str[currentPosition].isLetter()) {
+                foundWord.append(str[currentPosition]);
+                ++currentPosition;
+            }
+    }
+
+    *start = startPos;
+    *end = currentPosition;
+}
+
+
+}