diff options
author | Chris Loer <chris.loer@gmail.com> | 2017-01-05 08:47:02 -0800 |
---|---|---|
committer | Chris Loer <chris.loer@gmail.com> | 2017-01-05 10:22:53 -0800 |
commit | 12a9932ebcbefd6da74de8c4b3d1e07bb0016e2b (patch) | |
tree | 66f40c182319c36d249d414e6def26476557f905 /platform/default | |
parent | 35ccb01dbdf95595591c7b2bf3c4a0882a1b9be7 (diff) | |
download | qtlocation-mapboxgl-12a9932ebcbefd6da74de8c4b3d1e07bb0016e2b.tar.gz |
Port raggedness-minimizing line breaking from gl-js.
Diffstat (limited to 'platform/default')
-rw-r--r-- | platform/default/bidi.cpp | 24 |
1 files changed, 10 insertions, 14 deletions
diff --git a/platform/default/bidi.cpp b/platform/default/bidi.cpp index 9de6328a05..25b4dbe3a7 100644 --- a/platform/default/bidi.cpp +++ b/platform/default/bidi.cpp @@ -19,12 +19,8 @@ public: UBiDi* bidiLine = nullptr; }; -BiDi::BiDi() : impl(std::make_unique<BiDiImpl>()) -{ -} - -BiDi::~BiDi() { -} +BiDi::BiDi() : impl(std::make_unique<BiDiImpl>()) {} +BiDi::~BiDi() = default; // Takes UTF16 input in logical order and applies Arabic shaping to the input while maintaining // logical order. Output won't be intelligible until the bidirectional algorithm is applied @@ -53,7 +49,7 @@ std::u16string applyArabicShaping(const std::u16string& input) { return std::u16string(outputText.get(), outputLength); } -void BiDi::mergeParagraphLineBreaks(std::set<int32_t>& lineBreakPoints) { +void BiDi::mergeParagraphLineBreaks(std::set<size_t>& lineBreakPoints) { int32_t paragraphCount = ubidi_countParagraphs(impl->bidiText); for (int32_t i = 0; i < paragraphCount; i++) { UErrorCode errorCode = U_ZERO_ERROR; @@ -65,11 +61,11 @@ void BiDi::mergeParagraphLineBreaks(std::set<int32_t>& lineBreakPoints) { u_errorName(errorCode)); } - lineBreakPoints.insert(paragraphEndIndex); + lineBreakPoints.insert(static_cast<std::size_t>(paragraphEndIndex)); } } -std::vector<std::u16string> BiDi::applyLineBreaking(std::set<int32_t> lineBreakPoints) { +std::vector<std::u16string> BiDi::applyLineBreaking(std::set<std::size_t> lineBreakPoints) { // BiDi::getLine will error if called across a paragraph boundary, so we need to ensure that all // paragraph boundaries are included in the set of line break points. The calling code might not // include the line break because it didn't need to wrap at that point, or because the text was @@ -77,8 +73,8 @@ std::vector<std::u16string> BiDi::applyLineBreaking(std::set<int32_t> lineBreakP mergeParagraphLineBreaks(lineBreakPoints); std::vector<std::u16string> transformedLines; - int32_t start = 0; - for (int32_t lineBreakPoint : lineBreakPoints) { + std::size_t start = 0; + for (std::size_t lineBreakPoint : lineBreakPoints) { transformedLines.push_back(getLine(start, lineBreakPoint)); start = lineBreakPoint; } @@ -87,7 +83,7 @@ std::vector<std::u16string> BiDi::applyLineBreaking(std::set<int32_t> lineBreakP } std::vector<std::u16string> BiDi::processText(const std::u16string& input, - std::set<int32_t> lineBreakPoints) { + std::set<std::size_t> lineBreakPoints) { UErrorCode errorCode = U_ZERO_ERROR; ubidi_setPara(impl->bidiText, input.c_str(), static_cast<int32_t>(input.size()), @@ -100,9 +96,9 @@ std::vector<std::u16string> BiDi::processText(const std::u16string& input, return applyLineBreaking(lineBreakPoints); } -std::u16string BiDi::getLine(int32_t start, int32_t end) { +std::u16string BiDi::getLine(std::size_t start, std::size_t end) { UErrorCode errorCode = U_ZERO_ERROR; - ubidi_setLine(impl->bidiText, start, end, impl->bidiLine, &errorCode); + ubidi_setLine(impl->bidiText, static_cast<int32_t>(start), static_cast<int32_t>(end), impl->bidiLine, &errorCode); if (U_FAILURE(errorCode)) { throw std::runtime_error(std::string("BiDi::getLine (setLine): ") + u_errorName(errorCode)); |