Move UTF16 helpers from SkUtils to SkUTF
Also delete the unused/deprecated functions
- SkUTF8_NextUnichar
- SkUTF16_NextUnichar
- SkUTFN_CountUnichars
- SkUTFN_Next
Change-Id: Icbcc6961cbc3112af6794742af03adb14369c45d
Bug: skia:12584
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/467123
Reviewed-by: Ben Wagner <bungeman@google.com>
diff --git a/src/core/SkUtils.cpp b/src/core/SkUtils.cpp
index d369d50..dcee16f 100644
--- a/src/core/SkUtils.cpp
+++ b/src/core/SkUtils.cpp
@@ -7,28 +7,6 @@
#include "src/core/SkUtils.h"
-template <typename T>
-static SkUnichar next(const T** srcPtr, unsigned N, SkUnichar (*fn)(const T**, const T*)) {
- SkASSERT(srcPtr);
- const T* ptr = *srcPtr;
- SkUnichar c = fn(&ptr, ptr + N);
- if (c == -1) {
- SkASSERT(false);
- ++(*srcPtr);
- return 0xFFFD; // REPLACEMENT CHARACTER
- }
- *srcPtr = ptr;
- return c;
-}
-SkUnichar SkUTF8_NextUnichar(const char** p) {
- return next<char>(p, SkUTF::kMaxBytesInUTF8Sequence, SkUTF::NextUTF8);
-}
-SkUnichar SkUTF16_NextUnichar(const uint16_t** p) {
- return next<uint16_t>(p, 2, SkUTF::NextUTF16);
-}
-
-///////////////////////////////////////////////////////////////////////////////
-
const char SkHexadecimalDigits::gUpper[16] =
{ '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };
const char SkHexadecimalDigits::gLower[16] =
diff --git a/src/core/SkUtils.h b/src/core/SkUtils.h
index 4dc25d9..47267a4 100644
--- a/src/core/SkUtils.h
+++ b/src/core/SkUtils.h
@@ -8,9 +8,8 @@
#ifndef SkUtils_DEFINED
#define SkUtils_DEFINED
-#include "include/core/SkFontTypes.h"
+#include "include/core/SkTypes.h"
#include "src/core/SkOpts.h"
-#include "src/utils/SkUTF.h"
/** Similar to memset(), but it assigns a 16, 32, or 64-bit value into the buffer.
@param buffer The memory to have value copied into it
@@ -29,42 +28,6 @@
///////////////////////////////////////////////////////////////////////////////
-// Unlike the functions in SkUTF.h, these two functions do not take an array
-// length parameter. When possible, use SkUTF::NextUTF{8,16} instead.
-SkUnichar SkUTF8_NextUnichar(const char**);
-SkUnichar SkUTF16_NextUnichar(const uint16_t**);
-
-///////////////////////////////////////////////////////////////////////////////
-
-static inline bool SkUTF16_IsLeadingSurrogate(uint16_t c) { return ((c) & 0xFC00) == 0xD800; }
-
-static inline bool SkUTF16_IsTrailingSurrogate (uint16_t c) { return ((c) & 0xFC00) == 0xDC00; }
-
-///////////////////////////////////////////////////////////////////////////////
-
-static inline int SkUTFN_CountUnichars(SkTextEncoding enc, const void* utfN, size_t bytes) {
- switch (enc) {
- case SkTextEncoding::kUTF8: return SkUTF::CountUTF8((const char*)utfN, bytes);
- case SkTextEncoding::kUTF16: return SkUTF::CountUTF16((const uint16_t*)utfN, bytes);
- case SkTextEncoding::kUTF32: return SkUTF::CountUTF32((const int32_t*)utfN, bytes);
- default: SkDEBUGFAIL("unknown text encoding"); return -1;
- }
-}
-
-static inline SkUnichar SkUTFN_Next(SkTextEncoding enc, const void** ptr, const void* stop) {
- switch (enc) {
- case SkTextEncoding::kUTF8:
- return SkUTF::NextUTF8((const char**)ptr, (const char*)stop);
- case SkTextEncoding::kUTF16:
- return SkUTF::NextUTF16((const uint16_t**)ptr, (const uint16_t*)stop);
- case SkTextEncoding::kUTF32:
- return SkUTF::NextUTF32((const int32_t**)ptr, (const int32_t*)stop);
- default: SkDEBUGFAIL("unknown text encoding"); return -1;
- }
-}
-
-///////////////////////////////////////////////////////////////////////////////
-
namespace SkHexadecimalDigits {
extern const char gUpper[16]; // 0-9A-F
extern const char gLower[16]; // 0-9a-f
diff --git a/src/pdf/SkPDFMetadata.cpp b/src/pdf/SkPDFMetadata.cpp
index 5fec7f8..d37e720 100644
--- a/src/pdf/SkPDFMetadata.cpp
+++ b/src/pdf/SkPDFMetadata.cpp
@@ -11,6 +11,7 @@
#include "src/core/SkMD5.h"
#include "src/core/SkUtils.h"
#include "src/pdf/SkPDFTypes.h"
+#include "src/utils/SkUTF.h"
#include <utility>
diff --git a/src/pdf/SkPDFUtils.h b/src/pdf/SkPDFUtils.h
index d4c9845..6f165ed 100644
--- a/src/pdf/SkPDFUtils.h
+++ b/src/pdf/SkPDFUtils.h
@@ -15,6 +15,7 @@
#include "src/pdf/SkPDFTypes.h"
#include "src/shaders/SkShaderBase.h"
#include "src/utils/SkFloatToDecimal.h"
+#include "src/utils/SkUTF.h"
class SkMatrix;
class SkPDFArray;
diff --git a/src/ports/SkFontHost_win.cpp b/src/ports/SkFontHost_win.cpp
index 1b47a0b..7801eea 100644
--- a/src/ports/SkFontHost_win.cpp
+++ b/src/ports/SkFontHost_win.cpp
@@ -28,13 +28,13 @@
#include "src/core/SkMaskGamma.h"
#include "src/core/SkStrikeCache.h"
#include "src/core/SkTypefaceCache.h"
-#include "src/core/SkUtils.h"
#include "src/sfnt/SkOTTable_OS_2.h"
#include "src/sfnt/SkOTTable_maxp.h"
#include "src/sfnt/SkOTTable_name.h"
#include "src/sfnt/SkOTUtils.h"
#include "src/sfnt/SkSFNTHeader.h"
#include "src/utils/SkMatrix22.h"
+#include "src/utils/SkUTF.h"
#include "src/utils/win/SkHRESULT.h"
#include <tchar.h>
diff --git a/src/ports/SkTypeface_mac_ct.cpp b/src/ports/SkTypeface_mac_ct.cpp
index 34c4a9c..c770fd0 100644
--- a/src/ports/SkTypeface_mac_ct.cpp
+++ b/src/ports/SkTypeface_mac_ct.cpp
@@ -46,7 +46,6 @@
#include "src/core/SkMask.h"
#include "src/core/SkScalerContext.h"
#include "src/core/SkTypefaceCache.h"
-#include "src/core/SkUtils.h"
#include "src/ports/SkScalerContext_mac_ct.h"
#include "src/ports/SkTypeface_mac_ct.h"
#include "src/sfnt/SkOTTableTypes.h"
@@ -1094,7 +1093,7 @@
int extra = 0;
for (int i = 0; i < count; ++i) {
glyphs[i] = macGlyphs[i + extra];
- if (SkUTF16_IsLeadingSurrogate(src[i + extra])) {
+ if (SkUTF::IsLeadingSurrogateUTF16(src[i + extra])) {
++extra;
}
}
diff --git a/src/ports/SkTypeface_win_dw.cpp b/src/ports/SkTypeface_win_dw.cpp
index d15f431..525ddef 100644
--- a/src/ports/SkTypeface_win_dw.cpp
+++ b/src/ports/SkTypeface_win_dw.cpp
@@ -22,7 +22,6 @@
#include "src/core/SkFontDescriptor.h"
#include "src/core/SkFontStream.h"
#include "src/core/SkScalerContext.h"
-#include "src/core/SkUtils.h"
#include "src/ports/SkScalerContext_win_dw.h"
#include "src/ports/SkTypeface_win_dw.h"
#include "src/sfnt/SkOTTable_OS_2.h"
diff --git a/src/sfnt/SkOTTable_name.cpp b/src/sfnt/SkOTTable_name.cpp
index 4d93674..90d5955 100644
--- a/src/sfnt/SkOTTable_name.cpp
+++ b/src/sfnt/SkOTTable_name.cpp
@@ -7,11 +7,10 @@
#include "src/sfnt/SkOTTable_name.h"
-#include "include/private/SkTemplates.h"
#include "src/core/SkEndian.h"
#include "src/core/SkStringUtils.h"
#include "src/core/SkTSearch.h"
-#include "src/core/SkUtils.h"
+#include "src/utils/SkUTF.h"
static SkUnichar next_unichar_UTF16BE(const uint8_t** srcPtr, size_t* length) {
SkASSERT(srcPtr && *srcPtr && length);
@@ -27,10 +26,10 @@
*length -= sizeof(leading);
SkUnichar c = SkEndian_SwapBE16(leading);
- if (SkUTF16_IsTrailingSurrogate(c)) {
+ if (SkUTF::IsTrailingSurrogateUTF16(c)) {
return 0xFFFD;
}
- if (SkUTF16_IsLeadingSurrogate(c)) {
+ if (SkUTF::IsLeadingSurrogateUTF16(c)) {
uint16_t trailing;
if (*length < sizeof(trailing)) {
*length = 0;
@@ -38,7 +37,7 @@
}
memcpy(&trailing, *srcPtr, sizeof(trailing));
SkUnichar c2 = SkEndian_SwapBE16(trailing);
- if (!SkUTF16_IsTrailingSurrogate(c2)) {
+ if (!SkUTF::IsTrailingSurrogateUTF16(c2)) {
return 0xFFFD;
}
*srcPtr += sizeof(trailing);
diff --git a/src/utils/SkUTF.h b/src/utils/SkUTF.h
index 23344a4..7dad519 100644
--- a/src/utils/SkUTF.h
+++ b/src/utils/SkUTF.h
@@ -77,6 +77,19 @@
*/
SK_SPI int UTF16ToUTF8(char dst[], int dstCapacity, const uint16_t src[], size_t srcLength);
+/**
+ * Given a UTF-16 code point, returns true iff it is a leading surrogate.
+ * https://unicode.org/faq/utf_bom.html#utf16-2
+ */
+SK_SPI static inline bool IsLeadingSurrogateUTF16(uint16_t c) { return ((c) & 0xFC00) == 0xD800; }
+
+/**
+ * Given a UTF-16 code point, returns true iff it is a trailing surrogate.
+ * https://unicode.org/faq/utf_bom.html#utf16-2
+ */
+SK_SPI static inline bool IsTrailingSurrogateUTF16(uint16_t c) { return ((c) & 0xFC00) == 0xDC00; }
+
+
} // namespace SkUTF
#endif // SkUTF_DEFINED
diff --git a/tools/sk_app/mac/Window_mac.mm b/tools/sk_app/mac/Window_mac.mm
index 621cbee..9b948e4 100644
--- a/tools/sk_app/mac/Window_mac.mm
+++ b/tools/sk_app/mac/Window_mac.mm
@@ -7,7 +7,7 @@
#include <Carbon/Carbon.h>
-#include "src/core/SkUtils.h"
+#include "include/core/SkTypes.h"
#include "tools/sk_app/mac/WindowContextFactory_mac.h"
#include "tools/sk_app/mac/Window_mac.h"
#include "tools/skui/ModifierKey.h"
diff --git a/tools/sk_app/win/Window_win.cpp b/tools/sk_app/win/Window_win.cpp
index 353125a..73dc7de 100644
--- a/tools/sk_app/win/Window_win.cpp
+++ b/tools/sk_app/win/Window_win.cpp
@@ -13,7 +13,7 @@
#include <windows.h>
#include <windowsx.h>
-#include "src/core/SkUtils.h"
+#include "src/utils/SkUTF.h"
#include "tools/sk_app/WindowContext.h"
#include "tools/sk_app/win/WindowContextFactory_win.h"
#include "tools/skui/ModifierKey.h"
@@ -243,9 +243,9 @@
break;
case WM_CHAR: {
- const uint16_t* c = reinterpret_cast<uint16_t*>(&wParam);
- eventHandled = window->onChar(SkUTF16_NextUnichar(&c),
- get_modifiers(message, wParam, lParam));
+ const uint16_t* cPtr = reinterpret_cast<uint16_t*>(&wParam);
+ SkUnichar c = SkUTF::NextUTF16(&cPtr, cPtr + 2);
+ eventHandled = window->onChar(c, get_modifiers(message, wParam, lParam));
} break;
case WM_KEYDOWN: