Move enum types to hb-common.h
[profile/ivi/org.tizen.video-player.git] / src / hb-common.h
1 /*
2  * Copyright (C) 2007,2008,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_COMMON_H
28 #define HB_COMMON_H
29
30 # ifdef __cplusplus
31 #  define HB_BEGIN_DECLS        extern "C" {
32 #  define HB_END_DECLS          }
33 # else /* !__cplusplus */
34 #  define HB_BEGIN_DECLS
35 #  define HB_END_DECLS
36 # endif /* !__cplusplus */
37
38 HB_BEGIN_DECLS
39
40
41 #ifdef _MSC_VER
42 typedef signed char int8_t;
43 typedef unsigned char uint8_t;
44 typedef signed short int16_t;
45 typedef unsigned short uint16_t;
46 typedef signed int int32_t;
47 typedef unsigned int uint32_t;
48 typedef signed long long int64_t;
49 typedef unsigned long long uint64_t;
50 #else
51 #include <stdint.h>
52 #endif
53
54 typedef int hb_bool_t;
55
56 typedef uint32_t hb_codepoint_t;
57 typedef int32_t hb_position_t;
58 typedef uint32_t hb_mask_t;
59
60 typedef union _hb_var_int_t {
61   uint32_t u32;
62   int32_t i32;
63   uint16_t u16[2];
64   int16_t i16[2];
65   uint8_t u8[4];
66   int8_t i8[4];
67 } hb_var_int_t;
68
69 typedef void (*hb_destroy_func_t) (void *user_data);
70
71
72 /* hb_tag_t */
73
74 typedef uint32_t hb_tag_t;
75
76 #define HB_TAG(a,b,c,d) ((hb_tag_t)((((uint8_t)(a))<<24)|(((uint8_t)(b))<<16)|(((uint8_t)(c))<<8)|((uint8_t)(d))))
77
78 #define HB_TAG_NONE HB_TAG(0,0,0,0)
79
80 hb_tag_t hb_tag_from_string (const char *s);
81
82
83 /* hb_direction_t */
84
85 typedef enum _hb_direction_t {
86   HB_DIRECTION_INVALID = -1,
87   HB_DIRECTION_LTR = 0,
88   HB_DIRECTION_RTL,
89   HB_DIRECTION_TTB,
90   HB_DIRECTION_BTT
91 } hb_direction_t;
92
93 #define HB_DIRECTION_IS_HORIZONTAL(dir) ((((unsigned int) (dir)) & ~1U) == 0)
94 #define HB_DIRECTION_IS_VERTICAL(dir)   ((((unsigned int) (dir)) & ~1U) == 2)
95 #define HB_DIRECTION_IS_FORWARD(dir)    ((((unsigned int) (dir)) & ~2U) == 0)
96 #define HB_DIRECTION_IS_BACKWARD(dir)   ((((unsigned int) (dir)) & ~2U) == 1)
97 #define HB_DIRECTION_REVERSE(dir)       ((hb_direction_t) (((unsigned int) (dir)) ^ 1))
98
99
100 /* hb_language_t */
101
102 typedef struct _hb_language_t *hb_language_t;
103
104 hb_language_t
105 hb_language_from_string (const char *str);
106
107 const char *
108 hb_language_to_string (hb_language_t language);
109
110
111 /* hb_unicode_general_category_t */
112
113 typedef enum
114 {
115   HB_UNICODE_GENERAL_CATEGORY_CONTROL,                  /* Cc */
116   HB_UNICODE_GENERAL_CATEGORY_FORMAT,                   /* Cf */
117   HB_UNICODE_GENERAL_CATEGORY_UNASSIGNED,               /* Cn */
118   HB_UNICODE_GENERAL_CATEGORY_PRIVATE_USE,              /* Co */
119   HB_UNICODE_GENERAL_CATEGORY_SURROGATE,                /* Cs */
120   HB_UNICODE_GENERAL_CATEGORY_LOWERCASE_LETTER,         /* Ll */
121   HB_UNICODE_GENERAL_CATEGORY_MODIFIER_LETTER,          /* Lm */
122   HB_UNICODE_GENERAL_CATEGORY_OTHER_LETTER,             /* Lo */
123   HB_UNICODE_GENERAL_CATEGORY_TITLECASE_LETTER,         /* Lt */
124   HB_UNICODE_GENERAL_CATEGORY_UPPERCASE_LETTER,         /* Lu */
125   HB_UNICODE_GENERAL_CATEGORY_COMBINING_MARK,           /* Mc */
126   HB_UNICODE_GENERAL_CATEGORY_ENCLOSING_MARK,           /* Me */
127   HB_UNICODE_GENERAL_CATEGORY_NON_SPACING_MARK,         /* Mn */
128   HB_UNICODE_GENERAL_CATEGORY_DECIMAL_NUMBER,           /* Nd */
129   HB_UNICODE_GENERAL_CATEGORY_LETTER_NUMBER,            /* Nl */
130   HB_UNICODE_GENERAL_CATEGORY_OTHER_NUMBER,             /* No */
131   HB_UNICODE_GENERAL_CATEGORY_CONNECT_PUNCTUATION,      /* Pc */
132   HB_UNICODE_GENERAL_CATEGORY_DASH_PUNCTUATION,         /* Pd */
133   HB_UNICODE_GENERAL_CATEGORY_CLOSE_PUNCTUATION,        /* Pe */
134   HB_UNICODE_GENERAL_CATEGORY_FINAL_PUNCTUATION,        /* Pf */
135   HB_UNICODE_GENERAL_CATEGORY_INITIAL_PUNCTUATION,      /* Pi */
136   HB_UNICODE_GENERAL_CATEGORY_OTHER_PUNCTUATION,        /* Po */
137   HB_UNICODE_GENERAL_CATEGORY_OPEN_PUNCTUATION,         /* Ps */
138   HB_UNICODE_GENERAL_CATEGORY_CURRENCY_SYMBOL,          /* Sc */
139   HB_UNICODE_GENERAL_CATEGORY_MODIFIER_SYMBOL,          /* Sk */
140   HB_UNICODE_GENERAL_CATEGORY_MATH_SYMBOL,              /* Sm */
141   HB_UNICODE_GENERAL_CATEGORY_OTHER_SYMBOL,             /* So */
142   HB_UNICODE_GENERAL_CATEGORY_LINE_SEPARATOR,           /* Zl */
143   HB_UNICODE_GENERAL_CATEGORY_PARAGRAPH_SEPARATOR,      /* Zp */
144   HB_UNICODE_GENERAL_CATEGORY_SPACE_SEPARATOR           /* Zs */
145 } hb_unicode_general_category_t;
146
147
148 /* hb_script_t */
149
150 typedef enum
151 {                               /* ISO 15924 code */
152   HB_SCRIPT_INVALID = -1,
153
154   HB_SCRIPT_COMMON       = 0,   /* Zyyy */
155   HB_SCRIPT_INHERITED,          /* Qaai */
156   HB_SCRIPT_ARABIC,             /* Arab */
157   HB_SCRIPT_ARMENIAN,           /* Armn */
158   HB_SCRIPT_BENGALI,            /* Beng */
159   HB_SCRIPT_BOPOMOFO,           /* Bopo */
160   HB_SCRIPT_CHEROKEE,           /* Cher */
161   HB_SCRIPT_COPTIC,             /* Qaac */
162   HB_SCRIPT_CYRILLIC,           /* Cyrl (Cyrs) */
163   HB_SCRIPT_DESERET,            /* Dsrt */
164   HB_SCRIPT_DEVANAGARI,         /* Deva */
165   HB_SCRIPT_ETHIOPIC,           /* Ethi */
166   HB_SCRIPT_GEORGIAN,           /* Geor (Geon, Geoa) */
167   HB_SCRIPT_GOTHIC,             /* Goth */
168   HB_SCRIPT_GREEK,              /* Grek */
169   HB_SCRIPT_GUJARATI,           /* Gujr */
170   HB_SCRIPT_GURMUKHI,           /* Guru */
171   HB_SCRIPT_HAN,                /* Hani */
172   HB_SCRIPT_HANGUL,             /* Hang */
173   HB_SCRIPT_HEBREW,             /* Hebr */
174   HB_SCRIPT_HIRAGANA,           /* Hira */
175   HB_SCRIPT_KANNADA,            /* Knda */
176   HB_SCRIPT_KATAKANA,           /* Kana */
177   HB_SCRIPT_KHMER,              /* Khmr */
178   HB_SCRIPT_LAO,                /* Laoo */
179   HB_SCRIPT_LATIN,              /* Latn (Latf, Latg) */
180   HB_SCRIPT_MALAYALAM,          /* Mlym */
181   HB_SCRIPT_MONGOLIAN,          /* Mong */
182   HB_SCRIPT_MYANMAR,            /* Mymr */
183   HB_SCRIPT_OGHAM,              /* Ogam */
184   HB_SCRIPT_OLD_ITALIC,         /* Ital */
185   HB_SCRIPT_ORIYA,              /* Orya */
186   HB_SCRIPT_RUNIC,              /* Runr */
187   HB_SCRIPT_SINHALA,            /* Sinh */
188   HB_SCRIPT_SYRIAC,             /* Syrc (Syrj, Syrn, Syre) */
189   HB_SCRIPT_TAMIL,              /* Taml */
190   HB_SCRIPT_TELUGU,             /* Telu */
191   HB_SCRIPT_THAANA,             /* Thaa */
192   HB_SCRIPT_THAI,               /* Thai */
193   HB_SCRIPT_TIBETAN,            /* Tibt */
194   HB_SCRIPT_CANADIAN_ABORIGINAL, /* Cans */
195   HB_SCRIPT_YI,                 /* Yiii */
196   HB_SCRIPT_TAGALOG,            /* Tglg */
197   HB_SCRIPT_HANUNOO,            /* Hano */
198   HB_SCRIPT_BUHID,              /* Buhd */
199   HB_SCRIPT_TAGBANWA,           /* Tagb */
200
201   /* Unicode-4.0 additions */
202   HB_SCRIPT_BRAILLE,            /* Brai */
203   HB_SCRIPT_CYPRIOT,            /* Cprt */
204   HB_SCRIPT_LIMBU,              /* Limb */
205   HB_SCRIPT_OSMANYA,            /* Osma */
206   HB_SCRIPT_SHAVIAN,            /* Shaw */
207   HB_SCRIPT_LINEAR_B,           /* Linb */
208   HB_SCRIPT_TAI_LE,             /* Tale */
209   HB_SCRIPT_UGARITIC,           /* Ugar */
210
211   /* Unicode-4.1 additions */
212   HB_SCRIPT_NEW_TAI_LUE,        /* Talu */
213   HB_SCRIPT_BUGINESE,           /* Bugi */
214   HB_SCRIPT_GLAGOLITIC,         /* Glag */
215   HB_SCRIPT_TIFINAGH,           /* Tfng */
216   HB_SCRIPT_SYLOTI_NAGRI,       /* Sylo */
217   HB_SCRIPT_OLD_PERSIAN,        /* Xpeo */
218   HB_SCRIPT_KHAROSHTHI,         /* Khar */
219
220   /* Unicode-5.0 additions */
221   HB_SCRIPT_UNKNOWN,            /* Zzzz */
222   HB_SCRIPT_BALINESE,           /* Bali */
223   HB_SCRIPT_CUNEIFORM,          /* Xsux */
224   HB_SCRIPT_PHOENICIAN,         /* Phnx */
225   HB_SCRIPT_PHAGS_PA,           /* Phag */
226   HB_SCRIPT_NKO,                /* Nkoo */
227
228   /* Unicode-5.1 additions */
229   HB_SCRIPT_KAYAH_LI,           /* Kali */
230   HB_SCRIPT_LEPCHA,             /* Lepc */
231   HB_SCRIPT_REJANG,             /* Rjng */
232   HB_SCRIPT_SUNDANESE,          /* Sund */
233   HB_SCRIPT_SAURASHTRA,         /* Saur */
234   HB_SCRIPT_CHAM,               /* Cham */
235   HB_SCRIPT_OL_CHIKI,           /* Olck */
236   HB_SCRIPT_VAI,                /* Vaii */
237   HB_SCRIPT_CARIAN,             /* Cari */
238   HB_SCRIPT_LYCIAN,             /* Lyci */
239   HB_SCRIPT_LYDIAN,             /* Lydi */
240
241   /* Unicode-5.2 additions */
242   HB_SCRIPT_AVESTAN,                /* Avst */
243   HB_SCRIPT_BAMUM,                  /* Bamu */
244   HB_SCRIPT_EGYPTIAN_HIEROGLYPHS,   /* Egyp */
245   HB_SCRIPT_IMPERIAL_ARAMAIC,       /* Armi */
246   HB_SCRIPT_INSCRIPTIONAL_PAHLAVI,  /* Phli */
247   HB_SCRIPT_INSCRIPTIONAL_PARTHIAN, /* Prti */
248   HB_SCRIPT_JAVANESE,               /* Java */
249   HB_SCRIPT_KAITHI,                 /* Kthi */
250   HB_SCRIPT_LISU,                   /* Lisu */
251   HB_SCRIPT_MEETEI_MAYEK,           /* Mtei */
252   HB_SCRIPT_OLD_SOUTH_ARABIAN,      /* Sarb */
253   HB_SCRIPT_OLD_TURKIC,             /* Orkh */
254   HB_SCRIPT_SAMARITAN,              /* Samr */
255   HB_SCRIPT_TAI_THAM,               /* Lana */
256   HB_SCRIPT_TAI_VIET,               /* Tavt */
257
258   /* Unicode-6.0 additions */
259   HB_SCRIPT_BATAK,                  /* Batk */
260   HB_SCRIPT_BRAHMI,                 /* Brah */
261   HB_SCRIPT_MANDAIC                 /* Mand */
262 } hb_script_t;
263
264
265 /* Script functions */
266
267 hb_script_t
268 hb_script_from_iso15924_tag (hb_tag_t tag);
269
270 /* suger for tag_from_string() then script_from_iso15924_tag */
271 hb_script_t
272 hb_script_from_string (const char *s);
273
274 hb_tag_t
275 hb_script_to_iso15924_tag (hb_script_t script);
276
277 hb_direction_t
278 hb_script_get_horizontal_direction (hb_script_t script);
279
280
281 HB_END_DECLS
282
283 #endif /* HB_COMMON_H */