14d6c458bSopenharmony_ci/* 24d6c458bSopenharmony_ci * Copyright (c) 2023 Huawei Device Co., Ltd. 34d6c458bSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 44d6c458bSopenharmony_ci * you may not use this file except in compliance with the License. 54d6c458bSopenharmony_ci * You may obtain a copy of the License at 64d6c458bSopenharmony_ci * 74d6c458bSopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 84d6c458bSopenharmony_ci * 94d6c458bSopenharmony_ci * Unless required by applicable law or agreed to in writing, software 104d6c458bSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 114d6c458bSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 124d6c458bSopenharmony_ci * See the License for the specific language governing permissions and 134d6c458bSopenharmony_ci * limitations under the License. 144d6c458bSopenharmony_ci */ 154d6c458bSopenharmony_ci 164d6c458bSopenharmony_ci#ifndef PLATFORM_UTIL_HELPER_H 174d6c458bSopenharmony_ci#define PLATFORM_UTIL_HELPER_H 184d6c458bSopenharmony_ci 194d6c458bSopenharmony_ci#include <codecvt> 204d6c458bSopenharmony_ci#include <locale> 214d6c458bSopenharmony_ci#include <string> 224d6c458bSopenharmony_ci 234d6c458bSopenharmony_ci#include "unicode/unistr.h" 244d6c458bSopenharmony_ci#include "unicode/ucnv.h" 254d6c458bSopenharmony_ci#include "napi/native_api.h" 264d6c458bSopenharmony_ci#include "napi/native_node_api.h" 274d6c458bSopenharmony_ci#include "tools/log.h" 284d6c458bSopenharmony_ci 294d6c458bSopenharmony_cinamespace Commonlibrary::Platform { 304d6c458bSopenharmony_ci constexpr uint32_t STATE_BREAK_ZERO = 0; 314d6c458bSopenharmony_ci constexpr uint32_t STATE_CONTINUE_ONE = 1; 324d6c458bSopenharmony_ci constexpr uint32_t STATE_OTHER_TWO = 2; 334d6c458bSopenharmony_ci constexpr uint8_t HIGER_4_BITS_MASK = 0xF0; 344d6c458bSopenharmony_ci constexpr uint8_t FOUR_BYTES_STYLE = 0xF0; 354d6c458bSopenharmony_ci constexpr uint8_t THREE_BYTES_STYLE = 0xE0; 364d6c458bSopenharmony_ci constexpr uint8_t TWO_BYTES_STYLE1 = 0xD0; 374d6c458bSopenharmony_ci constexpr uint8_t TWO_BYTES_STYLE2 = 0xC0; 384d6c458bSopenharmony_ci constexpr uint32_t LOWER_10_BITS_MASK = 0x03FFU; 394d6c458bSopenharmony_ci constexpr uint8_t LOWER_6_BITS_MASK = 0x3FU; 404d6c458bSopenharmony_ci constexpr uint8_t LOWER_5_BITS_MASK = 0x1FU; 414d6c458bSopenharmony_ci constexpr uint8_t LOWER_4_BITS_MASK = 0x0FU; 424d6c458bSopenharmony_ci constexpr uint8_t LOWER_3_BITS_MASK = 0x07U; 434d6c458bSopenharmony_ci constexpr uint32_t HIGH_AGENT_MASK = 0xD800U; 444d6c458bSopenharmony_ci constexpr uint32_t LOW_AGENT_MASK = 0xDC00U; 454d6c458bSopenharmony_ci constexpr uint32_t UTF8_VALID_BITS = 6; 464d6c458bSopenharmony_ci constexpr uint32_t UTF16_SPECIAL_VALUE = 0x10000; 474d6c458bSopenharmony_ci struct TextEcodeInfo { 484d6c458bSopenharmony_ci TextEcodeInfo(napi_env napiEnv, napi_value srcValue, std::string encodingStr): env(napiEnv), 494d6c458bSopenharmony_ci src(srcValue), 504d6c458bSopenharmony_ci encoding(encodingStr) 514d6c458bSopenharmony_ci {} 524d6c458bSopenharmony_ci napi_env env; 534d6c458bSopenharmony_ci napi_value src; 544d6c458bSopenharmony_ci std::string encoding; 554d6c458bSopenharmony_ci }; 564d6c458bSopenharmony_ci struct OutBufferInfo { 574d6c458bSopenharmony_ci OutBufferInfo(size_t length, std::string inputStr, size_t bufferLength, size_t cnt, std::string bufferRst) 584d6c458bSopenharmony_ci : writedSize(length), 594d6c458bSopenharmony_ci rstBuffer(inputStr), 604d6c458bSopenharmony_ci rstBufferLength(bufferLength), 614d6c458bSopenharmony_ci cntSize(cnt), 624d6c458bSopenharmony_ci bufferResult(bufferRst) 634d6c458bSopenharmony_ci {} 644d6c458bSopenharmony_ci size_t writedSize; 654d6c458bSopenharmony_ci std::string rstBuffer; 664d6c458bSopenharmony_ci size_t rstBufferLength; 674d6c458bSopenharmony_ci size_t cntSize; 684d6c458bSopenharmony_ci std::string bufferResult; 694d6c458bSopenharmony_ci }; 704d6c458bSopenharmony_ci struct InputBufferInfo { 714d6c458bSopenharmony_ci InputBufferInfo(std::string InputEncoding, size_t charSize): encoding(InputEncoding), 724d6c458bSopenharmony_ci inputSize(charSize) 734d6c458bSopenharmony_ci {} 744d6c458bSopenharmony_ci std::string encoding; 754d6c458bSopenharmony_ci size_t inputSize; 764d6c458bSopenharmony_ci }; 774d6c458bSopenharmony_ci UConverter* CreateConverter(const std::string& encStr_, UErrorCode& codeflag); 784d6c458bSopenharmony_ci std::string ConvertToString(UChar* uchar, size_t length); 794d6c458bSopenharmony_ci void EncodeIntoChinese(napi_env env, napi_value src, std::string encoding, std::string& buffer); 804d6c458bSopenharmony_ci std::string UnicodeConversion(std::string encoding, char16_t* originalBuffer, size_t inputSize); 814d6c458bSopenharmony_ci void EncodeToUtf8(TextEcodeInfo encodeInfo, char* writeResult, uint32_t* written, size_t length, int32_t* nchars); 824d6c458bSopenharmony_ci void EncodeConversion(napi_env env, napi_value src, napi_value* arrayBuffer, size_t &outLens, 834d6c458bSopenharmony_ci std::string encoding); 844d6c458bSopenharmony_ci void FreedMemory(char *data); 854d6c458bSopenharmony_ci int GetMaxByteSize(std::string encoding); 864d6c458bSopenharmony_ci bool IsOneByte(uint8_t u8Char); 874d6c458bSopenharmony_ci std::u16string Utf8ToUtf16BE(const std::string &u8Str, bool *ok = nullptr); 884d6c458bSopenharmony_ci std::u16string Utf16BEToLE(const std::u16string &wstr); 894d6c458bSopenharmony_ci void OtherEncode(napi_env env, napi_value src, napi_value* arrayBuffer, size_t &outLens, std::string encoding); 904d6c458bSopenharmony_ci std::u16string EncodeUtf16BE(napi_env env, napi_value src); 914d6c458bSopenharmony_ci void OtherEncodeUtf8(TextEcodeInfo encodeInfo, char* writeResult, uint32_t* written, size_t length, 924d6c458bSopenharmony_ci int32_t* nchars); 934d6c458bSopenharmony_ci void EncodeTo16BE(TextEcodeInfo encodeInfo, char* writeResult, uint32_t* written, size_t length, int32_t* nchars); 944d6c458bSopenharmony_ci void FreedMemory(char16_t *&data); 954d6c458bSopenharmony_ci char16_t *ApplyMemory(const size_t &inputSize); 964d6c458bSopenharmony_ci} // namespace Commonlibrary::Platform 974d6c458bSopenharmony_ci#endif // PLATFORM_UTIL_HELPER_H