933138114bdb8a826b4064bb8fdba25fee1c0ce5
[platform/core/uifw/dali-adaptor.git] / text / dali / devel-api / text-abstraction / script.h
1 #ifndef __DALI_TOOLKIT_TEXT_ABSTRACTION_SCRIPT_H__
2 #define __DALI_TOOLKIT_TEXT_ABSTRACTION_SCRIPT_H__
3
4 /*
5  * Copyright (c) 2015 Samsung Electronics Co., Ltd.
6  *
7  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  *
11  * http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  *
19  */
20
21 // EXTERNAL INCLUDES
22 #include <dali/public-api/common/dali-common.h>
23
24 // INTERNAL INCLUDES
25 #include <dali/devel-api/text-abstraction/text-abstraction-definitions.h>
26
27 namespace Dali
28 {
29
30 namespace TextAbstraction
31 {
32
33 /**
34  * @brief Script is the writing system used by a language.
35  * Typically one script can be used to write different languages although one language could be written in different scrips.
36  */
37 enum Script
38 {
39   COMMON,        ///< Valid for all scripts. i.e white space or '\n'.
40
41   ASCII_DIGITS,  ///< ASCII digits.
42   ASCII_PS,      ///< ASCII punctuation and symbols.
43
44   C1_CONTROLS,   ///< Controls of the C1 Controls and Latin-1 Supplement unicode block.
45   C1_PS,         ///< Punctuation and symbols of the C1 Controls and Latin-1 Supplement unicode block.
46   C1_MATH,       ///< Math symbols of the C1 Controls and Latin-1 Supplement unicode block.
47
48   SML_P,         ///< Punctuation symbols of the Spacing Modifier Letters unicode block.
49   PHONETIC_U,    ///< Uralic phonetic symbols of the Phonetic Extensions unicode block.
50   PHONETIC_SS,   ///< Subscripts and superscripts of the Phonetic Extensions unicode block.
51
52   NUMERIC_SS,    ///< Numeric subscripts and superscripts.
53
54   LETTER_LIKE,   ///< Symbols of the Letterlike unicode block.
55   NUMBER_FORMS,  ///< Number Forms unicode block.
56   FRACTIONS_NF,  ///< Numeric fraction symbols of the Number Forms unicode block.
57   NON_LATIN_LED, ///< Non latin symbols within the Latin Extended D unicode block.
58   HWFW_S,        ///< Non latin symbols within the Halfwidth and fullwidth unicode block.
59
60   CYRILLIC,      ///< The Cyrillic script. Used by Russian, Bulgarian, Ukrainian, Macedonian, ...
61   GREEK,         ///< The Greek script. Used by Greek.
62   LATIN,         ///< The latin script. Used by many western languages and others around the world.
63
64   ARABIC,        ///< The arabic script. Used by Arab and Urdu among others.
65   HEBREW,        ///< The Hebrew script. Used by the Hebrew, Yiddish, Ladino, and Judeo-Arabic.
66
67   ARMENIAN,      ///< The Armenian script. Used by Armenian.
68   GEORGIAN,      ///< The Georgian script. Used by Georgian.
69
70   CJK,           ///< The CJK script. Used by Chinese, Japanese, Korean and Vietnamese(old writing system).
71   HANGUL,        ///< The Hangul jamo script. Used by Korean.
72   HIRAGANA,      ///< The Hiragana script. Used by the Japanese.
73   KATAKANA,      ///< The Katakana script. Used by the Japanese.
74   BOPOMOFO,      ///< The Bopomofo script. Also called Zhuyin fuhao or Zhuyin. A phonetic notation used for the transcription of spoken Chinese.
75
76   BENGALI,       ///< The Bengali script. Used by Bangla, Assamese, Bishnupriya Manipuri, Daphla, Garo, Hallam, Khasi, Mizo, Munda, Naga, Rian, and Santali.
77   BURMESE,       ///< The Burmese script. Used by the Burmese (Myanmar) language.
78   DEVANAGARI,    ///< The devanagari script. Used by Hindi, Marathi, Sindhi, Nepali and Sanskrit.
79   GUJARATI,      ///< The Gujarati script. Used by Gujarati.
80   GURMUKHI,      ///< The Gurmukhi script. Used by Punjabi.
81   KANNADA,       ///< The Kannada script. Used by Kannada and Tulu.
82   MALAYALAM,     ///< The Malayalam script. Used by Malayalam.
83   ORIYA,         ///< The Oriya script. Used by Oriya (Odia), Khondi, and Santali.
84   SINHALA,       ///< The Sinhala script. Used by Sinhala and Pali.
85   TAMIL,         ///< The Tamil script. Used by Tamil, Badaga, and Saurashtra.
86   TELUGU,        ///< The Telugu script. Used by Telugu, Gondi, and Lambadi.
87
88   LAO,           ///< The Lao script. Used by the Lao language.
89   THAI,          ///< The Thai script. Used by the Thai language
90   KHMER,         ///< The Khmer script. Used by the Khmer language.
91   JAVANESE,      ///< The Javanese script. Used by the Javanese language.
92   SUNDANESE,     ///< The Sundanese script. Used by the Sundanese language.
93
94   GEEZ,          ///< The Ge'ez script. Used by the Amharic, Tigrinya and other languages in Ethiopia and Eritrea.
95   OL_CHIKI,      ///< The Ol Chiki script. Used by the Santali.
96   BAYBAYIN,      ///< The Baybayin script. Used by the Tagalog, Bikol languages, Ilocano, Pangasinan, Visayan and other languages in Philippines.
97
98   EMOJI,         ///< The Emoji which map to standardized Unicode characters.
99
100   SYMBOLS1,      ///< Some symbols.
101   SYMBOLS2,      ///< Some symbols.
102   SYMBOLS3,      ///< Some symbols.
103   SYMBOLS4,      ///< Some symbols.
104   SYMBOLS5,      ///< Some symbols.
105
106   UNKNOWN        ///< The script is unknown.
107 };
108
109 const char* const ScriptName[] =
110 {
111   "COMMON",        ///< Valid for all scripts. i.e white space or '\n'.
112
113   "ASCII_DIGITS",  ///< ASCII digits.
114   "ASCII_PS",      ///< ASCII punctuation and symbols.
115
116   "C1_CONTROLS",   ///< Controls of the C1 Controls and Latin-1 Supplement unicode block.
117   "C1_PS",         ///< Punctuation and symbols of the C1 Controls and Latin-1 Supplement unicode block.
118   "C1_MATH",       ///< Math symbols of the C1 Controls and Latin-1 Supplement unicode block.
119
120   "SML_P",         ///< Punctuation symbols of the Spacing Modifier Letters unicode block.
121   "PHONETIC_U",    ///< Uralic phonetic symbols of the Phonetic Extensions unicode block.
122   "PHONETIC_SS",   ///< Subscripts and superscripts of the Phonetic Extensions unicode block.
123
124   "NUMERIC_SS",    ///< Numeric subscripts and superscripts.
125
126   "LETTER_LIKE",   ///< Symbols of the Letterlike unicode block.
127   "NUMBER_FORMS",  ///< Number Forms unicode block.
128   "FRACTIONS_NF",  ///< Numeric fraction symbols of the Number Forms unicode block.
129   "NON_LATIN_LED", ///< Non latin symbols within the Latin Extended D unicode block.
130   "HWFW_S",        ///< Non latin symbols within the Halfwidth and fullwidth unicode block.
131
132   "CYRILLIC",      ///< The Cyrillic script. Used by Russian, Bulgarian, Ukrainian, Macedonian, ...
133   "GREEK",         ///< The Greek script. Used by Greek.
134   "LATIN",         ///< The latin script. Used by many western languages and others around the world.
135
136   "ARABIC",        ///< The arabic script. Used by Arab and Urdu among others.
137   "HEBREW",        ///< The Hebrew script. Used by the Hebrew, Yiddish, Ladino, and Judeo-Arabic.
138
139   "ARMENIAN",      ///< The Armenian script. Used by Armenian.
140   "GEORGIAN",      ///< The Georgian script. Used by Georgian.
141
142   "CJK",           ///< The CJK script. Used by Chinese, Japanese, Korean and Vietnamese(old writing system).
143   "HANGUL",        ///< The Hangul jamo script. Used by Korean.
144   "HIRAGANA",      ///< The Hiragana script. Used by the Japanese.
145   "KATAKANA",      ///< The Katakana script. Used by the Japanese.
146   "BOPOMOFO",      ///< The Bopomofo script. Also called Zhuyin fuhao or Zhuyin. A phonetic notation used for the transcription of spoken Chinese.
147
148   "BENGALI",       ///< The Bengali script. Used by Bangla, Assamese, Bishnupriya Manipuri, Daphla, Garo, Hallam, Khasi, Mizo, Munda, Naga, Rian, and Santali.
149   "BURMESE",       ///< The Burmese script. Used by the Burmese (Myanmar) language.
150   "DEVANAGARI",    ///< The devanagari script. Used by Hindi, Marathi, Sindhi, Nepali and Sanskrit.
151   "GUJARATI",      ///< The Gujarati script. Used by Gujarati.
152   "GURMUKHI",      ///< The Gurmukhi script. Used by Punjabi.
153   "KANNADA",       ///< The Kannada script. Used by Kannada and Tulu.
154   "MALAYALAM",     ///< The Malayalam script. Used by Malayalam.
155   "ORIYA",         ///< The Oriya script. Used by Oriya (Odia), Khondi, and Santali.
156   "SINHALA",       ///< The Sinhala script. Used by Sinhala and Pali.
157   "TAMIL",         ///< The Tamil script. Used by Tamil, Badaga, and Saurashtra.
158   "TELUGU",        ///< The Telugu script. Used by Telugu, Gondi, and Lambadi.
159
160   "LAO",           ///< The Lao script. Used by the Lao language.
161   "THAI",          ///< The Thai script. Used by the Thai language
162   "KHMER",         ///< The Khmer script. Used by the Khmer language.
163   "JAVANESE",      ///< The Javanese script. Used by the Javanese language.
164   "SUNDANESE",     ///< The Sundanese script. Used by the Sundanese language.
165
166   "GEEZ",          ///< The Ge'ez script also known as Ethiopic. Used by the Amharic, Tigrinya and other languages in Ethiopia and Eritrea.
167   "OL_CHIKI",      ///< The Ol Chiki script. Used by the Santali.
168   "BAYBAYIN",      ///< The Baybayin script. Used by the Tagalog, Bikol languages, Ilocano, Pangasinan, Visayan and other languages in Philippines.
169
170   "EMOJI",         ///< The Emoji which map to standardized Unicode characters.
171
172   "SYMBOLS1",      ///< Some symbols.
173   "SYMBOLS2",      ///< Some symbols.
174   "SYMBOLS3",      ///< Some symbols.
175   "SYMBOLS4",      ///< Some symbols.
176   "SYMBOLS5",      ///< Some symbols.
177
178   "UNKNOWN"        ///< The script is unknown.
179 };
180
181 /**
182  * @brief Whether the script is a right to left script.
183  *
184  * @param[in] script The script.
185  *
186  * @return @e true if the script is right to left.
187  */
188 DALI_IMPORT_API bool IsRightToLeftScript( Script script );
189
190 /**
191  * @brief Retrieves a character's script.
192  *
193  * @param[in] character The character.
194  *
195  * @return The chraracter's script.
196  */
197 DALI_IMPORT_API Script GetCharacterScript( Character character );
198
199 /**
200  * @brief Whether the character is a white space.
201  *
202  * @param[in] character The character.
203  *
204  * @return @e true if the character is a white space.
205  */
206 DALI_IMPORT_API bool IsWhiteSpace( Character character );
207
208 /**
209  * @brief Whether the character is a new paragraph character.
210  *
211  * @param[in] character The character.
212  *
213  * @return @e true if the character is a new paragraph character.
214  */
215 DALI_IMPORT_API bool IsNewParagraph( Character character );
216
217 /**
218  * @brief Whether the character is a zero width non joiner.
219  *
220  * @param[in] character The character.
221  *
222  * @return @e true if the character is a zero width non joiner.
223  */
224 DALI_IMPORT_API bool IsZeroWidthNonJoiner( Character character );
225
226 /**
227  * @brief Whether the character is a zero width joiner.
228  *
229  * @param[in] character The character.
230  *
231  * @return @e true if the character is a zero width joiner.
232  */
233 DALI_IMPORT_API bool IsZeroWidthJoiner( Character character );
234
235 /**
236  * @brief Whether the character is a zero width space.
237  *
238  * @param[in] character The character.
239  *
240  * @return @e true if the character is a zero width space.
241  */
242 DALI_IMPORT_API bool IsZeroWidthSpace( Character character );
243
244 /**
245  * @brief Whether the character is a left to right mark.
246  *
247  * @param[in] character The character.
248  *
249  * @return @e true if the character is a left to right mark.
250  */
251 DALI_IMPORT_API bool IsLeftToRightMark( Character character );
252
253 /**
254  * @brief Whether the character is a right to left mark.
255  *
256  * @param[in] character The character.
257  *
258  * @return @e true if the character is a right to left mark.
259  */
260 DALI_IMPORT_API bool IsRightToLeftMark( Character character );
261
262 /**
263  * @brief Whether the character is a thin space.
264  *
265  * @param[in] character The character.
266  *
267  * @return @e true if the character is a thin space.
268  */
269 DALI_IMPORT_API bool IsThinSpace( Character character );
270
271 /**
272  * @brief Whether the character is common within all scripts.
273  *
274  * @param[in] character The character.
275  *
276  * @return @e true if the character is common within all scripts.
277  */
278 DALI_IMPORT_API bool IsCommonScript( Character character );
279
280 /**
281  * @brief Whether the script contains ligatures that must be 'broken' for selection or cursor position.
282  *
283  * i.e The latin script has the 'ff' or 'fi' ligatures that need to be broken to position the cursor
284  * between the two characters. Equally the arabic script has the 'ﻻ' ligature that needs to be broken.
285  *
286  * @param[in] script The script.
287  *
288  * @return @e true if the script has ligatures that must be 'broken'.
289  */
290 DALI_IMPORT_API bool HasLigatureMustBreak( Script script );
291 } // namespace TextAbstraction
292
293 } // namespace Dali
294
295 #endif // __DALI_TOOLKIT_TEXT_ABSTRACTION_SCRIPT_H__