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