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