Path: blob/master/src/java.desktop/share/native/libharfbuzz/hb-common.h
66644 views
/*1* Copyright © 2007,2008,2009 Red Hat, Inc.2* Copyright © 2011,2012 Google, Inc.3*4* This is part of HarfBuzz, a text shaping library.5*6* Permission is hereby granted, without written agreement and without7* license or royalty fees, to use, copy, modify, and distribute this8* software and its documentation for any purpose, provided that the9* above copyright notice and the following two paragraphs appear in10* all copies of this software.11*12* IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR13* DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES14* ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN15* IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH16* DAMAGE.17*18* THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,19* BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND20* FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS21* ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO22* PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.23*24* Red Hat Author(s): Behdad Esfahbod25* Google Author(s): Behdad Esfahbod26*/2728#if !defined(HB_H_IN) && !defined(HB_NO_SINGLE_HEADER_ERROR)29#error "Include <hb.h> instead."30#endif3132#ifndef HB_COMMON_H33#define HB_COMMON_H3435#ifndef HB_EXTERN36#define HB_EXTERN extern37#endif3839#ifndef HB_BEGIN_DECLS40# ifdef __cplusplus41# define HB_BEGIN_DECLS extern "C" {42# define HB_END_DECLS }43# else /* !__cplusplus */44# define HB_BEGIN_DECLS45# define HB_END_DECLS46# endif /* !__cplusplus */47#endif4849#if defined (_SVR4) || defined (SVR4) || defined (__OpenBSD__) || \50defined (_sgi) || defined (__sun) || defined (sun) || \51defined (__digital__) || defined (__HP_cc)52# include <inttypes.h>53#elif defined (_AIX)54# include <sys/inttypes.h>55#elif defined (_MSC_VER) && _MSC_VER < 160056/* VS 2010 (_MSC_VER 1600) has stdint.h */57typedef __int8 int8_t;58typedef unsigned __int8 uint8_t;59typedef __int16 int16_t;60typedef unsigned __int16 uint16_t;61typedef __int32 int32_t;62typedef unsigned __int32 uint32_t;63typedef __int64 int64_t;64typedef unsigned __int64 uint64_t;65#elif defined (__KERNEL__)66# include <linux/types.h>67#else68# include <stdint.h>69#endif7071#if defined(__GNUC__) && ((__GNUC__ > 3) || (__GNUC__ == 3 && __GNUC_MINOR__ >= 1))72#define HB_DEPRECATED __attribute__((__deprecated__))73#elif defined(_MSC_VER) && (_MSC_VER >= 1300)74#define HB_DEPRECATED __declspec(deprecated)75#else76#define HB_DEPRECATED77#endif7879#if defined(__GNUC__) && ((__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 5))80#define HB_DEPRECATED_FOR(f) __attribute__((__deprecated__("Use '" #f "' instead")))81#elif defined(_MSC_FULL_VER) && (_MSC_FULL_VER > 140050320)82#define HB_DEPRECATED_FOR(f) __declspec(deprecated("is deprecated. Use '" #f "' instead"))83#else84#define HB_DEPRECATED_FOR(f) HB_DEPRECATED85#endif868788HB_BEGIN_DECLS8990/**91* hb_bool_t:92*93* Data type for booleans.94*95**/96typedef int hb_bool_t;9798/**99* hb_codepoint_t:100*101* Data type for holding Unicode codepoints. Also102* used to hold glyph IDs.103*104**/105typedef uint32_t hb_codepoint_t;106/**107* hb_position_t:108*109* Data type for holding a single coordinate value.110* Contour points and other multi-dimensional data are111* stored as tuples of #hb_position_t's.112*113**/114typedef int32_t hb_position_t;115/**116* hb_mask_t:117*118* Data type for bitmasks.119*120**/121typedef uint32_t hb_mask_t;122123typedef union _hb_var_int_t {124uint32_t u32;125int32_t i32;126uint16_t u16[2];127int16_t i16[2];128uint8_t u8[4];129int8_t i8[4];130} hb_var_int_t;131132typedef union _hb_var_num_t {133float f;134uint32_t u32;135int32_t i32;136uint16_t u16[2];137int16_t i16[2];138uint8_t u8[4];139int8_t i8[4];140} hb_var_num_t;141142143/* hb_tag_t */144145/**146* hb_tag_t:147*148* Data type for tag identifiers. Tags are four149* byte integers, each byte representing a character.150*151* Tags are used to identify tables, design-variation axes,152* scripts, languages, font features, and baselines with153* human-readable names.154*155**/156typedef uint32_t hb_tag_t;157158/**159* HB_TAG:160* @c1: 1st character of the tag161* @c2: 2nd character of the tag162* @c3: 3rd character of the tag163* @c4: 4th character of the tag164*165* Constructs an #hb_tag_t from four character literals.166*167**/168#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)))169170/**171* HB_UNTAG:172* @tag: an #hb_tag_t173*174* Extracts four character literals from an #hb_tag_t.175*176* Since: 0.6.0177*178**/179#define HB_UNTAG(tag) (uint8_t)(((tag)>>24)&0xFF), (uint8_t)(((tag)>>16)&0xFF), (uint8_t)(((tag)>>8)&0xFF), (uint8_t)((tag)&0xFF)180181/**182* HB_TAG_NONE:183*184* Unset #hb_tag_t.185*/186#define HB_TAG_NONE HB_TAG(0,0,0,0)187/**188* HB_TAG_MAX:189*190* Maximum possible unsigned #hb_tag_t.191*192* Since: 0.9.26193*/194#define HB_TAG_MAX HB_TAG(0xff,0xff,0xff,0xff)195/**196* HB_TAG_MAX_SIGNED:197*198* Maximum possible signed #hb_tag_t.199*200* Since: 0.9.33201*/202#define HB_TAG_MAX_SIGNED HB_TAG(0x7f,0xff,0xff,0xff)203204/* len=-1 means str is NUL-terminated. */205HB_EXTERN hb_tag_t206hb_tag_from_string (const char *str, int len);207208/* buf should have 4 bytes. */209HB_EXTERN void210hb_tag_to_string (hb_tag_t tag, char *buf);211212213/**214* hb_direction_t:215* @HB_DIRECTION_INVALID: Initial, unset direction.216* @HB_DIRECTION_LTR: Text is set horizontally from left to right.217* @HB_DIRECTION_RTL: Text is set horizontally from right to left.218* @HB_DIRECTION_TTB: Text is set vertically from top to bottom.219* @HB_DIRECTION_BTT: Text is set vertically from bottom to top.220*221* The direction of a text segment or buffer.222*223* A segment can also be tested for horizontal or vertical224* orientation (irrespective of specific direction) with225* HB_DIRECTION_IS_HORIZONTAL() or HB_DIRECTION_IS_VERTICAL().226*227*/228typedef enum {229HB_DIRECTION_INVALID = 0,230HB_DIRECTION_LTR = 4,231HB_DIRECTION_RTL,232HB_DIRECTION_TTB,233HB_DIRECTION_BTT234} hb_direction_t;235236/* len=-1 means str is NUL-terminated */237HB_EXTERN hb_direction_t238hb_direction_from_string (const char *str, int len);239240HB_EXTERN const char *241hb_direction_to_string (hb_direction_t direction);242243/**244* HB_DIRECTION_IS_VALID:245* @dir: #hb_direction_t to test246*247* Tests whether a text direction is valid.248*249**/250#define HB_DIRECTION_IS_VALID(dir) ((((unsigned int) (dir)) & ~3U) == 4)251/* Direction must be valid for the following */252/**253* HB_DIRECTION_IS_HORIZONTAL:254* @dir: #hb_direction_t to test255*256* Tests whether a text direction is horizontal. Requires257* that the direction be valid.258*259**/260#define HB_DIRECTION_IS_HORIZONTAL(dir) ((((unsigned int) (dir)) & ~1U) == 4)261/**262* HB_DIRECTION_IS_VERTICAL:263* @dir: #hb_direction_t to test264*265* Tests whether a text direction is vertical. Requires266* that the direction be valid.267*268**/269#define HB_DIRECTION_IS_VERTICAL(dir) ((((unsigned int) (dir)) & ~1U) == 6)270/**271* HB_DIRECTION_IS_FORWARD:272* @dir: #hb_direction_t to test273*274* Tests whether a text direction moves forward (from left to right, or from275* top to bottom). Requires that the direction be valid.276*277**/278#define HB_DIRECTION_IS_FORWARD(dir) ((((unsigned int) (dir)) & ~2U) == 4)279/**280* HB_DIRECTION_IS_BACKWARD:281* @dir: #hb_direction_t to test282*283* Tests whether a text direction moves backward (from right to left, or from284* bottom to top). Requires that the direction be valid.285*286**/287#define HB_DIRECTION_IS_BACKWARD(dir) ((((unsigned int) (dir)) & ~2U) == 5)288/**289* HB_DIRECTION_REVERSE:290* @dir: #hb_direction_t to reverse291*292* Reverses a text direction. Requires that the direction293* be valid.294*295**/296#define HB_DIRECTION_REVERSE(dir) ((hb_direction_t) (((unsigned int) (dir)) ^ 1))297298299/* hb_language_t */300301/**302* hb_language_t:303*304* Data type for languages. Each #hb_language_t corresponds to a BCP 47305* language tag.306*307*/308typedef const struct hb_language_impl_t *hb_language_t;309310HB_EXTERN hb_language_t311hb_language_from_string (const char *str, int len);312313HB_EXTERN const char *314hb_language_to_string (hb_language_t language);315316/**317* HB_LANGUAGE_INVALID:318*319* An unset #hb_language_t.320*321* Since: 0.6.0322*/323#define HB_LANGUAGE_INVALID ((hb_language_t) 0)324325HB_EXTERN hb_language_t326hb_language_get_default (void);327328329/**330* hb_script_t:331* @HB_SCRIPT_COMMON: `Zyyy`332* @HB_SCRIPT_INHERITED: `Zinh`333* @HB_SCRIPT_UNKNOWN: `Zzzz`334* @HB_SCRIPT_ARABIC: `Arab`335* @HB_SCRIPT_ARMENIAN: `Armn`336* @HB_SCRIPT_BENGALI: `Beng`337* @HB_SCRIPT_CYRILLIC: `Cyrl`338* @HB_SCRIPT_DEVANAGARI: `Deva`339* @HB_SCRIPT_GEORGIAN: `Geor`340* @HB_SCRIPT_GREEK: `Grek`341* @HB_SCRIPT_GUJARATI: `Gujr`342* @HB_SCRIPT_GURMUKHI: `Guru`343* @HB_SCRIPT_HANGUL: `Hang`344* @HB_SCRIPT_HAN: `Hani`345* @HB_SCRIPT_HEBREW: `Hebr`346* @HB_SCRIPT_HIRAGANA: `Hira`347* @HB_SCRIPT_KANNADA: `Knda`348* @HB_SCRIPT_KATAKANA: `Kana`349* @HB_SCRIPT_LAO: `Laoo`350* @HB_SCRIPT_LATIN: `Latn`351* @HB_SCRIPT_MALAYALAM: `Mlym`352* @HB_SCRIPT_ORIYA: `Orya`353* @HB_SCRIPT_TAMIL: `Taml`354* @HB_SCRIPT_TELUGU: `Telu`355* @HB_SCRIPT_THAI: `Thai`356* @HB_SCRIPT_TIBETAN: `Tibt`357* @HB_SCRIPT_BOPOMOFO: `Bopo`358* @HB_SCRIPT_BRAILLE: `Brai`359* @HB_SCRIPT_CANADIAN_SYLLABICS: `Cans`360* @HB_SCRIPT_CHEROKEE: `Cher`361* @HB_SCRIPT_ETHIOPIC: `Ethi`362* @HB_SCRIPT_KHMER: `Khmr`363* @HB_SCRIPT_MONGOLIAN: `Mong`364* @HB_SCRIPT_MYANMAR: `Mymr`365* @HB_SCRIPT_OGHAM: `Ogam`366* @HB_SCRIPT_RUNIC: `Runr`367* @HB_SCRIPT_SINHALA: `Sinh`368* @HB_SCRIPT_SYRIAC: `Syrc`369* @HB_SCRIPT_THAANA: `Thaa`370* @HB_SCRIPT_YI: `Yiii`371* @HB_SCRIPT_DESERET: `Dsrt`372* @HB_SCRIPT_GOTHIC: `Goth`373* @HB_SCRIPT_OLD_ITALIC: `Ital`374* @HB_SCRIPT_BUHID: `Buhd`375* @HB_SCRIPT_HANUNOO: `Hano`376* @HB_SCRIPT_TAGALOG: `Tglg`377* @HB_SCRIPT_TAGBANWA: `Tagb`378* @HB_SCRIPT_CYPRIOT: `Cprt`379* @HB_SCRIPT_LIMBU: `Limb`380* @HB_SCRIPT_LINEAR_B: `Linb`381* @HB_SCRIPT_OSMANYA: `Osma`382* @HB_SCRIPT_SHAVIAN: `Shaw`383* @HB_SCRIPT_TAI_LE: `Tale`384* @HB_SCRIPT_UGARITIC: `Ugar`385* @HB_SCRIPT_BUGINESE: `Bugi`386* @HB_SCRIPT_COPTIC: `Copt`387* @HB_SCRIPT_GLAGOLITIC: `Glag`388* @HB_SCRIPT_KHAROSHTHI: `Khar`389* @HB_SCRIPT_NEW_TAI_LUE: `Talu`390* @HB_SCRIPT_OLD_PERSIAN: `Xpeo`391* @HB_SCRIPT_SYLOTI_NAGRI: `Sylo`392* @HB_SCRIPT_TIFINAGH: `Tfng`393* @HB_SCRIPT_BALINESE: `Bali`394* @HB_SCRIPT_CUNEIFORM: `Xsux`395* @HB_SCRIPT_NKO: `Nkoo`396* @HB_SCRIPT_PHAGS_PA: `Phag`397* @HB_SCRIPT_PHOENICIAN: `Phnx`398* @HB_SCRIPT_CARIAN: `Cari`399* @HB_SCRIPT_CHAM: `Cham`400* @HB_SCRIPT_KAYAH_LI: `Kali`401* @HB_SCRIPT_LEPCHA: `Lepc`402* @HB_SCRIPT_LYCIAN: `Lyci`403* @HB_SCRIPT_LYDIAN: `Lydi`404* @HB_SCRIPT_OL_CHIKI: `Olck`405* @HB_SCRIPT_REJANG: `Rjng`406* @HB_SCRIPT_SAURASHTRA: `Saur`407* @HB_SCRIPT_SUNDANESE: `Sund`408* @HB_SCRIPT_VAI: `Vaii`409* @HB_SCRIPT_AVESTAN: `Avst`410* @HB_SCRIPT_BAMUM: `Bamu`411* @HB_SCRIPT_EGYPTIAN_HIEROGLYPHS: `Egyp`412* @HB_SCRIPT_IMPERIAL_ARAMAIC: `Armi`413* @HB_SCRIPT_INSCRIPTIONAL_PAHLAVI: `Phli`414* @HB_SCRIPT_INSCRIPTIONAL_PARTHIAN: `Prti`415* @HB_SCRIPT_JAVANESE: `Java`416* @HB_SCRIPT_KAITHI: `Kthi`417* @HB_SCRIPT_LISU: `Lisu`418* @HB_SCRIPT_MEETEI_MAYEK: `Mtei`419* @HB_SCRIPT_OLD_SOUTH_ARABIAN: `Sarb`420* @HB_SCRIPT_OLD_TURKIC: `Orkh`421* @HB_SCRIPT_SAMARITAN: `Samr`422* @HB_SCRIPT_TAI_THAM: `Lana`423* @HB_SCRIPT_TAI_VIET: `Tavt`424* @HB_SCRIPT_BATAK: `Batk`425* @HB_SCRIPT_BRAHMI: `Brah`426* @HB_SCRIPT_MANDAIC: `Mand`427* @HB_SCRIPT_CHAKMA: `Cakm`428* @HB_SCRIPT_MEROITIC_CURSIVE: `Merc`429* @HB_SCRIPT_MEROITIC_HIEROGLYPHS: `Mero`430* @HB_SCRIPT_MIAO: `Plrd`431* @HB_SCRIPT_SHARADA: `Shrd`432* @HB_SCRIPT_SORA_SOMPENG: `Sora`433* @HB_SCRIPT_TAKRI: `Takr`434* @HB_SCRIPT_BASSA_VAH: `Bass`, Since: 0.9.30435* @HB_SCRIPT_CAUCASIAN_ALBANIAN: `Aghb`, Since: 0.9.30436* @HB_SCRIPT_DUPLOYAN: `Dupl`, Since: 0.9.30437* @HB_SCRIPT_ELBASAN: `Elba`, Since: 0.9.30438* @HB_SCRIPT_GRANTHA: `Gran`, Since: 0.9.30439* @HB_SCRIPT_KHOJKI: `Khoj`, Since: 0.9.30440* @HB_SCRIPT_KHUDAWADI: `Sind`, Since: 0.9.30441* @HB_SCRIPT_LINEAR_A: `Lina`, Since: 0.9.30442* @HB_SCRIPT_MAHAJANI: `Mahj`, Since: 0.9.30443* @HB_SCRIPT_MANICHAEAN: `Mani`, Since: 0.9.30444* @HB_SCRIPT_MENDE_KIKAKUI: `Mend`, Since: 0.9.30445* @HB_SCRIPT_MODI: `Modi`, Since: 0.9.30446* @HB_SCRIPT_MRO: `Mroo`, Since: 0.9.30447* @HB_SCRIPT_NABATAEAN: `Nbat`, Since: 0.9.30448* @HB_SCRIPT_OLD_NORTH_ARABIAN: `Narb`, Since: 0.9.30449* @HB_SCRIPT_OLD_PERMIC: `Perm`, Since: 0.9.30450* @HB_SCRIPT_PAHAWH_HMONG: `Hmng`, Since: 0.9.30451* @HB_SCRIPT_PALMYRENE: `Palm`, Since: 0.9.30452* @HB_SCRIPT_PAU_CIN_HAU: `Pauc`, Since: 0.9.30453* @HB_SCRIPT_PSALTER_PAHLAVI: `Phlp`, Since: 0.9.30454* @HB_SCRIPT_SIDDHAM: `Sidd`, Since: 0.9.30455* @HB_SCRIPT_TIRHUTA: `Tirh`, Since: 0.9.30456* @HB_SCRIPT_WARANG_CITI: `Wara`, Since: 0.9.30457* @HB_SCRIPT_AHOM: `Ahom`, Since: 0.9.30458* @HB_SCRIPT_ANATOLIAN_HIEROGLYPHS: `Hluw`, Since: 0.9.30459* @HB_SCRIPT_HATRAN: `Hatr`, Since: 0.9.30460* @HB_SCRIPT_MULTANI: `Mult`, Since: 0.9.30461* @HB_SCRIPT_OLD_HUNGARIAN: `Hung`, Since: 0.9.30462* @HB_SCRIPT_SIGNWRITING: `Sgnw`, Since: 0.9.30463* @HB_SCRIPT_ADLAM: `Adlm`, Since: 1.3.0464* @HB_SCRIPT_BHAIKSUKI: `Bhks`, Since: 1.3.0465* @HB_SCRIPT_MARCHEN: `Marc`, Since: 1.3.0466* @HB_SCRIPT_OSAGE: `Osge`, Since: 1.3.0467* @HB_SCRIPT_TANGUT: `Tang`, Since: 1.3.0468* @HB_SCRIPT_NEWA: `Newa`, Since: 1.3.0469* @HB_SCRIPT_MASARAM_GONDI: `Gonm`, Since: 1.6.0470* @HB_SCRIPT_NUSHU: `Nshu`, Since: 1.6.0471* @HB_SCRIPT_SOYOMBO: `Soyo`, Since: 1.6.0472* @HB_SCRIPT_ZANABAZAR_SQUARE: `Zanb`, Since: 1.6.0473* @HB_SCRIPT_DOGRA: `Dogr`, Since: 1.8.0474* @HB_SCRIPT_GUNJALA_GONDI: `Gong`, Since: 1.8.0475* @HB_SCRIPT_HANIFI_ROHINGYA: `Rohg`, Since: 1.8.0476* @HB_SCRIPT_MAKASAR: `Maka`, Since: 1.8.0477* @HB_SCRIPT_MEDEFAIDRIN: `Medf`, Since: 1.8.0478* @HB_SCRIPT_OLD_SOGDIAN: `Sogo`, Since: 1.8.0479* @HB_SCRIPT_SOGDIAN: `Sogd`, Since: 1.8.0480* @HB_SCRIPT_ELYMAIC: `Elym`, Since: 2.4.0481* @HB_SCRIPT_NANDINAGARI: `Nand`, Since: 2.4.0482* @HB_SCRIPT_NYIAKENG_PUACHUE_HMONG: `Hmnp`, Since: 2.4.0483* @HB_SCRIPT_WANCHO: `Wcho`, Since: 2.4.0484* @HB_SCRIPT_CHORASMIAN: `Chrs`, Since: 2.6.7485* @HB_SCRIPT_DIVES_AKURU: `Diak`, Since: 2.6.7486* @HB_SCRIPT_KHITAN_SMALL_SCRIPT: `Kits`, Since: 2.6.7487* @HB_SCRIPT_YEZIDI: `Yezi`, Since: 2.6.7488* @HB_SCRIPT_CYPRO_MINOAN: `Cpmn`, Since: 3.0.0489* @HB_SCRIPT_OLD_UYGHUR: `Ougr`, Since: 3.0.0490* @HB_SCRIPT_TANGSA: `Tnsa`, Since: 3.0.0491* @HB_SCRIPT_TOTO: `Toto`, Since: 3.0.0492* @HB_SCRIPT_VITHKUQI: `Vith`, Since: 3.0.0493* @HB_SCRIPT_MATH: `Zmth`, Since: 3.4.0494* @HB_SCRIPT_INVALID: No script set495*496* Data type for scripts. Each #hb_script_t's value is an #hb_tag_t corresponding497* to the four-letter values defined by [ISO 15924](https://unicode.org/iso15924/).498*499* See also the Script (sc) property of the Unicode Character Database.500*501**/502503/* https://docs.google.com/spreadsheets/d/1Y90M0Ie3MUJ6UVCRDOypOtijlMDLNNyyLk36T6iMu0o */504typedef enum505{506HB_SCRIPT_COMMON = HB_TAG ('Z','y','y','y'), /*1.1*/507HB_SCRIPT_INHERITED = HB_TAG ('Z','i','n','h'), /*1.1*/508HB_SCRIPT_UNKNOWN = HB_TAG ('Z','z','z','z'), /*5.0*/509510HB_SCRIPT_ARABIC = HB_TAG ('A','r','a','b'), /*1.1*/511HB_SCRIPT_ARMENIAN = HB_TAG ('A','r','m','n'), /*1.1*/512HB_SCRIPT_BENGALI = HB_TAG ('B','e','n','g'), /*1.1*/513HB_SCRIPT_CYRILLIC = HB_TAG ('C','y','r','l'), /*1.1*/514HB_SCRIPT_DEVANAGARI = HB_TAG ('D','e','v','a'), /*1.1*/515HB_SCRIPT_GEORGIAN = HB_TAG ('G','e','o','r'), /*1.1*/516HB_SCRIPT_GREEK = HB_TAG ('G','r','e','k'), /*1.1*/517HB_SCRIPT_GUJARATI = HB_TAG ('G','u','j','r'), /*1.1*/518HB_SCRIPT_GURMUKHI = HB_TAG ('G','u','r','u'), /*1.1*/519HB_SCRIPT_HANGUL = HB_TAG ('H','a','n','g'), /*1.1*/520HB_SCRIPT_HAN = HB_TAG ('H','a','n','i'), /*1.1*/521HB_SCRIPT_HEBREW = HB_TAG ('H','e','b','r'), /*1.1*/522HB_SCRIPT_HIRAGANA = HB_TAG ('H','i','r','a'), /*1.1*/523HB_SCRIPT_KANNADA = HB_TAG ('K','n','d','a'), /*1.1*/524HB_SCRIPT_KATAKANA = HB_TAG ('K','a','n','a'), /*1.1*/525HB_SCRIPT_LAO = HB_TAG ('L','a','o','o'), /*1.1*/526HB_SCRIPT_LATIN = HB_TAG ('L','a','t','n'), /*1.1*/527HB_SCRIPT_MALAYALAM = HB_TAG ('M','l','y','m'), /*1.1*/528HB_SCRIPT_ORIYA = HB_TAG ('O','r','y','a'), /*1.1*/529HB_SCRIPT_TAMIL = HB_TAG ('T','a','m','l'), /*1.1*/530HB_SCRIPT_TELUGU = HB_TAG ('T','e','l','u'), /*1.1*/531HB_SCRIPT_THAI = HB_TAG ('T','h','a','i'), /*1.1*/532533HB_SCRIPT_TIBETAN = HB_TAG ('T','i','b','t'), /*2.0*/534535HB_SCRIPT_BOPOMOFO = HB_TAG ('B','o','p','o'), /*3.0*/536HB_SCRIPT_BRAILLE = HB_TAG ('B','r','a','i'), /*3.0*/537HB_SCRIPT_CANADIAN_SYLLABICS = HB_TAG ('C','a','n','s'), /*3.0*/538HB_SCRIPT_CHEROKEE = HB_TAG ('C','h','e','r'), /*3.0*/539HB_SCRIPT_ETHIOPIC = HB_TAG ('E','t','h','i'), /*3.0*/540HB_SCRIPT_KHMER = HB_TAG ('K','h','m','r'), /*3.0*/541HB_SCRIPT_MONGOLIAN = HB_TAG ('M','o','n','g'), /*3.0*/542HB_SCRIPT_MYANMAR = HB_TAG ('M','y','m','r'), /*3.0*/543HB_SCRIPT_OGHAM = HB_TAG ('O','g','a','m'), /*3.0*/544HB_SCRIPT_RUNIC = HB_TAG ('R','u','n','r'), /*3.0*/545HB_SCRIPT_SINHALA = HB_TAG ('S','i','n','h'), /*3.0*/546HB_SCRIPT_SYRIAC = HB_TAG ('S','y','r','c'), /*3.0*/547HB_SCRIPT_THAANA = HB_TAG ('T','h','a','a'), /*3.0*/548HB_SCRIPT_YI = HB_TAG ('Y','i','i','i'), /*3.0*/549550HB_SCRIPT_DESERET = HB_TAG ('D','s','r','t'), /*3.1*/551HB_SCRIPT_GOTHIC = HB_TAG ('G','o','t','h'), /*3.1*/552HB_SCRIPT_OLD_ITALIC = HB_TAG ('I','t','a','l'), /*3.1*/553554HB_SCRIPT_BUHID = HB_TAG ('B','u','h','d'), /*3.2*/555HB_SCRIPT_HANUNOO = HB_TAG ('H','a','n','o'), /*3.2*/556HB_SCRIPT_TAGALOG = HB_TAG ('T','g','l','g'), /*3.2*/557HB_SCRIPT_TAGBANWA = HB_TAG ('T','a','g','b'), /*3.2*/558559HB_SCRIPT_CYPRIOT = HB_TAG ('C','p','r','t'), /*4.0*/560HB_SCRIPT_LIMBU = HB_TAG ('L','i','m','b'), /*4.0*/561HB_SCRIPT_LINEAR_B = HB_TAG ('L','i','n','b'), /*4.0*/562HB_SCRIPT_OSMANYA = HB_TAG ('O','s','m','a'), /*4.0*/563HB_SCRIPT_SHAVIAN = HB_TAG ('S','h','a','w'), /*4.0*/564HB_SCRIPT_TAI_LE = HB_TAG ('T','a','l','e'), /*4.0*/565HB_SCRIPT_UGARITIC = HB_TAG ('U','g','a','r'), /*4.0*/566567HB_SCRIPT_BUGINESE = HB_TAG ('B','u','g','i'), /*4.1*/568HB_SCRIPT_COPTIC = HB_TAG ('C','o','p','t'), /*4.1*/569HB_SCRIPT_GLAGOLITIC = HB_TAG ('G','l','a','g'), /*4.1*/570HB_SCRIPT_KHAROSHTHI = HB_TAG ('K','h','a','r'), /*4.1*/571HB_SCRIPT_NEW_TAI_LUE = HB_TAG ('T','a','l','u'), /*4.1*/572HB_SCRIPT_OLD_PERSIAN = HB_TAG ('X','p','e','o'), /*4.1*/573HB_SCRIPT_SYLOTI_NAGRI = HB_TAG ('S','y','l','o'), /*4.1*/574HB_SCRIPT_TIFINAGH = HB_TAG ('T','f','n','g'), /*4.1*/575576HB_SCRIPT_BALINESE = HB_TAG ('B','a','l','i'), /*5.0*/577HB_SCRIPT_CUNEIFORM = HB_TAG ('X','s','u','x'), /*5.0*/578HB_SCRIPT_NKO = HB_TAG ('N','k','o','o'), /*5.0*/579HB_SCRIPT_PHAGS_PA = HB_TAG ('P','h','a','g'), /*5.0*/580HB_SCRIPT_PHOENICIAN = HB_TAG ('P','h','n','x'), /*5.0*/581582HB_SCRIPT_CARIAN = HB_TAG ('C','a','r','i'), /*5.1*/583HB_SCRIPT_CHAM = HB_TAG ('C','h','a','m'), /*5.1*/584HB_SCRIPT_KAYAH_LI = HB_TAG ('K','a','l','i'), /*5.1*/585HB_SCRIPT_LEPCHA = HB_TAG ('L','e','p','c'), /*5.1*/586HB_SCRIPT_LYCIAN = HB_TAG ('L','y','c','i'), /*5.1*/587HB_SCRIPT_LYDIAN = HB_TAG ('L','y','d','i'), /*5.1*/588HB_SCRIPT_OL_CHIKI = HB_TAG ('O','l','c','k'), /*5.1*/589HB_SCRIPT_REJANG = HB_TAG ('R','j','n','g'), /*5.1*/590HB_SCRIPT_SAURASHTRA = HB_TAG ('S','a','u','r'), /*5.1*/591HB_SCRIPT_SUNDANESE = HB_TAG ('S','u','n','d'), /*5.1*/592HB_SCRIPT_VAI = HB_TAG ('V','a','i','i'), /*5.1*/593594HB_SCRIPT_AVESTAN = HB_TAG ('A','v','s','t'), /*5.2*/595HB_SCRIPT_BAMUM = HB_TAG ('B','a','m','u'), /*5.2*/596HB_SCRIPT_EGYPTIAN_HIEROGLYPHS = HB_TAG ('E','g','y','p'), /*5.2*/597HB_SCRIPT_IMPERIAL_ARAMAIC = HB_TAG ('A','r','m','i'), /*5.2*/598HB_SCRIPT_INSCRIPTIONAL_PAHLAVI = HB_TAG ('P','h','l','i'), /*5.2*/599HB_SCRIPT_INSCRIPTIONAL_PARTHIAN = HB_TAG ('P','r','t','i'), /*5.2*/600HB_SCRIPT_JAVANESE = HB_TAG ('J','a','v','a'), /*5.2*/601HB_SCRIPT_KAITHI = HB_TAG ('K','t','h','i'), /*5.2*/602HB_SCRIPT_LISU = HB_TAG ('L','i','s','u'), /*5.2*/603HB_SCRIPT_MEETEI_MAYEK = HB_TAG ('M','t','e','i'), /*5.2*/604HB_SCRIPT_OLD_SOUTH_ARABIAN = HB_TAG ('S','a','r','b'), /*5.2*/605HB_SCRIPT_OLD_TURKIC = HB_TAG ('O','r','k','h'), /*5.2*/606HB_SCRIPT_SAMARITAN = HB_TAG ('S','a','m','r'), /*5.2*/607HB_SCRIPT_TAI_THAM = HB_TAG ('L','a','n','a'), /*5.2*/608HB_SCRIPT_TAI_VIET = HB_TAG ('T','a','v','t'), /*5.2*/609610HB_SCRIPT_BATAK = HB_TAG ('B','a','t','k'), /*6.0*/611HB_SCRIPT_BRAHMI = HB_TAG ('B','r','a','h'), /*6.0*/612HB_SCRIPT_MANDAIC = HB_TAG ('M','a','n','d'), /*6.0*/613614HB_SCRIPT_CHAKMA = HB_TAG ('C','a','k','m'), /*6.1*/615HB_SCRIPT_MEROITIC_CURSIVE = HB_TAG ('M','e','r','c'), /*6.1*/616HB_SCRIPT_MEROITIC_HIEROGLYPHS = HB_TAG ('M','e','r','o'), /*6.1*/617HB_SCRIPT_MIAO = HB_TAG ('P','l','r','d'), /*6.1*/618HB_SCRIPT_SHARADA = HB_TAG ('S','h','r','d'), /*6.1*/619HB_SCRIPT_SORA_SOMPENG = HB_TAG ('S','o','r','a'), /*6.1*/620HB_SCRIPT_TAKRI = HB_TAG ('T','a','k','r'), /*6.1*/621622/*623* Since: 0.9.30624*/625HB_SCRIPT_BASSA_VAH = HB_TAG ('B','a','s','s'), /*7.0*/626HB_SCRIPT_CAUCASIAN_ALBANIAN = HB_TAG ('A','g','h','b'), /*7.0*/627HB_SCRIPT_DUPLOYAN = HB_TAG ('D','u','p','l'), /*7.0*/628HB_SCRIPT_ELBASAN = HB_TAG ('E','l','b','a'), /*7.0*/629HB_SCRIPT_GRANTHA = HB_TAG ('G','r','a','n'), /*7.0*/630HB_SCRIPT_KHOJKI = HB_TAG ('K','h','o','j'), /*7.0*/631HB_SCRIPT_KHUDAWADI = HB_TAG ('S','i','n','d'), /*7.0*/632HB_SCRIPT_LINEAR_A = HB_TAG ('L','i','n','a'), /*7.0*/633HB_SCRIPT_MAHAJANI = HB_TAG ('M','a','h','j'), /*7.0*/634HB_SCRIPT_MANICHAEAN = HB_TAG ('M','a','n','i'), /*7.0*/635HB_SCRIPT_MENDE_KIKAKUI = HB_TAG ('M','e','n','d'), /*7.0*/636HB_SCRIPT_MODI = HB_TAG ('M','o','d','i'), /*7.0*/637HB_SCRIPT_MRO = HB_TAG ('M','r','o','o'), /*7.0*/638HB_SCRIPT_NABATAEAN = HB_TAG ('N','b','a','t'), /*7.0*/639HB_SCRIPT_OLD_NORTH_ARABIAN = HB_TAG ('N','a','r','b'), /*7.0*/640HB_SCRIPT_OLD_PERMIC = HB_TAG ('P','e','r','m'), /*7.0*/641HB_SCRIPT_PAHAWH_HMONG = HB_TAG ('H','m','n','g'), /*7.0*/642HB_SCRIPT_PALMYRENE = HB_TAG ('P','a','l','m'), /*7.0*/643HB_SCRIPT_PAU_CIN_HAU = HB_TAG ('P','a','u','c'), /*7.0*/644HB_SCRIPT_PSALTER_PAHLAVI = HB_TAG ('P','h','l','p'), /*7.0*/645HB_SCRIPT_SIDDHAM = HB_TAG ('S','i','d','d'), /*7.0*/646HB_SCRIPT_TIRHUTA = HB_TAG ('T','i','r','h'), /*7.0*/647HB_SCRIPT_WARANG_CITI = HB_TAG ('W','a','r','a'), /*7.0*/648649HB_SCRIPT_AHOM = HB_TAG ('A','h','o','m'), /*8.0*/650HB_SCRIPT_ANATOLIAN_HIEROGLYPHS = HB_TAG ('H','l','u','w'), /*8.0*/651HB_SCRIPT_HATRAN = HB_TAG ('H','a','t','r'), /*8.0*/652HB_SCRIPT_MULTANI = HB_TAG ('M','u','l','t'), /*8.0*/653HB_SCRIPT_OLD_HUNGARIAN = HB_TAG ('H','u','n','g'), /*8.0*/654HB_SCRIPT_SIGNWRITING = HB_TAG ('S','g','n','w'), /*8.0*/655656/*657* Since 1.3.0658*/659HB_SCRIPT_ADLAM = HB_TAG ('A','d','l','m'), /*9.0*/660HB_SCRIPT_BHAIKSUKI = HB_TAG ('B','h','k','s'), /*9.0*/661HB_SCRIPT_MARCHEN = HB_TAG ('M','a','r','c'), /*9.0*/662HB_SCRIPT_OSAGE = HB_TAG ('O','s','g','e'), /*9.0*/663HB_SCRIPT_TANGUT = HB_TAG ('T','a','n','g'), /*9.0*/664HB_SCRIPT_NEWA = HB_TAG ('N','e','w','a'), /*9.0*/665666/*667* Since 1.6.0668*/669HB_SCRIPT_MASARAM_GONDI = HB_TAG ('G','o','n','m'), /*10.0*/670HB_SCRIPT_NUSHU = HB_TAG ('N','s','h','u'), /*10.0*/671HB_SCRIPT_SOYOMBO = HB_TAG ('S','o','y','o'), /*10.0*/672HB_SCRIPT_ZANABAZAR_SQUARE = HB_TAG ('Z','a','n','b'), /*10.0*/673674/*675* Since 1.8.0676*/677HB_SCRIPT_DOGRA = HB_TAG ('D','o','g','r'), /*11.0*/678HB_SCRIPT_GUNJALA_GONDI = HB_TAG ('G','o','n','g'), /*11.0*/679HB_SCRIPT_HANIFI_ROHINGYA = HB_TAG ('R','o','h','g'), /*11.0*/680HB_SCRIPT_MAKASAR = HB_TAG ('M','a','k','a'), /*11.0*/681HB_SCRIPT_MEDEFAIDRIN = HB_TAG ('M','e','d','f'), /*11.0*/682HB_SCRIPT_OLD_SOGDIAN = HB_TAG ('S','o','g','o'), /*11.0*/683HB_SCRIPT_SOGDIAN = HB_TAG ('S','o','g','d'), /*11.0*/684685/*686* Since 2.4.0687*/688HB_SCRIPT_ELYMAIC = HB_TAG ('E','l','y','m'), /*12.0*/689HB_SCRIPT_NANDINAGARI = HB_TAG ('N','a','n','d'), /*12.0*/690HB_SCRIPT_NYIAKENG_PUACHUE_HMONG = HB_TAG ('H','m','n','p'), /*12.0*/691HB_SCRIPT_WANCHO = HB_TAG ('W','c','h','o'), /*12.0*/692693/*694* Since 2.6.7695*/696HB_SCRIPT_CHORASMIAN = HB_TAG ('C','h','r','s'), /*13.0*/697HB_SCRIPT_DIVES_AKURU = HB_TAG ('D','i','a','k'), /*13.0*/698HB_SCRIPT_KHITAN_SMALL_SCRIPT = HB_TAG ('K','i','t','s'), /*13.0*/699HB_SCRIPT_YEZIDI = HB_TAG ('Y','e','z','i'), /*13.0*/700701/*702* Since 3.0.0703*/704HB_SCRIPT_CYPRO_MINOAN = HB_TAG ('C','p','m','n'), /*14.0*/705HB_SCRIPT_OLD_UYGHUR = HB_TAG ('O','u','g','r'), /*14.0*/706HB_SCRIPT_TANGSA = HB_TAG ('T','n','s','a'), /*14.0*/707HB_SCRIPT_TOTO = HB_TAG ('T','o','t','o'), /*14.0*/708HB_SCRIPT_VITHKUQI = HB_TAG ('V','i','t','h'), /*14.0*/709710/*711* Since 3.4.0712*/713HB_SCRIPT_MATH = HB_TAG ('Z','m','t','h'),714715/* No script set. */716HB_SCRIPT_INVALID = HB_TAG_NONE,717718/*< private >*/719720/* Dummy values to ensure any hb_tag_t value can be passed/stored as hb_script_t721* without risking undefined behavior. We have two, for historical reasons.722* HB_TAG_MAX used to be unsigned, but that was invalid Ansi C, so was changed723* to _HB_SCRIPT_MAX_VALUE to be equal to HB_TAG_MAX_SIGNED as well.724*725* See this thread for technicalities:726*727* https://lists.freedesktop.org/archives/harfbuzz/2014-March/004150.html728*/729_HB_SCRIPT_MAX_VALUE = HB_TAG_MAX_SIGNED, /*< skip >*/730_HB_SCRIPT_MAX_VALUE_SIGNED = HB_TAG_MAX_SIGNED /*< skip >*/731732} hb_script_t;733734735/* Script functions */736737HB_EXTERN hb_script_t738hb_script_from_iso15924_tag (hb_tag_t tag);739740HB_EXTERN hb_script_t741hb_script_from_string (const char *str, int len);742743HB_EXTERN hb_tag_t744hb_script_to_iso15924_tag (hb_script_t script);745746HB_EXTERN hb_direction_t747hb_script_get_horizontal_direction (hb_script_t script);748749750/* User data */751752/**753* hb_user_data_key_t:754*755* Data structure for holding user-data keys.756*757**/758typedef struct hb_user_data_key_t {759/*< private >*/760char unused;761} hb_user_data_key_t;762763/**764* hb_destroy_func_t:765* @user_data: the data to be destroyed766*767* A virtual method for destroy user-data callbacks.768*769*/770typedef void (*hb_destroy_func_t) (void *user_data);771772773/* Font features and variations. */774775/**776* HB_FEATURE_GLOBAL_START:777*778* Special setting for #hb_feature_t.start to apply the feature from the start779* of the buffer.780*781* Since: 2.0.0782*/783#define HB_FEATURE_GLOBAL_START 0784785/**786* HB_FEATURE_GLOBAL_END:787*788* Special setting for #hb_feature_t.end to apply the feature from to the end789* of the buffer.790*791* Since: 2.0.0792*/793#define HB_FEATURE_GLOBAL_END ((unsigned int) -1)794795/**796* hb_feature_t:797* @tag: The #hb_tag_t tag of the feature798* @value: The value of the feature. 0 disables the feature, non-zero (usually799* 1) enables the feature. For features implemented as lookup type 3 (like800* 'salt') the @value is a one based index into the alternates.801* @start: the cluster to start applying this feature setting (inclusive).802* @end: the cluster to end applying this feature setting (exclusive).803*804* The #hb_feature_t is the structure that holds information about requested805* feature application. The feature will be applied with the given value to all806* glyphs which are in clusters between @start (inclusive) and @end (exclusive).807* Setting start to #HB_FEATURE_GLOBAL_START and end to #HB_FEATURE_GLOBAL_END808* specifies that the feature always applies to the entire buffer.809*/810typedef struct hb_feature_t {811hb_tag_t tag;812uint32_t value;813unsigned int start;814unsigned int end;815} hb_feature_t;816817HB_EXTERN hb_bool_t818hb_feature_from_string (const char *str, int len,819hb_feature_t *feature);820821HB_EXTERN void822hb_feature_to_string (hb_feature_t *feature,823char *buf, unsigned int size);824825/**826* hb_variation_t:827* @tag: The #hb_tag_t tag of the variation-axis name828* @value: The value of the variation axis829*830* Data type for holding variation data. Registered OpenType831* variation-axis tags are listed in832* [OpenType Axis Tag Registry](https://docs.microsoft.com/en-us/typography/opentype/spec/dvaraxisreg).833*834* Since: 1.4.2835*/836typedef struct hb_variation_t {837hb_tag_t tag;838float value;839} hb_variation_t;840841HB_EXTERN hb_bool_t842hb_variation_from_string (const char *str, int len,843hb_variation_t *variation);844845HB_EXTERN void846hb_variation_to_string (hb_variation_t *variation,847char *buf, unsigned int size);848849/**850* hb_color_t:851*852* Data type for holding color values. Colors are eight bits per853* channel RGB plus alpha transparency.854*855* Since: 2.1.0856*/857typedef uint32_t hb_color_t;858859/**860* HB_COLOR:861* @b: blue channel value862* @g: green channel value863* @r: red channel value864* @a: alpha channel value865*866* Constructs an #hb_color_t from four integers.867*868* Since: 2.1.0869*/870#define HB_COLOR(b,g,r,a) ((hb_color_t) HB_TAG ((b),(g),(r),(a)))871872HB_EXTERN uint8_t873hb_color_get_alpha (hb_color_t color);874#define hb_color_get_alpha(color) ((color) & 0xFF)875876HB_EXTERN uint8_t877hb_color_get_red (hb_color_t color);878#define hb_color_get_red(color) (((color) >> 8) & 0xFF)879880HB_EXTERN uint8_t881hb_color_get_green (hb_color_t color);882#define hb_color_get_green(color) (((color) >> 16) & 0xFF)883884HB_EXTERN uint8_t885hb_color_get_blue (hb_color_t color);886#define hb_color_get_blue(color) (((color) >> 24) & 0xFF)887888HB_END_DECLS889890#endif /* HB_COMMON_H */891892893