diff options
Diffstat (limited to 'platform/qt/src/bidi.cpp')
-rw-r--r-- | platform/qt/src/bidi.cpp | 56 |
1 files changed, 56 insertions, 0 deletions
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 <memory> + +#include <mbgl/text/bidi.hpp> + +#include <QString> + +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<int32_t>& lineBreakPoints) { + lineBreakPoints.insert(impl->string.length()); +} + +std::vector<std::u16string> +ProcessedBiDiText::applyLineBreaking(std::set<int32_t> lineBreakPoints) { + mergeParagraphLineBreaks(lineBreakPoints); + + std::vector<std::u16string> 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<BiDiImpl>()) +{ +} + +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 |