Merge "Update deprecated libprivilege-control API functions." into tizen
[platform/framework/native/appfw.git] / src / base / FBase_CharacterImpl.cpp
1 //
2 // Copyright (c) 2012 Samsung Electronics Co., Ltd.
3 //
4 // Licensed under the Apache License, Version 2.0 (the License);
5 // you may not use this file except in compliance with the License.
6 // You may obtain a copy of the License at
7 //
8 //     http://www.apache.org/licenses/LICENSE-2.0
9 //
10 // Unless required by applicable law or agreed to in writing, software
11 // distributed under the License is distributed on an "AS IS" BASIS,
12 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 // See the License for the specific language governing permissions and
14 // limitations under the License.
15 //
16
17 /**
18  * @file                FBase_CharacterImpl.cpp
19  * @brief               This is the implementation file for _CharImpl class.
20  */
21 #include <wctype.h>
22 #include <unicode/uchar.h>
23 #include <FBaseSysLog.h>
24 #include "FBase_CharacterImpl.h"
25
26 namespace Tizen { namespace Base
27 {
28
29 _CharacterImpl::~_CharacterImpl(void)
30 {
31 }
32
33 wchar_t
34 _CharacterImpl::ToLowerCase(wchar_t ch)
35 {
36         return u_tolower(ch);
37 }
38
39 wchar_t
40 _CharacterImpl::ToUpperCase(wchar_t ch)
41 {
42         return u_toupper(ch);
43 }
44
45 UnicodeCategory
46 _CharacterImpl::GetUnicodeCategory(wchar_t ch)
47 {
48         if (_CharacterImpl::IsSurrogate(ch))
49         {
50                 return UNICODE_SURROGATE;
51         }
52         else if (_CharacterImpl::IsModifier(ch))
53         {
54                 return UNICODE_MODIFIER;
55         }
56         else if (_CharacterImpl::IsArrow(ch))
57         {
58                 return UNICODE_ARROW;
59         }
60         else if (_CharacterImpl::IsWhitespace(ch))
61         {
62                 return UNICODE_SPACE;
63         }
64         else if (_CharacterImpl::IsPunctuation(ch))
65         {
66                 return UNICODE_PUNCTUATION;
67         }
68         else if (_CharacterImpl::IsControl(ch))
69         {
70                 return UNICODE_CONTROL;
71         }
72         else if (_CharacterImpl::IsMath(ch))
73         {
74                 return UNICODE_MATH;
75         }
76         else if (_CharacterImpl::IsDigit(ch))
77         {
78                 return UNICODE_DIGIT;
79         }
80         else if (_CharacterImpl::IsHangul(ch))
81         {
82                 return UNICODE_HANGUL;
83         }
84         else if (_CharacterImpl::IsCJK(ch))
85         {
86                 return UNICODE_HANJA;
87         }
88         else if (_CharacterImpl::IsCombining(ch))
89         {
90                 return UNICODE_COMBINING;
91         }
92         else if (_CharacterImpl::IsLanguage(ch))
93         {
94                 return UNICODE_LANGUAGE;
95         }
96         else
97         {
98                 return UNICODE_OTHER;
99         }
100 }
101
102 bool
103 _CharacterImpl::IsDigit(wchar_t ch)
104 {
105         return(u_isdigit(ch) == TRUE);
106 }
107
108 bool
109 _CharacterImpl::IsLetter(wchar_t ch)
110 {
111         return(u_isalpha(ch) == TRUE);
112 }
113
114 int
115 _CharacterImpl::ToDigit(wchar_t ch, int radix)
116 {
117         return u_digit(ch, radix);
118 }
119
120 wchar_t
121 _CharacterImpl::ForDigit(int digit, int radix)
122 {
123         return u_forDigit(digit, radix);
124 }
125
126 double
127 _CharacterImpl::GetNumericValue(wchar_t ch)
128 {
129         return u_getNumericValue(ch);
130 }
131
132 bool
133 _CharacterImpl::IsDefined(wchar_t ch)
134 {
135         return(u_isdefined(ch) == TRUE);
136 }
137
138 bool
139 _CharacterImpl::IsWhitespace(wchar_t ch)
140 {
141         return(u_isWhitespace(ch) == TRUE);
142 }
143
144 bool
145 _CharacterImpl::IsTitleCase(wchar_t ch)
146 {
147         return(u_istitle(ch) == TRUE);
148 }
149
150 wchar_t
151 _CharacterImpl::ToTitleCase(wchar_t ch)
152 {
153         return(u_totitle(ch));
154 }
155
156 bool
157 _CharacterImpl::IsISOControl(wchar_t ch)
158 {
159         return(u_isISOControl(ch) == TRUE);
160 }
161
162 bool
163 _CharacterImpl::IsControl(wchar_t ch)
164 {
165         return(u_iscntrl(ch) == TRUE);
166 }
167
168 bool
169 _CharacterImpl::IsPunctuation(wchar_t ch)
170 {
171         return(u_ispunct(ch) == TRUE);
172 }
173
174 bool
175 _CharacterImpl::IsSurrogate(wchar_t ch)
176 {
177         if (0xD800 <= ch && ch <= 0xDFFF)
178         {
179                 return true;
180         }
181         else
182         {
183                 return false;
184         }
185 }
186
187 bool
188 _CharacterImpl::IsArrow(wchar_t ch)
189 {
190         if ((0x2190 <= ch && ch <= 0x21FF)          // Arrows
191                 || (0x27F0 <= ch && ch <= 0x27FF)       // Supplemental Arrows A
192                 || (0x2900 <= ch && ch <= 0x297F)       // Supplemental Arrows B
193                 || (0x2B00 <= ch && ch <= 0x2B11)       // white and black arrows
194                 || (0x2B30 <= ch && ch <= 0x2B4C))      // math arrows
195         {
196                 return true;
197         }
198         else
199         {
200                 return false;
201         }
202 }
203
204 bool
205 _CharacterImpl::IsMath(wchar_t ch)
206 {
207         if (u_charType(ch) == U_MATH_SYMBOL)
208         {
209                 return true;
210         }
211         else
212         {
213                 return false;
214         }
215 }
216
217 bool
218 _CharacterImpl::IsModifier(wchar_t ch)
219 {
220         if (u_charType(ch) == U_MODIFIER_LETTER)
221         {
222                 return true;
223         }
224         else if (u_charType(ch) == U_MODIFIER_SYMBOL)
225         {
226                 return true;
227         }
228         else
229         {
230                 return false;
231         }
232 }
233
234 bool
235 _CharacterImpl::IsHangul(wchar_t ch)
236 {
237         if ((0xAC00 <= ch && ch <= 0xD7AF)          // Hangul Syllable
238                 || (0x1100 <= ch && ch <= 0x11FF)       // Hangul Jamo
239                 || (0x3130 <= ch && ch <= 0x318F))      // Hangul Compatibility Jamo
240         {
241                 return true;
242         }
243         else
244         {
245                 return false;
246         }
247 }
248
249 bool
250 _CharacterImpl::IsCJK(wchar_t ch)
251 {
252         if ((0x4E00 <= ch && ch <= 0x9FFF)      // CJK Unified Ideographs
253                 || (0xF900 <= ch && ch <= 0xFAFF)   // CJK Compatibility Ideographs
254                 || (0x3400 <= ch && ch <= 0x4DBF))  // CJK Unified Ideographs, Extension A
255         {
256                 return true;
257         }
258         else
259         {
260                 return false;
261         }
262 }
263
264 bool
265 _CharacterImpl::IsCombining(wchar_t ch)
266 {
267         if ((0x0300 <= ch && ch <= 0x036F) || (0x20D0 <= ch && ch <= 0x20FF)
268                 || (0x1DC0 <= ch && ch <= 0x1DFF) || (0xFE20 <= ch && ch <= 0xFE2F))
269         {
270                 return true;
271         }
272         else
273         {
274                 return false;
275         }
276 }
277 bool
278 _CharacterImpl::IsLanguage(wchar_t ch)
279 {
280         if ((0x0041 <= ch && ch <= 0x005A) || (0x0061 <= ch && ch <= 0x007A) || (0x0100 <= ch && ch <= 0x024F)
281                 || (0x0250 <= ch && ch <= 0x02AF)   // IPA Extensions
282                 || (0x0370 <= ch && ch <= 0x03FF)   // Greek
283                 || (0x0400 <= ch && ch <= 0x04FF)   // Cyrillic
284                 || (0x0530 <= ch && ch <= 0x058F)   // Armenian
285                 || (0x0590 <= ch && ch <= 0x05FF)   // Hebrew
286                 || (0x0600 <= ch && ch <= 0x06FF)   // Arabic
287                 || (0x0700 <= ch && ch <= 0x074F)   // Syriac
288                 || (0x0780 <= ch && ch <= 0x07BF)   // Thaana
289                 || (0x0900 <= ch && ch <= 0x0D7F)   // Devanagari ~ Malayalam
290                 || (0x0D80 <= ch && ch <= 0x0DFF)   // Sinhala
291                 || (0x0E00 <= ch && ch <= 0x0FFF)   // Thai, Lao, Tibetan
292                 || (0x1000 <= ch && ch <= 0x109F)   // Myanmar
293                 || (0x10A0 <= ch && ch <= 0x10FF)   // Georgian
294                 || (0x1100 <= ch && ch <= 0x11FF)   // Hangul Jamo
295                 || (0x1200 <= ch && ch <= 0x137F)   // Ethiopic
296                 || (0x13A0 <= ch && ch <= 0x13FF)   // Cherokee
297                 || (0x1400 <= ch && ch <= 0x167F)   // Unified Canadian Aboriginal Syllabics
298                 || (0x1680 <= ch && ch <= 0x169F)   // Ogham
299                 || (0x16A0 <= ch && ch <= 0x16FF)   // Runic
300                 || (0x1780 <= ch && ch <= 0x17FF)   // Khmer
301                 || (0x1800 <= ch && ch <= 0x18AF)   // Mongolian
302                 || (0x1E00 <= ch && ch <= 0x1EFF)   // Latin Extended Additional
303                 || (0x1F00 <= ch && ch <= 0x1FFF)   // Greek Extended
304                 || (0x3040 <= ch && ch <= 0x30FF)   // Hiragana, Katakana
305                 || (0x3100 <= ch && ch <= 0x312F)   // Bopomofo
306                 || (0x3130 <= ch && ch <= 0x318F)   // Hangul Compatibility Jamo
307                 || (0x3190 <= ch && ch <= 0x319F)   // Kanbun
308                 || (0x31A0 <= ch && ch <= 0x31BF)   // Bopomofo Extended
309                 || (0x3400 <= ch && ch <= 0x4DB5)   // CJK Unified Ideographs Extension A
310                 || (0x4E00 <= ch && ch <= 0x9FFF)   // CJK Unified Ideographs
311                 || (0xA000 <= ch && ch <= 0xA4CF)   // Yi Syllables, Radicals
312                 || (0xAC00 <= ch && ch <= 0xD7A3)   // Hangul Syllables
313                 || (0xF900 <= ch && ch <= 0xFAFF)   // CJK Compatibility Ideographs
314                 || (0xFB00 <= ch && ch <= 0xFB4F)   // Alphabetic Presentation Forms
315                 || (0xFB50 <= ch && ch <= 0xFDFF)   // Arabic Presentation Forms-A
316                 || (0xFE70 <= ch && ch <= 0xFEFE)   // Arabic Presentation Forms-B
317                 || (0xFF00 <= ch && ch <= 0xFFEF)
318                 )
319         {
320                 return true;
321         }
322         else
323         {
324                 return false;
325         }
326 }
327
328 }} // Tizen::Base