From 12a9932ebcbefd6da74de8c4b3d1e07bb0016e2b Mon Sep 17 00:00:00 2001 From: Chris Loer Date: Thu, 5 Jan 2017 08:47:02 -0800 Subject: Port raggedness-minimizing line breaking from gl-js. --- platform/default/bidi.cpp | 24 ++++++++++-------------- 1 file changed, 10 insertions(+), 14 deletions(-) (limited to 'platform/default') 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()) -{ -} - -BiDi::~BiDi() { -} +BiDi::BiDi() : impl(std::make_unique()) {} +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& lineBreakPoints) { +void BiDi::mergeParagraphLineBreaks(std::set& 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& lineBreakPoints) { u_errorName(errorCode)); } - lineBreakPoints.insert(paragraphEndIndex); + lineBreakPoints.insert(static_cast(paragraphEndIndex)); } } -std::vector BiDi::applyLineBreaking(std::set lineBreakPoints) { +std::vector BiDi::applyLineBreaking(std::set 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 BiDi::applyLineBreaking(std::set lineBreakP mergeParagraphLineBreaks(lineBreakPoints); std::vector 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 BiDi::applyLineBreaking(std::set lineBreakP } std::vector BiDi::processText(const std::u16string& input, - std::set lineBreakPoints) { + std::set lineBreakPoints) { UErrorCode errorCode = U_ZERO_ERROR; ubidi_setPara(impl->bidiText, input.c_str(), static_cast(input.size()), @@ -100,9 +96,9 @@ std::vector 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(start), static_cast(end), impl->bidiLine, &errorCode); if (U_FAILURE(errorCode)) { throw std::runtime_error(std::string("BiDi::getLine (setLine): ") + u_errorName(errorCode)); -- cgit v1.2.1