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