From b65b2f1c299eb545ae0dab454c51f11c5833fdd8 Mon Sep 17 00:00:00 2001 From: Bruno de Oliveira Abinader Date: Mon, 12 Dec 2016 16:50:48 +0200 Subject: [qt] Skip ICU if WITH_QT_I18N is set --- platform/qt/config.cmake | 12 +++++++++-- platform/qt/qt.cmake | 2 +- platform/qt/src/bidi.cpp | 56 ++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 67 insertions(+), 3 deletions(-) create mode 100644 platform/qt/src/bidi.cpp (limited to 'platform/qt') diff --git a/platform/qt/config.cmake b/platform/qt/config.cmake index f6b7d509f8..f2beedcfa2 100644 --- a/platform/qt/config.cmake +++ b/platform/qt/config.cmake @@ -2,7 +2,6 @@ include(platform/qt/qt.cmake) mason_use(sqlite VERSION 3.14.2) mason_use(gtest VERSION 1.7.0${MASON_CXXABI_SUFFIX}) -mason_use(icu VERSION 58.1) if(NOT WITH_QT_DECODERS) mason_use(libjpeg-turbo VERSION 1.5.0) @@ -10,6 +9,10 @@ if(NOT WITH_QT_DECODERS) mason_use(webp VERSION 0.5.1) endif() +if(NOT WITH_QT_I18N) + mason_use(icu VERSION 58.1) +endif() + macro(mbgl_platform_core) target_sources(mbgl-core ${MBGL_QT_FILES} @@ -40,7 +43,12 @@ macro(mbgl_platform_core) add_definitions(-DQT_IMAGE_DECODERS) endif() - target_add_mason_package(mbgl-core PRIVATE icu) + if(NOT WITH_QT_I18N) + target_sources(mbgl-core PRIVATE platform/default/bidi.cpp) + target_add_mason_package(mbgl-core PRIVATE icu) + else() + target_sources(mbgl-core PRIVATE platform/qt/src/bidi.cpp) + endif() endmacro() diff --git a/platform/qt/qt.cmake b/platform/qt/qt.cmake index c640ca5689..2950e1fb15 100644 --- a/platform/qt/qt.cmake +++ b/platform/qt/qt.cmake @@ -2,6 +2,7 @@ # support `mason` (i.e. Yocto). Do not add any `mason` macro. option(WITH_QT_DECODERS "Use builtin Qt image decoders" OFF) +option(WITH_QT_I18N "Use builtin Qt i18n support" OFF) option(WITH_QT_4 "Use Qt4 instead of Qt5" OFF) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fvisibility=hidden -D__QT__") @@ -29,7 +30,6 @@ set(MBGL_QT_FILES # Misc PRIVATE platform/default/logging_stderr.cpp - PRIVATE platform/default/bidi.cpp # Thread pool PRIVATE platform/default/mbgl/util/default_thread_pool.cpp diff --git a/platform/qt/src/bidi.cpp b/platform/qt/src/bidi.cpp new file mode 100644 index 0000000000..99f09e8ef8 --- /dev/null +++ b/platform/qt/src/bidi.cpp @@ -0,0 +1,56 @@ +#include + +#include + +#include + +namespace mbgl { + +class BiDiImpl { +public: + QString string; +}; + +std::u16string applyArabicShaping(const std::u16string& input) { + QString utf16string = QString::fromStdU16String(input); + return utf16string.toStdU16String(); +} + +ProcessedBiDiText::ProcessedBiDiText(BiDi& p_bidi) : bidi(p_bidi) { +} + +void ProcessedBiDiText::mergeParagraphLineBreaks(std::set& lineBreakPoints) { + lineBreakPoints.insert(impl->string.length()); +} + +std::vector +ProcessedBiDiText::applyLineBreaking(std::set lineBreakPoints) { + mergeParagraphLineBreaks(lineBreakPoints); + + std::vector transformedLines; + int32_t start = 0; + for (int32_t lineBreakPoint : lineBreakPoints) { + transformedLines.push_back(bidi.getLine(start, lineBreakPoint)); + start = lineBreakPoint; + } + + return transformedLines; +} + +BiDi::BiDi() : impl(std::make_unique()) +{ +} + +BiDi::~BiDi() { +} + +ProcessedBiDiText BiDi::processText(const std::u16string& input) { + impl->string = QString::fromStdU16String(input); + return ProcessedBiDiText(*this); +} + +std::u16string BiDi::getLine(int32_t start, int32_t end) { + return impl->string.mid(start, end - start).toStdU16String(); +} + +} // end namespace mbgl -- cgit v1.2.1