Add hb_script_from_string()
[profile/ivi/org.tizen.video-player.git] / src / hb-unicode.h
1 /*
2  * Copyright (C) 2009  Red Hat, Inc.
3  *
4  *  This is part of HarfBuzz, a text shaping library.
5  *
6  * Permission is hereby granted, without written agreement and without
7  * license or royalty fees, to use, copy, modify, and distribute this
8  * software and its documentation for any purpose, provided that the
9  * above copyright notice and the following two paragraphs appear in
10  * all copies of this software.
11  *
12  * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
13  * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
14  * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
15  * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
16  * DAMAGE.
17  *
18  * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
19  * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
20  * FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
21  * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
22  * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
23  *
24  * Red Hat Author(s): Behdad Esfahbod
25  */
26
27 #ifndef HB_UNICODE_H
28 #define HB_UNICODE_H
29
30 #include "hb-common.h"
31
32 HB_BEGIN_DECLS
33
34
35 /* Unicode General Category property */
36 typedef enum
37 {
38   HB_UNICODE_GENERAL_CATEGORY_CONTROL,                  /* Cc */
39   HB_UNICODE_GENERAL_CATEGORY_FORMAT,                   /* Cf */
40   HB_UNICODE_GENERAL_CATEGORY_UNASSIGNED,               /* Cn */
41   HB_UNICODE_GENERAL_CATEGORY_PRIVATE_USE,              /* Co */
42   HB_UNICODE_GENERAL_CATEGORY_SURROGATE,                /* Cs */
43   HB_UNICODE_GENERAL_CATEGORY_LOWERCASE_LETTER,         /* Ll */
44   HB_UNICODE_GENERAL_CATEGORY_MODIFIER_LETTER,          /* Lm */
45   HB_UNICODE_GENERAL_CATEGORY_OTHER_LETTER,             /* Lo */
46   HB_UNICODE_GENERAL_CATEGORY_TITLECASE_LETTER,         /* Lt */
47   HB_UNICODE_GENERAL_CATEGORY_UPPERCASE_LETTER,         /* Lu */
48   HB_UNICODE_GENERAL_CATEGORY_COMBINING_MARK,           /* Mc */
49   HB_UNICODE_GENERAL_CATEGORY_ENCLOSING_MARK,           /* Me */
50   HB_UNICODE_GENERAL_CATEGORY_NON_SPACING_MARK,         /* Mn */
51   HB_UNICODE_GENERAL_CATEGORY_DECIMAL_NUMBER,           /* Nd */
52   HB_UNICODE_GENERAL_CATEGORY_LETTER_NUMBER,            /* Nl */
53   HB_UNICODE_GENERAL_CATEGORY_OTHER_NUMBER,             /* No */
54   HB_UNICODE_GENERAL_CATEGORY_CONNECT_PUNCTUATION,      /* Pc */
55   HB_UNICODE_GENERAL_CATEGORY_DASH_PUNCTUATION,         /* Pd */
56   HB_UNICODE_GENERAL_CATEGORY_CLOSE_PUNCTUATION,        /* Pe */
57   HB_UNICODE_GENERAL_CATEGORY_FINAL_PUNCTUATION,        /* Pf */
58   HB_UNICODE_GENERAL_CATEGORY_INITIAL_PUNCTUATION,      /* Pi */
59   HB_UNICODE_GENERAL_CATEGORY_OTHER_PUNCTUATION,        /* Po */
60   HB_UNICODE_GENERAL_CATEGORY_OPEN_PUNCTUATION,         /* Ps */
61   HB_UNICODE_GENERAL_CATEGORY_CURRENCY_SYMBOL,          /* Sc */
62   HB_UNICODE_GENERAL_CATEGORY_MODIFIER_SYMBOL,          /* Sk */
63   HB_UNICODE_GENERAL_CATEGORY_MATH_SYMBOL,              /* Sm */
64   HB_UNICODE_GENERAL_CATEGORY_OTHER_SYMBOL,             /* So */
65   HB_UNICODE_GENERAL_CATEGORY_LINE_SEPARATOR,           /* Zl */
66   HB_UNICODE_GENERAL_CATEGORY_PARAGRAPH_SEPARATOR,      /* Zp */
67   HB_UNICODE_GENERAL_CATEGORY_SPACE_SEPARATOR           /* Zs */
68 } hb_unicode_general_category_t;
69
70 /* Unicode Script property */
71 typedef enum
72 {                               /* ISO 15924 code */
73   HB_SCRIPT_INVALID = -1,
74
75   HB_SCRIPT_COMMON       = 0,   /* Zyyy */
76   HB_SCRIPT_INHERITED,          /* Qaai */
77   HB_SCRIPT_ARABIC,             /* Arab */
78   HB_SCRIPT_ARMENIAN,           /* Armn */
79   HB_SCRIPT_BENGALI,            /* Beng */
80   HB_SCRIPT_BOPOMOFO,           /* Bopo */
81   HB_SCRIPT_CHEROKEE,           /* Cher */
82   HB_SCRIPT_COPTIC,             /* Qaac */
83   HB_SCRIPT_CYRILLIC,           /* Cyrl (Cyrs) */
84   HB_SCRIPT_DESERET,            /* Dsrt */
85   HB_SCRIPT_DEVANAGARI,         /* Deva */
86   HB_SCRIPT_ETHIOPIC,           /* Ethi */
87   HB_SCRIPT_GEORGIAN,           /* Geor (Geon, Geoa) */
88   HB_SCRIPT_GOTHIC,             /* Goth */
89   HB_SCRIPT_GREEK,              /* Grek */
90   HB_SCRIPT_GUJARATI,           /* Gujr */
91   HB_SCRIPT_GURMUKHI,           /* Guru */
92   HB_SCRIPT_HAN,                /* Hani */
93   HB_SCRIPT_HANGUL,             /* Hang */
94   HB_SCRIPT_HEBREW,             /* Hebr */
95   HB_SCRIPT_HIRAGANA,           /* Hira */
96   HB_SCRIPT_KANNADA,            /* Knda */
97   HB_SCRIPT_KATAKANA,           /* Kana */
98   HB_SCRIPT_KHMER,              /* Khmr */
99   HB_SCRIPT_LAO,                /* Laoo */
100   HB_SCRIPT_LATIN,              /* Latn (Latf, Latg) */
101   HB_SCRIPT_MALAYALAM,          /* Mlym */
102   HB_SCRIPT_MONGOLIAN,          /* Mong */
103   HB_SCRIPT_MYANMAR,            /* Mymr */
104   HB_SCRIPT_OGHAM,              /* Ogam */
105   HB_SCRIPT_OLD_ITALIC,         /* Ital */
106   HB_SCRIPT_ORIYA,              /* Orya */
107   HB_SCRIPT_RUNIC,              /* Runr */
108   HB_SCRIPT_SINHALA,            /* Sinh */
109   HB_SCRIPT_SYRIAC,             /* Syrc (Syrj, Syrn, Syre) */
110   HB_SCRIPT_TAMIL,              /* Taml */
111   HB_SCRIPT_TELUGU,             /* Telu */
112   HB_SCRIPT_THAANA,             /* Thaa */
113   HB_SCRIPT_THAI,               /* Thai */
114   HB_SCRIPT_TIBETAN,            /* Tibt */
115   HB_SCRIPT_CANADIAN_ABORIGINAL, /* Cans */
116   HB_SCRIPT_YI,                 /* Yiii */
117   HB_SCRIPT_TAGALOG,            /* Tglg */
118   HB_SCRIPT_HANUNOO,            /* Hano */
119   HB_SCRIPT_BUHID,              /* Buhd */
120   HB_SCRIPT_TAGBANWA,           /* Tagb */
121
122   /* Unicode-4.0 additions */
123   HB_SCRIPT_BRAILLE,            /* Brai */
124   HB_SCRIPT_CYPRIOT,            /* Cprt */
125   HB_SCRIPT_LIMBU,              /* Limb */
126   HB_SCRIPT_OSMANYA,            /* Osma */
127   HB_SCRIPT_SHAVIAN,            /* Shaw */
128   HB_SCRIPT_LINEAR_B,           /* Linb */
129   HB_SCRIPT_TAI_LE,             /* Tale */
130   HB_SCRIPT_UGARITIC,           /* Ugar */
131
132   /* Unicode-4.1 additions */
133   HB_SCRIPT_NEW_TAI_LUE,        /* Talu */
134   HB_SCRIPT_BUGINESE,           /* Bugi */
135   HB_SCRIPT_GLAGOLITIC,         /* Glag */
136   HB_SCRIPT_TIFINAGH,           /* Tfng */
137   HB_SCRIPT_SYLOTI_NAGRI,       /* Sylo */
138   HB_SCRIPT_OLD_PERSIAN,        /* Xpeo */
139   HB_SCRIPT_KHAROSHTHI,         /* Khar */
140
141   /* Unicode-5.0 additions */
142   HB_SCRIPT_UNKNOWN,            /* Zzzz */
143   HB_SCRIPT_BALINESE,           /* Bali */
144   HB_SCRIPT_CUNEIFORM,          /* Xsux */
145   HB_SCRIPT_PHOENICIAN,         /* Phnx */
146   HB_SCRIPT_PHAGS_PA,           /* Phag */
147   HB_SCRIPT_NKO,                /* Nkoo */
148
149   /* Unicode-5.1 additions */
150   HB_SCRIPT_KAYAH_LI,           /* Kali */
151   HB_SCRIPT_LEPCHA,             /* Lepc */
152   HB_SCRIPT_REJANG,             /* Rjng */
153   HB_SCRIPT_SUNDANESE,          /* Sund */
154   HB_SCRIPT_SAURASHTRA,         /* Saur */
155   HB_SCRIPT_CHAM,               /* Cham */
156   HB_SCRIPT_OL_CHIKI,           /* Olck */
157   HB_SCRIPT_VAI,                /* Vaii */
158   HB_SCRIPT_CARIAN,             /* Cari */
159   HB_SCRIPT_LYCIAN,             /* Lyci */
160   HB_SCRIPT_LYDIAN,             /* Lydi */
161
162   /* Unicode-5.2 additions */
163   HB_SCRIPT_AVESTAN,                /* Avst */
164   HB_SCRIPT_BAMUM,                  /* Bamu */
165   HB_SCRIPT_EGYPTIAN_HIEROGLYPHS,   /* Egyp */
166   HB_SCRIPT_IMPERIAL_ARAMAIC,       /* Armi */
167   HB_SCRIPT_INSCRIPTIONAL_PAHLAVI,  /* Phli */
168   HB_SCRIPT_INSCRIPTIONAL_PARTHIAN, /* Prti */
169   HB_SCRIPT_JAVANESE,               /* Java */
170   HB_SCRIPT_KAITHI,                 /* Kthi */
171   HB_SCRIPT_LISU,                   /* Lisu */
172   HB_SCRIPT_MEETEI_MAYEK,           /* Mtei */
173   HB_SCRIPT_OLD_SOUTH_ARABIAN,      /* Sarb */
174   HB_SCRIPT_OLD_TURKIC,             /* Orkh */
175   HB_SCRIPT_SAMARITAN,              /* Samr */
176   HB_SCRIPT_TAI_THAM,               /* Lana */
177   HB_SCRIPT_TAI_VIET,               /* Tavt */
178
179   /* Unicode-6.0 additions */
180   HB_SCRIPT_BATAK,                  /* Batk */
181   HB_SCRIPT_BRAHMI,                 /* Brah */
182   HB_SCRIPT_MANDAIC                 /* Mand */
183 } hb_script_t;
184
185
186 /*
187  * hb_unicode_funcs_t
188  */
189
190 typedef struct _hb_unicode_funcs_t hb_unicode_funcs_t;
191
192 hb_unicode_funcs_t *
193 hb_unicode_funcs_create (void);
194
195 hb_unicode_funcs_t *
196 hb_unicode_funcs_reference (hb_unicode_funcs_t *ufuncs);
197
198 unsigned int
199 hb_unicode_funcs_get_reference_count (hb_unicode_funcs_t *ufuncs);
200
201 void
202 hb_unicode_funcs_destroy (hb_unicode_funcs_t *ufuncs);
203
204 hb_unicode_funcs_t *
205 hb_unicode_funcs_copy (hb_unicode_funcs_t *ufuncs);
206
207 void
208 hb_unicode_funcs_make_immutable (hb_unicode_funcs_t *ufuncs);
209
210 hb_bool_t
211 hb_unicode_funcs_is_immutable (hb_unicode_funcs_t *ufuncs);
212
213 /*
214  * funcs
215  */
216
217
218 /* typedefs */
219
220 typedef hb_codepoint_t (*hb_unicode_get_mirroring_func_t) (hb_codepoint_t unicode);
221 typedef hb_unicode_general_category_t (*hb_unicode_get_general_category_func_t) (hb_codepoint_t unicode);
222 typedef hb_script_t (*hb_unicode_get_script_func_t) (hb_codepoint_t unicode);
223 typedef unsigned int (*hb_unicode_get_combining_class_func_t) (hb_codepoint_t unicode);
224 typedef unsigned int (*hb_unicode_get_eastasian_width_func_t) (hb_codepoint_t unicode);
225
226
227 /* setters */
228
229 void
230 hb_unicode_funcs_set_mirroring_func (hb_unicode_funcs_t *ufuncs,
231                                      hb_unicode_get_mirroring_func_t mirroring_func);
232
233 void
234 hb_unicode_funcs_set_general_category_func (hb_unicode_funcs_t *ufuncs,
235                                             hb_unicode_get_general_category_func_t general_category_func);
236
237 void
238 hb_unicode_funcs_set_script_func (hb_unicode_funcs_t *ufuncs,
239                                   hb_unicode_get_script_func_t script_func);
240
241 void
242 hb_unicode_funcs_set_combining_class_func (hb_unicode_funcs_t *ufuncs,
243                                            hb_unicode_get_combining_class_func_t combining_class_func);
244
245 void
246 hb_unicode_funcs_set_eastasian_width_func (hb_unicode_funcs_t *ufuncs,
247                                            hb_unicode_get_eastasian_width_func_t eastasian_width_func);
248
249
250 /* getters */
251
252 /* These never return NULL.  Return fallback defaults instead. */
253
254 hb_unicode_get_mirroring_func_t
255 hb_unicode_funcs_get_mirroring_func (hb_unicode_funcs_t *ufuncs);
256
257 hb_unicode_get_general_category_func_t
258 hb_unicode_funcs_get_general_category_func (hb_unicode_funcs_t *ufuncs);
259
260 hb_unicode_get_script_func_t
261 hb_unicode_funcs_get_script_func (hb_unicode_funcs_t *ufuncs);
262
263 hb_unicode_get_combining_class_func_t
264 hb_unicode_funcs_get_combining_class_func (hb_unicode_funcs_t *ufuncs);
265
266 hb_unicode_get_eastasian_width_func_t
267 hb_unicode_funcs_get_eastasian_width_func (hb_unicode_funcs_t *ufuncs);
268
269
270 /* accessors */
271
272 hb_codepoint_t
273 hb_unicode_get_mirroring (hb_unicode_funcs_t *ufuncs,
274                           hb_codepoint_t unicode);
275
276 hb_unicode_general_category_t
277 hb_unicode_get_general_category (hb_unicode_funcs_t *ufuncs,
278                                  hb_codepoint_t unicode);
279
280 hb_script_t
281 hb_unicode_get_script (hb_unicode_funcs_t *ufuncs,
282                        hb_codepoint_t unicode);
283
284 unsigned int
285 hb_unicode_get_combining_class (hb_unicode_funcs_t *ufuncs,
286                                 hb_codepoint_t unicode);
287
288 unsigned int
289 hb_unicode_get_eastasian_width (hb_unicode_funcs_t *ufuncs,
290                                 hb_codepoint_t unicode);
291
292
293 /* Script functions */
294
295 hb_script_t
296 hb_script_from_iso15924_tag (hb_tag_t tag);
297
298 /* suger for tag_from_string() then script_from_iso15924_tag */
299 hb_script_t
300 hb_script_from_string (const char *s);
301
302 hb_tag_t
303 hb_script_to_iso15924_tag (hb_script_t script);
304
305 hb_direction_t
306 hb_script_get_horizontal_direction (hb_script_t script);
307
308 HB_END_DECLS
309
310 #endif /* HB_UNICODE_H */