From 4014ba6ec7a7825495ac0a6ed591c5dadd30751d Mon Sep 17 00:00:00 2001 From: Hal Canary Date: Tue, 24 Jul 2018 11:33:21 -0400 Subject: SkUtils: remove some versions of UTF routines. Change-Id: Ib1f776ae472117c23d2145253adf25fceb412b32 Reviewed-on: https://skia-review.googlesource.com/143111 Reviewed-by: Herb Derby Commit-Queue: Hal Canary --- modules/skshaper/src/SkShaper_harfbuzz.cpp | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) (limited to 'modules') diff --git a/modules/skshaper/src/SkShaper_harfbuzz.cpp b/modules/skshaper/src/SkShaper_harfbuzz.cpp index 94c899d01e..2077dedadc 100644 --- a/modules/skshaper/src/SkShaper_harfbuzz.cpp +++ b/modules/skshaper/src/SkShaper_harfbuzz.cpp @@ -124,12 +124,13 @@ public: return ret; } - ret.init(utf8, std::move(bidi)); + ret.init(utf8, utf8 + utf8Bytes, std::move(bidi)); return ret; } - BiDiRunIterator(const char* utf8, ICUBiDi bidi) + BiDiRunIterator(const char* utf8, const char* end, ICUBiDi bidi) : fBidi(std::move(bidi)) , fEndOfCurrentRun(utf8) + , fEndOfAllRuns(end) , fUTF16LogicalPosition(0) , fLevel(UBIDI_DEFAULT_LTR) {} @@ -137,7 +138,7 @@ public: SkASSERT(fUTF16LogicalPosition < ubidi_getLength(fBidi.get())); int32_t endPosition = ubidi_getLength(fBidi.get()); fLevel = ubidi_getLevelAt(fBidi.get(), fUTF16LogicalPosition); - SkUnichar u = SkUTF8_NextUnichar(&fEndOfCurrentRun); + SkUnichar u = SkUTF8_NextUnichar(&fEndOfCurrentRun, fEndOfAllRuns); fUTF16LogicalPosition += SkUTF16_FromUnichar(u); UBiDiLevel level; while (fUTF16LogicalPosition < endPosition) { @@ -145,7 +146,7 @@ public: if (level != fLevel) { break; } - u = SkUTF8_NextUnichar(&fEndOfCurrentRun); + u = SkUTF8_NextUnichar(&fEndOfCurrentRun, fEndOfAllRuns); fUTF16LogicalPosition += SkUTF16_FromUnichar(u); } } @@ -162,6 +163,7 @@ public: private: ICUBiDi fBidi; const char* fEndOfCurrentRun; + const char* fEndOfAllRuns; int32_t fUTF16LogicalPosition; UBiDiLevel fLevel; }; @@ -182,11 +184,11 @@ public: {} void consume() override { SkASSERT(fCurrent < fEnd); - SkUnichar u = SkUTF8_NextUnichar(&fCurrent); + SkUnichar u = SkUTF8_NextUnichar(&fCurrent, fEnd); fCurrentScript = hb_unicode_script(fHBUnicode, u); while (fCurrent < fEnd) { const char* prev = fCurrent; - u = SkUTF8_NextUnichar(&fCurrent); + u = SkUTF8_NextUnichar(&fCurrent, fEnd); const hb_script_t script = hb_unicode_script(fHBUnicode, u); if (script != fCurrentScript) { if (fCurrentScript == HB_SCRIPT_INHERITED || fCurrentScript == HB_SCRIPT_COMMON) { @@ -241,7 +243,7 @@ public: {} void consume() override { SkASSERT(fCurrent < fEnd); - SkUnichar u = SkUTF8_NextUnichar(&fCurrent); + SkUnichar u = SkUTF8_NextUnichar(&fCurrent, fEnd); // If the starting typeface can handle this character, use it. if (fTypeface->charsToGlyphs(&u, SkTypeface::kUTF32_Encoding, nullptr, 1)) { fFallbackTypeface.reset(); @@ -263,7 +265,7 @@ public: while (fCurrent < fEnd) { const char* prev = fCurrent; - u = SkUTF8_NextUnichar(&fCurrent); + u = SkUTF8_NextUnichar(&fCurrent, fEnd); // If using a fallback and the initial typeface has this character, stop fallback. if (fFallbackTypeface && @@ -552,7 +554,7 @@ SkPoint SkShaper::shape(SkTextBlobBuilder* builder, const char* utf8Current = utf8Start; while (utf8Current < utf8End) { unsigned int cluster = utf8Current - utf8Start; - hb_codepoint_t u = SkUTF8_NextUnichar(&utf8Current); + hb_codepoint_t u = SkUTF8_NextUnichar(&utf8Current, utf8End); hb_buffer_add(buffer, u, cluster); } -- cgit v1.2.3