1 /****************************************************************************
2  *
3  * t1types.h
4  *
5  *   Basic Type1/Type2 type definitions and interface (specification
6  *   only).
7  *
8  * Copyright (C) 1996-2020 by
9  * David Turner, Robert Wilhelm, and Werner Lemberg.
10  *
11  * This file is part of the FreeType project, and may only be used,
12  * modified, and distributed under the terms of the FreeType project
13  * license, LICENSE.TXT.  By continuing to use, modify, or distribute
14  * this file you indicate that you have read the license and
15  * understand and accept it fully.
16  *
17  */
18 
19 
20 #ifndef T1TYPES_H_
21 #define T1TYPES_H_
22 
23 
24 #include <ft2build.h>
25 #include FT_TYPE1_TABLES_H
26 #include FT_INTERNAL_POSTSCRIPT_HINTS_H
27 #include FT_INTERNAL_SERVICE_H
28 #include FT_INTERNAL_HASH_H
29 #include FT_SERVICE_POSTSCRIPT_CMAPS_H
30 
31 
32 FT_BEGIN_HEADER
33 
34 
35   /*************************************************************************/
36   /*************************************************************************/
37   /*************************************************************************/
38   /***                                                                   ***/
39   /***                                                                   ***/
40   /***              REQUIRED TYPE1/TYPE2 TABLES DEFINITIONS              ***/
41   /***                                                                   ***/
42   /***                                                                   ***/
43   /*************************************************************************/
44   /*************************************************************************/
45   /*************************************************************************/
46 
47 
48   /**************************************************************************
49    *
50    * @struct:
51    *   T1_EncodingRec
52    *
53    * @description:
54    *   A structure modeling a custom encoding.
55    *
56    * @fields:
57    *   num_chars ::
58    *     The number of character codes in the encoding.  Usually 256.
59    *
60    *   code_first ::
61    *     The lowest valid character code in the encoding.
62    *
63    *   code_last ::
64    *     The highest valid character code in the encoding + 1. When equal to
65    *     code_first there are no valid character codes.
66    *
67    *   char_index ::
68    *     An array of corresponding glyph indices.
69    *
70    *   char_name ::
71    *     An array of corresponding glyph names.
72    */
73   typedef struct  T1_EncodingRecRec_
74   {
75     FT_Int       num_chars;
76     FT_Int       code_first;
77     FT_Int       code_last;
78 
79     FT_UShort*         char_index;
80     const FT_String**  char_name;
81 
82   } T1_EncodingRec, *T1_Encoding;
83 
84 
85   /* used to hold extra data of PS_FontInfoRec that
86    * cannot be stored in the publicly defined structure.
87    *
88    * Note these can't be blended with multiple-masters.
89    */
90   typedef struct  PS_FontExtraRec_
91   {
92     FT_UShort  fs_type;
93 
94   } PS_FontExtraRec;
95 
96 
97   typedef struct  T1_FontRec_
98   {
99     PS_FontInfoRec   font_info;         /* font info dictionary   */
100     PS_FontExtraRec  font_extra;        /* font info extra fields */
101     PS_PrivateRec    private_dict;      /* private dictionary     */
102     FT_String*       font_name;         /* top-level dictionary   */
103 
104     T1_EncodingType  encoding_type;
105     T1_EncodingRec   encoding;
106 
107     FT_Byte*         subrs_block;
108     FT_Byte*         charstrings_block;
109     FT_Byte*         glyph_names_block;
110 
111     FT_Int           num_subrs;
112     FT_Byte**        subrs;
113     FT_UInt*         subrs_len;
114     FT_Hash          subrs_hash;
115 
116     FT_Int           num_glyphs;
117     FT_String**      glyph_names;       /* array of glyph names       */
118     FT_Byte**        charstrings;       /* array of glyph charstrings */
119     FT_UInt*         charstrings_len;
120 
121     FT_Byte          paint_type;
122     FT_Byte          font_type;
123     FT_Matrix        font_matrix;
124     FT_Vector        font_offset;
125     FT_BBox          font_bbox;
126     FT_Long          font_id;
127 
128     FT_Fixed         stroke_width;
129 
130   } T1_FontRec, *T1_Font;
131 
132 
133   typedef struct  CID_SubrsRec_
134   {
135     FT_Int     num_subrs;
136     FT_Byte**  code;
137 
138   } CID_SubrsRec, *CID_Subrs;
139 
140 
141   /*************************************************************************/
142   /*************************************************************************/
143   /*************************************************************************/
144   /***                                                                   ***/
145   /***                                                                   ***/
146   /***                AFM FONT INFORMATION STRUCTURES                    ***/
147   /***                                                                   ***/
148   /***                                                                   ***/
149   /*************************************************************************/
150   /*************************************************************************/
151   /*************************************************************************/
152 
153   typedef struct  AFM_TrackKernRec_
154   {
155     FT_Int    degree;
156     FT_Fixed  min_ptsize;
157     FT_Fixed  min_kern;
158     FT_Fixed  max_ptsize;
159     FT_Fixed  max_kern;
160 
161   } AFM_TrackKernRec, *AFM_TrackKern;
162 
163   typedef struct  AFM_KernPairRec_
164   {
165     FT_UInt  index1;
166     FT_UInt  index2;
167     FT_Int   x;
168     FT_Int   y;
169 
170   } AFM_KernPairRec, *AFM_KernPair;
171 
172   typedef struct  AFM_FontInfoRec_
173   {
174     FT_Bool        IsCIDFont;
175     FT_BBox        FontBBox;
176     FT_Fixed       Ascender;
177     FT_Fixed       Descender;
178     AFM_TrackKern  TrackKerns;   /* free if non-NULL */
179     FT_UInt        NumTrackKern;
180     AFM_KernPair   KernPairs;    /* free if non-NULL */
181     FT_UInt        NumKernPair;
182 
183   } AFM_FontInfoRec, *AFM_FontInfo;
184 
185 
186   /*************************************************************************/
187   /*************************************************************************/
188   /*************************************************************************/
189   /***                                                                   ***/
190   /***                                                                   ***/
191   /***                ORIGINAL T1_FACE CLASS DEFINITION                  ***/
192   /***                                                                   ***/
193   /***                                                                   ***/
194   /*************************************************************************/
195   /*************************************************************************/
196   /*************************************************************************/
197 
198 
199   typedef struct T1_FaceRec_*   T1_Face;
200   typedef struct CID_FaceRec_*  CID_Face;
201 
202 
203   typedef struct  T1_FaceRec_
204   {
205     FT_FaceRec      root;
206     T1_FontRec      type1;
207     const void*     psnames;
208     const void*     psaux;
209     const void*     afm_data;
210     FT_CharMapRec   charmaprecs[2];
211     FT_CharMap      charmaps[2];
212 
213     /* support for Multiple Masters fonts */
214     PS_Blend        blend;
215 
216     /* undocumented, optional: indices of subroutines that express      */
217     /* the NormalizeDesignVector and the ConvertDesignVector procedure, */
218     /* respectively, as Type 2 charstrings; -1 if keywords not present  */
219     FT_Int           ndv_idx;
220     FT_Int           cdv_idx;
221 
222     /* undocumented, optional: has the same meaning as len_buildchar */
223     /* for Type 2 fonts; manipulated by othersubrs 19, 24, and 25    */
224     FT_UInt          len_buildchar;
225     FT_Long*         buildchar;
226 
227     /* since version 2.1 - interface to PostScript hinter */
228     const void*     pshinter;
229 
230   } T1_FaceRec;
231 
232 
233   typedef struct  CID_FaceRec_
234   {
235     FT_FaceRec       root;
236     void*            psnames;
237     void*            psaux;
238     CID_FaceInfoRec  cid;
239     PS_FontExtraRec  font_extra;
240 #if 0
241     void*            afm_data;
242 #endif
243     CID_Subrs        subrs;
244 
245     /* since version 2.1 - interface to PostScript hinter */
246     void*            pshinter;
247 
248     /* since version 2.1.8, but was originally positioned after `afm_data' */
249     FT_Byte*         binary_data; /* used if hex data has been converted */
250     FT_Stream        cid_stream;
251 
252   } CID_FaceRec;
253 
254 
255 FT_END_HEADER
256 
257 #endif /* T1TYPES_H_ */
258 
259 
260 /* END */
261