PKGBUILDs/qt5-webkit/mingw-w64/0004-Don-t-require-qt5-base...

274 lines
8.9 KiB
Diff

From 0babda7ee8ffc48773162224eed9e2d0aa83b9ea Mon Sep 17 00:00:00 2001
From: Martchus <martchus@gmx.net>
Date: Sun, 25 Sep 2016 21:59:39 +0200
Subject: [PATCH 04/11] Don't require qt5-base to be built with ICU support
---
Source/WTF/wtf/Platform.h | 4 +
Source/WebCore/platform/ThreadGlobalData.cpp | 2 +
Source/WebCore/platform/text/TextAllInOne.cpp | 8 +
.../WebCore/platform/text/TextBreakIteratorQt.cpp | 175 +++++++++++++++++++++
Tools/qmake/mkspecs/features/configure.prf | 6 +-
5 files changed, 192 insertions(+), 3 deletions(-)
create mode 100644 Source/WebCore/platform/text/TextBreakIteratorQt.cpp
diff --git a/Source/WTF/wtf/Platform.h b/Source/WTF/wtf/Platform.h
index 562840c..8b93148 100644
--- a/Source/WTF/wtf/Platform.h
+++ b/Source/WTF/wtf/Platform.h
@@ -580,9 +580,13 @@
# define WTF_USE_WCHAR_UNICODE 1
#endif
+#if OS(WINDOWS) && PLATFORM(QT)
+#define WTF_USE_QT4_UNICODE 1
+#else
#if !USE(WCHAR_UNICODE)
#define WTF_USE_ICU_UNICODE 1
#endif
+#endif
#if PLATFORM(MAC) && !PLATFORM(IOS)
#if CPU(X86_64)
diff --git a/Source/WebCore/platform/ThreadGlobalData.cpp b/Source/WebCore/platform/ThreadGlobalData.cpp
index 698ec6e..e77f46f 100644
--- a/Source/WebCore/platform/ThreadGlobalData.cpp
+++ b/Source/WebCore/platform/ThreadGlobalData.cpp
@@ -38,6 +38,8 @@
#if USE(ICU_UNICODE)
#include "TextCodecICU.h"
+#elif USE(QT4_UNICODE)
+#include "qt/TextCodecQt.h"
#endif
#if PLATFORM(MAC)
diff --git a/Source/WebCore/platform/text/TextAllInOne.cpp b/Source/WebCore/platform/text/TextAllInOne.cpp
index 31c37f7..86fdff9 100644
--- a/Source/WebCore/platform/text/TextAllInOne.cpp
+++ b/Source/WebCore/platform/text/TextAllInOne.cpp
@@ -27,7 +27,11 @@
#include "TextBoundaries.cpp"
#include "TextBreakIterator.cpp"
+#if USE(QT4_UNICODE)
+#include "TextBreakIteratorQt.cpp"
+#else
#include "TextBreakIteratorICU.cpp"
+#endif
#include "TextCodec.cpp"
#include "TextCodecICU.cpp"
#include "TextCodecLatin1.cpp"
@@ -35,6 +39,10 @@
#include "TextCodecUTF8.cpp"
#include "TextCodecUserDefined.cpp"
#include "TextEncoding.cpp"
+#if USE(QT4_UNICODE)
+#include "TextEncodingDetectorNone.cpp"
+#else
#include "TextEncodingDetectorICU.cpp"
+#endif
#include "TextEncodingRegistry.cpp"
#include "TextStream.cpp"
diff --git a/Source/WebCore/platform/text/TextBreakIteratorQt.cpp b/Source/WebCore/platform/text/TextBreakIteratorQt.cpp
new file mode 100644
index 0000000..f74a681
--- /dev/null
+++ b/Source/WebCore/platform/text/TextBreakIteratorQt.cpp
@@ -0,0 +1,175 @@
+/*
+ * 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 "config.h"
+#include "TextBreakIterator.h"
+
+#include <QtCore/qtextboundaryfinder.h>
+#include <algorithm>
+#include <qdebug.h>
+#include <wtf/Atomics.h>
+
+// #define DEBUG_TEXT_ITERATORS
+#ifdef DEBUG_TEXT_ITERATORS
+#define DEBUG qDebug
+#else
+#define DEBUG if (1) {} else qDebug
+#endif
+
+using namespace WTF;
+using namespace std;
+
+namespace WebCore {
+
+ class TextBreakIterator : public QTextBoundaryFinder {
+ public:
+ TextBreakIterator(QTextBoundaryFinder::BoundaryType type, const QString& string)
+ : QTextBoundaryFinder(type, string)
+ { }
+ TextBreakIterator()
+ : QTextBoundaryFinder()
+ { }
+ };
+
+ TextBreakIterator* setUpIterator(TextBreakIterator& iterator, QTextBoundaryFinder::BoundaryType type, const UChar* characters, int length)
+ {
+ if (!characters || !length)
+ return 0;
+
+ if (iterator.isValid() && type == iterator.type() && iterator.string() == QString::fromRawData(reinterpret_cast<const QChar*>(characters), length)) {
+ iterator.toStart();
+ return &iterator;
+ }
+
+ iterator = TextBreakIterator(type, QString(reinterpret_cast<const QChar*>(characters), length));
+ return &iterator;
+ }
+
+ TextBreakIterator* wordBreakIterator(const UChar* string, int length)
+ {
+ static TextBreakIterator staticWordBreakIterator;
+ return setUpIterator(staticWordBreakIterator, QTextBoundaryFinder::Word, string, length);
+ }
+
+ static TextBreakIterator* nonSharedCharacterBreakIterator;
+
+ NonSharedCharacterBreakIterator::NonSharedCharacterBreakIterator(const UChar* buffer, int length)
+ {
+ m_iterator = nonSharedCharacterBreakIterator;
+ bool createdIterator = m_iterator && weakCompareAndSwap(reinterpret_cast<void**>(&nonSharedCharacterBreakIterator), m_iterator, 0);
+ if (!createdIterator)
+ m_iterator = new TextBreakIterator();
+ if (!setUpIterator(*m_iterator, QTextBoundaryFinder::Grapheme, buffer, length)) {
+ delete m_iterator;
+ m_iterator = 0;
+ }
+ }
+
+ NonSharedCharacterBreakIterator::~NonSharedCharacterBreakIterator()
+ {
+ if (!weakCompareAndSwap(reinterpret_cast<void**>(&nonSharedCharacterBreakIterator), 0, m_iterator))
+ delete m_iterator;
+ }
+
+ TextBreakIterator* cursorMovementIterator(const UChar* string, int length)
+ {
+ static TextBreakIterator staticCursorMovementIterator;
+ return setUpIterator(staticCursorMovementIterator, QTextBoundaryFinder::Grapheme, string, length);
+ }
+
+ static TextBreakIterator* staticLineBreakIterator;
+
+ TextBreakIterator* acquireLineBreakIterator(const UChar* string, int length, const AtomicString&, const UChar* priorContext, unsigned priorContextLength)
+ {
+ TextBreakIterator* lineBreakIterator = 0;
+ if (staticLineBreakIterator) {
+ setUpIterator(*staticLineBreakIterator, QTextBoundaryFinder::Line, string, length);
+ std::swap(staticLineBreakIterator, lineBreakIterator);
+ }
+
+ if (!lineBreakIterator && string && length)
+ lineBreakIterator = new TextBreakIterator(QTextBoundaryFinder::Line, QString(reinterpret_cast<const QChar*>(string), length));
+
+ return lineBreakIterator;
+ }
+
+ void releaseLineBreakIterator(TextBreakIterator* iterator)
+ {
+ ASSERT(iterator);
+
+ if (!staticLineBreakIterator)
+ staticLineBreakIterator = iterator;
+ else
+ delete iterator;
+ }
+
+ TextBreakIterator* sentenceBreakIterator(const UChar* string, int length)
+ {
+ static TextBreakIterator staticSentenceBreakIterator;
+ return setUpIterator(staticSentenceBreakIterator, QTextBoundaryFinder::Sentence, string, length);
+
+ }
+
+ 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;
+ }
+
+ bool isWordTextBreak(TextBreakIterator*)
+ {
+ return true;
+ }
+
+}
diff --git a/Tools/qmake/mkspecs/features/configure.prf b/Tools/qmake/mkspecs/features/configure.prf
index b5fb2ae..7da388a 100644
--- a/Tools/qmake/mkspecs/features/configure.prf
+++ b/Tools/qmake/mkspecs/features/configure.prf
@@ -120,9 +120,9 @@ defineTest(finalizeConfigure) {
}
# Sanity checks that would prevent us from building the whole project altogether.
- !config_icu:!osx:!use?(wchar_unicode) {
- addReasonForSkippingBuild("ICU is required.")
- }
+# !config_icu:!osx:!use?(wchar_unicode) {
+# addReasonForSkippingBuild("ICU is required.")
+# }
production_build:blackberry {
addReasonForSkippingBuild("Build not supported on BB10.")
}
--
2.10.2