2 // Open Service Platform
3 // Copyright (c) 2012 Samsung Electronics Co., Ltd.
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
9 // http://www.apache.org/licenses/LICENSE-2.0
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.
19 * @file FBase_CharacterImpl.cpp
20 * @brief This is the implementation file for _CharImpl class.
24 #include <unicode/uchar.h>
25 #include <FBaseSysLog.h>
26 #include "FBase_CharacterImpl.h"
29 namespace Tizen { namespace Base
32 _CharacterImpl::~_CharacterImpl(void)
37 _CharacterImpl::ToLowerCase(wchar_t ch)
43 _CharacterImpl::ToUpperCase(wchar_t ch)
49 _CharacterImpl::GetUnicodeCategory(wchar_t ch)
51 if (_CharacterImpl::IsSurrogate(ch))
53 return UNICODE_SURROGATE;
55 else if (_CharacterImpl::IsModifier(ch))
57 return UNICODE_MODIFIER;
59 else if (_CharacterImpl::IsArrow(ch))
63 else if (_CharacterImpl::IsWhitespace(ch))
67 else if (_CharacterImpl::IsPunctuation(ch))
69 return UNICODE_PUNCTUATION;
71 else if (_CharacterImpl::IsControl(ch))
73 return UNICODE_CONTROL;
75 else if (_CharacterImpl::IsMath(ch))
79 else if (_CharacterImpl::IsDigit(ch))
83 else if (_CharacterImpl::IsHangul(ch))
85 return UNICODE_HANGUL;
87 else if (_CharacterImpl::IsCJK(ch))
91 else if (_CharacterImpl::IsCombining(ch))
93 return UNICODE_COMBINING;
95 else if (_CharacterImpl::IsLanguage(ch))
97 return UNICODE_LANGUAGE;
101 return UNICODE_OTHER;
106 _CharacterImpl::IsDigit(wchar_t ch)
108 return(u_isdigit(ch) == TRUE);
112 _CharacterImpl::IsLetter(wchar_t ch)
114 return(u_isalpha(ch) == TRUE);
118 _CharacterImpl::ToDigit(wchar_t ch, int radix)
120 return u_digit(ch, radix);
124 _CharacterImpl::ForDigit(int digit, int radix)
126 return u_forDigit(digit, radix);
130 _CharacterImpl::GetNumericValue(wchar_t ch)
132 return u_getNumericValue(ch);
136 _CharacterImpl::IsDefined(wchar_t ch)
138 return(u_isdefined(ch) == TRUE);
142 _CharacterImpl::IsWhitespace(wchar_t ch)
144 return(u_isWhitespace(ch) == TRUE);
148 _CharacterImpl::IsTitleCase(wchar_t ch)
150 return(u_istitle(ch) == TRUE);
154 _CharacterImpl::ToTitleCase(wchar_t ch)
156 return(u_totitle(ch));
160 _CharacterImpl::IsISOControl(wchar_t ch)
162 return(u_isISOControl(ch) == TRUE);
166 _CharacterImpl::IsControl(wchar_t ch)
168 return(u_iscntrl(ch) == TRUE);
172 _CharacterImpl::IsPunctuation(wchar_t ch)
174 return(u_ispunct(ch) == TRUE);
178 _CharacterImpl::IsSurrogate(wchar_t ch)
180 if (0xD800 <= ch && ch <= 0xDFFF)
191 _CharacterImpl::IsArrow(wchar_t ch)
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
208 _CharacterImpl::IsMath(wchar_t ch)
210 if (u_charType(ch) == U_MATH_SYMBOL)
221 _CharacterImpl::IsModifier(wchar_t ch)
223 if (u_charType(ch) == U_MODIFIER_LETTER)
227 else if (u_charType(ch) == U_MODIFIER_SYMBOL)
238 _CharacterImpl::IsHangul(wchar_t ch)
240 if ((0xAC00 <= ch && ch <= 0xD7AF) // Hangul Syllable
241 || (0x1100 <= ch && ch <= 0x11FF) // Hangul Jamo
242 || (0x3130 <= ch && ch <= 0x318F)) // Hangul Compatibility Jamo
253 _CharacterImpl::IsCJK(wchar_t ch)
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
268 _CharacterImpl::IsCombining(wchar_t ch)
270 if ((0x0300 <= ch && ch <= 0x036F) || (0x20D0 <= ch && ch <= 0x20FF)
271 || (0x1DC0 <= ch && ch <= 0x1DFF) || (0xFE20 <= ch && ch <= 0xFE2F))
281 _CharacterImpl::IsLanguage(wchar_t ch)
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)