| /* |
| * Copyright 2022 Google LLC |
| * |
| * Use of this source code is governed by a BSD-style license that can be |
| * found in the LICENSE file. |
| */ |
| |
| #include "modules/skunicode/include/SkUnicode.h" |
| |
| #include "include/private/SkTemplates.h" |
| |
| SkString SkUnicode::convertUtf16ToUtf8(const char16_t* utf16, int utf16Units) { |
| |
| int utf8Units = SkUTF::UTF16ToUTF8(nullptr, 0, (uint16_t*)utf16, utf16Units); |
| if (utf8Units < 0) { |
| SkDEBUGF("Convert error: Invalid utf16 input"); |
| return SkString(); |
| } |
| SkAutoTArray<char> utf8(utf8Units); |
| SkDEBUGCODE(int dstLen =) SkUTF::UTF16ToUTF8(utf8.data(), utf8Units, (uint16_t*)utf16, utf16Units); |
| SkASSERT(dstLen == utf8Units); |
| |
| return SkString(utf8.data(), utf8Units); |
| } |
| |
| SkString SkUnicode::convertUtf16ToUtf8(const std::u16string& utf16) { |
| return convertUtf16ToUtf8(utf16.c_str(), utf16.size()); |
| } |
| |
| std::u16string SkUnicode::convertUtf8ToUtf16(const char* utf8, int utf8Units) { |
| |
| int utf16Units = SkUTF::UTF8ToUTF16(nullptr, 0, utf8, utf8Units); |
| if (utf16Units < 0) { |
| SkDEBUGF("Convert error: Invalid utf8 input"); |
| return std::u16string(); |
| } |
| |
| SkAutoTArray<uint16_t> utf16(utf16Units); |
| SkDEBUGCODE(int dstLen =) SkUTF::UTF8ToUTF16(utf16.data(), utf16Units, utf8, utf8Units); |
| SkASSERT(dstLen == utf16Units); |
| |
| return std::u16string((char16_t *)utf16.data(), utf16Units); |
| } |
| |
| std::u16string SkUnicode::convertUtf8ToUtf16(const SkString& utf8) { |
| return convertUtf8ToUtf16(utf8.c_str(), utf8.size()); |
| } |