1*37da2899SCharles.Forsyth /***************************************************************************/ 2*37da2899SCharles.Forsyth /* */ 3*37da2899SCharles.Forsyth /* cfftypes.h */ 4*37da2899SCharles.Forsyth /* */ 5*37da2899SCharles.Forsyth /* Basic OpenType/CFF type definitions and interface (specification */ 6*37da2899SCharles.Forsyth /* only). */ 7*37da2899SCharles.Forsyth /* */ 8*37da2899SCharles.Forsyth /* Copyright 1996-2001, 2002 by */ 9*37da2899SCharles.Forsyth /* David Turner, Robert Wilhelm, and Werner Lemberg. */ 10*37da2899SCharles.Forsyth /* */ 11*37da2899SCharles.Forsyth /* This file is part of the FreeType project, and may only be used, */ 12*37da2899SCharles.Forsyth /* modified, and distributed under the terms of the FreeType project */ 13*37da2899SCharles.Forsyth /* license, LICENSE.TXT. By continuing to use, modify, or distribute */ 14*37da2899SCharles.Forsyth /* this file you indicate that you have read the license and */ 15*37da2899SCharles.Forsyth /* understand and accept it fully. */ 16*37da2899SCharles.Forsyth /* */ 17*37da2899SCharles.Forsyth /***************************************************************************/ 18*37da2899SCharles.Forsyth 19*37da2899SCharles.Forsyth 20*37da2899SCharles.Forsyth #ifndef __CFFTYPES_H__ 21*37da2899SCharles.Forsyth #define __CFFTYPES_H__ 22*37da2899SCharles.Forsyth 23*37da2899SCharles.Forsyth 24*37da2899SCharles.Forsyth #include <ft2build.h> 25*37da2899SCharles.Forsyth #include FT_FREETYPE_H 26*37da2899SCharles.Forsyth 27*37da2899SCharles.Forsyth 28*37da2899SCharles.Forsyth FT_BEGIN_HEADER 29*37da2899SCharles.Forsyth 30*37da2899SCharles.Forsyth 31*37da2899SCharles.Forsyth /*************************************************************************/ 32*37da2899SCharles.Forsyth /* */ 33*37da2899SCharles.Forsyth /* <Struct> */ 34*37da2899SCharles.Forsyth /* CFF_IndexRec */ 35*37da2899SCharles.Forsyth /* */ 36*37da2899SCharles.Forsyth /* <Description> */ 37*37da2899SCharles.Forsyth /* A structure used to model a CFF Index table. */ 38*37da2899SCharles.Forsyth /* */ 39*37da2899SCharles.Forsyth /* <Fields> */ 40*37da2899SCharles.Forsyth /* stream :: The source input stream. */ 41*37da2899SCharles.Forsyth /* */ 42*37da2899SCharles.Forsyth /* count :: The number of elements in the index. */ 43*37da2899SCharles.Forsyth /* */ 44*37da2899SCharles.Forsyth /* off_size :: The size in bytes of object offsets in index. */ 45*37da2899SCharles.Forsyth /* */ 46*37da2899SCharles.Forsyth /* data_offset :: The position of first data byte in the index's */ 47*37da2899SCharles.Forsyth /* bytes. */ 48*37da2899SCharles.Forsyth /* */ 49*37da2899SCharles.Forsyth /* offsets :: A table of element offsets in the index. */ 50*37da2899SCharles.Forsyth /* */ 51*37da2899SCharles.Forsyth /* bytes :: If the index is loaded in memory, its bytes. */ 52*37da2899SCharles.Forsyth /* */ 53*37da2899SCharles.Forsyth typedef struct CFF_IndexRec_ 54*37da2899SCharles.Forsyth { 55*37da2899SCharles.Forsyth FT_Stream stream; 56*37da2899SCharles.Forsyth FT_UInt count; 57*37da2899SCharles.Forsyth FT_Byte off_size; 58*37da2899SCharles.Forsyth FT_ULong data_offset; 59*37da2899SCharles.Forsyth 60*37da2899SCharles.Forsyth FT_ULong* offsets; 61*37da2899SCharles.Forsyth FT_Byte* bytes; 62*37da2899SCharles.Forsyth 63*37da2899SCharles.Forsyth } CFF_IndexRec, *CFF_Index; 64*37da2899SCharles.Forsyth 65*37da2899SCharles.Forsyth 66*37da2899SCharles.Forsyth typedef struct CFF_EncodingRec_ 67*37da2899SCharles.Forsyth { 68*37da2899SCharles.Forsyth FT_UInt format; 69*37da2899SCharles.Forsyth FT_ULong offset; 70*37da2899SCharles.Forsyth 71*37da2899SCharles.Forsyth FT_UInt count; 72*37da2899SCharles.Forsyth FT_UShort sids [256]; /* avoid dynamic allocations */ 73*37da2899SCharles.Forsyth FT_UShort codes[256]; 74*37da2899SCharles.Forsyth 75*37da2899SCharles.Forsyth } CFF_EncodingRec, *CFF_Encoding; 76*37da2899SCharles.Forsyth 77*37da2899SCharles.Forsyth 78*37da2899SCharles.Forsyth typedef struct CFF_CharsetRec_ 79*37da2899SCharles.Forsyth { 80*37da2899SCharles.Forsyth 81*37da2899SCharles.Forsyth FT_UInt format; 82*37da2899SCharles.Forsyth FT_ULong offset; 83*37da2899SCharles.Forsyth 84*37da2899SCharles.Forsyth FT_UShort* sids; 85*37da2899SCharles.Forsyth 86*37da2899SCharles.Forsyth } CFF_CharsetRec, *CFF_Charset; 87*37da2899SCharles.Forsyth 88*37da2899SCharles.Forsyth 89*37da2899SCharles.Forsyth typedef struct CFF_FontRecDictRec_ 90*37da2899SCharles.Forsyth { 91*37da2899SCharles.Forsyth FT_UInt version; 92*37da2899SCharles.Forsyth FT_UInt notice; 93*37da2899SCharles.Forsyth FT_UInt copyright; 94*37da2899SCharles.Forsyth FT_UInt full_name; 95*37da2899SCharles.Forsyth FT_UInt family_name; 96*37da2899SCharles.Forsyth FT_UInt weight; 97*37da2899SCharles.Forsyth FT_Bool is_fixed_pitch; 98*37da2899SCharles.Forsyth FT_Fixed italic_angle; 99*37da2899SCharles.Forsyth FT_Pos underline_position; 100*37da2899SCharles.Forsyth FT_Pos underline_thickness; 101*37da2899SCharles.Forsyth FT_Int paint_type; 102*37da2899SCharles.Forsyth FT_Int charstring_type; 103*37da2899SCharles.Forsyth FT_Matrix font_matrix; 104*37da2899SCharles.Forsyth FT_UShort units_per_em; 105*37da2899SCharles.Forsyth FT_Vector font_offset; 106*37da2899SCharles.Forsyth FT_ULong unique_id; 107*37da2899SCharles.Forsyth FT_BBox font_bbox; 108*37da2899SCharles.Forsyth FT_Pos stroke_width; 109*37da2899SCharles.Forsyth FT_ULong charset_offset; 110*37da2899SCharles.Forsyth FT_ULong encoding_offset; 111*37da2899SCharles.Forsyth FT_ULong charstrings_offset; 112*37da2899SCharles.Forsyth FT_ULong private_offset; 113*37da2899SCharles.Forsyth FT_ULong private_size; 114*37da2899SCharles.Forsyth FT_Long synthetic_base; 115*37da2899SCharles.Forsyth FT_UInt embedded_postscript; 116*37da2899SCharles.Forsyth FT_UInt base_font_name; 117*37da2899SCharles.Forsyth FT_UInt postscript; 118*37da2899SCharles.Forsyth 119*37da2899SCharles.Forsyth /* these should only be used for the top-level font dictionary */ 120*37da2899SCharles.Forsyth FT_UInt cid_registry; 121*37da2899SCharles.Forsyth FT_UInt cid_ordering; 122*37da2899SCharles.Forsyth FT_ULong cid_supplement; 123*37da2899SCharles.Forsyth 124*37da2899SCharles.Forsyth FT_Long cid_font_version; 125*37da2899SCharles.Forsyth FT_Long cid_font_revision; 126*37da2899SCharles.Forsyth FT_Long cid_font_type; 127*37da2899SCharles.Forsyth FT_Long cid_count; 128*37da2899SCharles.Forsyth FT_ULong cid_uid_base; 129*37da2899SCharles.Forsyth FT_ULong cid_fd_array_offset; 130*37da2899SCharles.Forsyth FT_ULong cid_fd_select_offset; 131*37da2899SCharles.Forsyth FT_UInt cid_font_name; 132*37da2899SCharles.Forsyth 133*37da2899SCharles.Forsyth } CFF_FontRecDictRec, *CFF_FontRecDict; 134*37da2899SCharles.Forsyth 135*37da2899SCharles.Forsyth 136*37da2899SCharles.Forsyth typedef struct CFF_PrivateRec_ 137*37da2899SCharles.Forsyth { 138*37da2899SCharles.Forsyth FT_Byte num_blue_values; 139*37da2899SCharles.Forsyth FT_Byte num_other_blues; 140*37da2899SCharles.Forsyth FT_Byte num_family_blues; 141*37da2899SCharles.Forsyth FT_Byte num_family_other_blues; 142*37da2899SCharles.Forsyth 143*37da2899SCharles.Forsyth FT_Pos blue_values[14]; 144*37da2899SCharles.Forsyth FT_Pos other_blues[10]; 145*37da2899SCharles.Forsyth FT_Pos family_blues[14]; 146*37da2899SCharles.Forsyth FT_Pos family_other_blues[10]; 147*37da2899SCharles.Forsyth 148*37da2899SCharles.Forsyth FT_Fixed blue_scale; 149*37da2899SCharles.Forsyth FT_Pos blue_shift; 150*37da2899SCharles.Forsyth FT_Pos blue_fuzz; 151*37da2899SCharles.Forsyth FT_Pos standard_width; 152*37da2899SCharles.Forsyth FT_Pos standard_height; 153*37da2899SCharles.Forsyth 154*37da2899SCharles.Forsyth FT_Byte num_snap_widths; 155*37da2899SCharles.Forsyth FT_Byte num_snap_heights; 156*37da2899SCharles.Forsyth FT_Pos snap_widths[13]; 157*37da2899SCharles.Forsyth FT_Pos snap_heights[13]; 158*37da2899SCharles.Forsyth FT_Bool force_bold; 159*37da2899SCharles.Forsyth FT_Fixed force_bold_threshold; 160*37da2899SCharles.Forsyth FT_Int lenIV; 161*37da2899SCharles.Forsyth FT_Int language_group; 162*37da2899SCharles.Forsyth FT_Fixed expansion_factor; 163*37da2899SCharles.Forsyth FT_Long initial_random_seed; 164*37da2899SCharles.Forsyth FT_ULong local_subrs_offset; 165*37da2899SCharles.Forsyth FT_Pos default_width; 166*37da2899SCharles.Forsyth FT_Pos nominal_width; 167*37da2899SCharles.Forsyth 168*37da2899SCharles.Forsyth } CFF_PrivateRec, *CFF_Private; 169*37da2899SCharles.Forsyth 170*37da2899SCharles.Forsyth 171*37da2899SCharles.Forsyth typedef struct CFF_FDSelectRec_ 172*37da2899SCharles.Forsyth { 173*37da2899SCharles.Forsyth FT_Byte format; 174*37da2899SCharles.Forsyth FT_UInt range_count; 175*37da2899SCharles.Forsyth 176*37da2899SCharles.Forsyth /* that's the table, taken from the file `as is' */ 177*37da2899SCharles.Forsyth FT_Byte* data; 178*37da2899SCharles.Forsyth FT_UInt data_size; 179*37da2899SCharles.Forsyth 180*37da2899SCharles.Forsyth /* small cache for format 3 only */ 181*37da2899SCharles.Forsyth FT_UInt cache_first; 182*37da2899SCharles.Forsyth FT_UInt cache_count; 183*37da2899SCharles.Forsyth FT_Byte cache_fd; 184*37da2899SCharles.Forsyth 185*37da2899SCharles.Forsyth } CFF_FDSelectRec, *CFF_FDSelect; 186*37da2899SCharles.Forsyth 187*37da2899SCharles.Forsyth 188*37da2899SCharles.Forsyth /* A SubFont packs a font dict and a private dict together. They are */ 189*37da2899SCharles.Forsyth /* needed to support CID-keyed CFF fonts. */ 190*37da2899SCharles.Forsyth typedef struct CFF_SubFontRec_ 191*37da2899SCharles.Forsyth { 192*37da2899SCharles.Forsyth CFF_FontRecDictRec font_dict; 193*37da2899SCharles.Forsyth CFF_PrivateRec private_dict; 194*37da2899SCharles.Forsyth 195*37da2899SCharles.Forsyth CFF_IndexRec local_subrs_index; 196*37da2899SCharles.Forsyth FT_UInt num_local_subrs; 197*37da2899SCharles.Forsyth FT_Byte** local_subrs; 198*37da2899SCharles.Forsyth 199*37da2899SCharles.Forsyth } CFF_SubFontRec, *CFF_SubFont; 200*37da2899SCharles.Forsyth 201*37da2899SCharles.Forsyth 202*37da2899SCharles.Forsyth /* maximum number of sub-fonts in a CID-keyed file */ 203*37da2899SCharles.Forsyth #define CFF_MAX_CID_FONTS 16 204*37da2899SCharles.Forsyth 205*37da2899SCharles.Forsyth 206*37da2899SCharles.Forsyth typedef struct CFF_FontRec_ 207*37da2899SCharles.Forsyth { 208*37da2899SCharles.Forsyth FT_Stream stream; 209*37da2899SCharles.Forsyth FT_Memory memory; 210*37da2899SCharles.Forsyth FT_UInt num_faces; 211*37da2899SCharles.Forsyth FT_UInt num_glyphs; 212*37da2899SCharles.Forsyth 213*37da2899SCharles.Forsyth FT_Byte version_major; 214*37da2899SCharles.Forsyth FT_Byte version_minor; 215*37da2899SCharles.Forsyth FT_Byte header_size; 216*37da2899SCharles.Forsyth FT_Byte absolute_offsize; 217*37da2899SCharles.Forsyth 218*37da2899SCharles.Forsyth 219*37da2899SCharles.Forsyth CFF_IndexRec name_index; 220*37da2899SCharles.Forsyth CFF_IndexRec top_dict_index; 221*37da2899SCharles.Forsyth CFF_IndexRec string_index; 222*37da2899SCharles.Forsyth CFF_IndexRec global_subrs_index; 223*37da2899SCharles.Forsyth 224*37da2899SCharles.Forsyth CFF_EncodingRec encoding; 225*37da2899SCharles.Forsyth CFF_CharsetRec charset; 226*37da2899SCharles.Forsyth 227*37da2899SCharles.Forsyth CFF_IndexRec charstrings_index; 228*37da2899SCharles.Forsyth CFF_IndexRec font_dict_index; 229*37da2899SCharles.Forsyth CFF_IndexRec private_index; 230*37da2899SCharles.Forsyth CFF_IndexRec local_subrs_index; 231*37da2899SCharles.Forsyth 232*37da2899SCharles.Forsyth FT_String* font_name; 233*37da2899SCharles.Forsyth FT_UInt num_global_subrs; 234*37da2899SCharles.Forsyth FT_Byte** global_subrs; 235*37da2899SCharles.Forsyth 236*37da2899SCharles.Forsyth CFF_SubFontRec top_font; 237*37da2899SCharles.Forsyth FT_UInt num_subfonts; 238*37da2899SCharles.Forsyth CFF_SubFont subfonts[CFF_MAX_CID_FONTS]; 239*37da2899SCharles.Forsyth 240*37da2899SCharles.Forsyth CFF_FDSelectRec fd_select; 241*37da2899SCharles.Forsyth 242*37da2899SCharles.Forsyth /* interface to PostScript hinter */ 243*37da2899SCharles.Forsyth void* pshinter; 244*37da2899SCharles.Forsyth 245*37da2899SCharles.Forsyth /* interface to Postscript Names service */ 246*37da2899SCharles.Forsyth void* psnames; 247*37da2899SCharles.Forsyth 248*37da2899SCharles.Forsyth } CFF_FontRec, *CFF_Font; 249*37da2899SCharles.Forsyth 250*37da2899SCharles.Forsyth 251*37da2899SCharles.Forsyth FT_END_HEADER 252*37da2899SCharles.Forsyth 253*37da2899SCharles.Forsyth #endif /* __CFFTYPES_H__ */ 254*37da2899SCharles.Forsyth 255*37da2899SCharles.Forsyth 256*37da2899SCharles.Forsyth /* END */ 257