1 /*
2 * Copyright (c) 2023 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 * http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15
16 #include <cctype>
17 #include <js_native_api.h>
18 #include <malloc.h>
19 #include <node_api.h>
20
21 #define TRUE 1
22 #define FALSE 0
23 #define ERROR (-1)
24 #define STRLENGTH 8
25 #define INPUT_VALUE_ZERO 0
26 #define PARAM_0 0
27 #define PARAM_1 1
28 #define PARAM_2 2
29 #define PARAM_UNNORMAL (-1)
30 #define RETURN_0 0
31 #define FAILD (-1)
32 #define ERRON_0 0
33 #define SIZE_10 10
34 #define SIZE_100 100
35 #define SIZE_4096 4096
36 #define SIZE_8192 8192
37 #define SIZE_128 128
38
Isalnum(napi_env env,napi_callback_info info)39 static napi_value Isalnum(napi_env env, napi_callback_info info)
40 {
41 size_t argc = PARAM_1;
42 napi_value args[1] = {nullptr};
43 napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
44 size_t length = STRLENGTH;
45 size_t strResult = FALSE;
46 char ch[STRLENGTH];
47 napi_get_value_string_utf8(env, args[0], ch, length, &strResult);
48 int retVal = isalnum(static_cast<int>(ch[0]));
49 napi_value result;
50 if (retVal != FALSE) {
51 napi_create_int32(env, TRUE, &result);
52 } else {
53 napi_create_int32(env, FALSE, &result);
54 }
55 return result;
56 }
57
IsalnumL(napi_env env,napi_callback_info info)58 static napi_value IsalnumL(napi_env env, napi_callback_info info)
59 {
60 size_t argc = PARAM_1;
61 napi_value args[1] = {nullptr};
62 napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
63 size_t length = STRLENGTH;
64 size_t strResult = FALSE;
65 char *ch = static_cast<char *>(malloc(sizeof(char) * length));
66 napi_get_value_string_utf8(env, args[0], ch, length, &strResult);
67 int retVal = isalnum_l(static_cast<int>(ch[0]), INPUT_VALUE_ZERO);
68 napi_value result;
69 if (retVal != FALSE) {
70 napi_create_int32(env, TRUE, &result);
71 } else {
72 napi_create_int32(env, FALSE, &result);
73 }
74 return result;
75 }
76
Isalpha(napi_env env,napi_callback_info info)77 static napi_value Isalpha(napi_env env, napi_callback_info info)
78 {
79 size_t argc = PARAM_1;
80 napi_value args[1] = {nullptr};
81 napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
82 size_t length = STRLENGTH;
83 size_t strResult = FALSE;
84 char *ch = static_cast<char *>(malloc(sizeof(char) * length));
85 napi_get_value_string_utf8(env, args[0], ch, length, &strResult);
86 int retVal = isalpha(static_cast<int>(ch[0]));
87 napi_value result;
88 if (retVal != FALSE) {
89 napi_create_int32(env, TRUE, &result);
90 } else {
91 napi_create_int32(env, FALSE, &result);
92 }
93 return result;
94 }
95
IsalphaL(napi_env env,napi_callback_info info)96 static napi_value IsalphaL(napi_env env, napi_callback_info info)
97 {
98 size_t argc = PARAM_1;
99 napi_value args[1] = {nullptr};
100 napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
101 size_t length = STRLENGTH;
102 size_t strResult = FALSE;
103 char *ch = static_cast<char *>(malloc(sizeof(char) * length));
104 napi_get_value_string_utf8(env, args[0], ch, length, &strResult);
105 int retVal = isalpha_l(static_cast<int>(ch[0]), INPUT_VALUE_ZERO);
106 napi_value result;
107 if (retVal != FALSE) {
108 napi_create_int32(env, TRUE, &result);
109 } else {
110 napi_create_int32(env, FALSE, &result);
111 }
112 return result;
113 }
114
Isascii(napi_env env,napi_callback_info info)115 static napi_value Isascii(napi_env env, napi_callback_info info)
116 {
117 size_t argc = PARAM_1;
118 napi_value args[1] = {nullptr};
119 napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
120 int first;
121 napi_get_value_int32(env, args[0], &first);
122 int retVal = isascii(first);
123 napi_value result;
124 if (retVal != FALSE) {
125 napi_create_int32(env, TRUE, &result);
126 } else {
127 napi_create_int32(env, FALSE, &result);
128 }
129 return result;
130 }
131
Isblank(napi_env env,napi_callback_info info)132 static napi_value Isblank(napi_env env, napi_callback_info info)
133 {
134 size_t argc = PARAM_1;
135 napi_value args[1] = {nullptr};
136 napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
137 size_t length = STRLENGTH;
138 size_t strResult = FALSE;
139 char *ch = static_cast<char *>(malloc(sizeof(char) * length));
140 napi_get_value_string_utf8(env, args[0], ch, length, &strResult);
141 int retVal = isblank(static_cast<int>(ch[0]));
142 napi_value result;
143 if (retVal != FALSE) {
144 napi_create_int32(env, TRUE, &result);
145 } else {
146 napi_create_int32(env, FALSE, &result);
147 }
148 return result;
149 }
150
IsblankL(napi_env env,napi_callback_info info)151 static napi_value IsblankL(napi_env env, napi_callback_info info)
152 {
153 size_t argc = PARAM_1;
154 napi_value args[1] = {nullptr};
155 napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
156 size_t length = STRLENGTH;
157 size_t strResult = FALSE;
158 char *ch = static_cast<char *>(malloc(sizeof(char) * length));
159 napi_get_value_string_utf8(env, args[0], ch, length, &strResult);
160 int retVal = isblank_l(static_cast<int>(ch[0]), INPUT_VALUE_ZERO);
161 napi_value result;
162 if (retVal != FALSE) {
163 napi_create_int32(env, TRUE, &result);
164 } else {
165 napi_create_int32(env, FALSE, &result);
166 }
167 return result;
168 }
169
Iscntrl(napi_env env,napi_callback_info info)170 static napi_value Iscntrl(napi_env env, napi_callback_info info)
171 {
172 size_t argc = PARAM_1;
173 napi_value args[1] = {nullptr};
174 napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
175 int first;
176 napi_get_value_int32(env, args[0], &first);
177 int retVal = iscntrl(first);
178 napi_value result;
179 if (retVal != FALSE) {
180 napi_create_int32(env, TRUE, &result);
181 } else {
182 napi_create_int32(env, FALSE, &result);
183 }
184 return result;
185 }
186
IscntrlL(napi_env env,napi_callback_info info)187 static napi_value IscntrlL(napi_env env, napi_callback_info info)
188 {
189 size_t argc = PARAM_1;
190 napi_value args[1] = {nullptr};
191 napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
192 int first;
193 napi_get_value_int32(env, args[0], &first);
194 int retVal = iscntrl_l(first, INPUT_VALUE_ZERO);
195 napi_value result;
196 if (retVal != FALSE) {
197 napi_create_int32(env, TRUE, &result);
198 } else {
199 napi_create_int32(env, FALSE, &result);
200 }
201 return result;
202 }
203
Isdigit(napi_env env,napi_callback_info info)204 static napi_value Isdigit(napi_env env, napi_callback_info info)
205 {
206 size_t argc = PARAM_1;
207 napi_value args[1] = {nullptr};
208 napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
209 size_t length = STRLENGTH;
210 size_t strResult = FALSE;
211 char *ch = static_cast<char *>(malloc(sizeof(char) * length));
212 napi_get_value_string_utf8(env, args[0], ch, length, &strResult);
213 int retVal = isdigit(static_cast<int>(ch[0]));
214 napi_value result;
215 if (retVal != FALSE) {
216 napi_create_int32(env, TRUE, &result);
217 } else {
218 napi_create_int32(env, FALSE, &result);
219 }
220 return result;
221 }
IsdigitL(napi_env env,napi_callback_info info)222 static napi_value IsdigitL(napi_env env, napi_callback_info info)
223 {
224 size_t argc = PARAM_1;
225 napi_value args[1] = {nullptr};
226 napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
227 size_t length = STRLENGTH;
228 size_t strResult = FALSE;
229 char *ch = static_cast<char *>(malloc(sizeof(char) * length));
230 napi_get_value_string_utf8(env, args[0], ch, length, &strResult);
231 int retVal = isdigit_l(static_cast<int>(ch[0]), INPUT_VALUE_ZERO);
232 napi_value result;
233 if (retVal != FALSE) {
234 napi_create_int32(env, TRUE, &result);
235 } else {
236 napi_create_int32(env, FALSE, &result);
237 }
238 return result;
239 }
240
Isgraph(napi_env env,napi_callback_info info)241 static napi_value Isgraph(napi_env env, napi_callback_info info)
242 {
243 size_t argc = PARAM_1;
244 napi_value args[1] = {nullptr};
245 napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
246 size_t length = STRLENGTH;
247 size_t strResult = FALSE;
248 char *ch = static_cast<char *>(malloc(sizeof(char) * length));
249 napi_get_value_string_utf8(env, args[0], ch, length, &strResult);
250 int retVal = isgraph(static_cast<int>(ch[0]));
251 napi_value result;
252 if (retVal != FALSE) {
253 napi_create_int32(env, TRUE, &result);
254 } else {
255 napi_create_int32(env, FALSE, &result);
256 }
257 return result;
258 }
IsgraphL(napi_env env,napi_callback_info info)259 static napi_value IsgraphL(napi_env env, napi_callback_info info)
260 {
261 size_t argc = PARAM_1;
262 napi_value args[1] = {nullptr};
263 napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
264 size_t length = STRLENGTH;
265 size_t strResult = FALSE;
266 char *ch = static_cast<char *>(malloc(sizeof(char) * length));
267 napi_get_value_string_utf8(env, args[0], ch, length, &strResult);
268 int retVal = isgraph_l(static_cast<int>(ch[0]), INPUT_VALUE_ZERO);
269 napi_value result;
270 if (retVal != FALSE) {
271 napi_create_int32(env, TRUE, &result);
272 } else {
273 napi_create_int32(env, FALSE, &result);
274 }
275 return result;
276 }
277
Islower(napi_env env,napi_callback_info info)278 static napi_value Islower(napi_env env, napi_callback_info info)
279 {
280 size_t argc = PARAM_1;
281 napi_value args[1] = {nullptr};
282 napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
283 size_t length = STRLENGTH;
284 size_t strResult = FALSE;
285 char *ch = static_cast<char *>(malloc(sizeof(char) * length));
286 napi_get_value_string_utf8(env, args[0], ch, length, &strResult);
287 int retVal = islower(static_cast<int>(ch[0]));
288 napi_value result;
289 if (retVal != FALSE) {
290 napi_create_int32(env, TRUE, &result);
291 } else {
292 napi_create_int32(env, FALSE, &result);
293 }
294 return result;
295 }
296
IslowerL(napi_env env,napi_callback_info info)297 static napi_value IslowerL(napi_env env, napi_callback_info info)
298 {
299 size_t argc = PARAM_1;
300 napi_value args[1] = {nullptr};
301 napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
302 size_t length = STRLENGTH;
303 size_t strResult = FALSE;
304 char *ch = static_cast<char *>(malloc(sizeof(char) * length));
305 napi_get_value_string_utf8(env, args[0], ch, length, &strResult);
306 int retVal = islower_l(static_cast<int>(ch[0]), INPUT_VALUE_ZERO);
307 napi_value result;
308 if (retVal != FALSE) {
309 napi_create_int32(env, TRUE, &result);
310 } else {
311 napi_create_int32(env, FALSE, &result);
312 }
313 return result;
314 }
315
Isprint(napi_env env,napi_callback_info info)316 static napi_value Isprint(napi_env env, napi_callback_info info)
317 {
318 size_t argc = PARAM_1;
319 napi_value args[1] = {nullptr};
320 napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
321 size_t length = STRLENGTH;
322 size_t strResult = FALSE;
323 char *ch = static_cast<char *>(malloc(sizeof(char) * length));
324 napi_get_value_string_utf8(env, args[0], ch, length, &strResult);
325 int retVal = isprint(static_cast<int>(ch[0]));
326 napi_value result;
327 if (retVal != FALSE) {
328 napi_create_int32(env, TRUE, &result);
329 } else {
330 napi_create_int32(env, FALSE, &result);
331 }
332 return result;
333 }
334
IsprintL(napi_env env,napi_callback_info info)335 static napi_value IsprintL(napi_env env, napi_callback_info info)
336 {
337 size_t argc = PARAM_1;
338 napi_value args[1] = {nullptr};
339 napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
340 size_t length = STRLENGTH;
341 size_t strResult = FALSE;
342 char *ch = static_cast<char *>(malloc(sizeof(char) * length));
343 napi_get_value_string_utf8(env, args[0], ch, length, &strResult);
344 int retVal = isprint_l(static_cast<int>(ch[0]), INPUT_VALUE_ZERO);
345 napi_value result;
346 if (retVal != FALSE) {
347 napi_create_int32(env, TRUE, &result);
348 } else {
349 napi_create_int32(env, FALSE, &result);
350 }
351 return result;
352 }
353
Ispunct(napi_env env,napi_callback_info info)354 static napi_value Ispunct(napi_env env, napi_callback_info info)
355 {
356 size_t argc = PARAM_1;
357 napi_value args[1] = {nullptr};
358 napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
359 size_t length = STRLENGTH;
360 size_t strResult = FALSE;
361 char *ch = static_cast<char *>(malloc(sizeof(char) * length));
362 napi_get_value_string_utf8(env, args[0], ch, length, &strResult);
363 int retVal = ispunct(static_cast<int>(ch[0]));
364 napi_value result;
365 if (retVal != FALSE) {
366 napi_create_int32(env, TRUE, &result);
367 } else {
368 napi_create_int32(env, FALSE, &result);
369 }
370 return result;
371 }
372
IspunctL(napi_env env,napi_callback_info info)373 static napi_value IspunctL(napi_env env, napi_callback_info info)
374 {
375 size_t argc = PARAM_1;
376 napi_value args[1] = {nullptr};
377 napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
378 size_t length = STRLENGTH;
379 size_t strResult = FALSE;
380 char *ch = static_cast<char *>(malloc(sizeof(char) * length));
381 napi_get_value_string_utf8(env, args[0], ch, length, &strResult);
382 int retVal = ispunct_l(static_cast<int>(ch[0]), INPUT_VALUE_ZERO);
383 napi_value result;
384 if (retVal != FALSE) {
385 napi_create_int32(env, TRUE, &result);
386 } else {
387 napi_create_int32(env, FALSE, &result);
388 }
389 return result;
390 }
391
Isspace(napi_env env,napi_callback_info info)392 static napi_value Isspace(napi_env env, napi_callback_info info)
393 {
394 size_t argc = PARAM_1;
395 napi_value args[1] = {nullptr};
396 napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
397 size_t length = STRLENGTH;
398 size_t strResult = FALSE;
399 char *ch = static_cast<char *>(malloc(sizeof(char) * length));
400 napi_get_value_string_utf8(env, args[0], ch, length, &strResult);
401 int retVal = isspace(static_cast<int>(ch[0]));
402 napi_value result;
403 if (retVal != FALSE) {
404 napi_create_int32(env, TRUE, &result);
405 } else {
406 napi_create_int32(env, FALSE, &result);
407 }
408 return result;
409 }
IsspaceL(napi_env env,napi_callback_info info)410 static napi_value IsspaceL(napi_env env, napi_callback_info info)
411 {
412 size_t argc = PARAM_1;
413 napi_value args[1] = {nullptr};
414 napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
415 size_t length = STRLENGTH;
416 size_t strResult = FALSE;
417 char *ch = static_cast<char *>(malloc(sizeof(char) * length));
418 napi_get_value_string_utf8(env, args[0], ch, length, &strResult);
419 int retVal = isspace_l(static_cast<int>(ch[0]), INPUT_VALUE_ZERO);
420 napi_value result;
421 if (retVal != FALSE) {
422 napi_create_int32(env, TRUE, &result);
423 } else {
424 napi_create_int32(env, FALSE, &result);
425 }
426 return result;
427 }
428
Isupper(napi_env env,napi_callback_info info)429 static napi_value Isupper(napi_env env, napi_callback_info info)
430 {
431 size_t argc = PARAM_1;
432 napi_value args[1] = {nullptr};
433 napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
434 size_t length = STRLENGTH;
435 size_t strResult = FALSE;
436 char *ch = static_cast<char *>(malloc(sizeof(char) * length));
437 napi_get_value_string_utf8(env, args[0], ch, length, &strResult);
438 int retVal = isupper(static_cast<int>(ch[0]));
439 napi_value result;
440 if (retVal != FALSE) {
441 napi_create_int32(env, TRUE, &result);
442 } else {
443 napi_create_int32(env, FALSE, &result);
444 }
445 return result;
446 }
447
IsupperL(napi_env env,napi_callback_info info)448 static napi_value IsupperL(napi_env env, napi_callback_info info)
449 {
450 size_t argc = PARAM_1;
451 napi_value args[1] = {nullptr};
452 napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
453 size_t length = STRLENGTH;
454 size_t strResult = FALSE;
455 char *ch = static_cast<char *>(malloc(sizeof(char) * length));
456 napi_get_value_string_utf8(env, args[0], ch, length, &strResult);
457 int retVal = isupper_l(static_cast<int>(ch[0]), INPUT_VALUE_ZERO);
458 napi_value result;
459 if (retVal != FALSE) {
460 napi_create_int32(env, TRUE, &result);
461 } else {
462 napi_create_int32(env, FALSE, &result);
463 }
464 return result;
465 }
466
Isxdigit(napi_env env,napi_callback_info info)467 static napi_value Isxdigit(napi_env env, napi_callback_info info)
468 {
469 size_t argc = PARAM_1;
470 napi_value args[1] = {nullptr};
471 napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
472 size_t length = STRLENGTH;
473 size_t strResult = FALSE;
474 char *ch = static_cast<char *>(malloc(sizeof(char) * length));
475 napi_get_value_string_utf8(env, args[0], ch, length, &strResult);
476 int retVal = isxdigit(static_cast<int>(ch[0]));
477 napi_value result;
478 if (retVal != FALSE) {
479 napi_create_int32(env, TRUE, &result);
480 } else {
481 napi_create_int32(env, FALSE, &result);
482 }
483 return result;
484 }
485
IsxdigitL(napi_env env,napi_callback_info info)486 static napi_value IsxdigitL(napi_env env, napi_callback_info info)
487 {
488 size_t argc = PARAM_1;
489 napi_value args[1] = {nullptr};
490 napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
491 size_t length = STRLENGTH;
492 size_t strResult = FALSE;
493 char *ch = static_cast<char *>(malloc(sizeof(char) * length));
494 napi_get_value_string_utf8(env, args[0], ch, length, &strResult);
495 int retVal = isxdigit_l(static_cast<int>(ch[0]), INPUT_VALUE_ZERO);
496 napi_value result;
497 if (retVal != FALSE) {
498 napi_create_int32(env, TRUE, &result);
499 } else {
500 napi_create_int32(env, FALSE, &result);
501 }
502 return result;
503 }
504
Toascii(napi_env env,napi_callback_info info)505 static napi_value Toascii(napi_env env, napi_callback_info info)
506 {
507 int c1 = 'a' + SIZE_128;
508 char char_value = toascii(c1);
509 napi_value result;
510 napi_create_string_utf8(env, &char_value, NAPI_AUTO_LENGTH, &result);
511 return result;
512 }
513
Tolower(napi_env env,napi_callback_info info)514 static napi_value Tolower(napi_env env, napi_callback_info info)
515 {
516 size_t argc = PARAM_1;
517 napi_value args[1] = {nullptr};
518 napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
519 int param;
520 napi_get_value_int32(env, args[0], ¶m);
521 int resultValue = FAILD;
522 if (param == PARAM_0) {
523 char ch = 'A';
524 char result = tolower(ch);
525 if (result == 'a') {
526 resultValue = RETURN_0;
527 }
528 } else if (param == PARAM_1) {
529 char ch = PARAM_2;
530 char result = tolower(ch);
531 if (result == ch) {
532 resultValue = RETURN_0;
533 }
534
535 } else if (param == PARAM_2) {
536 char ch = 'a';
537 char result = tolower(ch);
538 if (result == 'a') {
539 resultValue = RETURN_0;
540 }
541 } else {
542 char ch = '$';
543 char result = tolower(ch);
544 if (result == '$') {
545 resultValue = RETURN_0;
546 }
547 }
548
549 napi_value result = nullptr;
550 napi_create_int32(env, resultValue, &result);
551
552 return result;
553 }
554
TolowerL(napi_env env,napi_callback_info info)555 static napi_value TolowerL(napi_env env, napi_callback_info info)
556 {
557 size_t argc = PARAM_1;
558 napi_value args[1] = {nullptr};
559 napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
560 int param;
561 napi_get_value_int32(env, args[0], ¶m);
562 locale_t locale = nullptr;
563
564 int resultValue = FAILD;
565 if (param == PARAM_0) {
566 char ch = 'A';
567 char result = tolower_l(ch, locale);
568 if (result == 'a') {
569 resultValue = RETURN_0;
570 }
571 } else if (param == PARAM_1) {
572 char ch = PARAM_2;
573 char result = tolower_l(ch, locale);
574 if (result == ch) {
575 resultValue = RETURN_0;
576 }
577
578 } else if (param == PARAM_2) {
579 char ch = 'a';
580 char result = tolower_l(ch, locale);
581 if (result == 'a') {
582 resultValue = RETURN_0;
583 }
584 } else {
585 char ch = '$';
586 char result = tolower_l(ch, locale);
587 if (result == '$') {
588 resultValue = RETURN_0;
589 }
590 }
591
592 napi_value result = nullptr;
593 napi_create_int32(env, resultValue, &result);
594
595 return result;
596 }
597
Toupper(napi_env env,napi_callback_info info)598 static napi_value Toupper(napi_env env, napi_callback_info info)
599 {
600 size_t argc = PARAM_1;
601 napi_value args[1] = {nullptr};
602 napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
603 int param;
604 napi_get_value_int32(env, args[0], ¶m);
605 int resultValue = FAILD;
606
607 if (param == PARAM_0) {
608 char ch = 'a';
609 char result = toupper(ch);
610 if (result == 'A') {
611 resultValue = RETURN_0;
612 }
613 } else if (param == PARAM_1) {
614 char ch = PARAM_2;
615 char result = toupper(ch);
616 if (result == ch) {
617 resultValue = RETURN_0;
618 }
619
620 } else if (param == PARAM_2) {
621 char ch = 'A';
622 char result = toupper(ch);
623 if (result == 'A') {
624 resultValue = RETURN_0;
625 }
626 } else {
627 char ch = '$';
628 char result = toupper(ch);
629 if (result == '$') {
630 resultValue = RETURN_0;
631 }
632 }
633
634 napi_value result = nullptr;
635 napi_create_int32(env, resultValue, &result);
636
637 return result;
638 }
639
ToupperL(napi_env env,napi_callback_info info)640 static napi_value ToupperL(napi_env env, napi_callback_info info)
641 {
642 size_t argc = PARAM_1;
643 napi_value args[1] = {nullptr};
644 napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
645 int param;
646 napi_get_value_int32(env, args[0], ¶m);
647 locale_t locale = nullptr;
648 int resultValue = FAILD;
649 if (param == PARAM_0) {
650 char ch = 'a';
651 char result = toupper_l(ch, locale);
652 if (result == 'A') {
653 resultValue = RETURN_0;
654 }
655 } else if (param == PARAM_1) {
656 char ch = PARAM_2;
657 char result = toupper_l(ch, locale);
658 if (result == ch) {
659 resultValue = RETURN_0;
660 }
661
662 } else if (param == PARAM_2) {
663 char ch = 'A';
664 char result = toupper_l(ch, locale);
665 if (result == 'A') {
666 resultValue = RETURN_0;
667 }
668 } else {
669 char ch = '$';
670 char result = toupper_l(ch, locale);
671 if (result == '$') {
672 resultValue = RETURN_0;
673 }
674 }
675
676 napi_value result = nullptr;
677 napi_create_int32(env, resultValue, &result);
678
679 return result;
680 }
681
682 EXTERN_C_START
Init(napi_env env,napi_value exports)683 static napi_value Init(napi_env env, napi_value exports)
684 {
685 napi_property_descriptor desc[] = {
686 {"isalnum", nullptr, Isalnum, nullptr, nullptr, nullptr, napi_default, nullptr},
687 {"isalnumL", nullptr, IsalnumL, nullptr, nullptr, nullptr, napi_default, nullptr},
688 {"isalpha", nullptr, Isalpha, nullptr, nullptr, nullptr, napi_default, nullptr},
689 {"isalphaL", nullptr, IsalphaL, nullptr, nullptr, nullptr, napi_default, nullptr},
690 {"isascii", nullptr, Isascii, nullptr, nullptr, nullptr, napi_default, nullptr},
691 {"isblank", nullptr, Isblank, nullptr, nullptr, nullptr, napi_default, nullptr},
692 {"isblankL", nullptr, IsblankL, nullptr, nullptr, nullptr, napi_default, nullptr},
693 {"iscntrl", nullptr, Iscntrl, nullptr, nullptr, nullptr, napi_default, nullptr},
694 {"iscntrlL", nullptr, IscntrlL, nullptr, nullptr, nullptr, napi_default, nullptr},
695 {"isdigit", nullptr, Isdigit, nullptr, nullptr, nullptr, napi_default, nullptr},
696 {"isdigitL", nullptr, IsdigitL, nullptr, nullptr, nullptr, napi_default, nullptr},
697 {"isgraph", nullptr, Isgraph, nullptr, nullptr, nullptr, napi_default, nullptr},
698 {"isgraphL", nullptr, IsgraphL, nullptr, nullptr, nullptr, napi_default, nullptr},
699 {"islower", nullptr, Islower, nullptr, nullptr, nullptr, napi_default, nullptr},
700 {"islowerL", nullptr, IslowerL, nullptr, nullptr, nullptr, napi_default, nullptr},
701 {"isprint", nullptr, Isprint, nullptr, nullptr, nullptr, napi_default, nullptr},
702 {"isprintL", nullptr, IsprintL, nullptr, nullptr, nullptr, napi_default, nullptr},
703 {"ispunct", nullptr, Ispunct, nullptr, nullptr, nullptr, napi_default, nullptr},
704 {"ispunctL", nullptr, IspunctL, nullptr, nullptr, nullptr, napi_default, nullptr},
705 {"isspace", nullptr, Isspace, nullptr, nullptr, nullptr, napi_default, nullptr},
706 {"isspaceL", nullptr, IsspaceL, nullptr, nullptr, nullptr, napi_default, nullptr},
707 {"isupper", nullptr, Isupper, nullptr, nullptr, nullptr, napi_default, nullptr},
708 {"isupperL", nullptr, IsupperL, nullptr, nullptr, nullptr, napi_default, nullptr},
709 {"isxdigit", nullptr, Isxdigit, nullptr, nullptr, nullptr, napi_default, nullptr},
710 {"isxdigitL", nullptr, IsxdigitL, nullptr, nullptr, nullptr, napi_default, nullptr},
711 {"toascii", nullptr, Toascii, nullptr, nullptr, nullptr, napi_default, nullptr},
712 {"tolower", nullptr, Tolower, nullptr, nullptr, nullptr, napi_default, nullptr},
713 {"tolowerL", nullptr, TolowerL, nullptr, nullptr, nullptr, napi_default, nullptr},
714 {"toupper", nullptr, Toupper, nullptr, nullptr, nullptr, napi_default, nullptr},
715 {"toupperL", nullptr, ToupperL, nullptr, nullptr, nullptr, napi_default, nullptr},
716 };
717 napi_define_properties(env, exports, sizeof(desc) / sizeof(desc[0]), desc);
718 return exports;
719 }
720 EXTERN_C_END
721
722 static napi_module demoModule = {
723 .nm_version = 1,
724 .nm_flags = 0,
725 .nm_filename = nullptr,
726 .nm_register_func = Init,
727 .nm_modname = "ctypendk",
728 .nm_priv = ((void *)0),
729 .reserved = {0},
730 };
731
RegisterEntryModule(void)732 extern "C" __attribute__((constructor)) void RegisterEntryModule(void) { napi_module_register(&demoModule); }
733