summaryrefslogtreecommitdiffstats
path: root/WebCore/platform/text
diff options
context:
space:
mode:
Diffstat (limited to 'WebCore/platform/text')
-rw-r--r--WebCore/platform/text/TextBoundaries.cpp28
-rw-r--r--WebCore/platform/text/TextBoundaries.h3
-rw-r--r--WebCore/platform/text/TextCodecUTF16.cpp11
-rw-r--r--WebCore/platform/text/TextEncodingRegistry.cpp3
-rw-r--r--WebCore/platform/text/brew/StringBrew.cpp4
-rw-r--r--WebCore/platform/text/transcoder/FontTranscoder.cpp10
-rw-r--r--WebCore/platform/text/wince/TextBoundariesWinCE.cpp74
-rw-r--r--WebCore/platform/text/wince/TextBreakIteratorWinCE.cpp49
8 files changed, 67 insertions, 115 deletions
diff --git a/WebCore/platform/text/TextBoundaries.cpp b/WebCore/platform/text/TextBoundaries.cpp
index 8eaffca..fbb261b 100644
--- a/WebCore/platform/text/TextBoundaries.cpp
+++ b/WebCore/platform/text/TextBoundaries.cpp
@@ -36,6 +36,32 @@ using namespace Unicode;
namespace WebCore {
+int endOfFirstWordBoundaryContext(const UChar* characters, int length)
+{
+ for (int i = 0; i < length; ) {
+ int first = i;
+ UChar32 ch;
+ U16_NEXT(characters, i, length, ch);
+ if (!requiresContextForWordBoundary(ch))
+ return first;
+ }
+ return length;
+}
+
+int startOfLastWordBoundaryContext(const UChar* characters, int length)
+{
+ for (int i = length; i > 0; ) {
+ int last = i;
+ UChar32 ch;
+ U16_PREV(characters, 0, i, ch);
+ if (!requiresContextForWordBoundary(ch))
+ return last;
+ }
+ return 0;
+}
+
+#if !PLATFORM(BREWMP) && !PLATFORM(MAC) && !PLATFORM(QT)
+
int findNextWordFromIndex(const UChar* chars, int len, int position, bool forward)
{
TextBreakIterator* it = wordBreakIterator(chars, len);
@@ -76,4 +102,6 @@ void findWordBoundary(const UChar* chars, int len, int position, int* start, int
*start = textBreakPrevious(it);
}
+#endif // !PLATFORM(BREWMP) && !PLATFORM(MAC) && !PLATFORM(QT)
+
} // namespace WebCore
diff --git a/WebCore/platform/text/TextBoundaries.h b/WebCore/platform/text/TextBoundaries.h
index 7eb9cab..870ab62 100644
--- a/WebCore/platform/text/TextBoundaries.h
+++ b/WebCore/platform/text/TextBoundaries.h
@@ -35,6 +35,9 @@ namespace WebCore {
return WTF::Unicode::hasLineBreakingPropertyComplexContext(ch);
}
+ int endOfFirstWordBoundaryContext(const UChar* characters, int length);
+ int startOfLastWordBoundaryContext(const UChar* characters, int length);
+
void findWordBoundary(const UChar*, int len, int position, int* start, int* end);
int findNextWordFromIndex(const UChar*, int len, int position, bool forward);
diff --git a/WebCore/platform/text/TextCodecUTF16.cpp b/WebCore/platform/text/TextCodecUTF16.cpp
index 95f4dc4..e88e83b 100644
--- a/WebCore/platform/text/TextCodecUTF16.cpp
+++ b/WebCore/platform/text/TextCodecUTF16.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004, 2006, 2008 Apple Inc. All rights reserved.
+ * Copyright (C) 2004, 2006, 2008, 2010 Apple Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -117,8 +117,13 @@ String TextCodecUTF16::decode(const char* bytes, size_t length, bool, bool, bool
CString TextCodecUTF16::encode(const UChar* characters, size_t length, UnencodableHandling)
{
- if (length > numeric_limits<size_t>::max() / 2)
- CRASH();
+ // We need to be sure we can double the length without overflowing.
+ // Since the passed-in length is the length of an actual existing
+ // character buffer, each character is two bytes, and we know
+ // the buffer doesn't occupy the entire address space, we can
+ // assert here that doubling the length does not overflow size_t
+ // and there's no need for a runtime check.
+ ASSERT(length <= numeric_limits<size_t>::max() / 2);
char* bytes;
CString string = CString::newUninitialized(length * 2, bytes);
diff --git a/WebCore/platform/text/TextEncodingRegistry.cpp b/WebCore/platform/text/TextEncodingRegistry.cpp
index fbe5826..6bf5552 100644
--- a/WebCore/platform/text/TextEncodingRegistry.cpp
+++ b/WebCore/platform/text/TextEncodingRegistry.cpp
@@ -189,8 +189,7 @@ static void addToTextCodecMap(const char* name, NewTextCodecFunction function, c
static void pruneBlacklistedCodecs()
{
- size_t blacklistedCodecListLength = sizeof(textEncodingNameBlacklist) / sizeof(textEncodingNameBlacklist[0]);
- for (size_t i = 0; i < blacklistedCodecListLength; ++i) {
+ for (size_t i = 0; i < WTF_ARRAY_LENGTH(textEncodingNameBlacklist); ++i) {
const char* atomicName = textEncodingNameMap->get(textEncodingNameBlacklist[i]);
if (!atomicName)
continue;
diff --git a/WebCore/platform/text/brew/StringBrew.cpp b/WebCore/platform/text/brew/StringBrew.cpp
index 7869e0f..2da81e3 100644
--- a/WebCore/platform/text/brew/StringBrew.cpp
+++ b/WebCore/platform/text/brew/StringBrew.cpp
@@ -26,7 +26,7 @@
#include "config.h"
#include "PlatformString.h"
-#include <AEEStdLib.h>
+#include <AEEstd.h>
namespace WTF {
@@ -35,7 +35,7 @@ String::String(const AECHAR* string)
{
// It is safe to cast AECHAR to UChar as both of them use 16 bits representation.
const UChar* str = reinterpret_cast<const UChar*>(string);
- const size_t len = WSTRLEN(string);
+ const size_t len = std_wstrlen(string);
m_impl = StringImpl::create(str, len);
}
diff --git a/WebCore/platform/text/transcoder/FontTranscoder.cpp b/WebCore/platform/text/transcoder/FontTranscoder.cpp
index 8e2f33f..68601f9 100644
--- a/WebCore/platform/text/transcoder/FontTranscoder.cpp
+++ b/WebCore/platform/text/transcoder/FontTranscoder.cpp
@@ -41,23 +41,23 @@ FontTranscoder::FontTranscoder()
{
m_converterTypes.add("MS PGothic", BackslashToYenSign);
UChar unicodeNameMSPGothic[] = {0xFF2D, 0xFF33, 0x0020, 0xFF30, 0x30B4, 0x30B7, 0x30C3, 0x30AF};
- m_converterTypes.add(AtomicString(unicodeNameMSPGothic, sizeof(unicodeNameMSPGothic) / sizeof(UChar)), BackslashToYenSign);
+ m_converterTypes.add(AtomicString(unicodeNameMSPGothic, WTF_ARRAY_LENGTH(unicodeNameMSPGothic)), BackslashToYenSign);
m_converterTypes.add("MS PMincho", BackslashToYenSign);
UChar unicodeNameMSPMincho[] = {0xFF2D, 0xFF33, 0x0020, 0xFF30, 0x660E, 0x671D};
- m_converterTypes.add(AtomicString(unicodeNameMSPMincho, sizeof(unicodeNameMSPMincho) / sizeof(UChar)), BackslashToYenSign);
+ m_converterTypes.add(AtomicString(unicodeNameMSPMincho, WTF_ARRAY_LENGTH(unicodeNameMSPMincho)), BackslashToYenSign);
m_converterTypes.add("MS Gothic", BackslashToYenSign);
UChar unicodeNameMSGothic[] = {0xFF2D, 0xFF33, 0x0020, 0x30B4, 0x30B7, 0x30C3, 0x30AF};
- m_converterTypes.add(AtomicString(unicodeNameMSGothic, sizeof(unicodeNameMSGothic) / sizeof(UChar)), BackslashToYenSign);
+ m_converterTypes.add(AtomicString(unicodeNameMSGothic, WTF_ARRAY_LENGTH(unicodeNameMSGothic)), BackslashToYenSign);
m_converterTypes.add("MS Mincho", BackslashToYenSign);
UChar unicodeNameMSMincho[] = {0xFF2D, 0xFF33, 0x0020, 0x660E, 0x671D};
- m_converterTypes.add(AtomicString(unicodeNameMSMincho, sizeof(unicodeNameMSMincho) / sizeof(UChar)), BackslashToYenSign);
+ m_converterTypes.add(AtomicString(unicodeNameMSMincho, WTF_ARRAY_LENGTH(unicodeNameMSMincho)), BackslashToYenSign);
m_converterTypes.add("Meiryo", BackslashToYenSign);
UChar unicodeNameMeiryo[] = {0x30E1, 0x30A4, 0x30EA, 0x30AA};
- m_converterTypes.add(AtomicString(unicodeNameMeiryo, sizeof(unicodeNameMeiryo) / sizeof(UChar)), BackslashToYenSign);
+ m_converterTypes.add(AtomicString(unicodeNameMeiryo, WTF_ARRAY_LENGTH(unicodeNameMeiryo)), BackslashToYenSign);
}
FontTranscoder::ConverterType FontTranscoder::converterType(const FontDescription& fontDescription, const TextEncoding* encoding) const
diff --git a/WebCore/platform/text/wince/TextBoundariesWinCE.cpp b/WebCore/platform/text/wince/TextBoundariesWinCE.cpp
deleted file mode 100644
index f3070a4..0000000
--- a/WebCore/platform/text/wince/TextBoundariesWinCE.cpp
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- * Copyright (C) 2006 Zack Rusin <zack@kde.org>
- * Copyright (C) 2007-2009 Torch Mobile, Inc. 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 "NotImplemented.h"
-#include "PlatformString.h"
-
-using namespace WTF::Unicode;
-
-namespace WebCore {
-
-int findNextWordFromIndex(const UChar * buffer, int len, int position, bool forward)
-{
- notImplemented();
- return 0;
-}
-
-void findWordBoundary(const UChar * buffer, int len, int position, int* start, int* end)
-{
- if (position > len) {
- *start = 0;
- *end = 0;
- return;
- }
-
- String str(buffer, len);
-
- int currentPosition = position - 1;
- String foundWord;
- while (currentPosition >= 0 && isLetter(str[currentPosition])) {
- UChar c = str[currentPosition];
- foundWord.insert(&c, 1, 0);
- --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;
- while (isLetter(str[currentPosition])) {
- foundWord.append(str[currentPosition]);
- ++currentPosition;
- }
-
- *start = startPos;
- *end = currentPosition;
-}
-
-} // namespace WebCore
diff --git a/WebCore/platform/text/wince/TextBreakIteratorWinCE.cpp b/WebCore/platform/text/wince/TextBreakIteratorWinCE.cpp
index 7f46e4f..96488c0 100644
--- a/WebCore/platform/text/wince/TextBreakIteratorWinCE.cpp
+++ b/WebCore/platform/text/wince/TextBreakIteratorWinCE.cpp
@@ -55,7 +55,16 @@ public:
length = len;
currentPos = 0;
}
- virtual int first() = 0;
+ int first()
+ {
+ currentPos = 0;
+ return currentPos;
+ }
+ int last()
+ {
+ currentPos = length;
+ return currentPos;
+ }
virtual int next() = 0;
virtual int previous() = 0;
int following(int position)
@@ -75,35 +84,25 @@ public:
};
struct WordBreakIterator: TextBreakIterator {
- virtual int first();
virtual int next();
virtual int previous();
};
struct CharBreakIterator: TextBreakIterator {
- virtual int first();
virtual int next();
virtual int previous();
};
struct LineBreakIterator: TextBreakIterator {
- virtual int first();
virtual int next();
virtual int previous();
};
struct SentenceBreakIterator : TextBreakIterator {
- virtual int first();
virtual int next();
virtual int previous();
};
-int WordBreakIterator::first()
-{
- currentPos = 0;
- return currentPos;
-}
-
int WordBreakIterator::next()
{
if (currentPos == length) {
@@ -138,12 +137,6 @@ int WordBreakIterator::previous()
return currentPos;
}
-int CharBreakIterator::first()
-{
- currentPos = 0;
- return currentPos;
-}
-
int CharBreakIterator::next()
{
if (currentPos >= length)
@@ -166,12 +159,6 @@ int CharBreakIterator::previous()
return currentPos;
}
-int LineBreakIterator::first()
-{
- currentPos = 0;
- return currentPos;
-}
-
int LineBreakIterator::next()
{
if (currentPos == length) {
@@ -206,12 +193,6 @@ int LineBreakIterator::previous()
return currentPos;
}
-int SentenceBreakIterator::first()
-{
- currentPos = 0;
- return currentPos;
-}
-
int SentenceBreakIterator::next()
{
if (currentPos == length) {
@@ -279,11 +260,21 @@ int textBreakFirst(TextBreakIterator* breakIterator)
return breakIterator->first();
}
+int textBreakLast(TextBreakIterator* breakIterator)
+{
+ return breakIterator->last();
+}
+
int textBreakNext(TextBreakIterator* breakIterator)
{
return breakIterator->next();
}
+int textBreakPrevious(TextBreakIterator* breakIterator)
+{
+ return breakIterator->previous();
+}
+
int textBreakPreceding(TextBreakIterator* breakIterator, int position)
{
return breakIterator->preceding(position);