nuclear@0: /***************************************************************************/ nuclear@0: /* */ nuclear@0: /* t1types.h */ nuclear@0: /* */ nuclear@0: /* Basic Type1/Type2 type definitions and interface (specification */ nuclear@0: /* only). */ nuclear@0: /* */ nuclear@0: /* Copyright 1996-2001, 2002, 2003, 2004, 2006, 2008, 2009 by */ nuclear@0: /* David Turner, Robert Wilhelm, and Werner Lemberg. */ nuclear@0: /* */ nuclear@0: /* This file is part of the FreeType project, and may only be used, */ nuclear@0: /* modified, and distributed under the terms of the FreeType project */ nuclear@0: /* license, LICENSE.TXT. By continuing to use, modify, or distribute */ nuclear@0: /* this file you indicate that you have read the license and */ nuclear@0: /* understand and accept it fully. */ nuclear@0: /* */ nuclear@0: /***************************************************************************/ nuclear@0: nuclear@0: nuclear@0: #ifndef __T1TYPES_H__ nuclear@0: #define __T1TYPES_H__ nuclear@0: nuclear@0: nuclear@0: #include nuclear@0: #include FT_TYPE1_TABLES_H nuclear@0: #include FT_INTERNAL_POSTSCRIPT_HINTS_H nuclear@0: #include FT_INTERNAL_SERVICE_H nuclear@0: #include FT_SERVICE_POSTSCRIPT_CMAPS_H nuclear@0: nuclear@0: nuclear@0: FT_BEGIN_HEADER nuclear@0: nuclear@0: nuclear@0: /*************************************************************************/ nuclear@0: /*************************************************************************/ nuclear@0: /*************************************************************************/ nuclear@0: /*** ***/ nuclear@0: /*** ***/ nuclear@0: /*** REQUIRED TYPE1/TYPE2 TABLES DEFINITIONS ***/ nuclear@0: /*** ***/ nuclear@0: /*** ***/ nuclear@0: /*************************************************************************/ nuclear@0: /*************************************************************************/ nuclear@0: /*************************************************************************/ nuclear@0: nuclear@0: nuclear@0: /*************************************************************************/ nuclear@0: /* */ nuclear@0: /* */ nuclear@0: /* T1_EncodingRec */ nuclear@0: /* */ nuclear@0: /* */ nuclear@0: /* A structure modeling a custom encoding. */ nuclear@0: /* */ nuclear@0: /* */ nuclear@0: /* num_chars :: The number of character codes in the encoding. */ nuclear@0: /* Usually 256. */ nuclear@0: /* */ nuclear@0: /* code_first :: The lowest valid character code in the encoding. */ nuclear@0: /* */ nuclear@0: /* code_last :: The highest valid character code in the encoding */ nuclear@0: /* + 1. When equal to code_first there are no valid */ nuclear@0: /* character codes. */ nuclear@0: /* */ nuclear@0: /* char_index :: An array of corresponding glyph indices. */ nuclear@0: /* */ nuclear@0: /* char_name :: An array of corresponding glyph names. */ nuclear@0: /* */ nuclear@0: typedef struct T1_EncodingRecRec_ nuclear@0: { nuclear@0: FT_Int num_chars; nuclear@0: FT_Int code_first; nuclear@0: FT_Int code_last; nuclear@0: nuclear@0: FT_UShort* char_index; nuclear@0: FT_String** char_name; nuclear@0: nuclear@0: } T1_EncodingRec, *T1_Encoding; nuclear@0: nuclear@0: nuclear@0: typedef enum T1_EncodingType_ nuclear@0: { nuclear@0: T1_ENCODING_TYPE_NONE = 0, nuclear@0: T1_ENCODING_TYPE_ARRAY, nuclear@0: T1_ENCODING_TYPE_STANDARD, nuclear@0: T1_ENCODING_TYPE_ISOLATIN1, nuclear@0: T1_ENCODING_TYPE_EXPERT nuclear@0: nuclear@0: } T1_EncodingType; nuclear@0: nuclear@0: nuclear@0: /* used to hold extra data of PS_FontInfoRec that nuclear@0: * cannot be stored in the publicly defined structure. nuclear@0: * nuclear@0: * Note these can't be blended with multiple-masters. nuclear@0: */ nuclear@0: typedef struct PS_FontExtraRec_ nuclear@0: { nuclear@0: FT_UShort fs_type; nuclear@0: nuclear@0: } PS_FontExtraRec; nuclear@0: nuclear@0: nuclear@0: typedef struct T1_FontRec_ nuclear@0: { nuclear@0: PS_FontInfoRec font_info; /* font info dictionary */ nuclear@0: PS_FontExtraRec font_extra; /* font info extra fields */ nuclear@0: PS_PrivateRec private_dict; /* private dictionary */ nuclear@0: FT_String* font_name; /* top-level dictionary */ nuclear@0: nuclear@0: T1_EncodingType encoding_type; nuclear@0: T1_EncodingRec encoding; nuclear@0: nuclear@0: FT_Byte* subrs_block; nuclear@0: FT_Byte* charstrings_block; nuclear@0: FT_Byte* glyph_names_block; nuclear@0: nuclear@0: FT_Int num_subrs; nuclear@0: FT_Byte** subrs; nuclear@0: FT_PtrDist* subrs_len; nuclear@0: nuclear@0: FT_Int num_glyphs; nuclear@0: FT_String** glyph_names; /* array of glyph names */ nuclear@0: FT_Byte** charstrings; /* array of glyph charstrings */ nuclear@0: FT_PtrDist* charstrings_len; nuclear@0: nuclear@0: FT_Byte paint_type; nuclear@0: FT_Byte font_type; nuclear@0: FT_Matrix font_matrix; nuclear@0: FT_Vector font_offset; nuclear@0: FT_BBox font_bbox; nuclear@0: FT_Long font_id; nuclear@0: nuclear@0: FT_Fixed stroke_width; nuclear@0: nuclear@0: } T1_FontRec, *T1_Font; nuclear@0: nuclear@0: nuclear@0: typedef struct CID_SubrsRec_ nuclear@0: { nuclear@0: FT_UInt num_subrs; nuclear@0: FT_Byte** code; nuclear@0: nuclear@0: } CID_SubrsRec, *CID_Subrs; nuclear@0: nuclear@0: nuclear@0: /*************************************************************************/ nuclear@0: /*************************************************************************/ nuclear@0: /*************************************************************************/ nuclear@0: /*** ***/ nuclear@0: /*** ***/ nuclear@0: /*** AFM FONT INFORMATION STRUCTURES ***/ nuclear@0: /*** ***/ nuclear@0: /*** ***/ nuclear@0: /*************************************************************************/ nuclear@0: /*************************************************************************/ nuclear@0: /*************************************************************************/ nuclear@0: nuclear@0: typedef struct AFM_TrackKernRec_ nuclear@0: { nuclear@0: FT_Int degree; nuclear@0: FT_Fixed min_ptsize; nuclear@0: FT_Fixed min_kern; nuclear@0: FT_Fixed max_ptsize; nuclear@0: FT_Fixed max_kern; nuclear@0: nuclear@0: } AFM_TrackKernRec, *AFM_TrackKern; nuclear@0: nuclear@0: typedef struct AFM_KernPairRec_ nuclear@0: { nuclear@0: FT_Int index1; nuclear@0: FT_Int index2; nuclear@0: FT_Int x; nuclear@0: FT_Int y; nuclear@0: nuclear@0: } AFM_KernPairRec, *AFM_KernPair; nuclear@0: nuclear@0: typedef struct AFM_FontInfoRec_ nuclear@0: { nuclear@0: FT_Bool IsCIDFont; nuclear@0: FT_BBox FontBBox; nuclear@0: FT_Fixed Ascender; nuclear@0: FT_Fixed Descender; nuclear@0: AFM_TrackKern TrackKerns; /* free if non-NULL */ nuclear@0: FT_Int NumTrackKern; nuclear@0: AFM_KernPair KernPairs; /* free if non-NULL */ nuclear@0: FT_Int NumKernPair; nuclear@0: nuclear@0: } AFM_FontInfoRec, *AFM_FontInfo; nuclear@0: nuclear@0: nuclear@0: /*************************************************************************/ nuclear@0: /*************************************************************************/ nuclear@0: /*************************************************************************/ nuclear@0: /*** ***/ nuclear@0: /*** ***/ nuclear@0: /*** ORIGINAL T1_FACE CLASS DEFINITION ***/ nuclear@0: /*** ***/ nuclear@0: /*** ***/ nuclear@0: /*************************************************************************/ nuclear@0: /*************************************************************************/ nuclear@0: /*************************************************************************/ nuclear@0: nuclear@0: nuclear@0: typedef struct T1_FaceRec_* T1_Face; nuclear@0: typedef struct CID_FaceRec_* CID_Face; nuclear@0: nuclear@0: nuclear@0: typedef struct T1_FaceRec_ nuclear@0: { nuclear@0: FT_FaceRec root; nuclear@0: T1_FontRec type1; nuclear@0: const void* psnames; nuclear@0: const void* psaux; nuclear@0: const void* afm_data; nuclear@0: FT_CharMapRec charmaprecs[2]; nuclear@0: FT_CharMap charmaps[2]; nuclear@0: nuclear@0: #ifdef FT_CONFIG_OPTION_OLD_INTERNALS nuclear@0: PS_Unicodes unicode_map; nuclear@0: #endif nuclear@0: nuclear@0: /* support for Multiple Masters fonts */ nuclear@0: PS_Blend blend; nuclear@0: nuclear@0: /* undocumented, optional: indices of subroutines that express */ nuclear@0: /* the NormalizeDesignVector and the ConvertDesignVector procedure, */ nuclear@0: /* respectively, as Type 2 charstrings; -1 if keywords not present */ nuclear@0: FT_Int ndv_idx; nuclear@0: FT_Int cdv_idx; nuclear@0: nuclear@0: /* undocumented, optional: has the same meaning as len_buildchar */ nuclear@0: /* for Type 2 fonts; manipulated by othersubrs 19, 24, and 25 */ nuclear@0: FT_UInt len_buildchar; nuclear@0: FT_Long* buildchar; nuclear@0: nuclear@0: /* since version 2.1 - interface to PostScript hinter */ nuclear@0: const void* pshinter; nuclear@0: nuclear@0: } T1_FaceRec; nuclear@0: nuclear@0: nuclear@0: typedef struct CID_FaceRec_ nuclear@0: { nuclear@0: FT_FaceRec root; nuclear@0: void* psnames; nuclear@0: void* psaux; nuclear@0: CID_FaceInfoRec cid; nuclear@0: PS_FontExtraRec font_extra; nuclear@0: #if 0 nuclear@0: void* afm_data; nuclear@0: #endif nuclear@0: CID_Subrs subrs; nuclear@0: nuclear@0: /* since version 2.1 - interface to PostScript hinter */ nuclear@0: void* pshinter; nuclear@0: nuclear@0: /* since version 2.1.8, but was originally positioned after `afm_data' */ nuclear@0: FT_Byte* binary_data; /* used if hex data has been converted */ nuclear@0: FT_Stream cid_stream; nuclear@0: nuclear@0: } CID_FaceRec; nuclear@0: nuclear@0: nuclear@0: FT_END_HEADER nuclear@0: nuclear@0: #endif /* __T1TYPES_H__ */ nuclear@0: nuclear@0: nuclear@0: /* END */