Mercurial > repos > rliterman > csp2
comparison CSP2/CSP2_env/env-d9b9114564458d9d-741b3de822f2aaca6c6caa4325c4afce/include/harfbuzz/hb-common.h @ 69:33d812a61356
planemo upload commit 2e9511a184a1ca667c7be0c6321a36dc4e3d116d
author | jpayne |
---|---|
date | Tue, 18 Mar 2025 17:55:14 -0400 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
67:0e9998148a16 | 69:33d812a61356 |
---|---|
1 /* | |
2 * Copyright © 2007,2008,2009 Red Hat, Inc. | |
3 * Copyright © 2011,2012 Google, Inc. | |
4 * | |
5 * This is part of HarfBuzz, a text shaping library. | |
6 * | |
7 * Permission is hereby granted, without written agreement and without | |
8 * license or royalty fees, to use, copy, modify, and distribute this | |
9 * software and its documentation for any purpose, provided that the | |
10 * above copyright notice and the following two paragraphs appear in | |
11 * all copies of this software. | |
12 * | |
13 * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR | |
14 * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES | |
15 * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN | |
16 * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH | |
17 * DAMAGE. | |
18 * | |
19 * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, | |
20 * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND | |
21 * FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS | |
22 * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO | |
23 * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. | |
24 * | |
25 * Red Hat Author(s): Behdad Esfahbod | |
26 * Google Author(s): Behdad Esfahbod | |
27 */ | |
28 | |
29 #ifndef HB_H_IN | |
30 #error "Include <hb.h> instead." | |
31 #endif | |
32 | |
33 #ifndef HB_COMMON_H | |
34 #define HB_COMMON_H | |
35 | |
36 #ifndef HB_EXTERN | |
37 #define HB_EXTERN extern | |
38 #endif | |
39 | |
40 #ifndef HB_BEGIN_DECLS | |
41 # ifdef __cplusplus | |
42 # define HB_BEGIN_DECLS extern "C" { | |
43 # define HB_END_DECLS } | |
44 # else /* !__cplusplus */ | |
45 # define HB_BEGIN_DECLS | |
46 # define HB_END_DECLS | |
47 # endif /* !__cplusplus */ | |
48 #endif | |
49 | |
50 #if defined (_SVR4) || defined (SVR4) || defined (__OpenBSD__) || \ | |
51 defined (_sgi) || defined (__sun) || defined (sun) || \ | |
52 defined (__digital__) || defined (__HP_cc) | |
53 # include <inttypes.h> | |
54 #elif defined (_AIX) | |
55 # include <sys/inttypes.h> | |
56 #elif defined (_MSC_VER) && _MSC_VER < 1600 | |
57 /* VS 2010 (_MSC_VER 1600) has stdint.h */ | |
58 typedef __int8 int8_t; | |
59 typedef unsigned __int8 uint8_t; | |
60 typedef __int16 int16_t; | |
61 typedef unsigned __int16 uint16_t; | |
62 typedef __int32 int32_t; | |
63 typedef unsigned __int32 uint32_t; | |
64 typedef __int64 int64_t; | |
65 typedef unsigned __int64 uint64_t; | |
66 #elif defined (__KERNEL__) | |
67 # include <linux/types.h> | |
68 #else | |
69 # include <stdint.h> | |
70 #endif | |
71 | |
72 #if defined(__GNUC__) && ((__GNUC__ > 3) || (__GNUC__ == 3 && __GNUC_MINOR__ >= 1)) | |
73 #define HB_DEPRECATED __attribute__((__deprecated__)) | |
74 #elif defined(_MSC_VER) && (_MSC_VER >= 1300) | |
75 #define HB_DEPRECATED __declspec(deprecated) | |
76 #else | |
77 #define HB_DEPRECATED | |
78 #endif | |
79 | |
80 #if defined(__GNUC__) && ((__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 5)) | |
81 #define HB_DEPRECATED_FOR(f) __attribute__((__deprecated__("Use '" #f "' instead"))) | |
82 #elif defined(_MSC_FULL_VER) && (_MSC_FULL_VER > 140050320) | |
83 #define HB_DEPRECATED_FOR(f) __declspec(deprecated("is deprecated. Use '" #f "' instead")) | |
84 #else | |
85 #define HB_DEPRECATED_FOR(f) HB_DEPRECATED | |
86 #endif | |
87 | |
88 | |
89 HB_BEGIN_DECLS | |
90 | |
91 | |
92 typedef int hb_bool_t; | |
93 | |
94 typedef uint32_t hb_codepoint_t; | |
95 typedef int32_t hb_position_t; | |
96 typedef uint32_t hb_mask_t; | |
97 | |
98 typedef union _hb_var_int_t { | |
99 uint32_t u32; | |
100 int32_t i32; | |
101 uint16_t u16[2]; | |
102 int16_t i16[2]; | |
103 uint8_t u8[4]; | |
104 int8_t i8[4]; | |
105 } hb_var_int_t; | |
106 | |
107 | |
108 /* hb_tag_t */ | |
109 | |
110 typedef uint32_t hb_tag_t; | |
111 | |
112 #define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF))) | |
113 #define HB_UNTAG(tag) (uint8_t)(((tag)>>24)&0xFF), (uint8_t)(((tag)>>16)&0xFF), (uint8_t)(((tag)>>8)&0xFF), (uint8_t)((tag)&0xFF) | |
114 | |
115 #define HB_TAG_NONE HB_TAG(0,0,0,0) | |
116 #define HB_TAG_MAX HB_TAG(0xff,0xff,0xff,0xff) | |
117 #define HB_TAG_MAX_SIGNED HB_TAG(0x7f,0xff,0xff,0xff) | |
118 | |
119 /* len=-1 means str is NUL-terminated. */ | |
120 HB_EXTERN hb_tag_t | |
121 hb_tag_from_string (const char *str, int len); | |
122 | |
123 /* buf should have 4 bytes. */ | |
124 HB_EXTERN void | |
125 hb_tag_to_string (hb_tag_t tag, char *buf); | |
126 | |
127 | |
128 /** | |
129 * hb_direction_t: | |
130 * @HB_DIRECTION_INVALID: Initial, unset direction. | |
131 * @HB_DIRECTION_LTR: Text is set horizontally from left to right. | |
132 * @HB_DIRECTION_RTL: Text is set horizontally from right to left. | |
133 * @HB_DIRECTION_TTB: Text is set vertically from top to bottom. | |
134 * @HB_DIRECTION_BTT: Text is set vertically from bottom to top. | |
135 */ | |
136 typedef enum { | |
137 HB_DIRECTION_INVALID = 0, | |
138 HB_DIRECTION_LTR = 4, | |
139 HB_DIRECTION_RTL, | |
140 HB_DIRECTION_TTB, | |
141 HB_DIRECTION_BTT | |
142 } hb_direction_t; | |
143 | |
144 /* len=-1 means str is NUL-terminated */ | |
145 HB_EXTERN hb_direction_t | |
146 hb_direction_from_string (const char *str, int len); | |
147 | |
148 HB_EXTERN const char * | |
149 hb_direction_to_string (hb_direction_t direction); | |
150 | |
151 #define HB_DIRECTION_IS_VALID(dir) ((((unsigned int) (dir)) & ~3U) == 4) | |
152 /* Direction must be valid for the following */ | |
153 #define HB_DIRECTION_IS_HORIZONTAL(dir) ((((unsigned int) (dir)) & ~1U) == 4) | |
154 #define HB_DIRECTION_IS_VERTICAL(dir) ((((unsigned int) (dir)) & ~1U) == 6) | |
155 #define HB_DIRECTION_IS_FORWARD(dir) ((((unsigned int) (dir)) & ~2U) == 4) | |
156 #define HB_DIRECTION_IS_BACKWARD(dir) ((((unsigned int) (dir)) & ~2U) == 5) | |
157 #define HB_DIRECTION_REVERSE(dir) ((hb_direction_t) (((unsigned int) (dir)) ^ 1)) | |
158 | |
159 | |
160 /* hb_language_t */ | |
161 | |
162 typedef const struct hb_language_impl_t *hb_language_t; | |
163 | |
164 HB_EXTERN hb_language_t | |
165 hb_language_from_string (const char *str, int len); | |
166 | |
167 HB_EXTERN const char * | |
168 hb_language_to_string (hb_language_t language); | |
169 | |
170 #define HB_LANGUAGE_INVALID ((hb_language_t) 0) | |
171 | |
172 HB_EXTERN hb_language_t | |
173 hb_language_get_default (void); | |
174 | |
175 | |
176 /* hb_script_t */ | |
177 | |
178 /* https://unicode.org/iso15924/ */ | |
179 /* https://docs.google.com/spreadsheets/d/1Y90M0Ie3MUJ6UVCRDOypOtijlMDLNNyyLk36T6iMu0o */ | |
180 /* Unicode Character Database property: Script (sc) */ | |
181 typedef enum | |
182 { | |
183 /*1.1*/ HB_SCRIPT_COMMON = HB_TAG ('Z','y','y','y'), | |
184 /*1.1*/ HB_SCRIPT_INHERITED = HB_TAG ('Z','i','n','h'), | |
185 /*5.0*/ HB_SCRIPT_UNKNOWN = HB_TAG ('Z','z','z','z'), | |
186 | |
187 /*1.1*/ HB_SCRIPT_ARABIC = HB_TAG ('A','r','a','b'), | |
188 /*1.1*/ HB_SCRIPT_ARMENIAN = HB_TAG ('A','r','m','n'), | |
189 /*1.1*/ HB_SCRIPT_BENGALI = HB_TAG ('B','e','n','g'), | |
190 /*1.1*/ HB_SCRIPT_CYRILLIC = HB_TAG ('C','y','r','l'), | |
191 /*1.1*/ HB_SCRIPT_DEVANAGARI = HB_TAG ('D','e','v','a'), | |
192 /*1.1*/ HB_SCRIPT_GEORGIAN = HB_TAG ('G','e','o','r'), | |
193 /*1.1*/ HB_SCRIPT_GREEK = HB_TAG ('G','r','e','k'), | |
194 /*1.1*/ HB_SCRIPT_GUJARATI = HB_TAG ('G','u','j','r'), | |
195 /*1.1*/ HB_SCRIPT_GURMUKHI = HB_TAG ('G','u','r','u'), | |
196 /*1.1*/ HB_SCRIPT_HANGUL = HB_TAG ('H','a','n','g'), | |
197 /*1.1*/ HB_SCRIPT_HAN = HB_TAG ('H','a','n','i'), | |
198 /*1.1*/ HB_SCRIPT_HEBREW = HB_TAG ('H','e','b','r'), | |
199 /*1.1*/ HB_SCRIPT_HIRAGANA = HB_TAG ('H','i','r','a'), | |
200 /*1.1*/ HB_SCRIPT_KANNADA = HB_TAG ('K','n','d','a'), | |
201 /*1.1*/ HB_SCRIPT_KATAKANA = HB_TAG ('K','a','n','a'), | |
202 /*1.1*/ HB_SCRIPT_LAO = HB_TAG ('L','a','o','o'), | |
203 /*1.1*/ HB_SCRIPT_LATIN = HB_TAG ('L','a','t','n'), | |
204 /*1.1*/ HB_SCRIPT_MALAYALAM = HB_TAG ('M','l','y','m'), | |
205 /*1.1*/ HB_SCRIPT_ORIYA = HB_TAG ('O','r','y','a'), | |
206 /*1.1*/ HB_SCRIPT_TAMIL = HB_TAG ('T','a','m','l'), | |
207 /*1.1*/ HB_SCRIPT_TELUGU = HB_TAG ('T','e','l','u'), | |
208 /*1.1*/ HB_SCRIPT_THAI = HB_TAG ('T','h','a','i'), | |
209 | |
210 /*2.0*/ HB_SCRIPT_TIBETAN = HB_TAG ('T','i','b','t'), | |
211 | |
212 /*3.0*/ HB_SCRIPT_BOPOMOFO = HB_TAG ('B','o','p','o'), | |
213 /*3.0*/ HB_SCRIPT_BRAILLE = HB_TAG ('B','r','a','i'), | |
214 /*3.0*/ HB_SCRIPT_CANADIAN_SYLLABICS = HB_TAG ('C','a','n','s'), | |
215 /*3.0*/ HB_SCRIPT_CHEROKEE = HB_TAG ('C','h','e','r'), | |
216 /*3.0*/ HB_SCRIPT_ETHIOPIC = HB_TAG ('E','t','h','i'), | |
217 /*3.0*/ HB_SCRIPT_KHMER = HB_TAG ('K','h','m','r'), | |
218 /*3.0*/ HB_SCRIPT_MONGOLIAN = HB_TAG ('M','o','n','g'), | |
219 /*3.0*/ HB_SCRIPT_MYANMAR = HB_TAG ('M','y','m','r'), | |
220 /*3.0*/ HB_SCRIPT_OGHAM = HB_TAG ('O','g','a','m'), | |
221 /*3.0*/ HB_SCRIPT_RUNIC = HB_TAG ('R','u','n','r'), | |
222 /*3.0*/ HB_SCRIPT_SINHALA = HB_TAG ('S','i','n','h'), | |
223 /*3.0*/ HB_SCRIPT_SYRIAC = HB_TAG ('S','y','r','c'), | |
224 /*3.0*/ HB_SCRIPT_THAANA = HB_TAG ('T','h','a','a'), | |
225 /*3.0*/ HB_SCRIPT_YI = HB_TAG ('Y','i','i','i'), | |
226 | |
227 /*3.1*/ HB_SCRIPT_DESERET = HB_TAG ('D','s','r','t'), | |
228 /*3.1*/ HB_SCRIPT_GOTHIC = HB_TAG ('G','o','t','h'), | |
229 /*3.1*/ HB_SCRIPT_OLD_ITALIC = HB_TAG ('I','t','a','l'), | |
230 | |
231 /*3.2*/ HB_SCRIPT_BUHID = HB_TAG ('B','u','h','d'), | |
232 /*3.2*/ HB_SCRIPT_HANUNOO = HB_TAG ('H','a','n','o'), | |
233 /*3.2*/ HB_SCRIPT_TAGALOG = HB_TAG ('T','g','l','g'), | |
234 /*3.2*/ HB_SCRIPT_TAGBANWA = HB_TAG ('T','a','g','b'), | |
235 | |
236 /*4.0*/ HB_SCRIPT_CYPRIOT = HB_TAG ('C','p','r','t'), | |
237 /*4.0*/ HB_SCRIPT_LIMBU = HB_TAG ('L','i','m','b'), | |
238 /*4.0*/ HB_SCRIPT_LINEAR_B = HB_TAG ('L','i','n','b'), | |
239 /*4.0*/ HB_SCRIPT_OSMANYA = HB_TAG ('O','s','m','a'), | |
240 /*4.0*/ HB_SCRIPT_SHAVIAN = HB_TAG ('S','h','a','w'), | |
241 /*4.0*/ HB_SCRIPT_TAI_LE = HB_TAG ('T','a','l','e'), | |
242 /*4.0*/ HB_SCRIPT_UGARITIC = HB_TAG ('U','g','a','r'), | |
243 | |
244 /*4.1*/ HB_SCRIPT_BUGINESE = HB_TAG ('B','u','g','i'), | |
245 /*4.1*/ HB_SCRIPT_COPTIC = HB_TAG ('C','o','p','t'), | |
246 /*4.1*/ HB_SCRIPT_GLAGOLITIC = HB_TAG ('G','l','a','g'), | |
247 /*4.1*/ HB_SCRIPT_KHAROSHTHI = HB_TAG ('K','h','a','r'), | |
248 /*4.1*/ HB_SCRIPT_NEW_TAI_LUE = HB_TAG ('T','a','l','u'), | |
249 /*4.1*/ HB_SCRIPT_OLD_PERSIAN = HB_TAG ('X','p','e','o'), | |
250 /*4.1*/ HB_SCRIPT_SYLOTI_NAGRI = HB_TAG ('S','y','l','o'), | |
251 /*4.1*/ HB_SCRIPT_TIFINAGH = HB_TAG ('T','f','n','g'), | |
252 | |
253 /*5.0*/ HB_SCRIPT_BALINESE = HB_TAG ('B','a','l','i'), | |
254 /*5.0*/ HB_SCRIPT_CUNEIFORM = HB_TAG ('X','s','u','x'), | |
255 /*5.0*/ HB_SCRIPT_NKO = HB_TAG ('N','k','o','o'), | |
256 /*5.0*/ HB_SCRIPT_PHAGS_PA = HB_TAG ('P','h','a','g'), | |
257 /*5.0*/ HB_SCRIPT_PHOENICIAN = HB_TAG ('P','h','n','x'), | |
258 | |
259 /*5.1*/ HB_SCRIPT_CARIAN = HB_TAG ('C','a','r','i'), | |
260 /*5.1*/ HB_SCRIPT_CHAM = HB_TAG ('C','h','a','m'), | |
261 /*5.1*/ HB_SCRIPT_KAYAH_LI = HB_TAG ('K','a','l','i'), | |
262 /*5.1*/ HB_SCRIPT_LEPCHA = HB_TAG ('L','e','p','c'), | |
263 /*5.1*/ HB_SCRIPT_LYCIAN = HB_TAG ('L','y','c','i'), | |
264 /*5.1*/ HB_SCRIPT_LYDIAN = HB_TAG ('L','y','d','i'), | |
265 /*5.1*/ HB_SCRIPT_OL_CHIKI = HB_TAG ('O','l','c','k'), | |
266 /*5.1*/ HB_SCRIPT_REJANG = HB_TAG ('R','j','n','g'), | |
267 /*5.1*/ HB_SCRIPT_SAURASHTRA = HB_TAG ('S','a','u','r'), | |
268 /*5.1*/ HB_SCRIPT_SUNDANESE = HB_TAG ('S','u','n','d'), | |
269 /*5.1*/ HB_SCRIPT_VAI = HB_TAG ('V','a','i','i'), | |
270 | |
271 /*5.2*/ HB_SCRIPT_AVESTAN = HB_TAG ('A','v','s','t'), | |
272 /*5.2*/ HB_SCRIPT_BAMUM = HB_TAG ('B','a','m','u'), | |
273 /*5.2*/ HB_SCRIPT_EGYPTIAN_HIEROGLYPHS = HB_TAG ('E','g','y','p'), | |
274 /*5.2*/ HB_SCRIPT_IMPERIAL_ARAMAIC = HB_TAG ('A','r','m','i'), | |
275 /*5.2*/ HB_SCRIPT_INSCRIPTIONAL_PAHLAVI = HB_TAG ('P','h','l','i'), | |
276 /*5.2*/ HB_SCRIPT_INSCRIPTIONAL_PARTHIAN = HB_TAG ('P','r','t','i'), | |
277 /*5.2*/ HB_SCRIPT_JAVANESE = HB_TAG ('J','a','v','a'), | |
278 /*5.2*/ HB_SCRIPT_KAITHI = HB_TAG ('K','t','h','i'), | |
279 /*5.2*/ HB_SCRIPT_LISU = HB_TAG ('L','i','s','u'), | |
280 /*5.2*/ HB_SCRIPT_MEETEI_MAYEK = HB_TAG ('M','t','e','i'), | |
281 /*5.2*/ HB_SCRIPT_OLD_SOUTH_ARABIAN = HB_TAG ('S','a','r','b'), | |
282 /*5.2*/ HB_SCRIPT_OLD_TURKIC = HB_TAG ('O','r','k','h'), | |
283 /*5.2*/ HB_SCRIPT_SAMARITAN = HB_TAG ('S','a','m','r'), | |
284 /*5.2*/ HB_SCRIPT_TAI_THAM = HB_TAG ('L','a','n','a'), | |
285 /*5.2*/ HB_SCRIPT_TAI_VIET = HB_TAG ('T','a','v','t'), | |
286 | |
287 /*6.0*/ HB_SCRIPT_BATAK = HB_TAG ('B','a','t','k'), | |
288 /*6.0*/ HB_SCRIPT_BRAHMI = HB_TAG ('B','r','a','h'), | |
289 /*6.0*/ HB_SCRIPT_MANDAIC = HB_TAG ('M','a','n','d'), | |
290 | |
291 /*6.1*/ HB_SCRIPT_CHAKMA = HB_TAG ('C','a','k','m'), | |
292 /*6.1*/ HB_SCRIPT_MEROITIC_CURSIVE = HB_TAG ('M','e','r','c'), | |
293 /*6.1*/ HB_SCRIPT_MEROITIC_HIEROGLYPHS = HB_TAG ('M','e','r','o'), | |
294 /*6.1*/ HB_SCRIPT_MIAO = HB_TAG ('P','l','r','d'), | |
295 /*6.1*/ HB_SCRIPT_SHARADA = HB_TAG ('S','h','r','d'), | |
296 /*6.1*/ HB_SCRIPT_SORA_SOMPENG = HB_TAG ('S','o','r','a'), | |
297 /*6.1*/ HB_SCRIPT_TAKRI = HB_TAG ('T','a','k','r'), | |
298 | |
299 /* | |
300 * Since: 0.9.30 | |
301 */ | |
302 /*7.0*/ HB_SCRIPT_BASSA_VAH = HB_TAG ('B','a','s','s'), | |
303 /*7.0*/ HB_SCRIPT_CAUCASIAN_ALBANIAN = HB_TAG ('A','g','h','b'), | |
304 /*7.0*/ HB_SCRIPT_DUPLOYAN = HB_TAG ('D','u','p','l'), | |
305 /*7.0*/ HB_SCRIPT_ELBASAN = HB_TAG ('E','l','b','a'), | |
306 /*7.0*/ HB_SCRIPT_GRANTHA = HB_TAG ('G','r','a','n'), | |
307 /*7.0*/ HB_SCRIPT_KHOJKI = HB_TAG ('K','h','o','j'), | |
308 /*7.0*/ HB_SCRIPT_KHUDAWADI = HB_TAG ('S','i','n','d'), | |
309 /*7.0*/ HB_SCRIPT_LINEAR_A = HB_TAG ('L','i','n','a'), | |
310 /*7.0*/ HB_SCRIPT_MAHAJANI = HB_TAG ('M','a','h','j'), | |
311 /*7.0*/ HB_SCRIPT_MANICHAEAN = HB_TAG ('M','a','n','i'), | |
312 /*7.0*/ HB_SCRIPT_MENDE_KIKAKUI = HB_TAG ('M','e','n','d'), | |
313 /*7.0*/ HB_SCRIPT_MODI = HB_TAG ('M','o','d','i'), | |
314 /*7.0*/ HB_SCRIPT_MRO = HB_TAG ('M','r','o','o'), | |
315 /*7.0*/ HB_SCRIPT_NABATAEAN = HB_TAG ('N','b','a','t'), | |
316 /*7.0*/ HB_SCRIPT_OLD_NORTH_ARABIAN = HB_TAG ('N','a','r','b'), | |
317 /*7.0*/ HB_SCRIPT_OLD_PERMIC = HB_TAG ('P','e','r','m'), | |
318 /*7.0*/ HB_SCRIPT_PAHAWH_HMONG = HB_TAG ('H','m','n','g'), | |
319 /*7.0*/ HB_SCRIPT_PALMYRENE = HB_TAG ('P','a','l','m'), | |
320 /*7.0*/ HB_SCRIPT_PAU_CIN_HAU = HB_TAG ('P','a','u','c'), | |
321 /*7.0*/ HB_SCRIPT_PSALTER_PAHLAVI = HB_TAG ('P','h','l','p'), | |
322 /*7.0*/ HB_SCRIPT_SIDDHAM = HB_TAG ('S','i','d','d'), | |
323 /*7.0*/ HB_SCRIPT_TIRHUTA = HB_TAG ('T','i','r','h'), | |
324 /*7.0*/ HB_SCRIPT_WARANG_CITI = HB_TAG ('W','a','r','a'), | |
325 | |
326 /*8.0*/ HB_SCRIPT_AHOM = HB_TAG ('A','h','o','m'), | |
327 /*8.0*/ HB_SCRIPT_ANATOLIAN_HIEROGLYPHS = HB_TAG ('H','l','u','w'), | |
328 /*8.0*/ HB_SCRIPT_HATRAN = HB_TAG ('H','a','t','r'), | |
329 /*8.0*/ HB_SCRIPT_MULTANI = HB_TAG ('M','u','l','t'), | |
330 /*8.0*/ HB_SCRIPT_OLD_HUNGARIAN = HB_TAG ('H','u','n','g'), | |
331 /*8.0*/ HB_SCRIPT_SIGNWRITING = HB_TAG ('S','g','n','w'), | |
332 | |
333 /* | |
334 * Since 1.3.0 | |
335 */ | |
336 /*9.0*/ HB_SCRIPT_ADLAM = HB_TAG ('A','d','l','m'), | |
337 /*9.0*/ HB_SCRIPT_BHAIKSUKI = HB_TAG ('B','h','k','s'), | |
338 /*9.0*/ HB_SCRIPT_MARCHEN = HB_TAG ('M','a','r','c'), | |
339 /*9.0*/ HB_SCRIPT_OSAGE = HB_TAG ('O','s','g','e'), | |
340 /*9.0*/ HB_SCRIPT_TANGUT = HB_TAG ('T','a','n','g'), | |
341 /*9.0*/ HB_SCRIPT_NEWA = HB_TAG ('N','e','w','a'), | |
342 | |
343 /* | |
344 * Since 1.6.0 | |
345 */ | |
346 /*10.0*/HB_SCRIPT_MASARAM_GONDI = HB_TAG ('G','o','n','m'), | |
347 /*10.0*/HB_SCRIPT_NUSHU = HB_TAG ('N','s','h','u'), | |
348 /*10.0*/HB_SCRIPT_SOYOMBO = HB_TAG ('S','o','y','o'), | |
349 /*10.0*/HB_SCRIPT_ZANABAZAR_SQUARE = HB_TAG ('Z','a','n','b'), | |
350 | |
351 /* | |
352 * Since 1.8.0 | |
353 */ | |
354 /*11.0*/HB_SCRIPT_DOGRA = HB_TAG ('D','o','g','r'), | |
355 /*11.0*/HB_SCRIPT_GUNJALA_GONDI = HB_TAG ('G','o','n','g'), | |
356 /*11.0*/HB_SCRIPT_HANIFI_ROHINGYA = HB_TAG ('R','o','h','g'), | |
357 /*11.0*/HB_SCRIPT_MAKASAR = HB_TAG ('M','a','k','a'), | |
358 /*11.0*/HB_SCRIPT_MEDEFAIDRIN = HB_TAG ('M','e','d','f'), | |
359 /*11.0*/HB_SCRIPT_OLD_SOGDIAN = HB_TAG ('S','o','g','o'), | |
360 /*11.0*/HB_SCRIPT_SOGDIAN = HB_TAG ('S','o','g','d'), | |
361 | |
362 /* | |
363 * Since 2.4.0 | |
364 */ | |
365 /*12.0*/HB_SCRIPT_ELYMAIC = HB_TAG ('E','l','y','m'), | |
366 /*12.0*/HB_SCRIPT_NANDINAGARI = HB_TAG ('N','a','n','d'), | |
367 /*12.0*/HB_SCRIPT_NYIAKENG_PUACHUE_HMONG = HB_TAG ('H','m','n','p'), | |
368 /*12.0*/HB_SCRIPT_WANCHO = HB_TAG ('W','c','h','o'), | |
369 | |
370 /* | |
371 * Since 2.6.7 | |
372 */ | |
373 /*13.0*/HB_SCRIPT_CHORASMIAN = HB_TAG ('C','h','r','s'), | |
374 /*13.0*/HB_SCRIPT_DIVES_AKURU = HB_TAG ('D','i','a','k'), | |
375 /*13.0*/HB_SCRIPT_KHITAN_SMALL_SCRIPT = HB_TAG ('K','i','t','s'), | |
376 /*13.0*/HB_SCRIPT_YEZIDI = HB_TAG ('Y','e','z','i'), | |
377 | |
378 /* No script set. */ | |
379 HB_SCRIPT_INVALID = HB_TAG_NONE, | |
380 | |
381 /* Dummy values to ensure any hb_tag_t value can be passed/stored as hb_script_t | |
382 * without risking undefined behavior. We have two, for historical reasons. | |
383 * HB_TAG_MAX used to be unsigned, but that was invalid Ansi C, so was changed | |
384 * to _HB_SCRIPT_MAX_VALUE to be equal to HB_TAG_MAX_SIGNED as well. | |
385 * | |
386 * See this thread for technicalities: | |
387 * | |
388 * https://lists.freedesktop.org/archives/harfbuzz/2014-March/004150.html | |
389 */ | |
390 _HB_SCRIPT_MAX_VALUE = HB_TAG_MAX_SIGNED, /*< skip >*/ | |
391 _HB_SCRIPT_MAX_VALUE_SIGNED = HB_TAG_MAX_SIGNED /*< skip >*/ | |
392 | |
393 } hb_script_t; | |
394 | |
395 | |
396 /* Script functions */ | |
397 | |
398 HB_EXTERN hb_script_t | |
399 hb_script_from_iso15924_tag (hb_tag_t tag); | |
400 | |
401 HB_EXTERN hb_script_t | |
402 hb_script_from_string (const char *str, int len); | |
403 | |
404 HB_EXTERN hb_tag_t | |
405 hb_script_to_iso15924_tag (hb_script_t script); | |
406 | |
407 HB_EXTERN hb_direction_t | |
408 hb_script_get_horizontal_direction (hb_script_t script); | |
409 | |
410 | |
411 /* User data */ | |
412 | |
413 typedef struct hb_user_data_key_t { | |
414 /*< private >*/ | |
415 char unused; | |
416 } hb_user_data_key_t; | |
417 | |
418 typedef void (*hb_destroy_func_t) (void *user_data); | |
419 | |
420 | |
421 /* Font features and variations. */ | |
422 | |
423 /** | |
424 * HB_FEATURE_GLOBAL_START | |
425 * | |
426 * Since: 2.0.0 | |
427 */ | |
428 #define HB_FEATURE_GLOBAL_START 0 | |
429 /** | |
430 * HB_FEATURE_GLOBAL_END | |
431 * | |
432 * Since: 2.0.0 | |
433 */ | |
434 #define HB_FEATURE_GLOBAL_END ((unsigned int) -1) | |
435 | |
436 /** | |
437 * hb_feature_t: | |
438 * @tag: a feature tag | |
439 * @value: 0 disables the feature, non-zero (usually 1) enables the feature. | |
440 * For features implemented as lookup type 3 (like 'salt') the @value is a one | |
441 * based index into the alternates. | |
442 * @start: the cluster to start applying this feature setting (inclusive). | |
443 * @end: the cluster to end applying this feature setting (exclusive). | |
444 * | |
445 * The #hb_feature_t is the structure that holds information about requested | |
446 * feature application. The feature will be applied with the given value to all | |
447 * glyphs which are in clusters between @start (inclusive) and @end (exclusive). | |
448 * Setting start to @HB_FEATURE_GLOBAL_START and end to @HB_FEATURE_GLOBAL_END | |
449 * specifies that the feature always applies to the entire buffer. | |
450 */ | |
451 typedef struct hb_feature_t { | |
452 hb_tag_t tag; | |
453 uint32_t value; | |
454 unsigned int start; | |
455 unsigned int end; | |
456 } hb_feature_t; | |
457 | |
458 HB_EXTERN hb_bool_t | |
459 hb_feature_from_string (const char *str, int len, | |
460 hb_feature_t *feature); | |
461 | |
462 HB_EXTERN void | |
463 hb_feature_to_string (hb_feature_t *feature, | |
464 char *buf, unsigned int size); | |
465 | |
466 /** | |
467 * hb_variation_t: | |
468 * | |
469 * Since: 1.4.2 | |
470 */ | |
471 typedef struct hb_variation_t { | |
472 hb_tag_t tag; | |
473 float value; | |
474 } hb_variation_t; | |
475 | |
476 HB_EXTERN hb_bool_t | |
477 hb_variation_from_string (const char *str, int len, | |
478 hb_variation_t *variation); | |
479 | |
480 HB_EXTERN void | |
481 hb_variation_to_string (hb_variation_t *variation, | |
482 char *buf, unsigned int size); | |
483 | |
484 /** | |
485 * hb_color_t: | |
486 * | |
487 * Data type for holding color values. | |
488 * | |
489 * Since: 2.1.0 | |
490 */ | |
491 typedef uint32_t hb_color_t; | |
492 | |
493 #define HB_COLOR(b,g,r,a) ((hb_color_t) HB_TAG ((b),(g),(r),(a))) | |
494 | |
495 HB_EXTERN uint8_t | |
496 hb_color_get_alpha (hb_color_t color); | |
497 #define hb_color_get_alpha(color) ((color) & 0xFF) | |
498 | |
499 HB_EXTERN uint8_t | |
500 hb_color_get_red (hb_color_t color); | |
501 #define hb_color_get_red(color) (((color) >> 8) & 0xFF) | |
502 | |
503 HB_EXTERN uint8_t | |
504 hb_color_get_green (hb_color_t color); | |
505 #define hb_color_get_green(color) (((color) >> 16) & 0xFF) | |
506 | |
507 HB_EXTERN uint8_t | |
508 hb_color_get_blue (hb_color_t color); | |
509 #define hb_color_get_blue(color) (((color) >> 24) & 0xFF) | |
510 | |
511 HB_END_DECLS | |
512 | |
513 #endif /* HB_COMMON_H */ |