xref: /reactos/sdk/lib/ucrt/mbstring/ismbknj.cpp (revision 53d808d2)
1 /***
2 *ismbcknj.c - contains the Kanji specific is* functions.
3 *
4 *       Copyright (c) Microsoft Corporation. All rights reserved.
5 *
6 *Purpose:
7 *       Provide non-portable Kanji support for MBCS libs.
8 *
9 *******************************************************************************/
10 #ifndef _MBCS
11     #error This file should only be compiled with _MBCS defined
12 #endif
13 
14 #include <corecrt_internal_mbstring.h>
15 #include <locale.h>
16 
17 
18 /***
19 *int _ismbchira(c) - test character for hiragana (Japanese)
20 *
21 *Purpose:
22 *       Test if the character c is a hiragana character.
23 *
24 *Entry:
25 *       unsigned int c - character to test
26 *
27 *Exit:
28 *       returns TRUE if CP == KANJI and character is hiragana, else FALSE
29 *
30 *Exceptions:
31 *
32 *******************************************************************************/
33 
34 extern "C" int __cdecl _ismbchira_l(
35         unsigned int c,
36         _locale_t plocinfo
37         )
38 {
39     _LocaleUpdate _loc_update(plocinfo);
40 
41     return(_loc_update.GetLocaleT()->mbcinfo->mbcodepage == _KANJI_CP && c >= 0x829f && c <= 0x82f1);
42 }
43 
44 extern "C" int __cdecl _ismbchira(
45         unsigned int c
46         )
47 {
48     return _ismbchira_l(c, nullptr);
49 }
50 
51 
52 /***
53 *int _ismbckata(c) - test character for katakana (Japanese)
54 *
55 *Purpose:
56 *       Tests to see if the character c is a katakana character.
57 *
58 *Entry:
59 *       unsigned int c - character to test
60 *
61 *Exit:
62 *       Returns TRUE if CP == KANJI and c is a katakana character, else FALSE.
63 *
64 *Exceptions:
65 *
66 *******************************************************************************/
67 
68 extern "C" int __cdecl _ismbckata_l (
69         unsigned int c,
70         _locale_t plocinfo
71         )
72 {
73     _LocaleUpdate _loc_update(plocinfo);
74 
75     return(_loc_update.GetLocaleT()->mbcinfo->mbcodepage == _KANJI_CP && c >= 0x8340 && c <= 0x8396 && c != 0x837f);
76 }
77 extern "C" int __cdecl _ismbckata(
78         unsigned int c
79         )
80 {
81     return _ismbckata_l(c, nullptr);
82 }
83 
84 
85 /***
86 *int _ismbcsymbol(c) - Tests if char is punctuation or symbol of Microsoft Kanji
87 *                  code.
88 *
89 *Purpose:
90 *       Returns non-zero if the character is kanji punctuation.
91 *
92 *Entry:
93 *       unsigned int c - character to be tested
94 *
95 *Exit:
96 *       Returns non-zero if CP == KANJI and the specified char is punctuation or symbol of
97 *               Microsoft Kanji code, else 0.
98 *
99 *Exceptions:
100 *
101 *******************************************************************************/
102 
103 extern "C" int __cdecl _ismbcsymbol_l(
104         unsigned int c,
105         _locale_t plocinfo
106         )
107 {
108     _LocaleUpdate _loc_update(plocinfo);
109 
110     return(_loc_update.GetLocaleT()->mbcinfo->mbcodepage == _KANJI_CP && c >= 0x8141 && c <= 0x81ac && c != 0x817f);
111 }
112 
113 extern "C" int (__cdecl _ismbcsymbol)(
114         unsigned int c
115         )
116 {
117     return _ismbcsymbol_l(c, nullptr);
118 }
119