aboutsummaryrefslogtreecommitdiffhomepage
path: root/modules
diff options
context:
space:
mode:
authorGravatar Hal Canary <halcanary@google.com>2018-07-24 11:33:21 -0400
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2018-07-25 17:21:56 +0000
commit4014ba6ec7a7825495ac0a6ed591c5dadd30751d (patch)
tree7439f79dce6e1768d7cdf3e36d4952fd9ed8ef1b /modules
parentba5c439809fb2be3b1db159b29aeffaa39f786df (diff)
SkUtils: remove some versions of UTF routines.
Change-Id: Ib1f776ae472117c23d2145253adf25fceb412b32 Reviewed-on: https://skia-review.googlesource.com/143111 Reviewed-by: Herb Derby <herb@google.com> Commit-Queue: Hal Canary <halcanary@google.com>
Diffstat (limited to 'modules')
-rw-r--r--modules/skshaper/src/SkShaper_harfbuzz.cpp20
1 files changed, 11 insertions, 9 deletions
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);
}