2 // Copyright (c) 2012 Samsung Electronics Co., Ltd.
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
8 // http://www.apache.org/licenses/LICENSE-2.0
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.
18 * @file FBase_CharacterImpl.cpp
19 * @brief This is the implementation file for _CharImpl class.
22 #include <unicode/uchar.h>
23 #include <FBaseSysLog.h>
24 #include "FBase_CharacterImpl.h"
26 namespace Tizen { namespace Base
29 _CharacterImpl::~_CharacterImpl(void)
34 _CharacterImpl::ToLowerCase(wchar_t ch)
40 _CharacterImpl::ToUpperCase(wchar_t ch)
46 _CharacterImpl::GetUnicodeCategory(wchar_t ch)
48 if (_CharacterImpl::IsSurrogate(ch))
50 return UNICODE_SURROGATE;
52 else if (_CharacterImpl::IsModifier(ch))
54 return UNICODE_MODIFIER;
56 else if (_CharacterImpl::IsArrow(ch))
60 else if (_CharacterImpl::IsWhitespace(ch))
64 else if (_CharacterImpl::IsPunctuation(ch))
66 return UNICODE_PUNCTUATION;
68 else if (_CharacterImpl::IsControl(ch))
70 return UNICODE_CONTROL;
72 else if (_CharacterImpl::IsMath(ch))
76 else if (_CharacterImpl::IsDigit(ch))
80 else if (_CharacterImpl::IsHangul(ch))
82 return UNICODE_HANGUL;
84 else if (_CharacterImpl::IsCJK(ch))
88 else if (_CharacterImpl::IsCombining(ch))
90 return UNICODE_COMBINING;
92 else if (_CharacterImpl::IsLanguage(ch))
94 return UNICODE_LANGUAGE;
103 _CharacterImpl::IsDigit(wchar_t ch)
105 return(u_isdigit(ch) == TRUE);
109 _CharacterImpl::IsLetter(wchar_t ch)
111 return(u_isalpha(ch) == TRUE);
115 _CharacterImpl::ToDigit(wchar_t ch, int radix)
117 return u_digit(ch, radix);
121 _CharacterImpl::ForDigit(int digit, int radix)
123 return u_forDigit(digit, radix);
127 _CharacterImpl::GetNumericValue(wchar_t ch)
129 return u_getNumericValue(ch);
133 _CharacterImpl::IsDefined(wchar_t ch)
135 return(u_isdefined(ch) == TRUE);
139 _CharacterImpl::IsWhitespace(wchar_t ch)
141 return(u_isWhitespace(ch) == TRUE);
145 _CharacterImpl::IsTitleCase(wchar_t ch)
147 return(u_istitle(ch) == TRUE);
151 _CharacterImpl::ToTitleCase(wchar_t ch)
153 return(u_totitle(ch));
157 _CharacterImpl::IsISOControl(wchar_t ch)
159 return(u_isISOControl(ch) == TRUE);
163 _CharacterImpl::IsControl(wchar_t ch)
165 return(u_iscntrl(ch) == TRUE);
169 _CharacterImpl::IsPunctuation(wchar_t ch)
171 return(u_ispunct(ch) == TRUE);
175 _CharacterImpl::IsSurrogate(wchar_t ch)
177 if (0xD800 <= ch && ch <= 0xDFFF)
188 _CharacterImpl::IsArrow(wchar_t ch)
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
205 _CharacterImpl::IsMath(wchar_t ch)
207 if (u_charType(ch) == U_MATH_SYMBOL)
218 _CharacterImpl::IsModifier(wchar_t ch)
220 if (u_charType(ch) == U_MODIFIER_LETTER)
224 else if (u_charType(ch) == U_MODIFIER_SYMBOL)
235 _CharacterImpl::IsHangul(wchar_t ch)
237 if ((0xAC00 <= ch && ch <= 0xD7AF) // Hangul Syllable
238 || (0x1100 <= ch && ch <= 0x11FF) // Hangul Jamo
239 || (0x3130 <= ch && ch <= 0x318F)) // Hangul Compatibility Jamo
250 _CharacterImpl::IsCJK(wchar_t ch)
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
265 _CharacterImpl::IsCombining(wchar_t ch)
267 if ((0x0300 <= ch && ch <= 0x036F) || (0x20D0 <= ch && ch <= 0x20FF)
268 || (0x1DC0 <= ch && ch <= 0x1DFF) || (0xFE20 <= ch && ch <= 0xFE2F))
278 _CharacterImpl::IsLanguage(wchar_t ch)
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)