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