source: appstream-generator/src/asgen/bindings/freetypeTypes.d @ 4841

Last change on this file since 4841 was 4841, checked in by Juanma, 2 years ago

Initial release

File size: 62.5 KB
Line 
1/*
2Boost Software License - Version 1.0 - August 17th, 2003
3
4Permission is hereby granted, free of charge, to any person or organization
5obtaining a copy of the software and accompanying documentation covered by
6this license (the "Software") to use, reproduce, display, distribute,
7execute, and transmit the Software, and to prepare derivative works of the
8Software, and to permit third-parties to whom the Software is furnished to
9do so, all subject to the following:
10
11The copyright notices in the Software and this entire statement, including
12the above license grant, this restriction and the following disclaimer,
13must be included in all copies of the Software, in whole or in part, and
14all derivative works of the Software, unless such copies or derivative
15works are solely in the form of machine-executable object code generated by
16a source language processor.
17
18THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
19IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
20FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
21SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
22FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
23ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
24DEALINGS IN THE SOFTWARE.
25*/
26
27module asgen.bindings.freetypeTypes;
28
29import core.stdc.config : c_long, c_ulong;
30
31extern(C):
32nothrow:
33@nogc:
34
35// config/ftconfig.h
36alias FT_Int16 = short;
37alias FT_UInt16 = ushort;
38alias FT_Int32 = int;
39alias FT_UInt32 = uint;
40alias FT_Fast = int;
41alias FT_UFast = uint;
42alias FT_Int64 = long;
43alias FT_Uint64 = ulong;
44
45// fttypes.h
46alias FT_Bool = ubyte;
47alias FT_FWord = short;
48alias FT_UFWord = ushort;
49alias FT_Char = char;
50alias FT_Byte = ubyte;
51alias FT_Bytes = FT_Byte*;
52alias FT_Tag = FT_UInt32;
53alias FT_String = char;
54alias FT_Short = short;
55alias FT_UShort = ushort;
56alias FT_Int = int;
57alias FT_UInt = uint;
58alias FT_Long = c_long;
59alias FT_ULong = c_ulong;
60alias FT_F2Dot14 = short;
61alias FT_F26Dot6 = c_long;
62alias FT_Fixed = c_long;
63alias FT_Error = int;
64alias FT_Pointer = void*;
65alias FT_Offset = size_t;
66alias FT_PtrDist = ptrdiff_t;
67
68struct FT_UnitVector {
69    FT_F2Dot14 x;
70    FT_F2Dot14 y;
71}
72
73struct FT_Matrix {
74    FT_Fixed xx, xy;
75    FT_Fixed yx, yy;
76}
77
78struct FT_Data {
79    const( FT_Byte )* pointer;
80    FT_Int length;
81}
82
83extern( C ) nothrow alias FT_Generic_Finalizer = void function( void* );
84
85struct FT_Generic {
86    void* data;
87    FT_Generic_Finalizer finalizer;
88}
89
90FT_Tag FT_MAKE_TAG( char x1, char x2, char x3, char x4 ) {
91    return cast( FT_UInt32)(( x1 << 24 ) | ( x2 << 16 ) | ( x3 << 8 ) | x4 );
92}
93
94alias FT_ListNode = FT_ListNodeRec*;
95alias FT_List = FT_ListRec*;
96
97struct FT_ListNodeRec {
98    FT_ListNode prev;
99    FT_ListNode next;
100    void* data;
101}
102
103struct FT_ListRec {
104    FT_ListNode head;
105    FT_ListNode tail;
106}
107
108// freetype.h
109struct FT_Glyph_Metrics {
110    FT_Pos width;
111    FT_Pos height;
112    FT_Pos horiBearingX;
113    FT_Pos horiBearingY;
114    FT_Pos horiAdvance;
115    FT_Pos vertBearingX;
116    FT_Pos vertBearingY;
117    FT_Pos vertAdvance;
118}
119
120struct FT_Bitmap_Size {
121    FT_Short height;
122    FT_Short width;
123    FT_Pos size;
124    FT_Pos x_ppem;
125    FT_Pos y_ppem;
126}
127
128struct FT_LibraryRec;
129struct FT_ModuleRec;
130struct FT_DriverRec;
131struct FT_RendererRec;
132
133alias FT_Library = FT_LibraryRec*;
134alias FT_Module = FT_ModuleRec*;
135alias FT_Driver = FT_DriverRec*;
136alias FT_Renderer = FT_RendererRec*;
137alias FT_Face = FT_FaceRec*;
138alias FT_Size = FT_SizeRec*;
139alias FT_GlyphSlot = FT_GlyphSlotRec*;
140alias FT_CharMap = FT_CharMapRec*;
141
142alias FT_ENC_TAG = FT_MAKE_TAG;
143
144alias FT_Encoding = FT_Tag;
145enum : FT_Tag {
146    FT_ENCODING_NONE = 0,
147    FT_ENCODING_MS_SYMBOL = FT_MAKE_TAG( 's','y','m','b' ),
148    FT_ENCODING_UNICODE = FT_MAKE_TAG( 'u','n','i','c' ),
149    FT_ENCODING_SJIS = FT_MAKE_TAG( 's','j','i','s' ),
150    FT_ENCODING_GB2312 = FT_MAKE_TAG( 'g','b',' ',' ' ),
151    FT_ENCODING_BIG5 = FT_MAKE_TAG('b','i','g','5' ),
152    FT_ENCODING_WANSUNG = FT_MAKE_TAG( 'w','a','n','s' ),
153    FT_ENCODING_JOHAB = FT_MAKE_TAG( 'j','o','h','a' ),
154    FT_ENCODING_MS_SJIS = FT_ENCODING_SJIS,
155    FT_ENCODING_MS_GB2312 = FT_ENCODING_GB2312,
156    FT_ENCODING_MS_BIG5 = FT_ENCODING_BIG5,
157    FT_ENCODING_MS_WANSUNG = FT_ENCODING_WANSUNG,
158    FT_ENCODING_MS_JOHAB = FT_ENCODING_JOHAB,
159    FT_ENCODING_ADOBE_STANDARD = FT_MAKE_TAG( 'A','D','O','B' ),
160    FT_ENCODING_ADOBE_EXPERT = FT_MAKE_TAG( 'A','D','B','E' ),
161    FT_ENCODING_ADOBE_CUSTOM = FT_MAKE_TAG( 'A','D','B','C' ),
162    FT_ENCODING_ADOBE_LATIN_1 = FT_MAKE_TAG( 'l','a','t','1' ),
163    FT_ENCODING_OLD_LATIN_2 = FT_MAKE_TAG( 'l','a','t','2' ),
164    FT_ENCODING_APPLE_ROMAN = FT_MAKE_TAG( 'a','r','m','n' ),
165}
166
167struct FT_CharMapRec {
168    FT_Face face;
169    FT_Encoding encoding;
170    FT_UShort platform_id;
171    FT_UShort encoding_id;
172}
173
174struct FT_Face_InternalRec;
175alias FT_Face_Internal = FT_Face_InternalRec*;
176
177struct FT_FaceRec {
178    FT_Long num_faces;
179    FT_Long face_index;
180    FT_Long face_flags;
181    FT_Long style_flags;
182    FT_Long num_glyphs;
183    FT_String* family_name;
184    FT_String* style_name;
185    FT_Int num_fixed_sizes;
186    FT_Bitmap_Size* available_sizes;
187    FT_Int num_charmaps;
188    FT_CharMap* charmaps;
189    FT_Generic generic;
190    FT_BBox bbox;
191    FT_UShort units_per_EM;
192    FT_Short ascender;
193    FT_Short descender;
194    FT_Short height;
195    FT_Short max_advance_width;
196    FT_Short max_advance_height;
197    FT_Short underline_position;
198    FT_Short underline_thickness;
199    FT_GlyphSlot glyph;
200    FT_Size size;
201    FT_CharMap charmap;
202    FT_Driver driver;
203    FT_Memory memory;
204    FT_Stream stream;
205    FT_ListRec sizes_list;
206    FT_Generic autohint;
207    void* extensions;
208    FT_Face_Internal internal;
209}
210
211enum : uint {
212    FT_FACE_FLAG_SCALABLE = 1 << 0,
213    FT_FACE_FLAG_FIXED_SIZES = 1 << 1,
214    FT_FACE_FLAG_FIXED_WIDTH = 1 << 2,
215    FT_FACE_FLAG_SFNT = 1 << 3,
216    FT_FACE_FLAG_HORIZONTAL = 1 << 4,
217    FT_FACE_FLAG_VERTICAL = 1 << 5,
218    FT_FACE_FLAG_KERNING = 1 << 6,
219    FT_FACE_FLAG_FAST_GLYPHS = 1 << 7,
220    FT_FACE_FLAG_MULTIPLE_MASTERS = 1 << 8,
221    FT_FACE_FLAG_GLYPH_NAMES = 1 << 9,
222    FT_FACE_FLAG_EXTERNAL_STREAM = 1 << 10,
223    FT_FACE_FLAG_HINTER = 1 << 11,
224    FT_FACE_FLAG_CID_KEYED = 1 << 12,
225    FT_FACE_FLAG_TRICKY = 1 << 13,
226    FT_FACE_FLAG_COLOR = 1 << 14,
227}
228
229@nogc nothrow {
230    bool FT_HAS_HORIZONTAL( FT_FaceRec* face ) {
231        return ( face.face_flags & FT_FACE_FLAG_HORIZONTAL ) == 0;
232    }
233
234    bool FT_HAS_VERTICAL( FT_FaceRec* face ) {
235        return ( face.face_flags & FT_FACE_FLAG_VERTICAL ) == 0;
236    }
237
238    bool FT_HAS_KERNING( FT_FaceRec* face ) {
239        return ( face.face_flags & FT_FACE_FLAG_KERNING ) == 0;
240    }
241
242    bool FT_IS_SCALABLE( FT_FaceRec* face ) {
243        return ( face.face_flags & FT_FACE_FLAG_SCALABLE ) == 0;
244    }
245
246    bool FT_IS_SFNT( FT_FaceRec* face ) {
247        return ( face.face_flags & FT_FACE_FLAG_SFNT ) == 0;
248    }
249
250    bool FT_IS_FIXED_WIDTH( FT_FaceRec* face ) {
251        return ( face.face_flags & FT_FACE_FLAG_FIXED_WIDTH ) == 0;
252    }
253
254    bool FT_HAS_FIXED_SIZES( FT_FaceRec* face ) {
255        return ( face.face_flags & FT_FACE_FLAG_FIXED_SIZES ) == 0;
256    }
257
258    bool FT_HAS_FAST_GLYPHS( FT_FaceRec* face ) {
259        return false;
260    }
261
262    bool FT_HAS_GLYPH_NAMES( FT_FaceRec* face ) {
263        return ( face.face_flags & FT_FACE_FLAG_GLYPH_NAMES ) == 0;
264    }
265
266    bool FT_HAS_MULTIPLE_MASTERS( FT_FaceRec* face ) {
267        return ( face.face_flags & FT_FACE_FLAG_MULTIPLE_MASTERS ) == 0;
268    }
269
270    bool FT_IS_CID_KEYED( FT_FaceRec* face ) {
271        return ( face.face_flags & FT_FACE_FLAG_CID_KEYED ) == 0;
272    }
273
274    bool FT_IS_TRICKY( FT_FaceRec* face ) {
275        return ( face.face_flags & FT_FACE_FLAG_TRICKY ) == 0;
276    }
277
278    bool FT_HAS_COLOR( FT_FaceRec* face ) {
279        return ( face.face_flags & FT_FACE_FLAG_COLOR ) == 0;
280    }
281}
282
283enum {
284    FT_STYLE_FLAG_ITALIC          = 1 << 0,
285    FT_STYLE_FLAG_BOLD            = 1 << 1,
286}
287
288struct FT_Size_InternalRec;
289alias FT_Size_Internal = FT_Size_InternalRec*;
290
291struct FT_Size_Metrics {
292    FT_UShort x_ppem;
293    FT_UShort y_ppem;
294
295    FT_Fixed x_scale;
296    FT_Fixed y_scale;
297
298    FT_Pos ascender;
299    FT_Pos descender;
300    FT_Pos height;
301    FT_Pos max_advance;
302}
303
304struct FT_SizeRec {
305    FT_Face face;
306    FT_Generic generic;
307    FT_Size_Metrics metrics;
308    FT_Size_Internal internal;
309}
310
311struct FT_SubGlyphRec;
312struct FT_Slot_InternalRec;
313alias FT_SubGlyph = FT_SubGlyphRec*;
314alias FT_Slot_Internal = FT_Slot_InternalRec*;
315
316struct FT_GlyphSlotRec {
317    FT_Library library;
318    FT_Face face;
319    FT_GlyphSlot next;
320    FT_UInt reserved;
321    FT_Generic generic;
322    FT_Glyph_Metrics metrics;
323    FT_Fixed linearHoriAdvance;
324    FT_Fixed linearVertAdvance;
325    FT_Vector advance;
326    FT_Glyph_Format format;
327    FT_Bitmap bitmap;
328    FT_Int bitmap_left;
329    FT_Int bitmap_top;
330    FT_Outline outline;
331    FT_UInt num_subglyphs;
332    FT_SubGlyph subglyphs;
333    void* control_data;
334    c_long control_len;
335    FT_Pos lsb_delta;
336    FT_Pos rsb_delta;
337    void* other;
338    FT_Slot_Internal internal;
339}
340
341enum : uint {
342    FT_OPEN_MEMORY           = 0x1,
343    FT_OPEN_STREAM           = 0x2,
344    FT_OPEN_DRIVER           = 0x4,
345    FT_OPEN_PATHNAME         = 0x8,
346    FT_OPEN_PARAMS           = 0x10,
347}
348
349struct FT_Parameter {
350    FT_ULong tag;
351    FT_Pointer data;
352}
353
354struct FT_Open_Args {
355    FT_UInt flags;
356    const( FT_Byte )* memory_base;
357    FT_Long memory_size;
358    FT_String* pathname;
359    FT_Stream stream;
360    FT_Module driver;
361    FT_Int num_params;
362    FT_Parameter* params;
363}
364
365alias FT_Size_Request_Type = int;
366enum  {
367    FT_SIZE_REQUEST_TYPE_NOMINAL,
368    FT_SIZE_REQUEST_TYPE_REAL_DIM,
369    FT_SIZE_REQUEST_TYPE_BBOX,
370    FT_SIZE_REQUEST_TYPE_CELL,
371    FT_SIZE_REQUEST_TYPE_SCALES,
372    FT_SIZE_REQUEST_TYPE_MAX
373}
374
375struct FT_Size_RequestRec {
376    FT_Size_Request_Type type;
377    FT_Long width;
378    FT_Long height;
379    FT_UInt horiResolution;
380    FT_UInt vertResolution;
381}
382
383alias FT_Size_Request = FT_Size_RequestRec*;
384
385enum : uint {
386    FT_LOAD_DEFAULT = 0x0,
387    FT_LOAD_NO_SCALE = 1 << 0,
388    FT_LOAD_NO_HINTING = 1 << 1,
389    FT_LOAD_RENDER = 1 << 2,
390    FT_LOAD_NO_BITMAP = 1 << 3,
391    FT_LOAD_VERTICAL_LAYOUT = 1 << 4,
392    FT_LOAD_FORCE_AUTOHINT = 1 << 5,
393    FT_LOAD_CROP_BITMAP = 1 << 6,
394    FT_LOAD_PEDANTIC = 1 << 7,
395    FT_LOAD_IGNORE_GLOBAL_ADVANCE_WIDTH = 1 << 9,
396    FT_LOAD_NO_RECURSE = 1 << 10,
397    FT_LOAD_IGNORE_TRANSFORM = 1 << 11,
398    FT_LOAD_MONOCHROME = 1 << 12,
399    FT_LOAD_LINEAR_DESIGN = 1 << 13,
400    FT_LOAD_NO_AUTOHINT = 1 << 15,
401    FT_LOAD_COLOR = 1 << 20,
402    FT_LOAD_COMPUTE_METRICS = 1 << 21,
403}
404
405enum {
406    FT_LOAD_TARGET_NORMAL = ( FT_RENDER_MODE_NORMAL & 15 ) << 16,
407    FT_LOAD_TARGET_LIGHT = ( FT_RENDER_MODE_LIGHT & 15 ) << 16,
408    FT_LOAD_TARGET_MONO = ( FT_RENDER_MODE_MONO & 15 ) << 16,
409    FT_LOAD_TARGET_LCD = ( FT_RENDER_MODE_LCD & 15 ) << 16,
410    FT_LOAD_TARGET_LCD_V = ( FT_RENDER_MODE_LCD_V & 15 ) << 16,
411}
412
413@nogc FT_Render_Mode FT_LOAD_TARGET_MODE( uint x ) nothrow {
414    return cast( FT_Render_Mode )(( x >> 16 ) & 15 );
415}
416
417alias FT_Render_Mode = uint;
418enum {
419    FT_RENDER_MODE_NORMAL = 0,
420    FT_RENDER_MODE_LIGHT,
421    FT_RENDER_MODE_MONO,
422    FT_RENDER_MODE_LCD,
423    FT_RENDER_MODE_LCD_V,
424    FT_RENDER_MODE_MAX
425}
426
427enum FT_Kerning_Mode {
428    FT_KERNING_DEFAULT = 0,
429    FT_KERNING_UNFITTED,
430    FT_KERNING_UNSCALED
431}
432
433enum
434{
435    FT_SUBGLYPH_FLAG_ARGS_ARE_WORDS = 1,
436    FT_SUBGLYPH_FLAG_ARGS_ARE_XY_VALUES = 2,
437    FT_SUBGLYPH_FLAG_ROUND_XY_TO_GRID = 4,
438    FT_SUBGLYPH_FLAG_SCALE = 8,
439    FT_SUBGLYPH_FLAG_XY_SCALE = 0x40,
440    FT_SUBGLYPH_FLAG_2X2 = 0x80,
441    FT_SUBGLYPH_FLAG_USE_MY_METRICS = 0x200,
442}
443
444enum {
445    FT_FSTYPE_INSTALLABLE_EMBEDDING = 0x0000,
446    FT_FSTYPE_RESTRICTED_LICENSE_EMBEDDING = 0x0002,
447    FT_FSTYPE_PREVIEW_AND_PRINT_EMBEDDING = 0x0004,
448    FT_FSTYPE_EDITABLE_EMBEDDING = 0x0008,
449    FT_FSTYPE_NO_SUBSETTING = 0x0100,
450    FT_FSTYPE_BITMAP_EMBEDDING_ONLY = 0x0200,
451}
452
453enum
454{
455    FREETYPE_MAJOR  = 2,
456    FREETYPE_MINOR  = 6,
457    FREETYPE_PATCH  = 3,
458}
459
460// ftadvanc.h
461enum FT_ADVANCE_FLAG_FAST_ONLY = 0x20000000;
462
463// ftautoh.h
464enum {
465    FT_AUTOHINTER_SCRIPT_NONE = 0,
466    FT_AUTOHINTER_SCRIPT_LATIN = 1,
467    FT_AUTOHINTER_SCRIPT_CJK = 2,
468    FT_AUTOHINTER_SCRIPT_INDIC = 3,
469}
470
471struct FT_Prop_GlyphToScriptMap {
472    FT_Face face;
473    FT_UShort* map;
474}
475
476struct FT_Prop_IncreaseXHeight {
477    FT_Face face;
478    FT_UInt32 limit;
479}
480
481// ftbdf.h
482version( linux ) {
483    alias BDF_PropertyType = int;
484    enum {
485        BDF_PROPERTY_TYPE_NONE = 0,
486        BDF_PROPERTY_TYPE_ATOM = 1,
487        BDF_PROPERTY_TYPE_INTEGER = 2,
488        BDF_PROPERTY_TYPE_CARDINAL = 3
489    }
490
491    alias BDF_Property = BDF_PropertyRec*;
492
493    struct BDF_PropertyRec {
494        BDF_PropertyType type;
495        union u {
496         char* atom;
497         FT_Int32 integer;
498         FT_UInt32 cardinal;
499        }
500    }
501}
502
503// ftcache.h
504alias FTC_FaceID = FT_Pointer;
505extern( C ) nothrow alias FTC_Face_Requester = FT_Error function( FTC_FaceID,FT_Library,FT_Pointer,FT_Face* );
506
507struct FTC_ManagerRec;
508struct FTC_NodeRec;
509
510alias FTC_Manager = FTC_ManagerRec*;
511alias FTC_Node = FTC_NodeRec*;
512
513struct FTC_ScalerRec {
514    FTC_FaceID face_id;
515    FT_UInt width;
516    FT_UInt height;
517    FT_Int pixel;
518    FT_UInt x_res;
519    FT_UInt y_res;
520}
521
522alias FTC_Scaler = FTC_ScalerRec*;
523
524struct FTC_CMapCacheRec;
525alias FTC_CMapCache = FTC_CMapCacheRec*;
526
527struct FTC_ImageTypeRec {
528    FTC_FaceID face_id;
529    FT_UInt width;
530    FT_UInt height;
531    FT_Int32 flags;
532}
533
534
535alias FTC_ImageType = FTC_ImageTypeRec*;
536
537struct FTC_ImageCacheRec;
538alias FTC_ImageCache = FTC_ImageCacheRec*;
539
540alias FTC_SBit = FTC_SBitRec*;
541
542struct FTC_SBitRec {
543    FT_Byte width;
544    FT_Byte height;
545    FT_Char left;
546    FT_Char top;
547    FT_Byte format;
548    FT_Byte max_grays;
549    FT_Short pitch;
550    FT_Char xadvance;
551    FT_Char yadvance;
552    FT_Byte* buffer;
553}
554
555struct FTC_SBitCacheRec;
556alias FTC_SBitCache = FTC_SBitCacheRec*;
557
558// ftcffdrv.h
559enum {
560    FT_CFF_HINTING_FREETYPE = 0,
561    FT_CFF_HINTING_ADOBE = 1,
562}
563
564// fterrdef.h
565enum {
566    FT_Err_Ok  = 0x00,
567    FT_Err_Cannot_Open_Resource  = 0x01,
568    FT_Err_Unknown_File_Format  = 0x02,
569    FT_Err_Invalid_File_Format  = 0x03,
570    FT_Err_Invalid_Version  = 0x04,
571    FT_Err_Lower_Module_Version  = 0x05,
572    FT_Err_Invalid_Argument  = 0x06,
573    FT_Err_Unimplemented_Feature  = 0x07,
574    FT_Err_Invalid_Table  = 0x08,
575    FT_Err_Invalid_Offset  = 0x09,
576    FT_Err_Array_Too_Large = 0x0A,
577    FT_Err_Missing_Module = 0x0B,
578    FT_Err_Missing_Property = 0x0C,
579
580    FT_Err_Invalid_Glyph_Index  = 0x10,
581    FT_Err_Invalid_Character_Code  = 0x11,
582    FT_Err_Invalid_Glyph_Format  = 0x12,
583    FT_Err_Cannot_Render_Glyph  = 0x13,
584    FT_Err_Invalid_Outline  = 0x14,
585    FT_Err_Invalid_Composite  = 0x15,
586    FT_Err_Too_Many_Hints  = 0x16,
587    FT_Err_Invalid_Pixel_Size  = 0x17,
588
589    FT_Err_Invalid_Handle  = 0x20,
590    FT_Err_Invalid_Library_Handle  = 0x21,
591    FT_Err_Invalid_Driver_Handle  = 0x22,
592    FT_Err_Invalid_Face_Handle  = 0x23,
593    FT_Err_Invalid_Size_Handle  = 0x24,
594    FT_Err_Invalid_Slot_Handle  = 0x25,
595    FT_Err_Invalid_CharMap_Handle  = 0x26,
596    FT_Err_Invalid_Cache_Handle  = 0x27,
597    FT_Err_Invalid_Stream_Handle  = 0x28,
598
599    FT_Err_Too_Many_Drivers  = 0x30,
600    FT_Err_Too_Many_Extensions  = 0x31,
601
602    FT_Err_Out_Of_Memory  = 0x40,
603    FT_Err_Unlisted_Object  = 0x41,
604
605    FT_Err_Cannot_Open_Stream  = 0x51,
606    FT_Err_Invalid_Stream_Seek  = 0x52,
607    FT_Err_Invalid_Stream_Skip  = 0x53,
608    FT_Err_Invalid_Stream_Read  = 0x54,
609    FT_Err_Invalid_Stream_Operation  = 0x55,
610    FT_Err_Invalid_Frame_Operation  = 0x56,
611    FT_Err_Nested_Frame_Access  = 0x57,
612    FT_Err_Invalid_Frame_Read  = 0x58,
613
614    FT_Err_Raster_Uninitialized  = 0x60,
615    FT_Err_Raster_Corrupted  = 0x61,
616    FT_Err_Raster_Overflow  = 0x62,
617    FT_Err_Raster_Negative_Height  = 0x63,
618
619    FT_Err_Too_Many_Caches  = 0x70,
620
621    FT_Err_Invalid_Opcode  = 0x80,
622    FT_Err_Too_Few_Arguments  = 0x81,
623    FT_Err_Stack_Overflow  = 0x82,
624    FT_Err_Code_Overflow  = 0x83,
625    FT_Err_Bad_Argument  = 0x84,
626    FT_Err_Divide_By_Zero  = 0x85,
627    FT_Err_Invalid_Reference  = 0x86,
628    FT_Err_Debug_OpCode  = 0x87,
629    FT_Err_ENDF_In_Exec_Stream  = 0x88,
630    FT_Err_Nested_DEFS  = 0x89,
631    FT_Err_Invalid_CodeRange  = 0x8A,
632    FT_Err_Execution_Too_Long  = 0x8B,
633    FT_Err_Too_Many_Function_Defs  = 0x8C,
634    FT_Err_Too_Many_Instruction_Defs  = 0x8D,
635    FT_Err_Table_Missing  = 0x8E,
636    FT_Err_Horiz_Header_Missing  = 0x8F,
637    FT_Err_Locations_Missing  = 0x90,
638    FT_Err_Name_Table_Missing  = 0x91,
639    FT_Err_CMap_Table_Missing  = 0x92,
640    FT_Err_Hmtx_Table_Missing  = 0x93,
641    FT_Err_Post_Table_Missing  = 0x94,
642    FT_Err_Invalid_Horiz_Metrics  = 0x95,
643    FT_Err_Invalid_CharMap_Format  = 0x96,
644    FT_Err_Invalid_PPem  = 0x97,
645    FT_Err_Invalid_Vert_Metrics  = 0x98,
646    FT_Err_Could_Not_Find_Context  = 0x99,
647    FT_Err_Invalid_Post_Table_Format  = 0x9A,
648    FT_Err_Invalid_Post_Table  = 0x9B,
649
650    FT_Err_Syntax_Error  = 0xA0,
651    FT_Err_Stack_Underflow  = 0xA1,
652    FT_Err_Ignore  = 0xA2,
653    FT_Err_No_Unicode_Glyph_Name = 0xA3,
654    FT_Err_Glyph_Too_Big = 0xA4,
655
656    FT_Err_Missing_Startfont_Field  = 0xB0,
657    FT_Err_Missing_Font_Field  = 0xB1,
658    FT_Err_Missing_Size_Field  = 0xB2,
659    FT_Err_Missing_Fontboundingbox_Field = 0xB3,
660    FT_Err_Missing_Chars_Field  = 0xB4,
661    FT_Err_Missing_Startchar_Field  = 0xB5,
662    FT_Err_Missing_Encoding_Field  = 0xB6,
663    FT_Err_Missing_Bbx_Field  = 0xB7,
664    FT_Err_Bbx_Too_Big = 0xB8,
665    FT_Err_Corrupted_Font_Header = 0xB9,
666    FT_Err_Corrupted_Font_Glyphs = 0xBA,
667
668    FT_Err_Max,
669}
670
671// ftgasp.h
672enum {
673    FT_GASP_NO_TABLE = -1,
674    FT_GASP_DO_GRIDFIT = 0x01,
675    FT_GASP_DO_GRAY = 0x02,
676    FT_GASP_SYMMETRIC_SMOOTHING = 0x08,
677    FT_GASP_SYMMETRIC_GRIDFIT = 0x10
678}
679
680// ftglyph.h
681alias FT_Glyph = FT_GlyphRec*;
682
683struct FT_GlyphRec {
684    FT_Library library;
685    FT_Glyph_Class* clazz;
686    FT_Glyph_Format format;
687    FT_Vector advance;
688}
689
690alias FT_BitmapGlyph = FT_BitmapGlyphRec*;
691
692struct FT_BitmapGlyphRec {
693    FT_GlyphRec root;
694    FT_Int left;
695    FT_Int top;
696    FT_Bitmap bitmap;
697}
698
699alias FT_OutlineGlyph = FT_OutlineGlyphRec*;
700
701struct FT_OutlineGlyphRec {
702    FT_GlyphRec root;
703    FT_Outline outline;
704}
705
706alias FT_Glyph_BBox_Mode = int;
707enum {
708    FT_GLYPH_BBOX_UNSCALED = 0,
709    FT_GLYPH_BBOX_SUBPIXELS = 0,
710    FT_GLYPH_BBOX_GRIDFIT = 1,
711    FT_GLYPH_BBOX_TRUNCATE = 2,
712    FT_GLYPH_BBOX_PIXELS = 3
713}
714
715// ftgxval.h
716enum {
717    FT_VALIDATE_feat_INDEX = 0,
718    FT_VALIDATE_mort_INDEX = 1,
719    FT_VALIDATE_morx_INDEX = 2,
720    FT_VALIDATE_bsln_INDEX = 3,
721    FT_VALIDATE_just_INDEX = 4,
722    FT_VALIDATE_kern_INDEX = 5,
723    FT_VALIDATE_opbd_INDEX = 6,
724    FT_VALIDATE_trak_INDEX = 7,
725    FT_VALIDATE_prop_INDEX = 8,
726    FT_VALIDATE_lcar_INDEX = 9,
727    FT_VALIDATE_GX_LAST_INDEX = FT_VALIDATE_lcar_INDEX,
728    FT_VALIDATE_GX_LENGTH = FT_VALIDATE_GX_LAST_INDEX + 1,
729
730    FT_VALIDATE_GX_START = 0x4000,
731    FT_VALIDATE_feat = FT_VALIDATE_GX_START << FT_VALIDATE_feat_INDEX,
732    FT_VALIDATE_mort = FT_VALIDATE_GX_START << FT_VALIDATE_mort_INDEX,
733    FT_VALIDATE_morx = FT_VALIDATE_GX_START << FT_VALIDATE_morx_INDEX,
734    FT_VALIDATE_bsln = FT_VALIDATE_GX_START << FT_VALIDATE_bsln_INDEX,
735    FT_VALIDATE_just = FT_VALIDATE_GX_START << FT_VALIDATE_just_INDEX,
736    FT_VALIDATE_kern = FT_VALIDATE_GX_START << FT_VALIDATE_kern_INDEX,
737    FT_VALIDATE_opbd = FT_VALIDATE_GX_START << FT_VALIDATE_opbd_INDEX,
738    FT_VALIDATE_trak = FT_VALIDATE_GX_START << FT_VALIDATE_trak_INDEX,
739    FT_VALIDATE_prop = FT_VALIDATE_GX_START << FT_VALIDATE_prop_INDEX,
740    FT_VALIDATE_lcar = FT_VALIDATE_GX_START << FT_VALIDATE_lcar_INDEX,
741
742    FT_VALIDATE_GX = ( FT_VALIDATE_feat |
743                       FT_VALIDATE_mort |
744                       FT_VALIDATE_morx |
745                       FT_VALIDATE_bsln |
746                       FT_VALIDATE_just |
747                       FT_VALIDATE_kern |
748                       FT_VALIDATE_opbd |
749                       FT_VALIDATE_trak |
750                       FT_VALIDATE_prop |
751                       FT_VALIDATE_lcar ),
752
753    FT_VALIDATE_MS = FT_VALIDATE_GX_START << 0,
754    FT_VALIDATE_APPLE = FT_VALIDATE_GX_START << 1,
755    FT_VALIDATE_CKERN = FT_VALIDATE_MS | FT_VALIDATE_APPLE,
756}
757
758// ftimage.h
759alias FT_Pos = c_long;
760
761struct FT_Vector {
762    FT_Pos x;
763    FT_Pos y;
764}
765
766struct FT_BBox {
767    FT_Pos xMin, yMin;
768    FT_Pos xMax, yMax;
769}
770
771alias FT_Pixel_Mode = int;
772enum {
773    FT_PIXEL_MODE_NONE = 0,
774    FT_PIXEL_MODE_MONO,
775    FT_PIXEL_MODE_GRAY,
776    FT_PIXEL_MODE_GRAY2,
777    FT_PIXEL_MODE_GRAY4,
778    FT_PIXEL_MODE_LCD,
779    FT_PIXEL_MODE_LCD_V,
780    FT_PIXEL_MODE_MAX
781}
782
783struct FT_Bitmap {
784    uint rows;
785    uint width;
786    int pitch;
787    ubyte* buffer;
788    ushort num_grays;
789    ubyte pixel_mode;
790    ubyte palette_mode;
791    void* palette;
792}
793
794struct FT_Outline {
795    short n_contours;
796    short n_points;
797    FT_Vector* points;
798    byte* tags;
799    short* contours;
800    int flags;
801}
802
803enum FT_OUTLINE_CONTOURS_MAX = short.max;
804enum FT_OUTLINE_POINTS_MAX = short.max;
805
806enum : uint {
807    FT_OUTLINE_NONE            = 0x0,
808    FT_OUTLINE_OWNER           = 0x1,
809    FT_OUTLINE_EVEN_ODD_FILL   = 0x2,
810    FT_OUTLINE_REVERSE_FILL    = 0x4,
811    FT_OUTLINE_IGNORE_DROPOUTS = 0x8,
812    FT_OUTLINE_HIGH_PRECISION  = 0x100,
813    FT_OUTLINE_SINGLE_PASS     = 0x200,
814}
815
816enum {
817    FT_CURVE_TAG_ON          = 1,
818    FT_CURVE_TAG_CONIC       = 0,
819    FT_CURVE_TAG_CUBIC       = 2,
820    FT_CURVE_TAG_TOUCH_X     = 8,
821    FT_CURVE_TAG_TOUCH_Y     = 16,
822    FT_CURVE_TAG_TOUCH_BOTH  = FT_CURVE_TAG_TOUCH_X | FT_CURVE_TAG_TOUCH_Y,
823}
824
825extern( C ) nothrow {
826    alias FT_Outline_MoveToFunc = int function( const( FT_Vector )*, void* );
827    alias FT_Outline_LineToFunc = int function( const( FT_Vector )*, void* );
828    alias FT_Outline_ConicToFunc = int function( const( FT_Vector )*, const( FT_Vector )*, void* );
829    alias FT_Outline_CubicToFunc = int function( const( FT_Vector )*, const( FT_Vector )*, const( FT_Vector )*, void* );
830}
831
832struct FT_Outline_Funcs {
833    FT_Outline_MoveToFunc move_to;
834    FT_Outline_LineToFunc line_to;
835    FT_Outline_ConicToFunc conic_to;
836    FT_Outline_CubicToFunc cubic_to;
837    int shift;
838    FT_Pos delta;
839}
840
841alias FT_Glyph_Format = FT_Tag;
842enum : FT_Tag {
843    FT_GLYPH_FORMAT_NONE = 0,
844    FT_GLYPH_FORMAT_COMPOSITE = FT_MAKE_TAG( 'c','o','m','p' ),
845    FT_GLYPH_FORMAT_BITMAP = FT_MAKE_TAG( 'b','i','t','s' ),
846    FT_GLYPH_FORMAT_OUTLINE = FT_MAKE_TAG( 'o','u','t','l' ),
847    FT_GLYPH_FORMAT_PLOTTER = FT_MAKE_TAG( 'p','l','o','t' ),
848}
849
850struct FT_RasterRec;
851alias FT_Raster = FT_RasterRec*;
852
853struct FT_Span {
854    short x;
855    ushort len;
856    ubyte coverage;
857}
858
859extern( C ) nothrow alias FT_SpanFunc = void function( int, int, FT_Span*, void* );
860
861enum {
862    FT_RASTER_FLAG_DEFAULT  = 0x0,
863    FT_RASTER_FLAG_AA       = 0x1,
864    FT_RASTER_FLAG_DIRECT   = 0x2,
865    FT_RASTER_FLAG_CLIP     = 0x4
866}
867
868struct FT_Raster_Params {
869    const( FT_Bitmap )* target;
870    const( void )* source;
871    int flags;
872    FT_SpanFunc gray_spans;
873    void* black_spans;
874    void* bit_test;
875    void* bit_set;
876    void* user;
877    FT_BBox clip_box;
878}
879
880extern( C ) nothrow {
881    alias FT_Raster_NewFunc = int function( void*, FT_Raster* );
882    alias FT_Raster_DoneFunc = void function( FT_Raster );
883    alias FT_Raster_ResetFunc = void function( FT_Raster, ubyte*, uint );
884    alias FT_Raster_SetModeFunc = int function( FT_Raster, uint, void* );
885    alias FT_Raster_RenderFunc = int function( FT_Raster, FT_Raster_Params* );
886}
887
888
889struct FT_Raster_Funcs {
890    FT_Glyph_Format glyph_format;
891    FT_Raster_NewFunc raster_new;
892    FT_Raster_ResetFunc raster_reset;
893    FT_Raster_SetModeFunc raster_set_mode;
894    FT_Raster_RenderFunc raster_render;
895    FT_Raster_DoneFunc raster_done;
896}
897
898// ftincrem.h
899struct FT_IncrementalRec;
900alias FT_Incremental = FT_IncrementalRec*;
901
902struct FT_Incremental_MetricsRec {
903    FT_Long bearing_x;
904    FT_Long bearing_y;
905    FT_Long advance;
906}
907
908alias FT_Incremental_Metrics = FT_Incremental_MetricsRec*;
909
910extern( C ) nothrow {
911    alias FT_Incremental_GetGlyphDataFunc = FT_Error function( FT_Incremental, FT_UInt, FT_Data* );
912    alias FT_Incremental_FreeGlyphDataFunc = void function( FT_Incremental, FT_Data* );
913    alias FT_Incremental_GetGlyphMetricsFunc = FT_Error function( FT_Incremental, FT_UInt, FT_Bool, FT_Incremental_MetricsRec* );
914}
915
916struct FT_Incremental_FuncsRec {
917    FT_Incremental_GetGlyphDataFunc get_glyph_data;
918    FT_Incremental_FreeGlyphDataFunc free_glyph_data;
919    FT_Incremental_GetGlyphMetricsFunc get_glyph_metrics;
920}
921
922struct FT_Incremental_InterfaceRec {
923    FT_Incremental_FuncsRec* funcs;
924    FT_Incremental object;
925}
926
927enum FT_PARAM_TAG_INCREMENTAL = FT_MAKE_TAG( 'i','n','c','r' );
928
929alias FT_Incremental_Interface = FT_Incremental_InterfaceRec*;
930
931// ftlcdfil.h
932alias FT_LcdFilter = int;
933enum {
934    FT_LCD_FILTER_NONE    = 0,
935    FT_LCD_FILTER_DEFAULT = 1,
936    FT_LCD_FILTER_LIGHT   = 2,
937    FT_LCD_FILTER_LEGACY1 = 3,
938    FT_LCD_FILTER_LEGACY  = 16,
939    FT_LCD_FILTER_MAX
940}
941
942// ftlist.h
943extern( C ) nothrow {
944    alias FT_List_Iterator = FT_Error function( FT_ListNode, void* );
945    alias FT_List_Destructor = void function( FT_Memory, void*, void* );
946}
947
948// ftmm.h
949struct FT_MM_Axis {
950    FT_String* name;
951    FT_Long minimum;
952    FT_Long maximum;
953}
954
955struct FT_Multi_Master {
956    FT_UInt num_axis;
957    FT_UInt num_designs;
958    FT_MM_Axis[4] axis;
959}
960
961struct FT_Var_Axis {
962    FT_String* name;
963    FT_Fixed minimum;
964    FT_Fixed def;
965    FT_Fixed maximum;
966    FT_ULong tag;
967    FT_UInt strid;
968}
969
970struct FT_Var_Named_Style {
971    FT_Fixed* coords;
972    FT_UInt strid;
973}
974
975struct FT_MM_Var {
976    FT_UInt num_axis;
977    FT_UInt num_designs;
978    FT_UInt num_namedstyles;
979    FT_Var_Axis* axis;
980    FT_Var_Named_Style* namedstyle;
981}
982
983// ftmodapi.h
984enum
985{
986    FT_MODULE_FONT_DRIVER       = 1,
987    FT_MODULE_RENDERER          = 2,
988    FT_MODULE_HINTER            = 4,
989    FT_MODULE_STYLER            = 8,
990    FT_MODULE_DRIVER_SCALABLE   = 0x100,
991    FT_MODULE_DRIVER_NO_OUTLINES= 0x200,
992    FT_MODULE_DRIVER_HAS_HINTER = 0x400,
993    FT_MODULE_DRIVER_HINTS_LIGHTLY = 0x800,
994}
995
996alias FT_Module_Interface = FT_Pointer;
997
998extern( C ) nothrow {
999    alias FT_Module_Constructor = FT_Error function( FT_Module );
1000    alias FT_Module_Destructor = void function( FT_Module );
1001    alias FT_Module_Requester = FT_Module_Interface function( FT_Module, const( char )* );
1002}
1003
1004struct FT_Module_Class {
1005    FT_ULong module_flags;
1006    FT_Long module_size;
1007    FT_String* module_name;
1008    FT_Fixed module_version;
1009    FT_Fixed module_requires;
1010    void* module_interface;
1011    FT_Module_Constructor module_init;
1012    FT_Module_Destructor module_done;
1013    FT_Module_Requester get_interface;
1014}
1015
1016extern( C ) nothrow alias FT_DebugHook_Func = void function( void* );
1017
1018alias FT_TrueTypeEngineType = int;
1019enum {
1020    FT_TRUETYPE_ENGINE_TYPE_NONE = 0,
1021    FT_TRUETYPE_ENGINE_TYPE_UNPATENTED,
1022    FT_TRUETYPE_ENGINE_TYPE_PATENTED
1023
1024}
1025
1026// ftmoderr.h
1027enum {
1028    FT_Mod_Err_Base = 0x000,
1029    FT_Mod_Err_Autofit = 0x100,
1030    FT_Mod_Err_BDF = 0x200,
1031    FT_Mod_Err_Bzip2 = 0x300,
1032    FT_Mod_Err_Cache = 0x400,
1033    FT_Mod_Err_CFF = 0x500,
1034    FT_Mod_Err_CID = 0x600,
1035    FT_Mod_Err_Gzip = 0x700,
1036    FT_Mod_Err_LZW = 0x800,
1037    FT_Mod_Err_OTvalid = 0x900,
1038    FT_Mod_Err_PCF = 0xA00,
1039    FT_Mod_Err_PFR = 0xB00,
1040    FT_Mod_Err_PSaux = 0xC00,
1041    FT_Mod_Err_PShinter = 0xD00,
1042    FT_Mod_Err_PSnames = 0xE00,
1043    FT_Mod_Err_Raster = 0xF00,
1044    FT_Mod_Err_SFNT = 0x1000,
1045    FT_Mod_Err_Smooth = 0x1100,
1046    FT_Mod_Err_TrueType = 0x1200,
1047    FT_Mod_Err_Type1 = 0x1300,
1048    FT_Mod_Err_Type42 = 0x1400,
1049    FT_Mod_Err_Winfonts = 0x1500,
1050    FT_Mod_Err_GXvalid = 0x1600,
1051    FT_Mod_Err_Max,
1052}
1053
1054// ftotval.h
1055enum {
1056    FT_VALIDATE_BASE = 0x0100,
1057    FT_VALIDATE_GDEF = 0x0200,
1058    FT_VALIDATE_GPOS = 0x0400,
1059    FT_VALIDATE_GSUB = 0x0800,
1060    FT_VALIDATE_JSTF = 0x1000,
1061    FT_VALIDATE_MATH = 0x2000,
1062    FT_VALIDATE_OT   = FT_VALIDATE_BASE |
1063                       FT_VALIDATE_GDEF |
1064                       FT_VALIDATE_GPOS |
1065                       FT_VALIDATE_GSUB |
1066                       FT_VALIDATE_JSTF |
1067                       FT_VALIDATE_MATH,
1068}
1069
1070// ftoutln
1071alias FT_Orientation = int;
1072enum {
1073    FT_ORIENTATION_TRUETYPE = 0,
1074    FT_ORIENTATION_POSTSCRIPT = 1,
1075    FT_ORIENTATION_FILL_RIGHT = FT_ORIENTATION_TRUETYPE,
1076    FT_ORIENTATION_FILL_LEFT = FT_ORIENTATION_POSTSCRIPT
1077}
1078
1079// ftrender.h
1080extern( C ) nothrow {
1081    alias FT_Glyph_InitFunc = FT_Error function( FT_Glyph, FT_GlyphSlot );
1082    alias FT_Glyph_DoneFunc = void function( FT_Glyph );
1083    alias FT_Glyph_TransformFunc = void function( FT_Glyph, const( FT_Matrix )* matrix, const( FT_Vector )* );
1084    alias FT_Glyph_GetBBoxFunc = void function( FT_Glyph, FT_BBox* );
1085    alias FT_Glyph_CopyFunc = FT_Error function( FT_Glyph, FT_Glyph );
1086    alias FT_Glyph_PrepareFunc = FT_Error function( FT_Glyph, FT_GlyphSlot );
1087}
1088
1089struct FT_Glyph_Class {  // typedef'd in ftglyph.h
1090    FT_Long glyph_size;
1091    FT_Glyph_Format glyph_format;
1092    FT_Glyph_InitFunc glyph_init;
1093    FT_Glyph_DoneFunc glyph_done;
1094    FT_Glyph_CopyFunc glyph_copy;
1095    FT_Glyph_TransformFunc glyph_transform;
1096    FT_Glyph_GetBBoxFunc glyph_bbox;
1097    FT_Glyph_PrepareFunc glyph_prepare;
1098}
1099
1100extern( C ) nothrow {
1101    alias FT_Renderer_RenderFunc = FT_Error function( FT_Renderer, FT_GlyphSlot, FT_UInt, const( FT_Vector )* );
1102    alias FT_Renderer_TransformFunc = FT_Error function( FT_Renderer, FT_GlyphSlot, const( FT_Matrix )*, const( FT_Vector )* );
1103    alias FT_Renderer_GetCBoxFunc = void function( FT_Renderer, FT_GlyphSlot, FT_BBox* );
1104    alias FT_Renderer_SetModeFunc = FT_Error function( FT_Renderer, FT_ULong, FT_Pointer );
1105}
1106
1107struct FT_Renderer_Class {
1108    FT_Module_Class root;
1109    FT_Glyph_Format glyph_format;
1110    FT_Renderer_RenderFunc render_glyph;
1111    FT_Renderer_TransformFunc transform_glyph;
1112    FT_Renderer_GetCBoxFunc get_glyph_cbox;
1113    FT_Renderer_SetModeFunc set_mode;
1114    FT_Raster_Funcs* raster_class;
1115}
1116
1117// ftsnames.h
1118struct FT_SfntName {
1119    FT_UShort platform_id;
1120    FT_UShort encoding_id;
1121    FT_UShort language_id;
1122    FT_UShort name_id;
1123    FT_Byte* string;
1124    FT_UInt string_len;
1125}
1126
1127enum FT_PARAM_TAG_IGNORE_PREFERRED_FAMILY = FT_MAKE_TAG( 'i','g','p','f' );
1128enum FT_PARAM_TAG_IGNORE_PREFERRED_SUBFAMILY = FT_MAKE_TAG( 'i','g','p','s' );
1129
1130// ftstroke.h
1131struct FT_StrokerRec;
1132alias FT_Stroker = FT_StrokerRec*;
1133
1134alias FT_Stroker_LineJoin = int;
1135enum {
1136    FT_STROKER_LINEJOIN_ROUND = 0,
1137    FT_STROKER_LINEJOIN_BEVEL,
1138    FT_STROKER_LINEJOIN_MITER
1139}
1140
1141alias FT_Stroker_LineCap = int;
1142enum {
1143    FT_STROKER_LINECAP_BUTT = 0,
1144    FT_STROKER_LINECAP_ROUND,
1145    FT_STROKER_LINECAP_SQUARE
1146}
1147
1148alias FT_StrokerBorder = int;
1149enum {
1150    FT_STROKER_BORDER_LEFT = 0,
1151    FT_STROKER_BORDER_RIGHT
1152}
1153
1154// ftsystem.h
1155alias FT_Memory = FT_MemoryRec*;
1156
1157extern( C ) nothrow {
1158    alias FT_Alloc_Func = void* function( FT_Memory, c_long );
1159    alias FT_Free_Func = void  function( FT_Memory, void* );
1160    alias FT_Realloc_Func = void* function( FT_Memory, c_long, c_long, void* );
1161}
1162
1163struct FT_MemoryRec {
1164    void* user;
1165    FT_Alloc_Func alloc;
1166    FT_Free_Func free;
1167    FT_Realloc_Func realloc;
1168}
1169
1170alias FT_Stream = FT_StreamRec*;
1171
1172union FT_StreamDesc {
1173    int value;
1174    void* pointer;
1175}
1176
1177extern( C ) nothrow {
1178    alias FT_Stream_IoFunc = c_ulong function( FT_Stream, c_ulong, ubyte*, c_ulong );
1179    alias FT_Stream_CloseFunc = void function( FT_Stream );
1180}
1181
1182struct FT_StreamRec {
1183    ubyte* base;
1184    c_ulong size;
1185    c_ulong pos;
1186    FT_StreamDesc descriptor;
1187    FT_StreamDesc pathname;
1188    FT_Stream_IoFunc read;
1189    FT_Stream_CloseFunc close;
1190    FT_Memory memory;
1191    ubyte* cursor;
1192    ubyte* limit;
1193}
1194
1195// fttrigon.h
1196alias FT_Angle = FT_Fixed;
1197
1198enum {
1199    FT_ANGLE_PI     = 180 << 16,
1200    FT_ANGLE_2PI    = FT_ANGLE_PI * 2,
1201    FT_ANGLE_PI2    = FT_ANGLE_PI / 2,
1202    FT_ANGLE_PI4    = FT_ANGLE_PI / 4
1203}
1204
1205// ftttdrv.h
1206enum TT_INTERPRETER_VERSION_35 = 35;
1207enum TT_INTERPRETER_VERSION_38 = 38;
1208
1209// ftwinfnt.h
1210enum {
1211    FT_WinFNT_ID_CP1252 = 0,
1212    FT_WinFNT_ID_DEFAULT = 1,
1213    FT_WinFNT_ID_SYMBOL = 2,
1214    FT_WinFNT_ID_MAC = 77,
1215    FT_WinFNT_ID_CP932 = 128,
1216    FT_WinFNT_ID_CP949 = 129,
1217    FT_WinFNT_ID_CP1361 = 130,
1218    FT_WinFNT_ID_CP936 = 134,
1219    FT_WinFNT_ID_CP950 = 136,
1220    FT_WinFNT_ID_CP1253 = 161,
1221    FT_WinFNT_ID_CP1254 = 162,
1222    FT_WinFNT_ID_CP1258 = 163,
1223    FT_WinFNT_ID_CP1255 = 177,
1224    FT_WinFNT_ID_CP1256 = 178,
1225    FT_WinFNT_ID_CP1257 = 186,
1226    FT_WinFNT_ID_CP1251 = 204,
1227    FT_WinFNT_ID_CP874 = 222,
1228    FT_WinFNT_ID_CP1250 = 238,
1229    FT_WinFNT_ID_OEM = 255,
1230}
1231
1232
1233struct FT_WinFNT_HeaderRec {
1234    FT_UShort _version;
1235    FT_ULong file_size;
1236    FT_Byte[60] copyright;
1237    FT_UShort file_type;
1238    FT_UShort nominal_point_size;
1239    FT_UShort vertical_resolution;
1240    FT_UShort horizontal_resolution;
1241    FT_UShort ascent;
1242    FT_UShort internal_leading;
1243    FT_UShort external_leading;
1244    FT_Byte italic;
1245    FT_Byte underline;
1246    FT_Byte strike_out;
1247    FT_UShort weight;
1248    FT_Byte charset;
1249    FT_UShort pixel_width;
1250    FT_UShort pixel_height;
1251    FT_Byte pitch_and_family;
1252    FT_UShort avg_width;
1253    FT_UShort max_width;
1254    FT_Byte first_char;
1255    FT_Byte last_char;
1256    FT_Byte default_char;
1257    FT_Byte break_char;
1258    FT_UShort bytes_per_row;
1259    FT_ULong device_offset;
1260    FT_ULong face_name_offset;
1261    FT_ULong bits_pointer;
1262    FT_ULong bits_offset;
1263    FT_Byte reserved;
1264    FT_ULong flags;
1265    FT_UShort A_space;
1266    FT_UShort B_space;
1267    FT_UShort C_space;
1268    FT_UShort color_table_offset;
1269    FT_ULong[4] reserved1;
1270}
1271
1272alias FT_WinFNT_Header = FT_WinFNT_HeaderRec*;
1273
1274// t1tables.h
1275struct PS_FontInfoRec {
1276    FT_String* _version;
1277    FT_String* notice;
1278    FT_String* full_name;
1279    FT_String* family_name;
1280    FT_String* weight;
1281    FT_Long italic_angle;
1282    FT_Bool is_fixed_pitch;
1283    FT_Short underline_position;
1284    FT_UShort underline_thickness;
1285}
1286
1287alias PS_FontInfo = PS_FontInfoRec*;
1288
1289struct PS_PrivateRec {
1290    FT_Int unique_id;
1291    FT_Int lenIV;
1292    FT_Byte num_blue_values;
1293    FT_Byte num_other_blues;
1294    FT_Byte num_family_blues;
1295    FT_Byte num_family_other_blues;
1296    FT_Short[14] blue_values;
1297    FT_Short[10] other_blues;
1298    FT_Short[14] family_blues;
1299    FT_Short[10] family_other_blues;
1300    FT_Fixed blue_scale;
1301    FT_Int blue_shift;
1302    FT_Int blue_fuzz;
1303    FT_UShort[1] standard_width;
1304    FT_UShort[1] standard_height;
1305    FT_Byte num_snap_widths;
1306    FT_Byte num_snap_heights;
1307    FT_Bool force_bold;
1308    FT_Bool round_stem_up;
1309    FT_Short[13] snap_widths;
1310    FT_Short[13] snap_heights;
1311    FT_Fixed expansion_factor;
1312    FT_Long language_group;
1313    FT_Long password;
1314    FT_Short[2] min_feature;
1315}
1316
1317alias PS_Private = PS_PrivateRec*;
1318
1319alias T1_Blend_Flags = int;
1320enum {
1321    T1_BLEND_UNDERLINE_POSITION = 0,
1322    T1_BLEND_UNDERLINE_THICKNESS,
1323    T1_BLEND_ITALIC_ANGLE,
1324    T1_BLEND_BLUE_VALUES,
1325    T1_BLEND_OTHER_BLUES,
1326    T1_BLEND_STANDARD_WIDTH,
1327    T1_BLEND_STANDARD_HEIGHT,
1328    T1_BLEND_STEM_SNAP_WIDTHS,
1329    T1_BLEND_STEM_SNAP_HEIGHTS,
1330    T1_BLEND_BLUE_SCALE,
1331    T1_BLEND_BLUE_SHIFT,
1332    T1_BLEND_FAMILY_BLUES,
1333    T1_BLEND_FAMILY_OTHER_BLUES,
1334    T1_BLEND_FORCE_BOLD,
1335    T1_BLEND_MAX
1336}
1337
1338enum T1_MAX_MM_DESIGNS = 16;
1339enum T1_MAX_MM_AXIS = 4;
1340enum T1_MAX_MM_MAP_POINTS = 20;
1341
1342struct PS_DesignMapRec {
1343    FT_Byte num_points;
1344    FT_Long* design_points;
1345    FT_Fixed* blend_points;
1346}
1347
1348alias PS_DesignMap = PS_DesignMapRec*;
1349
1350struct PS_BlendRec {
1351    FT_UInt num_designs;
1352    FT_UInt num_axis;
1353    FT_String*[T1_MAX_MM_AXIS] axis_names;
1354    FT_Fixed*[T1_MAX_MM_DESIGNS] design_pos;
1355    PS_DesignMapRec[T1_MAX_MM_AXIS] design_map;
1356    FT_Fixed* weight_vector;
1357    FT_Fixed* default_weight_vector;
1358    PS_FontInfo[T1_MAX_MM_DESIGNS+1] font_infos;
1359    PS_Private[T1_MAX_MM_DESIGNS+1] privates;
1360    FT_ULong blend_bitflags;
1361    FT_BBox*[T1_MAX_MM_DESIGNS+1] bboxes;
1362    FT_UInt[T1_MAX_MM_DESIGNS] default_design_vector;
1363    FT_UInt num_default_design_vector;
1364}
1365
1366alias PS_Blend = PS_BlendRec*;
1367
1368struct CID_FaceDictRec {
1369    PS_PrivateRec private_dict;
1370    FT_UInt len_buildchar;
1371    FT_Fixed forcebold_threshold;
1372    FT_Pos stroke_width;
1373    FT_Fixed expansion_factor;
1374    FT_Byte paint_type;
1375    FT_Byte font_type;
1376    FT_Matrix font_matrix;
1377    FT_Vector font_offset;
1378    FT_UInt num_subrs;
1379    FT_ULong subrmap_offset;
1380    FT_Int sd_bytes;
1381}
1382
1383alias CID_FaceDict = CID_FaceDictRec*;
1384
1385struct CID_FaceInfoRec {
1386    FT_String* cid_font_name;
1387    FT_Fixed cid_version;
1388    FT_Int cid_font_type;
1389    FT_String* registry;
1390    FT_String* ordering;
1391    FT_Int supplement;
1392    PS_FontInfoRec font_info;
1393    FT_BBox font_bbox;
1394    FT_ULong uid_base;
1395    FT_Int num_xuid;
1396    FT_ULong[16] xuid;
1397    FT_ULong cidmap_offset;
1398    FT_Int fd_bytes;
1399    FT_Int gd_bytes;
1400    FT_ULong cid_count;
1401    FT_Int num_dicts;
1402    CID_FaceDict font_dicts;
1403    FT_ULong data_offset;
1404}
1405
1406alias CID_FaceInfo = CID_FaceInfoRec*;
1407
1408alias T1_EncodingType = int;
1409enum {
1410    T1_ENCODING_TYPE_NONE = 0,
1411    T1_ENCODING_TYPE_ARRAY,
1412    T1_ENCODING_TYPE_STANDARD,
1413    T1_ENCODING_TYPE_ISOLATIN1,
1414    T1_ENCODING_TYPE_EXPERT,
1415}
1416
1417alias PS_Dict_Keys = int;
1418enum {
1419    PS_DICT_FONT_TYPE,
1420    PS_DICT_FONT_MATRIX,
1421    PS_DICT_FONT_BBOX,
1422    PS_DICT_PAINT_TYPE,
1423    PS_DICT_FONT_NAME,
1424    PS_DICT_UNIQUE_ID,
1425    PS_DICT_NUM_CHAR_STRINGS,
1426    PS_DICT_CHAR_STRING_KEY,
1427    PS_DICT_CHAR_STRING,
1428    PS_DICT_ENCODING_TYPE,
1429    PS_DICT_ENCODING_ENTRY,
1430
1431    PS_DICT_NUM_SUBRS,
1432    PS_DICT_SUBR,
1433    PS_DICT_STD_HW,
1434    PS_DICT_STD_VW,
1435    PS_DICT_NUM_BLUE_VALUES,
1436    PS_DICT_BLUE_VALUE,
1437    PS_DICT_BLUE_FUZZ,
1438    PS_DICT_NUM_OTHER_BLUES,
1439    PS_DICT_OTHER_BLUE,
1440    PS_DICT_NUM_FAMILY_BLUES,
1441    PS_DICT_FAMILY_BLUE,
1442    PS_DICT_NUM_FAMILY_OTHER_BLUES,
1443    PS_DICT_FAMILY_OTHER_BLUE,
1444    PS_DICT_BLUE_SCALE,
1445    PS_DICT_BLUE_SHIFT,
1446    PS_DICT_NUM_STEM_SNAP_H,
1447    PS_DICT_STEM_SNAP_H,
1448    PS_DICT_NUM_STEM_SNAP_V,
1449    PS_DICT_STEM_SNAP_V,
1450    PS_DICT_FORCE_BOLD,
1451    PS_DICT_RND_STEM_UP,
1452    PS_DICT_MIN_FEATURE,
1453    PS_DICT_LEN_IV,
1454    PS_DICT_PASSWORD,
1455    PS_DICT_LANGUAGE_GROUP,
1456
1457    PS_DICT_VERSION,
1458    PS_DICT_NOTICE,
1459    PS_DICT_FULL_NAME,
1460    PS_DICT_FAMILY_NAME,
1461    PS_DICT_WEIGHT,
1462    PS_DICT_IS_FIXED_PITCH,
1463    PS_DICT_UNDERLINE_POSITION,
1464    PS_DICT_UNDERLINE_THICKNESS,
1465    PS_DICT_FS_TYPE,
1466    PS_DICT_ITALIC_ANGLE,
1467
1468    PS_DICT_MAX = PS_DICT_ITALIC_ANGLE
1469}
1470
1471// ttnameid.h
1472enum {
1473    TT_PLATFORM_APPLE_UNICODE = 0,
1474    TT_PLATFORM_MACINTOSH = 1,
1475    TT_PLATFORM_MICROSOFT = 3,
1476    TT_PLATFORM_CUSTOM = 4,
1477    TT_PLATFORM_ADOBE = 7,
1478}
1479
1480enum {
1481    TT_APPLE_ID_DEFAULT = 0,
1482    TT_APPLE_ID_UNICODE_1_1 = 1,
1483    TT_APPLE_ID_UNICODE_2_0 = 3,
1484    TT_APPLE_ID_UNICODE_32 = 4,
1485    TT_APPLE_ID_VARIANT_SELECTOR = 5,
1486}
1487
1488enum {
1489    TT_MAC_ID_ROMAN = 0,
1490    TT_MAC_ID_JAPANESE = 1,
1491    TT_MAC_ID_TRADITIONAL_CHINESE = 2,
1492    TT_MAC_ID_KOREAN = 3,
1493    TT_MAC_ID_ARABIC = 4,
1494    TT_MAC_ID_HEBREW = 5,
1495    TT_MAC_ID_GREEK = 6,
1496    TT_MAC_ID_RUSSIAN = 7,
1497    TT_MAC_ID_RSYMBOL = 8,
1498    TT_MAC_ID_DEVANAGARI = 9,
1499    TT_MAC_ID_GURMUKHI = 10,
1500    TT_MAC_ID_GUJARATI = 11,
1501    TT_MAC_ID_ORIYA = 12,
1502    TT_MAC_ID_BENGALI = 13,
1503    TT_MAC_ID_TAMIL = 14,
1504    TT_MAC_ID_TELUGU = 15,
1505    TT_MAC_ID_KANNADA = 16,
1506    TT_MAC_ID_MALAYALAM = 17,
1507    TT_MAC_ID_SINHALESE = 18,
1508    TT_MAC_ID_BURMESE = 19,
1509    TT_MAC_ID_KHMER = 20,
1510    TT_MAC_ID_THAI = 21,
1511    TT_MAC_ID_LAOTIAN = 22,
1512    TT_MAC_ID_GEORGIAN = 23,
1513    TT_MAC_ID_ARMENIAN = 24,
1514    TT_MAC_ID_MALDIVIAN = 25,
1515    TT_MAC_ID_SIMPLIFIED_CHINESE = 25,
1516    TT_MAC_ID_TIBETAN = 26,
1517    TT_MAC_ID_MONGOLIAN = 27,
1518    TT_MAC_ID_GEEZ = 28,
1519    TT_MAC_ID_SLAVIC = 29,
1520    TT_MAC_ID_VIETNAMESE = 30,
1521    TT_MAC_ID_SINDHI = 31,
1522    TT_MAC_ID_UNINTERP = 32,
1523}
1524
1525enum {
1526    TT_ISO_ID_7BIT_ASCII = 0,
1527    TT_ISO_ID_10646 = 1,
1528    TT_ISO_ID_8859_1 = 2,
1529}
1530
1531enum {
1532    TT_MS_ID_SYMBOL_CS = 0,
1533    TT_MS_ID_UNICODE_CS = 1,
1534    TT_MS_ID_SJIS = 2,
1535    TT_MS_ID_GB2312 = 3,
1536    TT_MS_ID_BIG_5 = 4,
1537    TT_MS_ID_WANSUNG = 5,
1538    TT_MS_ID_JOHAB = 6,
1539    TT_MS_ID_UCS_4 = 10,
1540}
1541
1542enum {
1543    TT_ADOBE_ID_STANDARD = 0,
1544    TT_ADOBE_ID_EXPERT = 1,
1545    TT_ADOBE_ID_CUSTOM = 2,
1546    TT_ADOBE_ID_LATIN_1 = 3,
1547}
1548
1549enum {
1550    TT_MAC_LANGID_ENGLISH = 0,
1551    TT_MAC_LANGID_FRENCH = 1,
1552    TT_MAC_LANGID_GERMAN = 2,
1553    TT_MAC_LANGID_ITALIAN = 3,
1554    TT_MAC_LANGID_DUTCH = 4,
1555    TT_MAC_LANGID_SWEDISH = 5,
1556    TT_MAC_LANGID_SPANISH = 6,
1557    TT_MAC_LANGID_DANISH = 7,
1558    TT_MAC_LANGID_PORTUGUESE = 8,
1559    TT_MAC_LANGID_NORWEGIAN = 9,
1560    TT_MAC_LANGID_HEBREW = 10,
1561    TT_MAC_LANGID_JAPANESE = 11,
1562    TT_MAC_LANGID_ARABIC = 12,
1563    TT_MAC_LANGID_FINNISH = 13,
1564    TT_MAC_LANGID_GREEK = 14,
1565    TT_MAC_LANGID_ICELANDIC = 15,
1566    TT_MAC_LANGID_MALTESE = 16,
1567    TT_MAC_LANGID_TURKISH = 17,
1568    TT_MAC_LANGID_CROATIAN = 18,
1569    TT_MAC_LANGID_CHINESE_TRADITIONAL = 19,
1570    TT_MAC_LANGID_URDU = 20,
1571    TT_MAC_LANGID_HINDI = 21,
1572    TT_MAC_LANGID_THAI = 22,
1573    TT_MAC_LANGID_KOREAN = 23,
1574    TT_MAC_LANGID_LITHUANIAN = 24,
1575    TT_MAC_LANGID_POLISH = 25,
1576    TT_MAC_LANGID_HUNGARIAN = 26,
1577    TT_MAC_LANGID_ESTONIAN = 27,
1578    TT_MAC_LANGID_LETTISH = 28,
1579    TT_MAC_LANGID_SAAMISK = 29,
1580    TT_MAC_LANGID_FAEROESE = 30,
1581    TT_MAC_LANGID_FARSI = 31,
1582    TT_MAC_LANGID_RUSSIAN = 32,
1583    TT_MAC_LANGID_CHINESE_SIMPLIFIED = 33,
1584    TT_MAC_LANGID_FLEMISH = 34,
1585    TT_MAC_LANGID_IRISH = 35,
1586    TT_MAC_LANGID_ALBANIAN = 36,
1587    TT_MAC_LANGID_ROMANIAN = 37,
1588    TT_MAC_LANGID_CZECH = 38,
1589    TT_MAC_LANGID_SLOVAK = 39,
1590    TT_MAC_LANGID_SLOVENIAN = 40,
1591    TT_MAC_LANGID_YIDDISH = 41,
1592    TT_MAC_LANGID_SERBIAN = 42,
1593    TT_MAC_LANGID_MACEDONIAN = 43,
1594    TT_MAC_LANGID_BULGARIAN = 44,
1595    TT_MAC_LANGID_UKRAINIAN = 45,
1596    TT_MAC_LANGID_BYELORUSSIAN = 46,
1597    TT_MAC_LANGID_UZBEK = 47,
1598    TT_MAC_LANGID_KAZAKH = 48,
1599    TT_MAC_LANGID_AZERBAIJANI = 49,
1600    TT_MAC_LANGID_AZERBAIJANI_CYRILLIC_SCRIPT = 49,
1601    TT_MAC_LANGID_AZERBAIJANI_ARABIC_SCRIPT = 50,
1602    TT_MAC_LANGID_ARMENIAN = 51,
1603    TT_MAC_LANGID_GEORGIAN = 52,
1604    TT_MAC_LANGID_MOLDAVIAN = 53,
1605    TT_MAC_LANGID_KIRGHIZ = 54,
1606    TT_MAC_LANGID_TAJIKI = 55,
1607    TT_MAC_LANGID_TURKMEN = 56,
1608    TT_MAC_LANGID_MONGOLIAN = 57,
1609    TT_MAC_LANGID_MONGOLIAN_MONGOLIAN_SCRIPT = 57,
1610    TT_MAC_LANGID_MONGOLIAN_CYRILLIC_SCRIPT = 58,
1611    TT_MAC_LANGID_PASHTO = 59,
1612    TT_MAC_LANGID_KURDISH = 60,
1613    TT_MAC_LANGID_KASHMIRI = 61,
1614    TT_MAC_LANGID_SINDHI = 62,
1615    TT_MAC_LANGID_TIBETAN = 63,
1616    TT_MAC_LANGID_NEPALI = 64,
1617    TT_MAC_LANGID_SANSKRIT = 65,
1618    TT_MAC_LANGID_MARATHI = 66,
1619    TT_MAC_LANGID_BENGALI = 67,
1620    TT_MAC_LANGID_ASSAMESE = 68,
1621    TT_MAC_LANGID_GUJARATI = 69,
1622    TT_MAC_LANGID_PUNJABI = 70,
1623    TT_MAC_LANGID_ORIYA = 71,
1624    TT_MAC_LANGID_MALAYALAM = 72,
1625    TT_MAC_LANGID_KANNADA = 73,
1626    TT_MAC_LANGID_TAMIL = 74,
1627    TT_MAC_LANGID_TELUGU = 75,
1628    TT_MAC_LANGID_SINHALESE = 76,
1629    TT_MAC_LANGID_BURMESE = 77,
1630    TT_MAC_LANGID_KHMER = 78,
1631    TT_MAC_LANGID_LAO = 79,
1632    TT_MAC_LANGID_VIETNAMESE = 80,
1633    TT_MAC_LANGID_INDONESIAN = 81,
1634    TT_MAC_LANGID_TAGALOG = 82,
1635    TT_MAC_LANGID_MALAY_ROMAN_SCRIPT = 83,
1636    TT_MAC_LANGID_MALAY_ARABIC_SCRIPT = 84,
1637    TT_MAC_LANGID_AMHARIC = 85,
1638    TT_MAC_LANGID_TIGRINYA = 86,
1639    TT_MAC_LANGID_GALLA = 87,
1640    TT_MAC_LANGID_SOMALI = 88,
1641    TT_MAC_LANGID_SWAHILI = 89,
1642    TT_MAC_LANGID_RUANDA = 90,
1643    TT_MAC_LANGID_RUNDI = 91,
1644    TT_MAC_LANGID_CHEWA = 92,
1645    TT_MAC_LANGID_MALAGASY = 93,
1646    TT_MAC_LANGID_ESPERANTO = 94,
1647    TT_MAC_LANGID_WELSH = 128,
1648    TT_MAC_LANGID_BASQUE = 129,
1649    TT_MAC_LANGID_CATALAN = 130,
1650    TT_MAC_LANGID_LATIN = 131,
1651    TT_MAC_LANGID_QUECHUA = 132,
1652    TT_MAC_LANGID_GUARANI = 133,
1653    TT_MAC_LANGID_AYMARA = 134,
1654    TT_MAC_LANGID_TATAR = 135,
1655    TT_MAC_LANGID_UIGHUR = 136,
1656    TT_MAC_LANGID_DZONGKHA = 137,
1657    TT_MAC_LANGID_JAVANESE = 138,
1658    TT_MAC_LANGID_SUNDANESE = 139,
1659    TT_MAC_LANGID_GALICIAN = 140,
1660    TT_MAC_LANGID_AFRIKAANS = 141,
1661    TT_MAC_LANGID_BRETON = 142,
1662    TT_MAC_LANGID_INUKTITUT = 143,
1663    TT_MAC_LANGID_SCOTTISH_GAELIC = 144,
1664    TT_MAC_LANGID_MANX_GAELIC = 145,
1665    TT_MAC_LANGID_IRISH_GAELIC = 146,
1666    TT_MAC_LANGID_TONGAN = 147,
1667    TT_MAC_LANGID_GREEK_POLYTONIC = 148,
1668    TT_MAC_LANGID_GREELANDIC = 149,
1669    TT_MAC_LANGID_AZERBAIJANI_ROMAN_SCRIPT = 150,
1670}
1671
1672enum {
1673    TT_MS_LANGID_ARABIC_GENERAL = 0x0001,
1674    TT_MS_LANGID_ARABIC_SAUDI_ARABIA = 0x0401,
1675    TT_MS_LANGID_ARABIC_IRAQ = 0x0801,
1676    TT_MS_LANGID_ARABIC_EGYPT = 0x0c01,
1677    TT_MS_LANGID_ARABIC_LIBYA = 0x1001,
1678    TT_MS_LANGID_ARABIC_ALGERIA = 0x1401,
1679    TT_MS_LANGID_ARABIC_MOROCCO = 0x1801,
1680    TT_MS_LANGID_ARABIC_TUNISIA = 0x1c01,
1681    TT_MS_LANGID_ARABIC_OMAN = 0x2001,
1682    TT_MS_LANGID_ARABIC_YEMEN = 0x2401,
1683    TT_MS_LANGID_ARABIC_SYRIA = 0x2801,
1684    TT_MS_LANGID_ARABIC_JORDAN = 0x2c01,
1685    TT_MS_LANGID_ARABIC_LEBANON = 0x3001,
1686    TT_MS_LANGID_ARABIC_KUWAIT = 0x3401,
1687    TT_MS_LANGID_ARABIC_UAE = 0x3801,
1688    TT_MS_LANGID_ARABIC_BAHRAIN = 0x3c01,
1689    TT_MS_LANGID_ARABIC_QATAR = 0x4001,
1690    TT_MS_LANGID_BULGARIAN_BULGARIA = 0x0402,
1691    TT_MS_LANGID_CATALAN_SPAIN = 0x0403,
1692    TT_MS_LANGID_CHINESE_GENERAL = 0x0004,
1693    TT_MS_LANGID_CHINESE_TAIWAN = 0x0404,
1694    TT_MS_LANGID_CHINESE_PRC = 0x0804,
1695    TT_MS_LANGID_CHINESE_HONG_KONG = 0x0c04,
1696    TT_MS_LANGID_CHINESE_SINGAPORE = 0x1004,
1697    TT_MS_LANGID_CHINESE_MACAU = 0x1404,
1698    TT_MS_LANGID_CZECH_CZECH_REPUBLIC = 0x0405,
1699    TT_MS_LANGID_DANISH_DENMARK = 0x0406,
1700    TT_MS_LANGID_GERMAN_GERMANY = 0x0407,
1701    TT_MS_LANGID_GERMAN_SWITZERLAND = 0x0807,
1702    TT_MS_LANGID_GERMAN_AUSTRIA = 0x0c07,
1703    TT_MS_LANGID_GERMAN_LUXEMBOURG = 0x1007,
1704    TT_MS_LANGID_GERMAN_LIECHTENSTEI = 0x1407,
1705    TT_MS_LANGID_GREEK_GREECE = 0x0408,
1706    TT_MS_LANGID_ENGLISH_GENERAL = 0x0009,
1707    TT_MS_LANGID_ENGLISH_UNITED_STATES = 0x0409,
1708    TT_MS_LANGID_ENGLISH_UNITED_KINGDOM = 0x0809,
1709    TT_MS_LANGID_ENGLISH_AUSTRALIA = 0x0c09,
1710    TT_MS_LANGID_ENGLISH_CANADA = 0x1009,
1711    TT_MS_LANGID_ENGLISH_NEW_ZEALAND = 0x1409,
1712    TT_MS_LANGID_ENGLISH_IRELAND = 0x1809,
1713    TT_MS_LANGID_ENGLISH_SOUTH_AFRICA = 0x1c09,
1714    TT_MS_LANGID_ENGLISH_JAMAICA = 0x2009,
1715    TT_MS_LANGID_ENGLISH_CARIBBEAN = 0x2409,
1716    TT_MS_LANGID_ENGLISH_BELIZE = 0x2809,
1717    TT_MS_LANGID_ENGLISH_TRINIDAD = 0x2c09,
1718    TT_MS_LANGID_ENGLISH_ZIMBABWE = 0x3009,
1719    TT_MS_LANGID_ENGLISH_PHILIPPINES = 0x3409,
1720    TT_MS_LANGID_ENGLISH_INDONESIA = 0x3809,
1721    TT_MS_LANGID_ENGLISH_HONG_KONG = 0x3c09,
1722    TT_MS_LANGID_ENGLISH_INDIA = 0x4009,
1723    TT_MS_LANGID_ENGLISH_MALAYSIA = 0x4409,
1724    TT_MS_LANGID_ENGLISH_SINGAPORE = 0x4809,
1725    TT_MS_LANGID_SPANISH_SPAIN_TRADITIONAL_SORT = 0x040a,
1726    TT_MS_LANGID_SPANISH_MEXICO = 0x080a,
1727    TT_MS_LANGID_SPANISH_SPAIN_INTERNATIONAL_SORT = 0x0c0a,
1728    TT_MS_LANGID_SPANISH_GUATEMALA = 0x100a,
1729    TT_MS_LANGID_SPANISH_COSTA_RICA = 0x140a,
1730    TT_MS_LANGID_SPANISH_PANAMA = 0x180a,
1731    TT_MS_LANGID_SPANISH_DOMINICAN_REPUBLIC = 0x1c0a,
1732    TT_MS_LANGID_SPANISH_VENEZUELA = 0x200a,
1733    TT_MS_LANGID_SPANISH_COLOMBIA = 0x240a,
1734    TT_MS_LANGID_SPANISH_PERU = 0x280a,
1735    TT_MS_LANGID_SPANISH_ARGENTINA = 0x2c0a,
1736    TT_MS_LANGID_SPANISH_ECUADOR = 0x300a,
1737    TT_MS_LANGID_SPANISH_CHILE = 0x340a,
1738    TT_MS_LANGID_SPANISH_URUGUAY = 0x380a,
1739    TT_MS_LANGID_SPANISH_PARAGUAY = 0x3c0a,
1740    TT_MS_LANGID_SPANISH_BOLIVIA = 0x400a,
1741    TT_MS_LANGID_SPANISH_EL_SALVADOR = 0x440a,
1742    TT_MS_LANGID_SPANISH_HONDURAS = 0x480a,
1743    TT_MS_LANGID_SPANISH_NICARAGUA = 0x4c0a,
1744    TT_MS_LANGID_SPANISH_PUERTO_RICO = 0x500a,
1745    TT_MS_LANGID_SPANISH_UNITED_STATES = 0x540a,
1746    TT_MS_LANGID_SPANISH_LATIN_AMERICA = 0xE40aU,
1747    TT_MS_LANGID_FINNISH_FINLAND = 0x040b,
1748    TT_MS_LANGID_FRENCH_FRANCE = 0x040c,
1749    TT_MS_LANGID_FRENCH_BELGIUM = 0x080c,
1750    TT_MS_LANGID_FRENCH_CANADA = 0x0c0c,
1751    TT_MS_LANGID_FRENCH_SWITZERLAND = 0x100c,
1752    TT_MS_LANGID_FRENCH_LUXEMBOURG = 0x140c,
1753    TT_MS_LANGID_FRENCH_MONACO = 0x180c,
1754    TT_MS_LANGID_FRENCH_WEST_INDIES = 0x1c0c,
1755    TT_MS_LANGID_FRENCH_REUNION = 0x200c,
1756    TT_MS_LANGID_FRENCH_CONGO = 0x240c,
1757    TT_MS_LANGID_FRENCH_ZAIRE = TT_MS_LANGID_FRENCH_CONGO,
1758    TT_MS_LANGID_FRENCH_SENEGAL = 0x280c,
1759    TT_MS_LANGID_FRENCH_CAMEROON = 0x2c0c,
1760    TT_MS_LANGID_FRENCH_COTE_D_IVOIRE = 0x300c,
1761    TT_MS_LANGID_FRENCH_MALI = 0x340c,
1762    TT_MS_LANGID_FRENCH_MOROCCO = 0x380c,
1763    TT_MS_LANGID_FRENCH_HAITI = 0x3c0c,
1764    TT_MS_LANGID_FRENCH_NORTH_AFRICA = 0xE40cU,
1765    TT_MS_LANGID_HEBREW_ISRAEL = 0x040d,
1766    TT_MS_LANGID_HUNGARIAN_HUNGARY = 0x040e,
1767    TT_MS_LANGID_ICELANDIC_ICELAND = 0x040f,
1768    TT_MS_LANGID_ITALIAN_ITALY = 0x0410,
1769    TT_MS_LANGID_ITALIAN_SWITZERLAND = 0x0810,
1770    TT_MS_LANGID_JAPANESE_JAPAN = 0x0411,
1771    TT_MS_LANGID_KOREAN_EXTENDED_WANSUNG_KOREA = 0x0412,
1772    TT_MS_LANGID_KOREAN_JOHAB_KOREA = 0x0812,
1773    TT_MS_LANGID_DUTCH_NETHERLANDS = 0x0413,
1774    TT_MS_LANGID_DUTCH_BELGIUM = 0x0813,
1775    TT_MS_LANGID_NORWEGIAN_NORWAY_BOKMAL = 0x0414,
1776    TT_MS_LANGID_NORWEGIAN_NORWAY_NYNORSK = 0x0814,
1777    TT_MS_LANGID_POLISH_POLAND = 0x0415,
1778    TT_MS_LANGID_PORTUGUESE_BRAZIL = 0x0416,
1779    TT_MS_LANGID_PORTUGUESE_PORTUGAL = 0x0816,
1780    TT_MS_LANGID_RHAETO_ROMANIC_SWITZERLAND = 0x0417,
1781    TT_MS_LANGID_ROMANIAN_ROMANIA = 0x0418,
1782    TT_MS_LANGID_MOLDAVIAN_MOLDAVIA = 0x0818,
1783    TT_MS_LANGID_RUSSIAN_RUSSIA = 0x0419,
1784    TT_MS_LANGID_RUSSIAN_MOLDAVIA = 0x0819,
1785    TT_MS_LANGID_CROATIAN_CROATIA = 0x041a,
1786    TT_MS_LANGID_SERBIAN_SERBIA_LATIN = 0x081a,
1787    TT_MS_LANGID_SERBIAN_SERBIA_CYRILLIC = 0x0c1a,
1788    TT_MS_LANGID_CROATIAN_BOSNIA_HERZEGOVINA = 0x101a,
1789    TT_MS_LANGID_BOSNIAN_BOSNIA_HERZEGOVINA = 0x141a,
1790    TT_MS_LANGID_SERBIAN_BOSNIA_HERZ_LATIN = 0x181a,
1791    TT_MS_LANGID_SERBIAN_BOSNIA_HERZ_CYRILLIC = 0x181a,
1792    TT_MS_LANGID_SLOVAK_SLOVAKIA = 0x041b,
1793    TT_MS_LANGID_ALBANIAN_ALBANIA = 0x041c,
1794    TT_MS_LANGID_SWEDISH_SWEDEN = 0x041d,
1795    TT_MS_LANGID_SWEDISH_FINLAND = 0x081d,
1796    TT_MS_LANGID_THAI_THAILAND = 0x041e,
1797    TT_MS_LANGID_TURKISH_TURKEY = 0x041f,
1798    TT_MS_LANGID_URDU_PAKISTAN = 0x0420,
1799    TT_MS_LANGID_URDU_INDIA = 0x0820,
1800    TT_MS_LANGID_INDONESIAN_INDONESIA = 0x0421,
1801    TT_MS_LANGID_UKRAINIAN_UKRAINE = 0x0422,
1802    TT_MS_LANGID_BELARUSIAN_BELARUS = 0x0423,
1803    TT_MS_LANGID_SLOVENE_SLOVENIA = 0x0424,
1804    TT_MS_LANGID_ESTONIAN_ESTONIA = 0x0425,
1805    TT_MS_LANGID_LATVIAN_LATVIA = 0x0426,
1806    TT_MS_LANGID_LITHUANIAN_LITHUANIA = 0x0427,
1807    TT_MS_LANGID_CLASSIC_LITHUANIAN_LITHUANIA = 0x0827,
1808    TT_MS_LANGID_TAJIK_TAJIKISTAN = 0x0428,
1809    TT_MS_LANGID_FARSI_IRAN = 0x0429,
1810    TT_MS_LANGID_VIETNAMESE_VIET_NAM = 0x042a,
1811    TT_MS_LANGID_ARMENIAN_ARMENIA = 0x042b,
1812    TT_MS_LANGID_AZERI_AZERBAIJAN_LATIN = 0x042c,
1813    TT_MS_LANGID_AZERI_AZERBAIJAN_CYRILLIC = 0x082c,
1814    TT_MS_LANGID_BASQUE_SPAIN = 0x042d,
1815    TT_MS_LANGID_SORBIAN_GERMANY = 0x042e,
1816    TT_MS_LANGID_MACEDONIAN_MACEDONIA = 0x042f,
1817    TT_MS_LANGID_SUTU_SOUTH_AFRICA = 0x0430,
1818    TT_MS_LANGID_TSONGA_SOUTH_AFRICA = 0x0431,
1819    TT_MS_LANGID_TSWANA_SOUTH_AFRICA = 0x0432,
1820    TT_MS_LANGID_VENDA_SOUTH_AFRICA = 0x0433,
1821    TT_MS_LANGID_XHOSA_SOUTH_AFRICA = 0x0434,
1822    TT_MS_LANGID_ZULU_SOUTH_AFRICA = 0x0435,
1823    TT_MS_LANGID_AFRIKAANS_SOUTH_AFRICA = 0x0436,
1824    TT_MS_LANGID_GEORGIAN_GEORGIA = 0x0437,
1825    TT_MS_LANGID_FAEROESE_FAEROE_ISLANDS = 0x0438,
1826    TT_MS_LANGID_HINDI_INDIA = 0x0439,
1827    TT_MS_LANGID_MALTESE_MALTA = 0x043a,
1828    TT_MS_LANGID_SAMI_NORTHERN_NORWAY = 0x043b,
1829    TT_MS_LANGID_SAMI_NORTHERN_SWEDEN = 0x083b,
1830    TT_MS_LANGID_SAMI_NORTHERN_FINLAND = 0x0C3b,
1831    TT_MS_LANGID_SAMI_LULE_NORWAY = 0x103b,
1832    TT_MS_LANGID_SAMI_LULE_SWEDEN = 0x143b,
1833    TT_MS_LANGID_SAMI_SOUTHERN_NORWAY = 0x183b,
1834    TT_MS_LANGID_SAMI_SOUTHERN_SWEDEN = 0x1C3b,
1835    TT_MS_LANGID_SAMI_SKOLT_FINLAND = 0x203b,
1836    TT_MS_LANGID_SAMI_INARI_FINLAND = 0x243b,
1837    TT_MS_LANGID_SAAMI_LAPONIA = 0x043b,
1838    TT_MS_LANGID_SCOTTISH_GAELIC_UNITED_KINGDOM = 0x083c,
1839    TT_MS_LANGID_IRISH_GAELIC_IRELAND = 0x043c,
1840    TT_MS_LANGID_YIDDISH_GERMANY = 0x043d,
1841    TT_MS_LANGID_MALAY_MALAYSIA = 0x043e,
1842    TT_MS_LANGID_MALAY_BRUNEI_DARUSSALAM = 0x083e,
1843    TT_MS_LANGID_KAZAK_KAZAKSTAN = 0x043f,
1844    TT_MS_LANGID_KIRGHIZ_KIRGHIZSTAN  = 0x0440,
1845    TT_MS_LANGID_KIRGHIZ_KIRGHIZ_REPUBLIC = TT_MS_LANGID_KIRGHIZ_KIRGHIZSTAN,
1846    TT_MS_LANGID_SWAHILI_KENYA = 0x0441,
1847    TT_MS_LANGID_TURKMEN_TURKMENISTAN = 0x0442,
1848    TT_MS_LANGID_UZBEK_UZBEKISTAN_LATIN = 0x0443,
1849    TT_MS_LANGID_UZBEK_UZBEKISTAN_CYRILLIC = 0x0843,
1850    TT_MS_LANGID_TATAR_TATARSTAN = 0x0444,
1851    TT_MS_LANGID_BENGALI_INDIA = 0x0445,
1852    TT_MS_LANGID_BENGALI_BANGLADESH = 0x0845,
1853    TT_MS_LANGID_PUNJABI_INDIA = 0x0446,
1854    TT_MS_LANGID_PUNJABI_ARABIC_PAKISTAN = 0x0846,
1855    TT_MS_LANGID_GUJARATI_INDIA = 0x0447,
1856    TT_MS_LANGID_ORIYA_INDIA = 0x0448,
1857    TT_MS_LANGID_TAMIL_INDIA = 0x0449,
1858    TT_MS_LANGID_TELUGU_INDIA = 0x044a,
1859    TT_MS_LANGID_KANNADA_INDIA = 0x044b,
1860    TT_MS_LANGID_MALAYALAM_INDIA = 0x044c,
1861    TT_MS_LANGID_ASSAMESE_INDIA = 0x044d,
1862    TT_MS_LANGID_MARATHI_INDIA = 0x044e,
1863    TT_MS_LANGID_SANSKRIT_INDIA = 0x044f,
1864    TT_MS_LANGID_MONGOLIAN_MONGOLIA = 0x0450,
1865    TT_MS_LANGID_MONGOLIAN_MONGOLIA_MONGOLIAN = 0x0850,
1866    TT_MS_LANGID_TIBETAN_CHINA = 0x0451,
1867    TT_MS_LANGID_DZONGHKA_BHUTAN = 0x0851,
1868    TT_MS_LANGID_TIBETAN_BHUTAN = TT_MS_LANGID_DZONGHKA_BHUTAN,
1869    TT_MS_LANGID_WELSH_WALES = 0x0452,
1870    TT_MS_LANGID_KHMER_CAMBODIA = 0x0453,
1871    TT_MS_LANGID_LAO_LAOS = 0x0454,
1872    TT_MS_LANGID_BURMESE_MYANMAR = 0x0455,
1873    TT_MS_LANGID_GALICIAN_SPAIN = 0x0456,
1874    TT_MS_LANGID_KONKANI_INDIA = 0x0457,
1875    TT_MS_LANGID_MANIPURI_INDIA = 0x0458,
1876    TT_MS_LANGID_SINDHI_INDIA = 0x0459,
1877    TT_MS_LANGID_SINDHI_PAKISTAN = 0x0859,
1878    TT_MS_LANGID_SYRIAC_SYRIA = 0x045a,
1879    TT_MS_LANGID_SINHALESE_SRI_LANKA = 0x045b,
1880    TT_MS_LANGID_CHEROKEE_UNITED_STATES = 0x045c,
1881    TT_MS_LANGID_INUKTITUT_CANADA = 0x045d,
1882    TT_MS_LANGID_AMHARIC_ETHIOPIA = 0x045e,
1883    TT_MS_LANGID_TAMAZIGHT_MOROCCO = 0x045f,
1884    TT_MS_LANGID_TAMAZIGHT_MOROCCO_LATIN = 0x085f,
1885    TT_MS_LANGID_KASHMIRI_PAKISTAN = 0x0460,
1886    TT_MS_LANGID_KASHMIRI_SASIA = 0x0860,
1887    TT_MS_LANGID_KASHMIRI_INDIA = TT_MS_LANGID_KASHMIRI_SASIA,
1888    TT_MS_LANGID_NEPALI_NEPAL = 0x0461,
1889    TT_MS_LANGID_NEPALI_INDIA = 0x0861,
1890    TT_MS_LANGID_FRISIAN_NETHERLANDS = 0x0462,
1891    TT_MS_LANGID_PASHTO_AFGHANISTAN = 0x0463,
1892    TT_MS_LANGID_FILIPINO_PHILIPPINES = 0x0464,
1893    TT_MS_LANGID_DHIVEHI_MALDIVES = 0x0465,
1894    TT_MS_LANGID_DIVEHI_MALDIVES = TT_MS_LANGID_DHIVEHI_MALDIVES,
1895    TT_MS_LANGID_EDO_NIGERIA = 0x0466,
1896    TT_MS_LANGID_FULFULDE_NIGERIA = 0x0467,
1897    TT_MS_LANGID_HAUSA_NIGERIA = 0x0468,
1898    TT_MS_LANGID_IBIBIO_NIGERIA = 0x0469,
1899    TT_MS_LANGID_YORUBA_NIGERIA = 0x046a,
1900    TT_MS_LANGID_QUECHUA_BOLIVIA = 0x046b,
1901    TT_MS_LANGID_QUECHUA_ECUADOR = 0x086b,
1902    TT_MS_LANGID_QUECHUA_PERU = 0x0c6b,
1903    TT_MS_LANGID_SEPEDI_SOUTH_AFRICA = 0x046c,
1904    TT_MS_LANGID_SOTHO_SOUTHERN_SOUTH_AFRICA = TT_MS_LANGID_SEPEDI_SOUTH_AFRICA,
1905    TT_MS_LANGID_IGBO_NIGERIA = 0x0470,
1906    TT_MS_LANGID_KANURI_NIGERIA = 0x0471,
1907    TT_MS_LANGID_OROMO_ETHIOPIA = 0x0472,
1908    TT_MS_LANGID_TIGRIGNA_ETHIOPIA = 0x0473,
1909    TT_MS_LANGID_TIGRIGNA_ERYTHREA = 0x0873,
1910    TT_MS_LANGID_TIGRIGNA_ERYTREA = TT_MS_LANGID_TIGRIGNA_ERYTHREA,
1911    TT_MS_LANGID_GUARANI_PARAGUAY = 0x0474,
1912    TT_MS_LANGID_HAWAIIAN_UNITED_STATES = 0x0475,
1913    TT_MS_LANGID_LATIN = 0x0476,
1914    TT_MS_LANGID_SOMALI_SOMALIA = 0x0477,
1915    TT_MS_LANGID_YI_CHINA = 0x0478,
1916    TT_MS_LANGID_PAPIAMENTU_NETHERLANDS_ANTILLES = 0x0479,
1917    TT_MS_LANGID_UIGHUR_CHINA = 0x0480,
1918    TT_MS_LANGID_MAORI_NEW_ZEALAND = 0x0481,
1919}
1920
1921enum {
1922    TT_NAME_ID_COPYRIGHT = 0,
1923    TT_NAME_ID_FONT_FAMILY = 1,
1924    TT_NAME_ID_FONT_SUBFAMILY = 2,
1925    TT_NAME_ID_UNIQUE_ID = 3,
1926    TT_NAME_ID_FULL_NAME = 4,
1927    TT_NAME_ID_VERSION_STRING = 5,
1928    TT_NAME_ID_PS_NAME = 6,
1929    TT_NAME_ID_TRADEMARK = 7,
1930    TT_NAME_ID_MANUFACTURER = 8,
1931    TT_NAME_ID_DESIGNER = 9,
1932    TT_NAME_ID_DESCRIPTION = 10,
1933    TT_NAME_ID_VENDOR_URL = 11,
1934    TT_NAME_ID_DESIGNER_URL = 12,
1935    TT_NAME_ID_LICENSE = 13,
1936    TT_NAME_ID_LICENSE_URL = 14,
1937    TT_NAME_ID_PREFERRED_FAMILY = 16,
1938    TT_NAME_ID_PREFERRED_SUBFAMILY = 17,
1939    TT_NAME_ID_MAC_FULL_NAME = 18,
1940    TT_NAME_ID_SAMPLE_TEXT = 19,
1941    TT_NAME_ID_CID_FINDFONT_NAME = 20,
1942    TT_NAME_ID_WWS_FAMILY = 21,
1943    TT_NAME_ID_WWS_SUBFAMILY = 22,
1944}
1945
1946enum {
1947    TT_UCR_BASIC_LATIN = 1 <<  0,
1948    TT_UCR_LATIN1_SUPPLEMENT = 1 <<  1,
1949    TT_UCR_LATIN_EXTENDED_A = 1 <<  2,
1950    TT_UCR_LATIN_EXTENDED_B = 1 <<  3,
1951    TT_UCR_IPA_EXTENSIONS = 1 <<  4,
1952    TT_UCR_SPACING_MODIFIER = 1 <<  5,
1953    TT_UCR_COMBINING_DIACRITICS = 1 <<  6,
1954    TT_UCR_GREEK = 1 <<  7,
1955    TT_UCR_COPTIC = 1 <<  8,
1956    TT_UCR_CYRILLIC = 1 <<  9,
1957    TT_UCR_ARMENIAN = 1 << 10,
1958    TT_UCR_HEBREW = 1 << 11,
1959    TT_UCR_VAI = 1 << 12,
1960    TT_UCR_ARABIC = 1 << 13,
1961    TT_UCR_NKO = 1 << 14,
1962    TT_UCR_DEVANAGARI = 1 << 15,
1963    TT_UCR_BENGALI = 1 << 16,
1964    TT_UCR_GURMUKHI = 1 << 17,
1965    TT_UCR_GUJARATI = 1 << 18,
1966    TT_UCR_ORIYA = 1 << 19,
1967    TT_UCR_TAMIL = 1 << 20,
1968    TT_UCR_TELUGU = 1 << 21,
1969    TT_UCR_KANNADA = 1 << 22,
1970    TT_UCR_MALAYALAM = 1 << 23,
1971    TT_UCR_THAI = 1 << 24,
1972    TT_UCR_LAO = 1 << 25,
1973    TT_UCR_GEORGIAN = 1 << 26,
1974    TT_UCR_BALINESE = 1 << 27,
1975    TT_UCR_HANGUL_JAMO = 1 << 28,
1976    TT_UCR_LATIN_EXTENDED_ADDITIONAL = 1 << 29,
1977    TT_UCR_GREEK_EXTENDED = 1 << 30,
1978    TT_UCR_SUPERSCRIPTS_SUBSCRIPTS = 1 <<  0,
1979    TT_UCR_CURRENCY_SYMBOLS = 1 <<  1,
1980    TT_UCR_COMBINING_DIACRITICS_SYMB = 1 <<  2,
1981    TT_UCR_LETTERLIKE_SYMBOLS = 1 <<  3,
1982    TT_UCR_NUMBER_FORMS = 1 <<  4,
1983    TT_UCR_ARROWS = 1 <<  5,
1984    TT_UCR_MATHEMATICAL_OPERATORS = 1 <<  6,
1985    TT_UCR_MISCELLANEOUS_TECHNICAL = 1 <<  7,
1986    TT_UCR_CONTROL_PICTURES = 1 <<  8,
1987    TT_UCR_OCR = 1 <<  9,
1988    TT_UCR_ENCLOSED_ALPHANUMERICS = 1 << 10,
1989    TT_UCR_BOX_DRAWING = 1 << 11,
1990    TT_UCR_BLOCK_ELEMENTS = 1 << 12,
1991    TT_UCR_GEOMETRIC_SHAPES = 1 << 13,
1992    TT_UCR_MISCELLANEOUS_SYMBOLS = 1 << 14,
1993    TT_UCR_DINGBATS = 1 << 15,
1994    TT_UCR_CJK_SYMBOLS = 1 << 16,
1995    TT_UCR_HIRAGANA = 1 << 17,
1996    TT_UCR_KATAKANA = 1 << 18,
1997    TT_UCR_BOPOMOFO = 1 << 19,
1998    TT_UCR_HANGUL_COMPATIBILITY_JAMO = 1 << 20,
1999    TT_UCR_CJK_MISC = 1 << 21,
2000    TT_UCR_ENCLOSED_CJK_LETTERS_MONTHS = 1 << 22,
2001    TT_UCR_CJK_COMPATIBILITY = 1 << 23,
2002    TT_UCR_HANGUL = 1 << 24,
2003    TT_UCR_SURROGATES = 1 << 25,
2004    TT_UCR_NON_PLANE_0 = TT_UCR_SURROGATES,
2005    TT_UCR_PHOENICIAN = 1 << 26,
2006    TT_UCR_CJK_UNIFIED_IDEOGRAPHS = 1 << 27,
2007    TT_UCR_PRIVATE_USE = 1 << 28,
2008    TT_UCR_CJK_COMPATIBILITY_IDEOGRAPHS = 1 << 29,
2009    TT_UCR_ALPHABETIC_PRESENTATION_FORMS = 1 << 30,
2010    TT_UCR_ARABIC_PRESENTATIONS_A = 1 << 31,
2011    TT_UCR_COMBINING_HALF_MARKS = 1 <<  0,
2012    TT_UCR_CJK_COMPATIBILITY_FORMS = 1 <<  1,
2013    TT_UCR_SMALL_FORM_VARIANTS = 1 <<  2,
2014    TT_UCR_ARABIC_PRESENTATIONS_B = 1 <<  3,
2015    TT_UCR_HALFWIDTH_FULLWIDTH_FORMS = 1 <<  4,
2016    TT_UCR_SPECIALS = 1 <<  5,
2017    TT_UCR_TIBETAN = 1 <<  6,
2018    TT_UCR_SYRIAC = 1 <<  7,
2019    TT_UCR_THAANA = 1 <<  8,
2020    TT_UCR_SINHALA = 1 <<  9,
2021    TT_UCR_MYANMAR = 1 << 10,
2022    TT_UCR_ETHIOPIC = 1 << 11,
2023    TT_UCR_CHEROKEE = 1 << 12,
2024    TT_UCR_CANADIAN_ABORIGINAL_SYLLABICS = 1 << 13,
2025    TT_UCR_OGHAM = 1 << 14,
2026    TT_UCR_RUNIC = 1 << 15,
2027    TT_UCR_KHMER = 1 << 16,
2028    TT_UCR_MONGOLIAN = 1 << 17,
2029    TT_UCR_BRAILLE = 1 << 18,
2030    TT_UCR_YI = 1 << 19,
2031    TT_UCR_PHILIPPINE = 1 << 20,
2032    TT_UCR_OLD_ITALIC = 1 << 21,
2033    TT_UCR_GOTHIC = 1 << 22,
2034    TT_UCR_DESERET = 1 << 23,
2035    TT_UCR_MUSICAL_SYMBOLS = 1 << 24,
2036    TT_UCR_MATH_ALPHANUMERIC_SYMBOLS = 1 << 25,
2037    TT_UCR_PRIVATE_USE_SUPPLEMENTARY = 1 << 26,
2038    TT_UCR_VARIATION_SELECTORS = 1 << 27,
2039    TT_UCR_TAGS = 1 << 28,
2040    TT_UCR_LIMBU = 1 << 29,
2041    TT_UCR_TAI_LE = 1 << 30,
2042    TT_UCR_NEW_TAI_LUE = 1 << 31,
2043    TT_UCR_BUGINESE = 1 <<  0,
2044    TT_UCR_GLAGOLITIC = 1 <<  1,
2045    TT_UCR_TIFINAGH = 1 <<  2,
2046    TT_UCR_YIJING = 1 <<  3,
2047    TT_UCR_SYLOTI_NAGRI = 1 <<  4,
2048    TT_UCR_LINEAR_B = 1 <<  5,
2049    TT_UCR_ANCIENT_GREEK_NUMBERS = 1 <<  6,
2050    TT_UCR_UGARITIC = 1 <<  7,
2051    TT_UCR_OLD_PERSIAN = 1 <<  8,
2052    TT_UCR_SHAVIAN = 1 <<  9,
2053    TT_UCR_OSMANYA = 1 << 10,
2054    TT_UCR_CYPRIOT_SYLLABARY = 1 << 11,
2055    TT_UCR_KHAROSHTHI = 1 << 12,
2056    TT_UCR_TAI_XUAN_JING = 1 << 13,
2057    TT_UCR_CUNEIFORM = 1 << 14,
2058    TT_UCR_COUNTING_ROD_NUMERALS = 1 << 15,
2059    TT_UCR_SUNDANESE = 1 << 16,
2060    TT_UCR_LEPCHA = 1 << 17,
2061    TT_UCR_OL_CHIKI = 1 << 18,
2062    TT_UCR_SAURASHTRA = 1 << 19,
2063    TT_UCR_KAYAH_LI = 1 << 20,
2064    TT_UCR_REJANG = 1 << 21,
2065    TT_UCR_CHAM = 1 << 22,
2066    TT_UCR_ANCIENT_SYMBOLS = 1 << 23,
2067    TT_UCR_PHAISTOS_DISC = 1 << 24,
2068    TT_UCR_OLD_ANATOLIAN = 1 << 25,
2069    TT_UCR_GAME_TILES = 1 << 26,
2070}
2071
2072// tttables.h
2073struct TT_Header {
2074    FT_Fixed Table_Version;
2075    FT_Fixed Font_Revision;
2076    FT_Long CheckSum_Adjust;
2077    FT_Long Magic_Number;
2078    FT_UShort Flags;
2079    FT_UShort Units_Per_EM;
2080    FT_Long[2] Created;
2081    FT_Long[2] Modified;
2082    FT_Short xMin;
2083    FT_Short yMin;
2084    FT_Short xMax;
2085    FT_Short yMax;
2086    FT_UShort Mac_Style;
2087    FT_UShort Lowest_Rec_PPEM;
2088    FT_Short Font_Direction;
2089    FT_Short Index_To_Loc_Format;
2090    FT_Short Glyph_Data_Format;
2091}
2092
2093struct TT_HoriHeader {
2094    FT_Fixed Version;
2095    FT_Short Ascender;
2096    FT_Short Descender;
2097    FT_Short Line_Gap;
2098    FT_UShort advance_Width_Max;
2099    FT_Short min_Left_Side_Bearing;
2100    FT_Short min_Right_Side_Bearing;
2101    FT_Short xMax_Extent;
2102    FT_Short caret_Slope_Rise;
2103    FT_Short caret_Slope_Run;
2104    FT_Short caret_Offset;
2105    FT_Short[4] Reserved;
2106    FT_Short metric_Data_Format;
2107    FT_UShort number_Of_HMetrics;
2108    void* long_metrics;
2109    void* short_metrics;
2110}
2111
2112struct TT_VertHeader {
2113    FT_Fixed Version;
2114    FT_Short Ascender;
2115    FT_Short Descender;
2116    FT_Short Line_Gap;
2117    FT_UShort advance_Height_Max;
2118    FT_Short min_Top_Side_Bearing;
2119    FT_Short min_Bottom_Side_Bearing;
2120    FT_Short yMax_Extent;
2121    FT_Short caret_Slope_Rise;
2122    FT_Short caret_Slope_Run;
2123    FT_Short caret_Offset;
2124    FT_Short[4] Reserved;
2125    FT_Short metric_Data_Format;
2126    FT_UShort number_Of_VMetrics;
2127    void* long_metrics;
2128    void* short_metrics;
2129}
2130
2131struct TT_OS2 {
2132    FT_UShort _version;
2133    FT_Short xAvgCharWidth;
2134    FT_UShort usWeightClass;
2135    FT_UShort usWidthClass;
2136    FT_UShort fsType;
2137    FT_Short ySubscriptXSize;
2138    FT_Short ySubscriptYSize;
2139    FT_Short ySubscriptXOffset;
2140    FT_Short ySubscriptYOffset;
2141    FT_Short ySuperscriptXSize;
2142    FT_Short ySuperscriptYSize;
2143    FT_Short ySuperscriptXOffset;
2144    FT_Short ySuperscriptYOffset;
2145    FT_Short yStrikeoutSize;
2146    FT_Short yStrikeoutPosition;
2147    FT_Short sFamilyClass;
2148    FT_Byte[10] panose;
2149    FT_ULong ulUnicodeRange1;
2150    FT_ULong ulUnicodeRange2;
2151    FT_ULong ulUnicodeRange3;
2152    FT_ULong ulUnicodeRange4;
2153    FT_Char[4] achVendID;
2154    FT_UShort fsSelection;
2155    FT_UShort usFirstCharIndex;
2156    FT_UShort usLastCharIndex;
2157    FT_Short sTypoAscender;
2158    FT_Short sTypoDescender;
2159    FT_Short sTypoLineGap;
2160    FT_UShort usWinAscent;
2161    FT_UShort usWinDescent;
2162    FT_ULong ulCodePageRange1;
2163    FT_ULong ulCodePageRange2;
2164    FT_Short sxHeight;
2165    FT_Short sCapHeight;
2166    FT_UShort usDefaultChar;
2167    FT_UShort usBreakChar;
2168    FT_UShort usMaxContext;
2169    FT_UShort usLowerOpticalPointSize;
2170    FT_UShort usUpperOpticalPointSize;
2171}
2172
2173struct TT_Postscript {
2174    FT_Fixed FormatType;
2175    FT_Fixed italicAngle;
2176    FT_Short underlinePosition;
2177    FT_Short underlineThickness;
2178    FT_ULong isFixedPitch;
2179    FT_ULong minMemType42;
2180    FT_ULong maxMemType42;
2181    FT_ULong minMemType1;
2182    FT_ULong maxMemType1;
2183}
2184
2185struct TT_PCLT {
2186    FT_Fixed Version;
2187    FT_ULong FontNumber;
2188    FT_UShort Pitch;
2189    FT_UShort xHeight;
2190    FT_UShort Style;
2191    FT_UShort TypeFamily;
2192    FT_UShort CapHeight;
2193    FT_UShort SymbolSet;
2194    FT_Char[16] TypeFace;
2195    FT_Char[8] CharacterComplement;
2196    FT_Char[6] FileName;
2197    FT_Char StrokeWeight;
2198    FT_Char WidthType;
2199    FT_Byte SerifStyle;
2200    FT_Byte Reserved;
2201}
2202
2203struct TT_MaxProfile {
2204    FT_Fixed _version;
2205    FT_UShort numGlyphs;
2206    FT_UShort maxPoints;
2207    FT_UShort maxContours;
2208    FT_UShort maxCompositePoints;
2209    FT_UShort maxCompositeContours;
2210    FT_UShort maxZones;
2211    FT_UShort maxTwilightPoints;
2212    FT_UShort maxStorage;
2213    FT_UShort maxFunctionDefs;
2214    FT_UShort maxInstructionDefs;
2215    FT_UShort maxStackElements;
2216    FT_UShort maxSizeOfInstructions;
2217    FT_UShort maxComponentElements;
2218    FT_UShort maxComponentDepth;
2219}
2220
2221alias FT_Sfnt_Tag = int;
2222enum {
2223    FT_SFNT_HEAD,
2224    FT_SFNT_MAXP,
2225    FT_SFNT_OS2,
2226    FT_SFNT_HHEA,
2227    FT_SFNT_VHEA,
2228    FT_SFNT_POST,
2229    FT_SFNT_PCLT,
2230    FT_SFNT_MAX
2231}
Note: See TracBrowser for help on using the repository browser.