2 * Copyright (c) 2015 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.
19 #include <dali-toolkit/public-api/text/script.h>
32 const unsigned int CHAR_ZWS = 0x200B; ///< Zero width space.
33 const unsigned int CHAR_ZWNJ = 0x200C; ///< Zero width non joiner.
34 const unsigned int CHAR_ZWJ = 0x200D; ///< Zero width joiner.
35 const unsigned int CHAR_LTRM = 0x200E; ///< Left to Right Mark.
36 const unsigned int CHAR_RTLM = 0x200F; ///< Right to Left Mark.
37 const unsigned int CHAR_TS = 0x2009; ///< Thin Space.
40 Script GetCharacterScript( Character character )
43 // 0x0000 - 0x007f C0 Controls and Basic Latin
44 // 0x0080 - 0x00ff C1 Controls and Latin-1 Supplement
45 // 0x0100 - 0x017f Latin Extended-A
46 // 0x0180 - 0x024f Latin Extended-B
47 // 0x0250 - 0x02af IPA Extensions
48 // 0x02b0 - 0x02ff Spacing Modifier Letters
49 // 0x1d00 - 0x1d7f Phonetic Extensions
50 // 0x1d80 - 0x1dbf Phonetic Extensions Supplement
51 // 0x1e00 - 0x1eff Latin Extended Additional
52 // 0x2070 - 0x209f Superscripts and Subscripts
53 // 0x2100 - 0x214f Letterlike symbols
54 // 0x2150 - 0x218f Number Forms
55 // 0x2c60 - 0x2c7f Latin Extended-C
56 // 0xa720 - 0xa7ff Latin Extended-D
57 // 0xab30 - 0xab6f Latin Extended-E
58 // 0xfb00 - 0xfb4f Alphabetic Presentation Forms
59 // 0xff00 - 0xffef Halfwidth and Fullwidth Forms
62 // 0x0900 - 0x097f Devanagari
63 // 0x0980 - 0x09ff Bengali
64 // 0x0a00 - 0x0a7f Gurmukhi
65 // 0x0a80 - 0x0aff Gujarati
66 // 0x0b00 - 0x0b7f Oriya
67 // 0x0b80 - 0x0bff Tamil
68 // 0x0c00 - 0x0c7f Telugu
69 // 0x0c80 - 0x0cff Kannada
70 // 0x0d00 - 0x0d7f Malayalam
73 // 0x0d80 - 0x0dff Sinhala
76 // 0x0600 - 0x06ff Arabic
77 // 0x0750 - 0x077f Arabic Supplement
78 // 0x08A0 - 0x08ff Arabic Extended-A
79 // 0xfb50 - 0xfdff Arabic Presentation Forms-A
80 // 0xfe70 - 0xfeff Arabic Presentation Forms-B
81 // 0x1ee00 - 0x1eeff Arabic Mathematical Alphabetic Symbols
83 // CJK and Vietnamese script.
84 // 0x2E80 - 0x2eff CJK Radicals Supplement
85 // 0x3000 - 0x303f CJK Symbols and Punctuation
86 // 0x3200 - 0x32ff Enclosed CJK Letters and Months
87 // 0x3400 - 0x4dbf CJK Unified Ideographs Extension A
88 // 0x4e00 - 0x62ff CJK Unified Ideographs
89 // 0x6300 - 0x77ff CJK Unified Ideographs
90 // 0x7800 - 0x8cff CJK Unified Ideographs
91 // 0x8d00 - 0x9fff CJK Unified Ideographs
92 // 0x20000 - 0x215ff CJK Unified Ideographs Extension B
93 // 0x21600 - 0x230ff CJK Unified Ideographs Extension B
94 // 0x23100 - 0x245ff CJK Unified Ideographs Extension B
95 // 0x24600 - 0x260ff CJK Unified Ideographs Extension B
96 // 0x26100 - 0x275ff CJK Unified Ideographs Extension B
97 // 0x27600 - 0x290ff CJK Unified Ideographs Extension B
98 // 0x29100 - 0x2a6df CJK Unified Ideographs Extension B
99 // 2a700-2b73f. CJK Unified Ideographs Extension C
100 // 2b740-2b81f. CJK Unified Ideographs Extension D
103 // 0x1100 - 0x11ff Hangul jamo
104 // 0x3130 - 0x318f Hangul Compatibility Jamo
105 // 0xa960 - 0xa97f Hangul Jamo Extended-A
106 // 0xac00 - 0xd7af Hangul Syllables
107 // 0xd7b0 - 0xd7ff Hangul Jamo Extended-B
110 // 0x1780 - 0x17ff Khmer
111 // 0x19e0 - 0x19ff Khmer Symbols
114 // 0x0e80 - 0x0eff Lao
117 // 0x0e00 - 0x0e7f Thai
120 // 0x1000 - 0x109f Myanmar
123 if( character <= 0x0cff )
125 if( character <= 0x09ff )
127 if( character <= 0x077f )
129 if( character <= 0x02ff )
131 return TextAbstraction::LATIN;
133 if( ( 0x0600 <= character ) && ( character <= 0x06ff ) )
135 return TextAbstraction::ARABIC;
137 if( ( 0x0750 <= character ) && ( character <= 0x077f ) )
139 return TextAbstraction::ARABIC;
144 if( ( 0x08A0 <= character ) && ( character <= 0x08ff ) )
146 return TextAbstraction::ARABIC;
148 if( ( 0x0900 <= character ) && ( character <= 0x097f ) )
150 return TextAbstraction::DEVANAGARI;
152 if( ( 0x0980 <= character ) && ( character <= 0x09ff ) )
154 return TextAbstraction::BENGALI;
160 if( character <= 0x0b7f )
162 if( ( 0x0a00 <= character ) && ( character <= 0x0a7f ) )
164 return TextAbstraction::GURMUKHI;
166 if( ( 0x0a80 <= character ) && ( character <= 0x0aff ) )
168 return TextAbstraction::GUJARATI;
170 if( ( 0x0b00 <= character ) && ( character <= 0x0b7f ) )
172 return TextAbstraction::ORIYA;
177 if( ( 0x0b80 <= character ) && ( character <= 0x0bff ) )
179 return TextAbstraction::TAMIL;
181 if( ( 0x0c00 <= character ) && ( character <= 0x0c7f ) )
183 return TextAbstraction::TELUGU;
185 if( ( 0x0c80 <= character ) && ( character <= 0x0cff ) )
187 return TextAbstraction::KANNADA;
194 if( character <= 0x2c7f )
196 if( character <= 0x1eff )
198 if( ( 0x0d00 <= character ) && ( character <= 0x0d7f ) )
200 return TextAbstraction::MALAYALAM;
202 if( ( 0x0d80 <= character ) && ( character <= 0x0dff ) )
204 return TextAbstraction::SINHALA;
206 if( ( 0x0e00 <= character ) && ( character <= 0x0e7f ) )
208 return TextAbstraction::THAI;
210 if( ( 0x0e80 <= character ) && ( character <= 0x0eff ) )
212 return TextAbstraction::LAO;
214 if( ( 0x1000 <= character ) && ( character <= 0x109f ) )
216 return TextAbstraction::BURMESE;
218 if( ( 0x1100 <= character ) && ( character <= 0x11ff ) )
220 return TextAbstraction::HANGUL;
222 if( ( 0x1780 <= character ) && ( character <= 0x17ff ) )
224 return TextAbstraction::KHMER;
226 if( ( 0x19e0 <= character ) && ( character <= 0x19ff ) )
228 return TextAbstraction::KHMER;
230 if( ( 0x1d00 <= character ) && ( character <= 0x1eff ) )
232 return TextAbstraction::LATIN;
237 if( ( 0x2070 <= character ) && ( character <= 0x209f ) )
239 return TextAbstraction::LATIN;
241 if( ( 0x2100 <= character ) && ( character <= 0x218f ) )
243 return TextAbstraction::LATIN;
245 if( ( 0x2c60 <= character ) && ( character <= 0x2c7f ) )
247 return TextAbstraction::LATIN;
253 if( character <= 0xfdff )
255 if( ( 0x2e80 <= character ) && ( character <= 0x2eff ) )
257 return TextAbstraction::CJK;
259 if( ( 0x3000 <= character ) && ( character <= 0x303f ) )
261 return TextAbstraction::CJK;
263 if( ( 0x3130 <= character ) && ( character <= 0x318f ) )
265 return TextAbstraction::HANGUL;
267 if( ( 0x3200 <= character ) && ( character <= 0x32ff ) )
269 return TextAbstraction::CJK;
271 if( ( 0x3400 <= character ) && ( character <= 0x4dbf ) )
273 return TextAbstraction::CJK;
275 if( ( 0x4e00 <= character ) && ( character <= 0x62ff ) )
277 return TextAbstraction::CJK;
279 if( ( 0x6300 <= character ) && ( character <= 0x77ff ) )
281 return TextAbstraction::CJK;
283 if( ( 0x7800 <= character ) && ( character <= 0x8cff ) )
285 return TextAbstraction::CJK;
287 if( ( 0x8d00 <= character ) && ( character <= 0x9fff ) )
289 return TextAbstraction::CJK;
291 if( ( 0xa720 <= character ) && ( character <= 0xa7ff ) )
293 return TextAbstraction::LATIN;
295 if( ( 0xa960 <= character ) && ( character <= 0xa97f ) )
297 return TextAbstraction::HANGUL;
299 if( ( 0xab30 <= character ) && ( character <= 0xab6f ) )
301 return TextAbstraction::LATIN;
303 if( ( 0xac00 <= character ) && ( character <= 0xd7af ) )
305 return TextAbstraction::HANGUL;
307 if( ( 0xd7b0 <= character ) && ( character <= 0xd7ff ) )
309 return TextAbstraction::HANGUL;
311 if( ( 0xfb00 <= character ) && ( character <= 0xfb4f ) )
313 return TextAbstraction::LATIN;
315 if( ( 0xfb50 <= character ) && ( character <= 0xfdff ) )
317 return TextAbstraction::ARABIC;
322 if( ( 0xfe70 <= character ) && ( character <= 0xfeff ) )
324 return TextAbstraction::ARABIC;
326 if( ( 0xff00 <= character ) && ( character <= 0xffef ) )
328 return TextAbstraction::LATIN;
330 if( ( 0x1ee00 <= character ) && ( character <= 0x1eeff ) )
332 return TextAbstraction::ARABIC;
334 if( ( 0x20000 <= character ) && ( character <= 0x215ff ) )
336 return TextAbstraction::CJK;
338 if( ( 0x21600 <= character ) && ( character <= 0x230ff ) )
340 return TextAbstraction::CJK;
342 if( ( 0x23100 <= character ) && ( character <= 0x245ff ) )
344 return TextAbstraction::CJK;
346 if( ( 0x24600 <= character ) && ( character <= 0x260ff ) )
348 return TextAbstraction::CJK;
350 if( ( 0x26100 <= character ) && ( character <= 0x275ff ) )
352 return TextAbstraction::CJK;
354 if( ( 0x27600 <= character ) && ( character <= 0x290ff ) )
356 return TextAbstraction::CJK;
358 if( ( 0x29100 <= character ) && ( character <= 0x2a6df ) )
360 return TextAbstraction::CJK;
362 if( ( 0x2a700 <= character ) && ( character <= 0x2b73f ) )
364 return TextAbstraction::CJK;
366 if( ( 0x2b740 <= character ) && ( character <= 0x2b81f ) )
368 return TextAbstraction::CJK;
374 return TextAbstraction::UNKNOWN;
377 bool IsZeroWidthNonJoiner( Character character )
379 return CHAR_ZWNJ == character;
382 bool IsZeroWidthJoiner( Character character )
384 return CHAR_ZWJ == character;
387 bool IsZeroWidthSpace( Character character )
389 return CHAR_ZWS == character;
392 bool IsLeftToRightMark( Character character )
394 return CHAR_LTRM == character;
397 bool IsRightToLeftMark( Character character )
399 return CHAR_RTLM == character;
402 bool IsThinSpace( Character character )
404 return CHAR_TS == character;
409 } // namespace Toolkit