summaryrefslogtreecommitdiffstats
path: root/WebCore/platform/text/qt
diff options
context:
space:
mode:
authorThe Android Open Source Project <initial-contribution@android.com>2009-03-03 19:30:52 -0800
committerThe Android Open Source Project <initial-contribution@android.com>2009-03-03 19:30:52 -0800
commit8e35f3cfc7fba1d1c829dc557ebad6409cbe16a2 (patch)
tree11425ea0b299d6fb89c6d3618a22d97d5bf68d0f /WebCore/platform/text/qt
parent648161bb0edfc3d43db63caed5cc5213bc6cb78f (diff)
downloadexternal_webkit-8e35f3cfc7fba1d1c829dc557ebad6409cbe16a2.zip
external_webkit-8e35f3cfc7fba1d1c829dc557ebad6409cbe16a2.tar.gz
external_webkit-8e35f3cfc7fba1d1c829dc557ebad6409cbe16a2.tar.bz2
auto import from //depot/cupcake/@135843
Diffstat (limited to 'WebCore/platform/text/qt')
-rw-r--r--WebCore/platform/text/qt/StringQt.cpp56
-rw-r--r--WebCore/platform/text/qt/TextBoundaries.cpp125
-rw-r--r--WebCore/platform/text/qt/TextBreakIteratorQt.cpp297
-rw-r--r--WebCore/platform/text/qt/TextCodecQt.cpp121
-rw-r--r--WebCore/platform/text/qt/TextCodecQt.h54
5 files changed, 653 insertions, 0 deletions
diff --git a/WebCore/platform/text/qt/StringQt.cpp b/WebCore/platform/text/qt/StringQt.cpp
new file mode 100644
index 0000000..de9f527
--- /dev/null
+++ b/WebCore/platform/text/qt/StringQt.cpp
@@ -0,0 +1,56 @@
+/*
+ * Copyright (C) 2006 Nikolas Zimmermann <zimmermann@kde.org>
+ *
+ * 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 "PlatformString.h"
+
+#include <QString>
+
+namespace WebCore {
+
+// String conversions
+String::String(const QString& qstr)
+{
+ if (qstr.isNull())
+ return;
+ m_impl = StringImpl::create(reinterpret_cast<const UChar*>(qstr.constData()), qstr.length());
+}
+
+String::String(const QStringRef& ref)
+{
+ if (!ref.string())
+ return;
+ m_impl = StringImpl::create(reinterpret_cast<const UChar*>(ref.unicode()), ref.length());
+}
+
+String::operator QString() const
+{
+ return QString(reinterpret_cast<const QChar*>(characters()), length());
+}
+
+}
+
+// vim: ts=4 sw=4 et
diff --git a/WebCore/platform/text/qt/TextBoundaries.cpp b/WebCore/platform/text/qt/TextBoundaries.cpp
new file mode 100644
index 0000000..bdc851b
--- /dev/null
+++ b/WebCore/platform/text/qt/TextBoundaries.cpp
@@ -0,0 +1,125 @@
+/*
+ * 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 "NotImplemented.h"
+
+#include <QString>
+#include <QChar>
+
+#include <QDebug>
+#include <stdio.h>
+
+#if QT_VERSION >= 0x040400
+#include <qtextboundaryfinder.h>
+
+namespace WebCore
+{
+
+int findNextWordFromIndex(UChar const* buffer, int len, int position, bool forward)
+{
+ QString str(reinterpret_cast<QChar const*>(buffer), len);
+ QTextBoundaryFinder iterator(QTextBoundaryFinder::Word, str);
+ iterator.setPosition(position >= len ? len - 1 : position);
+ if (forward) {
+ int pos = iterator.toNextBoundary();
+ while (pos > 0) {
+ if (QChar(buffer[pos-1]).isLetterOrNumber())
+ return pos;
+ pos = iterator.toNextBoundary();
+ }
+ return len;
+ } else {
+ int pos = iterator.toPreviousBoundary();
+ while (pos > 0) {
+ if (QChar(buffer[pos]).isLetterOrNumber())
+ return pos;
+ pos = iterator.toPreviousBoundary();
+ }
+ return 0;
+ }
+}
+
+void findWordBoundary(UChar const* buffer, int len, int position, int* start, int* end)
+{
+ QString str(reinterpret_cast<QChar const*>(buffer), len);
+ QTextBoundaryFinder iterator(QTextBoundaryFinder::Word, str);
+ iterator.setPosition(position);
+ *start = position > 0 ? iterator.toPreviousBoundary() : 0;
+ *end = position == len ? len : iterator.toNextBoundary();
+}
+
+}
+
+#else
+namespace WebCore
+{
+
+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;
+}
+
+}
+#endif
diff --git a/WebCore/platform/text/qt/TextBreakIteratorQt.cpp b/WebCore/platform/text/qt/TextBreakIteratorQt.cpp
new file mode 100644
index 0000000..88b9680
--- /dev/null
+++ b/WebCore/platform/text/qt/TextBreakIteratorQt.cpp
@@ -0,0 +1,297 @@
+/*
+ * This file is part of the DOM implementation for KDE.
+ *
+ * Copyright (C) 2006 Lars Knoll <lars@trolltech.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public License
+ * along with this library; see the file COPYING.LIB. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ *
+ */
+
+#include "TextBreakIterator.h"
+
+#if QT_VERSION >= 0x040400
+#include <QtCore/qtextboundaryfinder.h>
+#include <qdebug.h>
+
+// #define DEBUG_TEXT_ITERATORS
+#ifdef DEBUG_TEXT_ITERATORS
+#define DEBUG qDebug
+#else
+#define DEBUG if (1) {} else qDebug
+#endif
+
+namespace WebCore {
+
+ class TextBreakIterator : public QTextBoundaryFinder
+ {
+ };
+ static QTextBoundaryFinder* iterator = 0;
+ static unsigned char buffer[1024];
+
+ TextBreakIterator* wordBreakIterator(const UChar* string, int length)
+ {
+ if (!string)
+ return 0;
+ if (!iterator)
+ iterator = new QTextBoundaryFinder;
+
+ *iterator = QTextBoundaryFinder(QTextBoundaryFinder::Word, (const QChar *)string, length, buffer, sizeof(buffer));
+ return static_cast<TextBreakIterator*>(iterator);
+ }
+
+ TextBreakIterator* characterBreakIterator(const UChar* string, int length)
+ {
+ if (!string)
+ return 0;
+ if (!iterator)
+ iterator = new QTextBoundaryFinder;
+
+ *iterator = QTextBoundaryFinder(QTextBoundaryFinder::Grapheme, (const QChar *)string, length, buffer, sizeof(buffer));
+ return static_cast<TextBreakIterator*>(iterator);
+ }
+
+ TextBreakIterator* lineBreakIterator(const UChar* string, int length)
+ {
+ static QTextBoundaryFinder *iterator = 0;
+ if (!string)
+ return 0;
+ if (!iterator)
+ iterator = new QTextBoundaryFinder;
+
+ *iterator = QTextBoundaryFinder(QTextBoundaryFinder::Line, (const QChar *)string, length, buffer, sizeof(buffer));
+ return static_cast<TextBreakIterator*>(iterator);
+ }
+
+ TextBreakIterator* sentenceBreakIterator(const UChar* string, int length)
+ {
+ if (!string)
+ return 0;
+ if (!iterator)
+ iterator = new QTextBoundaryFinder;
+
+ *iterator = QTextBoundaryFinder(QTextBoundaryFinder::Sentence, (const QChar *)string, length, buffer, sizeof(buffer));
+ return static_cast<TextBreakIterator*>(iterator);
+ }
+
+ int textBreakFirst(TextBreakIterator* bi)
+ {
+ bi->toStart();
+ DEBUG() << "textBreakFirst" << bi->position();
+ return bi->position();
+ }
+
+ int textBreakNext(TextBreakIterator* bi)
+ {
+ int pos = bi->toNextBoundary();
+ DEBUG() << "textBreakNext" << pos;
+ return pos;
+ }
+
+ int textBreakPreceding(TextBreakIterator* bi, int pos)
+ {
+ bi->setPosition(pos);
+ int newpos = bi->toPreviousBoundary();
+ DEBUG() << "textBreakPreceding" << pos << newpos;
+ return newpos;
+ }
+
+ int textBreakFollowing(TextBreakIterator* bi, int pos)
+ {
+ bi->setPosition(pos);
+ int newpos = bi->toNextBoundary();
+ DEBUG() << "textBreakFollowing" << pos << newpos;
+ return newpos;
+ }
+
+ int textBreakCurrent(TextBreakIterator* bi)
+ {
+ return bi->position();
+ }
+
+ bool isTextBreak(TextBreakIterator*, int)
+ {
+ return true;
+ }
+
+}
+#else
+#include <qtextlayout.h>
+
+namespace WebCore {
+
+ class TextBreakIterator
+ {
+ public:
+ virtual int first() = 0;
+ virtual int next() = 0;
+ virtual int previous() = 0;
+ inline int following(int pos) {
+ currentPos = pos;
+ return next();
+ }
+ inline int preceding(int pos) {
+ currentPos = pos;
+ return previous();
+ }
+ int currentPos;
+ const UChar *string;
+ int length;
+ };
+
+ class WordBreakIteratorQt : public TextBreakIterator
+ {
+ public:
+ virtual int first();
+ virtual int next();
+ virtual int previous();
+ };
+
+ class CharBreakIteratorQt : public TextBreakIterator
+ {
+ public:
+ virtual int first();
+ virtual int next();
+ virtual int previous();
+ QTextLayout layout;
+ };
+
+ int WordBreakIteratorQt::first() {
+ currentPos = 0;
+ return currentPos;
+ }
+
+ int WordBreakIteratorQt::next() {
+ if (currentPos >= length) {
+ currentPos = -1;
+ return currentPos;
+ }
+ bool haveSpace = false;
+ while (currentPos < length) {
+ if (haveSpace && !QChar(string[currentPos]).isSpace())
+ break;
+ if (QChar(string[currentPos]).isSpace())
+ haveSpace = true;
+ ++currentPos;
+ }
+ return currentPos;
+ }
+ int WordBreakIteratorQt::previous() {
+ if (currentPos <= 0) {
+ currentPos = -1;
+ return currentPos;
+ }
+ bool haveSpace = false;
+ while (currentPos > 0) {
+ if (haveSpace && !QChar(string[currentPos]).isSpace())
+ break;
+ if (QChar(string[currentPos]).isSpace())
+ haveSpace = true;
+ --currentPos;
+ }
+ return currentPos;
+ }
+
+ int CharBreakIteratorQt::first() {
+ currentPos = 0;
+ return currentPos;
+ }
+
+ int CharBreakIteratorQt::next() {
+ if (currentPos >= length)
+ return -1;
+ currentPos = layout.nextCursorPosition(currentPos);
+ return currentPos;
+ }
+ int CharBreakIteratorQt::previous() {
+ if (currentPos <= 0)
+ return -1;
+ currentPos = layout.previousCursorPosition(currentPos);
+ return currentPos;
+ }
+
+
+TextBreakIterator* wordBreakIterator(const UChar* string, int length)
+{
+ static WordBreakIteratorQt *iterator = 0;
+ if (!iterator)
+ iterator = new WordBreakIteratorQt;
+
+ iterator->string = string;
+ iterator->length = length;
+ iterator->currentPos = 0;
+
+ return iterator;
+}
+
+TextBreakIterator* characterBreakIterator(const UChar* string, int length)
+{
+ static CharBreakIteratorQt *iterator = 0;
+ if (!iterator)
+ iterator = new CharBreakIteratorQt;
+
+ iterator->string = string;
+ iterator->length = length;
+ iterator->currentPos = 0;
+ iterator->layout.setText(QString(reinterpret_cast<const QChar*>(string), length));
+
+ return iterator;
+}
+
+TextBreakIterator* lineBreakIterator(const UChar*, int)
+{
+ // not yet implemented
+ return 0;
+}
+
+TextBreakIterator* sentenceBreakIterator(const UChar*, int)
+{
+ // not yet implemented
+ return 0;
+}
+
+int textBreakFirst(TextBreakIterator* bi)
+{
+ return bi->first();
+}
+
+int textBreakNext(TextBreakIterator* bi)
+{
+ return bi->next();
+}
+
+int textBreakPreceding(TextBreakIterator* bi, int pos)
+{
+ return bi->preceding(pos);
+}
+
+int textBreakFollowing(TextBreakIterator* bi, int pos)
+{
+ return bi->following(pos);
+}
+
+int textBreakCurrent(TextBreakIterator* bi)
+{
+ return bi->currentPos;
+}
+
+bool isTextBreak(TextBreakIterator*, int)
+{
+ return true;
+}
+
+}
+
+#endif
diff --git a/WebCore/platform/text/qt/TextCodecQt.cpp b/WebCore/platform/text/qt/TextCodecQt.cpp
new file mode 100644
index 0000000..0f385dd
--- /dev/null
+++ b/WebCore/platform/text/qt/TextCodecQt.cpp
@@ -0,0 +1,121 @@
+/*
+ * Copyright (C) 2006 Lars Knoll <lars@trolltech.com>
+ * Copyright (C) 2008 Holger Hans Peter Freyther
+ *
+ * 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 "TextCodecQt.h"
+#include "PlatformString.h"
+#include "CString.h"
+#include <qset.h>
+// #include <QDebug>
+
+namespace WebCore {
+
+static QSet<QByteArray> *unique_names = 0;
+
+static const char *getAtomicName(const QByteArray &name)
+{
+ if (!unique_names)
+ unique_names = new QSet<QByteArray>;
+
+ unique_names->insert(name);
+ return unique_names->find(name)->constData();
+}
+
+void TextCodecQt::registerEncodingNames(EncodingNameRegistrar registrar)
+{
+ QList<int> mibs = QTextCodec::availableMibs();
+// qDebug() << ">>>>>>>>> registerEncodingNames";
+
+ for (int i = 0; i < mibs.size(); ++i) {
+ QTextCodec *c = QTextCodec::codecForMib(mibs.at(i));
+ const char *name = getAtomicName(c->name());
+ registrar(name, name);
+// qDebug() << " " << name << name;
+ QList<QByteArray> aliases = c->aliases();
+ for (int i = 0; i < aliases.size(); ++i) {
+ const char *a = getAtomicName(aliases.at(i));
+// qDebug() << " (a) " << a << name;
+ registrar(a, name);
+ }
+ }
+}
+
+static std::auto_ptr<TextCodec> newTextCodecQt(const TextEncoding& encoding, const void*)
+{
+ return std::auto_ptr<TextCodec>(new TextCodecQt(encoding));
+}
+
+void TextCodecQt::registerCodecs(TextCodecRegistrar registrar)
+{
+ QList<int> mibs = QTextCodec::availableMibs();
+// qDebug() << ">>>>>>>>> registerCodecs";
+
+ for (int i = 0; i < mibs.size(); ++i) {
+ QTextCodec *c = QTextCodec::codecForMib(mibs.at(i));
+ const char *name = getAtomicName(c->name());
+// qDebug() << " " << name;
+ registrar(name, newTextCodecQt, 0);
+ }
+}
+
+TextCodecQt::TextCodecQt(const TextEncoding& encoding)
+ : m_encoding(encoding)
+{
+ m_codec = QTextCodec::codecForName(m_encoding.name());
+}
+
+TextCodecQt::~TextCodecQt()
+{
+}
+
+
+String TextCodecQt::decode(const char* bytes, size_t length, bool flush, bool /*stopOnError*/, bool& sawError)
+{
+ QString unicode = m_codec->toUnicode(bytes, length, &m_state);
+ sawError = m_state.invalidChars != 0;
+
+ if (flush) {
+ m_state.flags = QTextCodec::DefaultConversion;
+ m_state.remainingChars = 0;
+ m_state.invalidChars = 0;
+ }
+
+ return unicode;
+}
+
+CString TextCodecQt::encode(const UChar* characters, size_t length, UnencodableHandling)
+{
+ if (!length)
+ return "";
+
+ // FIXME: do something sensible with UnencodableHandling
+
+ QByteArray ba = m_codec->fromUnicode(reinterpret_cast<const QChar*>(characters), length, 0);
+ return CString(ba.constData(), ba.length());
+}
+
+
+} // namespace WebCore
diff --git a/WebCore/platform/text/qt/TextCodecQt.h b/WebCore/platform/text/qt/TextCodecQt.h
new file mode 100644
index 0000000..f28f0bb
--- /dev/null
+++ b/WebCore/platform/text/qt/TextCodecQt.h
@@ -0,0 +1,54 @@
+/*
+ * Copyright (C) 2006 Lars Knoll <lars@trolltech.com>
+ *
+ * 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.
+ */
+
+#ifndef TextCodecQt_h
+#define TextCodecQt_h
+
+#include "TextCodec.h"
+#include "TextEncoding.h"
+#include <QTextCodec>
+
+namespace WebCore {
+
+ class TextCodecQt : public TextCodec {
+ public:
+ static void registerEncodingNames(EncodingNameRegistrar);
+ static void registerCodecs(TextCodecRegistrar);
+
+ TextCodecQt(const TextEncoding&);
+ virtual ~TextCodecQt();
+
+ virtual String decode(const char*, size_t length, bool flush, bool stopOnError, bool& sawError);
+ virtual CString encode(const UChar*, size_t length, UnencodableHandling);
+
+ private:
+ TextEncoding m_encoding;
+ QTextCodec *m_codec;
+ QTextCodec::ConverterState m_state;
+ };
+
+} // namespace WebCore
+
+#endif // TextCodecICU_h