19596a2c1Sopenharmony_ci/* 29596a2c1Sopenharmony_ci * Copyright (c) 2021-2022 Huawei Device Co., Ltd. 39596a2c1Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 49596a2c1Sopenharmony_ci * you may not use this file except in compliance with the License. 59596a2c1Sopenharmony_ci * You may obtain a copy of the License at 69596a2c1Sopenharmony_ci * 79596a2c1Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 89596a2c1Sopenharmony_ci * 99596a2c1Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 109596a2c1Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 119596a2c1Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 129596a2c1Sopenharmony_ci * See the License for the specific language governing permissions and 139596a2c1Sopenharmony_ci * limitations under the License. 149596a2c1Sopenharmony_ci */ 159596a2c1Sopenharmony_ci#include "character.h" 169596a2c1Sopenharmony_ci#include "error_util.h" 179596a2c1Sopenharmony_ci#include "i18n_hilog.h" 189596a2c1Sopenharmony_ci#include "i18n_unicode_addon.h" 199596a2c1Sopenharmony_ci#include "js_utils.h" 209596a2c1Sopenharmony_ci#include "variable_convertor.h" 219596a2c1Sopenharmony_ci 229596a2c1Sopenharmony_cinamespace OHOS { 239596a2c1Sopenharmony_cinamespace Global { 249596a2c1Sopenharmony_cinamespace I18n { 259596a2c1Sopenharmony_ciI18nUnicodeAddon::I18nUnicodeAddon() {} 269596a2c1Sopenharmony_ci 279596a2c1Sopenharmony_ciI18nUnicodeAddon::~I18nUnicodeAddon() {} 289596a2c1Sopenharmony_ci 299596a2c1Sopenharmony_civoid I18nUnicodeAddon::Destructor(napi_env env, void *nativeObject, void *hint) 309596a2c1Sopenharmony_ci{ 319596a2c1Sopenharmony_ci if (!nativeObject) { 329596a2c1Sopenharmony_ci return; 339596a2c1Sopenharmony_ci } 349596a2c1Sopenharmony_ci delete reinterpret_cast<I18nUnicodeAddon *>(nativeObject); 359596a2c1Sopenharmony_ci nativeObject = nullptr; 369596a2c1Sopenharmony_ci} 379596a2c1Sopenharmony_ci 389596a2c1Sopenharmony_cinapi_value I18nUnicodeAddon::InitI18nUnicode(napi_env env, napi_value exports) 399596a2c1Sopenharmony_ci{ 409596a2c1Sopenharmony_ci napi_property_descriptor properties[] = { 419596a2c1Sopenharmony_ci DECLARE_NAPI_STATIC_FUNCTION("isDigit", IsDigitAddon), 429596a2c1Sopenharmony_ci DECLARE_NAPI_STATIC_FUNCTION("isSpaceChar", IsSpaceCharAddon), 439596a2c1Sopenharmony_ci DECLARE_NAPI_STATIC_FUNCTION("isWhitespace", IsWhiteSpaceAddon), 449596a2c1Sopenharmony_ci DECLARE_NAPI_STATIC_FUNCTION("isRTL", IsRTLCharacterAddon), 459596a2c1Sopenharmony_ci DECLARE_NAPI_STATIC_FUNCTION("isIdeograph", IsIdeoGraphicAddon), 469596a2c1Sopenharmony_ci DECLARE_NAPI_STATIC_FUNCTION("isLetter", IsLetterAddon), 479596a2c1Sopenharmony_ci DECLARE_NAPI_STATIC_FUNCTION("isLowerCase", IsLowerCaseAddon), 489596a2c1Sopenharmony_ci DECLARE_NAPI_STATIC_FUNCTION("isUpperCase", IsUpperCaseAddon), 499596a2c1Sopenharmony_ci DECLARE_NAPI_STATIC_FUNCTION("getType", GetTypeAddon), 509596a2c1Sopenharmony_ci }; 519596a2c1Sopenharmony_ci napi_value constructor = nullptr; 529596a2c1Sopenharmony_ci napi_status status = napi_define_class(env, "Unicode", NAPI_AUTO_LENGTH, JSUtils::DefaultConstructor, nullptr, 539596a2c1Sopenharmony_ci sizeof(properties) / sizeof(napi_property_descriptor), properties, &constructor); 549596a2c1Sopenharmony_ci if (status != napi_ok) { 559596a2c1Sopenharmony_ci HILOG_ERROR_I18N("InitI18nUnicode: Define class failed when InitUnicode."); 569596a2c1Sopenharmony_ci return nullptr; 579596a2c1Sopenharmony_ci } 589596a2c1Sopenharmony_ci 599596a2c1Sopenharmony_ci status = napi_set_named_property(env, exports, "Unicode", constructor); 609596a2c1Sopenharmony_ci if (status != napi_ok) { 619596a2c1Sopenharmony_ci HILOG_ERROR_I18N("InitI18nUnicode: Set property failed when InitUnicode."); 629596a2c1Sopenharmony_ci return nullptr; 639596a2c1Sopenharmony_ci } 649596a2c1Sopenharmony_ci return exports; 659596a2c1Sopenharmony_ci} 669596a2c1Sopenharmony_ci 679596a2c1Sopenharmony_cinapi_value I18nUnicodeAddon::InitCharacter(napi_env env, napi_value exports) 689596a2c1Sopenharmony_ci{ 699596a2c1Sopenharmony_ci napi_status status = napi_ok; 709596a2c1Sopenharmony_ci napi_property_descriptor properties[] = { 719596a2c1Sopenharmony_ci DECLARE_NAPI_FUNCTION("isDigit", IsDigitAddon), 729596a2c1Sopenharmony_ci DECLARE_NAPI_FUNCTION("isSpaceChar", IsSpaceCharAddon), 739596a2c1Sopenharmony_ci DECLARE_NAPI_FUNCTION("isWhitespace", IsWhiteSpaceAddon), 749596a2c1Sopenharmony_ci DECLARE_NAPI_FUNCTION("isRTL", IsRTLCharacterAddon), 759596a2c1Sopenharmony_ci DECLARE_NAPI_FUNCTION("isIdeograph", IsIdeoGraphicAddon), 769596a2c1Sopenharmony_ci DECLARE_NAPI_FUNCTION("isLetter", IsLetterAddon), 779596a2c1Sopenharmony_ci DECLARE_NAPI_FUNCTION("isLowerCase", IsLowerCaseAddon), 789596a2c1Sopenharmony_ci DECLARE_NAPI_FUNCTION("isUpperCase", IsUpperCaseAddon), 799596a2c1Sopenharmony_ci DECLARE_NAPI_FUNCTION("getType", GetTypeAddon) 809596a2c1Sopenharmony_ci }; 819596a2c1Sopenharmony_ci 829596a2c1Sopenharmony_ci napi_value constructor = nullptr; 839596a2c1Sopenharmony_ci status = napi_define_class(env, "Character", NAPI_AUTO_LENGTH, ObjectConstructor, nullptr, 849596a2c1Sopenharmony_ci sizeof(properties) / sizeof(napi_property_descriptor), properties, &constructor); 859596a2c1Sopenharmony_ci if (status != napi_ok) { 869596a2c1Sopenharmony_ci HILOG_ERROR_I18N("Define class failed when InitCharacter"); 879596a2c1Sopenharmony_ci return nullptr; 889596a2c1Sopenharmony_ci } 899596a2c1Sopenharmony_ci 909596a2c1Sopenharmony_ci status = napi_set_named_property(env, exports, "Character", constructor); 919596a2c1Sopenharmony_ci if (status != napi_ok) { 929596a2c1Sopenharmony_ci HILOG_ERROR_I18N("Set property failed when InitCharacter"); 939596a2c1Sopenharmony_ci return nullptr; 949596a2c1Sopenharmony_ci } 959596a2c1Sopenharmony_ci return exports; 969596a2c1Sopenharmony_ci} 979596a2c1Sopenharmony_ci 989596a2c1Sopenharmony_cinapi_value I18nUnicodeAddon::IsDigitAddon(napi_env env, napi_callback_info info) 999596a2c1Sopenharmony_ci{ 1009596a2c1Sopenharmony_ci size_t argc = 1; 1019596a2c1Sopenharmony_ci napi_value argv[1] = { 0 }; 1029596a2c1Sopenharmony_ci napi_value thisVar = nullptr; 1039596a2c1Sopenharmony_ci void *data = nullptr; 1049596a2c1Sopenharmony_ci napi_status status = napi_get_cb_info(env, info, &argc, argv, &thisVar, &data); 1059596a2c1Sopenharmony_ci if (status != napi_ok) { 1069596a2c1Sopenharmony_ci return nullptr; 1079596a2c1Sopenharmony_ci } 1089596a2c1Sopenharmony_ci napi_valuetype valueType = napi_valuetype::napi_undefined; 1099596a2c1Sopenharmony_ci napi_typeof(env, argv[0], &valueType); 1109596a2c1Sopenharmony_ci if (valueType != napi_valuetype::napi_string) { 1119596a2c1Sopenharmony_ci HILOG_ERROR_I18N("IsDigitAddon: Parameter type does not match"); 1129596a2c1Sopenharmony_ci return nullptr; 1139596a2c1Sopenharmony_ci } 1149596a2c1Sopenharmony_ci int32_t code = 0; 1159596a2c1Sopenharmony_ci std::string character = VariableConvertor::GetString(env, argv[0], code); 1169596a2c1Sopenharmony_ci if (code) { 1179596a2c1Sopenharmony_ci return nullptr; 1189596a2c1Sopenharmony_ci } 1199596a2c1Sopenharmony_ci bool isDigit = IsDigit(character); 1209596a2c1Sopenharmony_ci napi_value result = nullptr; 1219596a2c1Sopenharmony_ci status = napi_get_boolean(env, isDigit, &result); 1229596a2c1Sopenharmony_ci if (status != napi_ok) { 1239596a2c1Sopenharmony_ci HILOG_ERROR_I18N("IsDigitAddon: Create isDigit boolean value failed"); 1249596a2c1Sopenharmony_ci return nullptr; 1259596a2c1Sopenharmony_ci } 1269596a2c1Sopenharmony_ci return result; 1279596a2c1Sopenharmony_ci} 1289596a2c1Sopenharmony_ci 1299596a2c1Sopenharmony_cinapi_value I18nUnicodeAddon::IsSpaceCharAddon(napi_env env, napi_callback_info info) 1309596a2c1Sopenharmony_ci{ 1319596a2c1Sopenharmony_ci size_t argc = 1; 1329596a2c1Sopenharmony_ci napi_value argv[1] = { 0 }; 1339596a2c1Sopenharmony_ci napi_value thisVar = nullptr; 1349596a2c1Sopenharmony_ci void *data = nullptr; 1359596a2c1Sopenharmony_ci napi_status status = napi_get_cb_info(env, info, &argc, argv, &thisVar, &data); 1369596a2c1Sopenharmony_ci if (status != napi_ok) { 1379596a2c1Sopenharmony_ci return nullptr; 1389596a2c1Sopenharmony_ci } 1399596a2c1Sopenharmony_ci napi_valuetype valueType = napi_valuetype::napi_undefined; 1409596a2c1Sopenharmony_ci napi_typeof(env, argv[0], &valueType); 1419596a2c1Sopenharmony_ci if (valueType != napi_valuetype::napi_string) { 1429596a2c1Sopenharmony_ci HILOG_ERROR_I18N("IsSpaceCharAddon: Parameter type does not match"); 1439596a2c1Sopenharmony_ci return nullptr; 1449596a2c1Sopenharmony_ci } 1459596a2c1Sopenharmony_ci int32_t code = 0; 1469596a2c1Sopenharmony_ci std::string character = VariableConvertor::GetString(env, argv[0], code); 1479596a2c1Sopenharmony_ci if (code) { 1489596a2c1Sopenharmony_ci return nullptr; 1499596a2c1Sopenharmony_ci } 1509596a2c1Sopenharmony_ci bool isSpaceChar = IsSpaceChar(character); 1519596a2c1Sopenharmony_ci napi_value result = nullptr; 1529596a2c1Sopenharmony_ci status = napi_get_boolean(env, isSpaceChar, &result); 1539596a2c1Sopenharmony_ci if (status != napi_ok) { 1549596a2c1Sopenharmony_ci HILOG_ERROR_I18N("IsSpaceCharAddon: Create boolean value failed"); 1559596a2c1Sopenharmony_ci return nullptr; 1569596a2c1Sopenharmony_ci } 1579596a2c1Sopenharmony_ci return result; 1589596a2c1Sopenharmony_ci} 1599596a2c1Sopenharmony_ci 1609596a2c1Sopenharmony_cinapi_value I18nUnicodeAddon::IsWhiteSpaceAddon(napi_env env, napi_callback_info info) 1619596a2c1Sopenharmony_ci{ 1629596a2c1Sopenharmony_ci size_t argc = 1; 1639596a2c1Sopenharmony_ci napi_value argv[1] = { 0 }; 1649596a2c1Sopenharmony_ci napi_value thisVar = nullptr; 1659596a2c1Sopenharmony_ci void *data = nullptr; 1669596a2c1Sopenharmony_ci napi_status status = napi_get_cb_info(env, info, &argc, argv, &thisVar, &data); 1679596a2c1Sopenharmony_ci if (status != napi_ok) { 1689596a2c1Sopenharmony_ci return nullptr; 1699596a2c1Sopenharmony_ci } 1709596a2c1Sopenharmony_ci napi_valuetype valueType = napi_valuetype::napi_undefined; 1719596a2c1Sopenharmony_ci napi_typeof(env, argv[0], &valueType); 1729596a2c1Sopenharmony_ci if (valueType != napi_valuetype::napi_string) { 1739596a2c1Sopenharmony_ci HILOG_ERROR_I18N("IsWhiteSpaceAddon: Parameter type does not match"); 1749596a2c1Sopenharmony_ci return nullptr; 1759596a2c1Sopenharmony_ci } 1769596a2c1Sopenharmony_ci int32_t code = 0; 1779596a2c1Sopenharmony_ci std::string character = VariableConvertor::GetString(env, argv[0], code); 1789596a2c1Sopenharmony_ci if (code) { 1799596a2c1Sopenharmony_ci return nullptr; 1809596a2c1Sopenharmony_ci } 1819596a2c1Sopenharmony_ci bool isWhiteSpace = IsWhiteSpace(character); 1829596a2c1Sopenharmony_ci napi_value result = nullptr; 1839596a2c1Sopenharmony_ci status = napi_get_boolean(env, isWhiteSpace, &result); 1849596a2c1Sopenharmony_ci if (status != napi_ok) { 1859596a2c1Sopenharmony_ci HILOG_ERROR_I18N("IsWhiteSpaceAddon: Create boolean value failed"); 1869596a2c1Sopenharmony_ci return nullptr; 1879596a2c1Sopenharmony_ci } 1889596a2c1Sopenharmony_ci return result; 1899596a2c1Sopenharmony_ci} 1909596a2c1Sopenharmony_ci 1919596a2c1Sopenharmony_cinapi_value I18nUnicodeAddon::IsRTLCharacterAddon(napi_env env, napi_callback_info info) 1929596a2c1Sopenharmony_ci{ 1939596a2c1Sopenharmony_ci size_t argc = 1; 1949596a2c1Sopenharmony_ci napi_value argv[1] = { 0 }; 1959596a2c1Sopenharmony_ci napi_value thisVar = nullptr; 1969596a2c1Sopenharmony_ci void *data = nullptr; 1979596a2c1Sopenharmony_ci napi_status status = napi_get_cb_info(env, info, &argc, argv, &thisVar, &data); 1989596a2c1Sopenharmony_ci if (status != napi_ok) { 1999596a2c1Sopenharmony_ci return nullptr; 2009596a2c1Sopenharmony_ci } 2019596a2c1Sopenharmony_ci napi_valuetype valueType = napi_valuetype::napi_undefined; 2029596a2c1Sopenharmony_ci napi_typeof(env, argv[0], &valueType); 2039596a2c1Sopenharmony_ci if (valueType != napi_valuetype::napi_string) { 2049596a2c1Sopenharmony_ci HILOG_ERROR_I18N("IsRTLCharacterAddon: Parameter type does not match"); 2059596a2c1Sopenharmony_ci return nullptr; 2069596a2c1Sopenharmony_ci } 2079596a2c1Sopenharmony_ci int32_t code = 0; 2089596a2c1Sopenharmony_ci std::string character = VariableConvertor::GetString(env, argv[0], code); 2099596a2c1Sopenharmony_ci if (code) { 2109596a2c1Sopenharmony_ci return nullptr; 2119596a2c1Sopenharmony_ci } 2129596a2c1Sopenharmony_ci bool isRTLCharacter = IsRTLCharacter(character); 2139596a2c1Sopenharmony_ci napi_value result = nullptr; 2149596a2c1Sopenharmony_ci status = napi_get_boolean(env, isRTLCharacter, &result); 2159596a2c1Sopenharmony_ci if (status != napi_ok) { 2169596a2c1Sopenharmony_ci HILOG_ERROR_I18N("IsRTLCharacterAddon: Create boolean value failed"); 2179596a2c1Sopenharmony_ci return nullptr; 2189596a2c1Sopenharmony_ci } 2199596a2c1Sopenharmony_ci return result; 2209596a2c1Sopenharmony_ci} 2219596a2c1Sopenharmony_ci 2229596a2c1Sopenharmony_cinapi_value I18nUnicodeAddon::IsIdeoGraphicAddon(napi_env env, napi_callback_info info) 2239596a2c1Sopenharmony_ci{ 2249596a2c1Sopenharmony_ci size_t argc = 1; 2259596a2c1Sopenharmony_ci napi_value argv[1] = { 0 }; 2269596a2c1Sopenharmony_ci napi_value thisVar = nullptr; 2279596a2c1Sopenharmony_ci void *data = nullptr; 2289596a2c1Sopenharmony_ci napi_status status = napi_get_cb_info(env, info, &argc, argv, &thisVar, &data); 2299596a2c1Sopenharmony_ci if (status != napi_ok) { 2309596a2c1Sopenharmony_ci return nullptr; 2319596a2c1Sopenharmony_ci } 2329596a2c1Sopenharmony_ci napi_valuetype valueType = napi_valuetype::napi_undefined; 2339596a2c1Sopenharmony_ci napi_typeof(env, argv[0], &valueType); 2349596a2c1Sopenharmony_ci if (valueType != napi_valuetype::napi_string) { 2359596a2c1Sopenharmony_ci HILOG_ERROR_I18N("IsIdeoGraphicAddon: Parameter type does not match"); 2369596a2c1Sopenharmony_ci return nullptr; 2379596a2c1Sopenharmony_ci } 2389596a2c1Sopenharmony_ci int32_t code = 0; 2399596a2c1Sopenharmony_ci std::string character = VariableConvertor::GetString(env, argv[0], code); 2409596a2c1Sopenharmony_ci if (code) { 2419596a2c1Sopenharmony_ci return nullptr; 2429596a2c1Sopenharmony_ci } 2439596a2c1Sopenharmony_ci bool isIdeoGraphic = IsIdeoGraphic(character); 2449596a2c1Sopenharmony_ci napi_value result = nullptr; 2459596a2c1Sopenharmony_ci status = napi_get_boolean(env, isIdeoGraphic, &result); 2469596a2c1Sopenharmony_ci if (status != napi_ok) { 2479596a2c1Sopenharmony_ci HILOG_ERROR_I18N("IsIdeoGraphicAddon: Create boolean value failed"); 2489596a2c1Sopenharmony_ci return nullptr; 2499596a2c1Sopenharmony_ci } 2509596a2c1Sopenharmony_ci return result; 2519596a2c1Sopenharmony_ci} 2529596a2c1Sopenharmony_ci 2539596a2c1Sopenharmony_cinapi_value I18nUnicodeAddon::IsLetterAddon(napi_env env, napi_callback_info info) 2549596a2c1Sopenharmony_ci{ 2559596a2c1Sopenharmony_ci size_t argc = 1; 2569596a2c1Sopenharmony_ci napi_value argv[1] = { 0 }; 2579596a2c1Sopenharmony_ci napi_value thisVar = nullptr; 2589596a2c1Sopenharmony_ci void *data = nullptr; 2599596a2c1Sopenharmony_ci napi_status status = napi_get_cb_info(env, info, &argc, argv, &thisVar, &data); 2609596a2c1Sopenharmony_ci if (status != napi_ok) { 2619596a2c1Sopenharmony_ci return nullptr; 2629596a2c1Sopenharmony_ci } 2639596a2c1Sopenharmony_ci napi_valuetype valueType = napi_valuetype::napi_undefined; 2649596a2c1Sopenharmony_ci napi_typeof(env, argv[0], &valueType); 2659596a2c1Sopenharmony_ci if (valueType != napi_valuetype::napi_string) { 2669596a2c1Sopenharmony_ci HILOG_ERROR_I18N("IsLetterAddon: Parameter type does not match"); 2679596a2c1Sopenharmony_ci return nullptr; 2689596a2c1Sopenharmony_ci } 2699596a2c1Sopenharmony_ci int32_t code = 0; 2709596a2c1Sopenharmony_ci std::string character = VariableConvertor::GetString(env, argv[0], code); 2719596a2c1Sopenharmony_ci if (code) { 2729596a2c1Sopenharmony_ci return nullptr; 2739596a2c1Sopenharmony_ci } 2749596a2c1Sopenharmony_ci bool isLetter = IsLetter(character); 2759596a2c1Sopenharmony_ci napi_value result = nullptr; 2769596a2c1Sopenharmony_ci status = napi_get_boolean(env, isLetter, &result); 2779596a2c1Sopenharmony_ci if (status != napi_ok) { 2789596a2c1Sopenharmony_ci HILOG_ERROR_I18N("IsLetterAddon: Create boolean value failed"); 2799596a2c1Sopenharmony_ci return nullptr; 2809596a2c1Sopenharmony_ci } 2819596a2c1Sopenharmony_ci return result; 2829596a2c1Sopenharmony_ci} 2839596a2c1Sopenharmony_ci 2849596a2c1Sopenharmony_cinapi_value I18nUnicodeAddon::IsLowerCaseAddon(napi_env env, napi_callback_info info) 2859596a2c1Sopenharmony_ci{ 2869596a2c1Sopenharmony_ci size_t argc = 1; 2879596a2c1Sopenharmony_ci napi_value argv[1] = { 0 }; 2889596a2c1Sopenharmony_ci napi_value thisVar = nullptr; 2899596a2c1Sopenharmony_ci void *data = nullptr; 2909596a2c1Sopenharmony_ci napi_status status = napi_get_cb_info(env, info, &argc, argv, &thisVar, &data); 2919596a2c1Sopenharmony_ci if (status != napi_ok) { 2929596a2c1Sopenharmony_ci return nullptr; 2939596a2c1Sopenharmony_ci } 2949596a2c1Sopenharmony_ci napi_valuetype valueType = napi_valuetype::napi_undefined; 2959596a2c1Sopenharmony_ci napi_typeof(env, argv[0], &valueType); 2969596a2c1Sopenharmony_ci if (valueType != napi_valuetype::napi_string) { 2979596a2c1Sopenharmony_ci HILOG_ERROR_I18N("IsLowerCaseAddon: Parameter type does not match"); 2989596a2c1Sopenharmony_ci return nullptr; 2999596a2c1Sopenharmony_ci } 3009596a2c1Sopenharmony_ci int32_t code = 0; 3019596a2c1Sopenharmony_ci std::string character = VariableConvertor::GetString(env, argv[0], code); 3029596a2c1Sopenharmony_ci if (code) { 3039596a2c1Sopenharmony_ci return nullptr; 3049596a2c1Sopenharmony_ci } 3059596a2c1Sopenharmony_ci bool isLowerCase = IsLowerCase(character); 3069596a2c1Sopenharmony_ci napi_value result = nullptr; 3079596a2c1Sopenharmony_ci status = napi_get_boolean(env, isLowerCase, &result); 3089596a2c1Sopenharmony_ci if (status != napi_ok) { 3099596a2c1Sopenharmony_ci HILOG_ERROR_I18N("IsLowerCaseAddon: Create isLowerCase boolean value failed"); 3109596a2c1Sopenharmony_ci return nullptr; 3119596a2c1Sopenharmony_ci } 3129596a2c1Sopenharmony_ci return result; 3139596a2c1Sopenharmony_ci} 3149596a2c1Sopenharmony_ci 3159596a2c1Sopenharmony_cinapi_value I18nUnicodeAddon::IsUpperCaseAddon(napi_env env, napi_callback_info info) 3169596a2c1Sopenharmony_ci{ 3179596a2c1Sopenharmony_ci size_t argc = 1; 3189596a2c1Sopenharmony_ci napi_value argv[1] = { 0 }; 3199596a2c1Sopenharmony_ci napi_value thisVar = nullptr; 3209596a2c1Sopenharmony_ci void *data = nullptr; 3219596a2c1Sopenharmony_ci napi_status status = napi_get_cb_info(env, info, &argc, argv, &thisVar, &data); 3229596a2c1Sopenharmony_ci if (status != napi_ok) { 3239596a2c1Sopenharmony_ci return nullptr; 3249596a2c1Sopenharmony_ci } 3259596a2c1Sopenharmony_ci napi_valuetype valueType = napi_valuetype::napi_undefined; 3269596a2c1Sopenharmony_ci napi_typeof(env, argv[0], &valueType); 3279596a2c1Sopenharmony_ci if (valueType != napi_valuetype::napi_string) { 3289596a2c1Sopenharmony_ci HILOG_ERROR_I18N("IsUpperCaseAddon: Parameter type does not match"); 3299596a2c1Sopenharmony_ci return nullptr; 3309596a2c1Sopenharmony_ci } 3319596a2c1Sopenharmony_ci int32_t code = 0; 3329596a2c1Sopenharmony_ci std::string character = VariableConvertor::GetString(env, argv[0], code); 3339596a2c1Sopenharmony_ci if (code) { 3349596a2c1Sopenharmony_ci return nullptr; 3359596a2c1Sopenharmony_ci } 3369596a2c1Sopenharmony_ci bool isUpperCase = IsUpperCase(character); 3379596a2c1Sopenharmony_ci napi_value result = nullptr; 3389596a2c1Sopenharmony_ci status = napi_get_boolean(env, isUpperCase, &result); 3399596a2c1Sopenharmony_ci if (status != napi_ok) { 3409596a2c1Sopenharmony_ci HILOG_ERROR_I18N("IsUpperCaseAddon: Create boolean value failed"); 3419596a2c1Sopenharmony_ci return nullptr; 3429596a2c1Sopenharmony_ci } 3439596a2c1Sopenharmony_ci return result; 3449596a2c1Sopenharmony_ci} 3459596a2c1Sopenharmony_ci 3469596a2c1Sopenharmony_cinapi_value I18nUnicodeAddon::GetTypeAddon(napi_env env, napi_callback_info info) 3479596a2c1Sopenharmony_ci{ 3489596a2c1Sopenharmony_ci size_t argc = 1; 3499596a2c1Sopenharmony_ci napi_value argv[1] = { 0 }; 3509596a2c1Sopenharmony_ci napi_value thisVar = nullptr; 3519596a2c1Sopenharmony_ci void *data = nullptr; 3529596a2c1Sopenharmony_ci napi_status status = napi_get_cb_info(env, info, &argc, argv, &thisVar, &data); 3539596a2c1Sopenharmony_ci if (status != napi_ok) { 3549596a2c1Sopenharmony_ci return nullptr; 3559596a2c1Sopenharmony_ci } 3569596a2c1Sopenharmony_ci napi_valuetype valueType = napi_valuetype::napi_undefined; 3579596a2c1Sopenharmony_ci napi_typeof(env, argv[0], &valueType); 3589596a2c1Sopenharmony_ci if (valueType != napi_valuetype::napi_string) { 3599596a2c1Sopenharmony_ci HILOG_ERROR_I18N("GetTypeAddon: Parameter type does not match"); 3609596a2c1Sopenharmony_ci return nullptr; 3619596a2c1Sopenharmony_ci } 3629596a2c1Sopenharmony_ci int32_t code = 0; 3639596a2c1Sopenharmony_ci std::string character = VariableConvertor::GetString(env, argv[0], code); 3649596a2c1Sopenharmony_ci if (code) { 3659596a2c1Sopenharmony_ci return nullptr; 3669596a2c1Sopenharmony_ci } 3679596a2c1Sopenharmony_ci std::string type = GetType(character); 3689596a2c1Sopenharmony_ci napi_value result = nullptr; 3699596a2c1Sopenharmony_ci status = napi_create_string_utf8(env, type.c_str(), NAPI_AUTO_LENGTH, &result); 3709596a2c1Sopenharmony_ci if (status != napi_ok) { 3719596a2c1Sopenharmony_ci HILOG_ERROR_I18N("GetTypeAddon: Create getType string value failed"); 3729596a2c1Sopenharmony_ci return nullptr; 3739596a2c1Sopenharmony_ci } 3749596a2c1Sopenharmony_ci return result; 3759596a2c1Sopenharmony_ci} 3769596a2c1Sopenharmony_ci 3779596a2c1Sopenharmony_cinapi_value I18nUnicodeAddon::ObjectConstructor(napi_env env, napi_callback_info info) 3789596a2c1Sopenharmony_ci{ 3799596a2c1Sopenharmony_ci napi_value thisVar = nullptr; 3809596a2c1Sopenharmony_ci void *data = nullptr; 3819596a2c1Sopenharmony_ci napi_status status = napi_get_cb_info(env, info, nullptr, nullptr, &thisVar, &data); 3829596a2c1Sopenharmony_ci if (status != napi_ok) { 3839596a2c1Sopenharmony_ci return nullptr; 3849596a2c1Sopenharmony_ci } 3859596a2c1Sopenharmony_ci std::unique_ptr<I18nUnicodeAddon> obj = nullptr; 3869596a2c1Sopenharmony_ci obj = std::make_unique<I18nUnicodeAddon>(); 3879596a2c1Sopenharmony_ci status = 3889596a2c1Sopenharmony_ci napi_wrap(env, thisVar, reinterpret_cast<void *>(obj.get()), I18nUnicodeAddon::Destructor, nullptr, nullptr); 3899596a2c1Sopenharmony_ci if (status != napi_ok) { 3909596a2c1Sopenharmony_ci HILOG_ERROR_I18N("Wrap I18nAddon failed"); 3919596a2c1Sopenharmony_ci return nullptr; 3929596a2c1Sopenharmony_ci } 3939596a2c1Sopenharmony_ci obj.release(); 3949596a2c1Sopenharmony_ci return thisVar; 3959596a2c1Sopenharmony_ci} 3969596a2c1Sopenharmony_ci} // namespace I18n 3979596a2c1Sopenharmony_ci} // namespace Global 3989596a2c1Sopenharmony_ci} // namespace OHOS