cadmus_core/font/
harfbuzz_sys.rs

1#![allow(unused)]
2
3use super::freetype_sys::FtFace;
4use std::mem;
5
6macro_rules! hb_tag {
7    ($c1:expr, $c2:expr, $c3:expr, $c4:expr) => {
8        ($c1 as HbTag) << 24 | ($c2 as HbTag) << 16 | ($c3 as HbTag) << 8 | ($c4 as HbTag)
9    };
10}
11
12pub type HbDirection = libc::c_uint;
13pub type HbTag = u32;
14pub type HbScript = libc::c_uint;
15pub type HbBool = libc::c_int;
16
17pub enum HbLanguage {}
18pub enum HbBuffer {}
19pub enum HbFont {}
20
21#[link(name = "harfbuzz")]
22extern "C" {
23    pub fn hb_ft_font_create(face: *mut FtFace, destroy: *const libc::c_void) -> *mut HbFont;
24    pub fn hb_ft_font_changed(font: *mut HbFont);
25    pub fn hb_font_destroy(font: *mut HbFont);
26    pub fn hb_buffer_create() -> *mut HbBuffer;
27    pub fn hb_buffer_destroy(buf: *mut HbBuffer);
28    pub fn hb_buffer_clear_contents(buf: *mut HbBuffer);
29    pub fn hb_buffer_add_utf8(
30        buf: *mut HbBuffer,
31        txt: *const libc::c_char,
32        len: libc::c_int,
33        offset: libc::c_uint,
34        ilen: libc::c_int,
35    );
36    pub fn hb_buffer_set_direction(buf: *mut HbBuffer, dir: HbDirection);
37    pub fn hb_buffer_guess_segment_properties(buf: *mut HbBuffer);
38    pub fn hb_shape(
39        font: *mut HbFont,
40        buf: *mut HbBuffer,
41        features: *const HbFeature,
42        features_count: libc::c_uint,
43    );
44    pub fn hb_feature_from_string(
45        s: *const libc::c_char,
46        len: libc::c_int,
47        feature: *mut HbFeature,
48    ) -> HbBool;
49    pub fn hb_buffer_get_length(buf: *mut HbBuffer) -> libc::c_uint;
50    pub fn hb_buffer_get_glyph_infos(
51        buf: *mut HbBuffer,
52        len: *mut libc::c_uint,
53    ) -> *mut HbGlyphInfo;
54    pub fn hb_buffer_get_glyph_positions(
55        buf: *mut HbBuffer,
56        len: *mut libc::c_uint,
57    ) -> *mut HbGlyphPosition;
58    pub fn hb_buffer_get_direction(buf: *const HbBuffer) -> HbDirection;
59    pub fn hb_buffer_get_language(buf: *const HbBuffer) -> *const HbLanguage;
60    pub fn hb_buffer_get_script(buf: *const HbBuffer) -> HbScript;
61}
62
63#[repr(C)]
64#[derive(Debug)]
65pub struct HbGlyphInfo {
66    pub codepoint: u32,
67    mask: u32,
68    pub cluster: u32,
69    var1: u32,
70    var2: u32,
71}
72
73#[repr(C)]
74#[derive(Debug)]
75pub struct HbGlyphPosition {
76    pub x_advance: i32,
77    pub y_advance: i32,
78    pub x_offset: i32,
79    pub y_offset: i32,
80    var: u32,
81}
82
83#[repr(C)]
84pub struct HbFeature {
85    tag: HbTag,
86    value: u32,
87    start: libc::c_uint,
88    end: libc::c_uint,
89}
90
91impl Default for HbFeature {
92    fn default() -> Self {
93        unsafe { mem::zeroed() }
94    }
95}
96
97pub const HB_DIRECTION_LTR: HbDirection = 4;
98pub const HB_DIRECTION_RTL: HbDirection = 5;
99pub const HB_DIRECTION_TTB: HbDirection = 6;
100pub const HB_DIRECTION_BTT: HbDirection = 7;
101
102// Extracted from harfbuzz in src/hb-common.h
103pub const HB_SCRIPT_COMMON: HbTag = hb_tag!('Z', 'y', 'y', 'y');
104pub const HB_SCRIPT_INHERITED: HbTag = hb_tag!('Z', 'i', 'n', 'h');
105pub const HB_SCRIPT_UNKNOWN: HbTag = hb_tag!('Z', 'z', 'z', 'z');
106pub const HB_SCRIPT_INVALID: HbTag = 0;
107
108// Custom *scripts*.
109pub const HB_SYMBOL_MISC_ONE: HbTag = hb_tag!('Z', 's', 'm', 'o');
110pub const HB_SYMBOL_MISC_TWO: HbTag = hb_tag!('Z', 's', 'm', 't');
111pub const HB_SYMBOL_MUSIC: HbTag = hb_tag!('Z', 's', 'm', 'u');
112pub const HB_SYMBOL_MATHS: HbTag = hb_tag!('Z', 's', 'm', 'a');
113pub const HB_SYMBOL_EMOJI: HbTag = hb_tag!('Z', 's', 'e', 'j');
114
115pub const HB_SCRIPT_ARABIC: HbTag = hb_tag!('A', 'r', 'a', 'b');
116pub const HB_SCRIPT_ARMENIAN: HbTag = hb_tag!('A', 'r', 'm', 'n');
117pub const HB_SCRIPT_BENGALI: HbTag = hb_tag!('B', 'e', 'n', 'g');
118pub const HB_SCRIPT_CYRILLIC: HbTag = hb_tag!('C', 'y', 'r', 'l');
119pub const HB_SCRIPT_DEVANAGARI: HbTag = hb_tag!('D', 'e', 'v', 'a');
120pub const HB_SCRIPT_GEORGIAN: HbTag = hb_tag!('G', 'e', 'o', 'r');
121pub const HB_SCRIPT_GREEK: HbTag = hb_tag!('G', 'r', 'e', 'k');
122pub const HB_SCRIPT_GUJARATI: HbTag = hb_tag!('G', 'u', 'j', 'r');
123pub const HB_SCRIPT_GURMUKHI: HbTag = hb_tag!('G', 'u', 'r', 'u');
124pub const HB_SCRIPT_HANGUL: HbTag = hb_tag!('H', 'a', 'n', 'g');
125pub const HB_SCRIPT_HAN: HbTag = hb_tag!('H', 'a', 'n', 'i');
126pub const HB_SCRIPT_HEBREW: HbTag = hb_tag!('H', 'e', 'b', 'r');
127pub const HB_SCRIPT_HIRAGANA: HbTag = hb_tag!('H', 'i', 'r', 'a');
128pub const HB_SCRIPT_KANNADA: HbTag = hb_tag!('K', 'n', 'd', 'a');
129pub const HB_SCRIPT_KATAKANA: HbTag = hb_tag!('K', 'a', 'n', 'a');
130pub const HB_SCRIPT_LAO: HbTag = hb_tag!('L', 'a', 'o', 'o');
131pub const HB_SCRIPT_LATIN: HbTag = hb_tag!('L', 'a', 't', 'n');
132pub const HB_SCRIPT_MALAYALAM: HbTag = hb_tag!('M', 'l', 'y', 'm');
133pub const HB_SCRIPT_ORIYA: HbTag = hb_tag!('O', 'r', 'y', 'a');
134pub const HB_SCRIPT_TAMIL: HbTag = hb_tag!('T', 'a', 'm', 'l');
135pub const HB_SCRIPT_TELUGU: HbTag = hb_tag!('T', 'e', 'l', 'u');
136pub const HB_SCRIPT_THAI: HbTag = hb_tag!('T', 'h', 'a', 'i');
137pub const HB_SCRIPT_TIBETAN: HbTag = hb_tag!('T', 'i', 'b', 't');
138pub const HB_SCRIPT_BOPOMOFO: HbTag = hb_tag!('B', 'o', 'p', 'o');
139pub const HB_SCRIPT_BRAILLE: HbTag = hb_tag!('B', 'r', 'a', 'i');
140pub const HB_SCRIPT_CANADIAN_SYLLABICS: HbTag = hb_tag!('C', 'a', 'n', 's');
141pub const HB_SCRIPT_CHEROKEE: HbTag = hb_tag!('C', 'h', 'e', 'r');
142pub const HB_SCRIPT_ETHIOPIC: HbTag = hb_tag!('E', 't', 'h', 'i');
143pub const HB_SCRIPT_KHMER: HbTag = hb_tag!('K', 'h', 'm', 'r');
144pub const HB_SCRIPT_MONGOLIAN: HbTag = hb_tag!('M', 'o', 'n', 'g');
145pub const HB_SCRIPT_MYANMAR: HbTag = hb_tag!('M', 'y', 'm', 'r');
146pub const HB_SCRIPT_OGHAM: HbTag = hb_tag!('O', 'g', 'a', 'm');
147pub const HB_SCRIPT_RUNIC: HbTag = hb_tag!('R', 'u', 'n', 'r');
148pub const HB_SCRIPT_SINHALA: HbTag = hb_tag!('S', 'i', 'n', 'h');
149pub const HB_SCRIPT_SYRIAC: HbTag = hb_tag!('S', 'y', 'r', 'c');
150pub const HB_SCRIPT_THAANA: HbTag = hb_tag!('T', 'h', 'a', 'a');
151pub const HB_SCRIPT_YI: HbTag = hb_tag!('Y', 'i', 'i', 'i');
152pub const HB_SCRIPT_DESERET: HbTag = hb_tag!('D', 's', 'r', 't');
153pub const HB_SCRIPT_GOTHIC: HbTag = hb_tag!('G', 'o', 't', 'h');
154pub const HB_SCRIPT_OLD_ITALIC: HbTag = hb_tag!('I', 't', 'a', 'l');
155pub const HB_SCRIPT_BUHID: HbTag = hb_tag!('B', 'u', 'h', 'd');
156pub const HB_SCRIPT_HANUNOO: HbTag = hb_tag!('H', 'a', 'n', 'o');
157pub const HB_SCRIPT_TAGALOG: HbTag = hb_tag!('T', 'g', 'l', 'g');
158pub const HB_SCRIPT_TAGBANWA: HbTag = hb_tag!('T', 'a', 'g', 'b');
159pub const HB_SCRIPT_CYPRIOT: HbTag = hb_tag!('C', 'p', 'r', 't');
160pub const HB_SCRIPT_LIMBU: HbTag = hb_tag!('L', 'i', 'm', 'b');
161pub const HB_SCRIPT_LINEAR_B: HbTag = hb_tag!('L', 'i', 'n', 'b');
162pub const HB_SCRIPT_OSMANYA: HbTag = hb_tag!('O', 's', 'm', 'a');
163pub const HB_SCRIPT_SHAVIAN: HbTag = hb_tag!('S', 'h', 'a', 'w');
164pub const HB_SCRIPT_TAI_LE: HbTag = hb_tag!('T', 'a', 'l', 'e');
165pub const HB_SCRIPT_UGARITIC: HbTag = hb_tag!('U', 'g', 'a', 'r');
166pub const HB_SCRIPT_BUGINESE: HbTag = hb_tag!('B', 'u', 'g', 'i');
167pub const HB_SCRIPT_COPTIC: HbTag = hb_tag!('C', 'o', 'p', 't');
168pub const HB_SCRIPT_GLAGOLITIC: HbTag = hb_tag!('G', 'l', 'a', 'g');
169pub const HB_SCRIPT_KHAROSHTHI: HbTag = hb_tag!('K', 'h', 'a', 'r');
170pub const HB_SCRIPT_NEW_TAI_LUE: HbTag = hb_tag!('T', 'a', 'l', 'u');
171pub const HB_SCRIPT_OLD_PERSIAN: HbTag = hb_tag!('X', 'p', 'e', 'o');
172pub const HB_SCRIPT_SYLOTI_NAGRI: HbTag = hb_tag!('S', 'y', 'l', 'o');
173pub const HB_SCRIPT_TIFINAGH: HbTag = hb_tag!('T', 'f', 'n', 'g');
174pub const HB_SCRIPT_BALINESE: HbTag = hb_tag!('B', 'a', 'l', 'i');
175pub const HB_SCRIPT_CUNEIFORM: HbTag = hb_tag!('X', 's', 'u', 'x');
176pub const HB_SCRIPT_NKO: HbTag = hb_tag!('N', 'k', 'o', 'o');
177pub const HB_SCRIPT_PHAGS_PA: HbTag = hb_tag!('P', 'h', 'a', 'g');
178pub const HB_SCRIPT_PHOENICIAN: HbTag = hb_tag!('P', 'h', 'n', 'x');
179pub const HB_SCRIPT_CARIAN: HbTag = hb_tag!('C', 'a', 'r', 'i');
180pub const HB_SCRIPT_CHAM: HbTag = hb_tag!('C', 'h', 'a', 'm');
181pub const HB_SCRIPT_KAYAH_LI: HbTag = hb_tag!('K', 'a', 'l', 'i');
182pub const HB_SCRIPT_LEPCHA: HbTag = hb_tag!('L', 'e', 'p', 'c');
183pub const HB_SCRIPT_LYCIAN: HbTag = hb_tag!('L', 'y', 'c', 'i');
184pub const HB_SCRIPT_LYDIAN: HbTag = hb_tag!('L', 'y', 'd', 'i');
185pub const HB_SCRIPT_OL_CHIKI: HbTag = hb_tag!('O', 'l', 'c', 'k');
186pub const HB_SCRIPT_REJANG: HbTag = hb_tag!('R', 'j', 'n', 'g');
187pub const HB_SCRIPT_SAURASHTRA: HbTag = hb_tag!('S', 'a', 'u', 'r');
188pub const HB_SCRIPT_SUNDANESE: HbTag = hb_tag!('S', 'u', 'n', 'd');
189pub const HB_SCRIPT_VAI: HbTag = hb_tag!('V', 'a', 'i', 'i');
190pub const HB_SCRIPT_AVESTAN: HbTag = hb_tag!('A', 'v', 's', 't');
191pub const HB_SCRIPT_BAMUM: HbTag = hb_tag!('B', 'a', 'm', 'u');
192pub const HB_SCRIPT_EGYPTIAN_HIEROGLYPHS: HbTag = hb_tag!('E', 'g', 'y', 'p');
193pub const HB_SCRIPT_IMPERIAL_ARAMAIC: HbTag = hb_tag!('A', 'r', 'm', 'i');
194pub const HB_SCRIPT_INSCRIPTIONAL_PAHLAVI: HbTag = hb_tag!('P', 'h', 'l', 'i');
195pub const HB_SCRIPT_INSCRIPTIONAL_PARTHIAN: HbTag = hb_tag!('P', 'r', 't', 'i');
196pub const HB_SCRIPT_JAVANESE: HbTag = hb_tag!('J', 'a', 'v', 'a');
197pub const HB_SCRIPT_KAITHI: HbTag = hb_tag!('K', 't', 'h', 'i');
198pub const HB_SCRIPT_LISU: HbTag = hb_tag!('L', 'i', 's', 'u');
199pub const HB_SCRIPT_MEETEI_MAYEK: HbTag = hb_tag!('M', 't', 'e', 'i');
200pub const HB_SCRIPT_OLD_SOUTH_ARABIAN: HbTag = hb_tag!('S', 'a', 'r', 'b');
201pub const HB_SCRIPT_OLD_TURKIC: HbTag = hb_tag!('O', 'r', 'k', 'h');
202pub const HB_SCRIPT_SAMARITAN: HbTag = hb_tag!('S', 'a', 'm', 'r');
203pub const HB_SCRIPT_TAI_THAM: HbTag = hb_tag!('L', 'a', 'n', 'a');
204pub const HB_SCRIPT_TAI_VIET: HbTag = hb_tag!('T', 'a', 'v', 't');
205pub const HB_SCRIPT_BATAK: HbTag = hb_tag!('B', 'a', 't', 'k');
206pub const HB_SCRIPT_BRAHMI: HbTag = hb_tag!('B', 'r', 'a', 'h');
207pub const HB_SCRIPT_MANDAIC: HbTag = hb_tag!('M', 'a', 'n', 'd');
208pub const HB_SCRIPT_CHAKMA: HbTag = hb_tag!('C', 'a', 'k', 'm');
209pub const HB_SCRIPT_MEROITIC_CURSIVE: HbTag = hb_tag!('M', 'e', 'r', 'c');
210pub const HB_SCRIPT_MEROITIC_HIEROGLYPHS: HbTag = hb_tag!('M', 'e', 'r', 'o');
211pub const HB_SCRIPT_MIAO: HbTag = hb_tag!('P', 'l', 'r', 'd');
212pub const HB_SCRIPT_SHARADA: HbTag = hb_tag!('S', 'h', 'r', 'd');
213pub const HB_SCRIPT_SORA_SOMPENG: HbTag = hb_tag!('S', 'o', 'r', 'a');
214pub const HB_SCRIPT_TAKRI: HbTag = hb_tag!('T', 'a', 'k', 'r');
215pub const HB_SCRIPT_BASSA_VAH: HbTag = hb_tag!('B', 'a', 's', 's');
216pub const HB_SCRIPT_CAUCASIAN_ALBANIAN: HbTag = hb_tag!('A', 'g', 'h', 'b');
217pub const HB_SCRIPT_DUPLOYAN: HbTag = hb_tag!('D', 'u', 'p', 'l');
218pub const HB_SCRIPT_ELBASAN: HbTag = hb_tag!('E', 'l', 'b', 'a');
219pub const HB_SCRIPT_GRANTHA: HbTag = hb_tag!('G', 'r', 'a', 'n');
220pub const HB_SCRIPT_KHOJKI: HbTag = hb_tag!('K', 'h', 'o', 'j');
221pub const HB_SCRIPT_KHUDAWADI: HbTag = hb_tag!('S', 'i', 'n', 'd');
222pub const HB_SCRIPT_LINEAR_A: HbTag = hb_tag!('L', 'i', 'n', 'a');
223pub const HB_SCRIPT_MAHAJANI: HbTag = hb_tag!('M', 'a', 'h', 'j');
224pub const HB_SCRIPT_MANICHAEAN: HbTag = hb_tag!('M', 'a', 'n', 'i');
225pub const HB_SCRIPT_MENDE_KIKAKUI: HbTag = hb_tag!('M', 'e', 'n', 'd');
226pub const HB_SCRIPT_MODI: HbTag = hb_tag!('M', 'o', 'd', 'i');
227pub const HB_SCRIPT_MRO: HbTag = hb_tag!('M', 'r', 'o', 'o');
228pub const HB_SCRIPT_NABATAEAN: HbTag = hb_tag!('N', 'b', 'a', 't');
229pub const HB_SCRIPT_OLD_NORTH_ARABIAN: HbTag = hb_tag!('N', 'a', 'r', 'b');
230pub const HB_SCRIPT_OLD_PERMIC: HbTag = hb_tag!('P', 'e', 'r', 'm');
231pub const HB_SCRIPT_PAHAWH_HMONG: HbTag = hb_tag!('H', 'm', 'n', 'g');
232pub const HB_SCRIPT_PALMYRENE: HbTag = hb_tag!('P', 'a', 'l', 'm');
233pub const HB_SCRIPT_PAU_CIN_HAU: HbTag = hb_tag!('P', 'a', 'u', 'c');
234pub const HB_SCRIPT_PSALTER_PAHLAVI: HbTag = hb_tag!('P', 'h', 'l', 'p');
235pub const HB_SCRIPT_SIDDHAM: HbTag = hb_tag!('S', 'i', 'd', 'd');
236pub const HB_SCRIPT_TIRHUTA: HbTag = hb_tag!('T', 'i', 'r', 'h');
237pub const HB_SCRIPT_WARANG_CITI: HbTag = hb_tag!('W', 'a', 'r', 'a');
238pub const HB_SCRIPT_AHOM: HbTag = hb_tag!('A', 'h', 'o', 'm');
239pub const HB_SCRIPT_ANATOLIAN_HIEROGLYPHS: HbTag = hb_tag!('H', 'l', 'u', 'w');
240pub const HB_SCRIPT_HATRAN: HbTag = hb_tag!('H', 'a', 't', 'r');
241pub const HB_SCRIPT_MULTANI: HbTag = hb_tag!('M', 'u', 'l', 't');
242pub const HB_SCRIPT_OLD_HUNGARIAN: HbTag = hb_tag!('H', 'u', 'n', 'g');
243pub const HB_SCRIPT_SIGNWRITING: HbTag = hb_tag!('S', 'g', 'n', 'w');
244pub const HB_SCRIPT_ADLAM: HbTag = hb_tag!('A', 'd', 'l', 'm');
245pub const HB_SCRIPT_BHAIKSUKI: HbTag = hb_tag!('B', 'h', 'k', 's');
246pub const HB_SCRIPT_MARCHEN: HbTag = hb_tag!('M', 'a', 'r', 'c');
247pub const HB_SCRIPT_OSAGE: HbTag = hb_tag!('O', 's', 'g', 'e');
248pub const HB_SCRIPT_TANGUT: HbTag = hb_tag!('T', 'a', 'n', 'g');
249pub const HB_SCRIPT_NEWA: HbTag = hb_tag!('N', 'e', 'w', 'a');
250pub const HB_SCRIPT_MASARAM_GONDI: HbTag = hb_tag!('G', 'o', 'n', 'm');
251pub const HB_SCRIPT_NUSHU: HbTag = hb_tag!('N', 's', 'h', 'u');
252pub const HB_SCRIPT_SOYOMBO: HbTag = hb_tag!('S', 'o', 'y', 'o');
253pub const HB_SCRIPT_ZANABAZAR_SQUARE: HbTag = hb_tag!('Z', 'a', 'n', 'b');
254pub const HB_SCRIPT_DOGRA: HbTag = hb_tag!('D', 'o', 'g', 'r');
255pub const HB_SCRIPT_GUNJALA_GONDI: HbTag = hb_tag!('G', 'o', 'n', 'g');
256pub const HB_SCRIPT_HANIFI_ROHINGYA: HbTag = hb_tag!('R', 'o', 'h', 'g');
257pub const HB_SCRIPT_MAKASAR: HbTag = hb_tag!('M', 'a', 'k', 'a');
258pub const HB_SCRIPT_MEDEFAIDRIN: HbTag = hb_tag!('M', 'e', 'd', 'f');
259pub const HB_SCRIPT_OLD_SOGDIAN: HbTag = hb_tag!('S', 'o', 'g', 'o');
260pub const HB_SCRIPT_SOGDIAN: HbTag = hb_tag!('S', 'o', 'g', 'd');
261pub const HB_SCRIPT_ELYMAIC: HbTag = hb_tag!('E', 'l', 'y', 'm');
262pub const HB_SCRIPT_NANDINAGARI: HbTag = hb_tag!('N', 'a', 'n', 'd');
263pub const HB_SCRIPT_NYIAKENG_PUACHUE_HMONG: HbTag = hb_tag!('H', 'm', 'n', 'p');
264pub const HB_SCRIPT_WANCHO: HbTag = hb_tag!('W', 'c', 'h', 'o');
265pub const HB_SCRIPT_CHORASMIAN: HbTag = hb_tag!('C', 'h', 'r', 's');
266pub const HB_SCRIPT_DIVES_AKURU: HbTag = hb_tag!('D', 'i', 'a', 'k');
267pub const HB_SCRIPT_KHITAN_SMALL_SCRIPT: HbTag = hb_tag!('K', 'i', 't', 's');
268pub const HB_SCRIPT_YEZIDI: HbTag = hb_tag!('Y', 'e', 'z', 'i');
269pub const HB_SCRIPT_CYPRO_MINOAN: HbTag = hb_tag!('C', 'p', 'm', 'n');
270pub const HB_SCRIPT_OLD_UYGHUR: HbTag = hb_tag!('O', 'u', 'g', 'r');
271pub const HB_SCRIPT_TANGSA: HbTag = hb_tag!('T', 'n', 's', 'a');
272pub const HB_SCRIPT_TOTO: HbTag = hb_tag!('T', 'o', 't', 'o');
273pub const HB_SCRIPT_VITHKUQI: HbTag = hb_tag!('V', 'i', 't', 'h');
274pub const HB_SCRIPT_MATH: HbTag = hb_tag!('Z', 'm', 't', 'h');
275pub const HB_SCRIPT_KAWI: HbTag = hb_tag!('K', 'a', 'w', 'i');
276pub const HB_SCRIPT_NAG_MUNDARI: HbTag = hb_tag!('N', 'a', 'g', 'm');