#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(); } void BiDi::mergeParagraphLineBreaks(std::set& lineBreakPoints) { lineBreakPoints.insert(static_cast(bidi.impl->string.length())); } std::vector BiDi::applyLineBreaking(std::set lineBreakPoints) { mergeParagraphLineBreaks(lineBreakPoints); std::vector transformedLines; std::size_t start = 0; for (std::size_t lineBreakPoint : lineBreakPoints) { transformedLines.push_back(bidi.getLine(start, lineBreakPoint)); start = lineBreakPoint; } return transformedLines; } BiDi::BiDi() : impl(std::make_unique()) { } BiDi::~BiDi() = default; std::vector BiDi::processText(const std::u16string& input, std::set lineBreakPoints) { impl->string = QString::fromStdU16String(input); return applyLineBreaking(lineBreakPoints); } std::u16string BiDi::getLine(std::size_t start, std::size_t end) { return impl->string.mid(static_cast(start), static_cast(end - start)).toStdU16String(); } } // end namespace mbgl