sdk-world v2026.11.05
PS2 SDK - world tier (copyleft-allowed, non-essential packages)
Loading...
Searching...
No Matches
cfftypes.h
Go to the documentation of this file.
1/****************************************************************************
2 *
3 * cfftypes.h
4 *
5 * Basic OpenType/CFF type definitions and interface (specification
6 * only).
7 *
8 * Copyright (C) 1996-2025 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
24#ifndef CFFTYPES_H_
25#define CFFTYPES_H_
26
27
28#include <freetype/freetype.h>
29#include <freetype/t1tables.h>
34
35
36FT_BEGIN_HEADER
37
38
39 /**************************************************************************
40 *
41 * @struct:
42 * CFF_IndexRec
43 *
44 * @description:
45 * A structure used to model a CFF Index table.
46 *
47 * @fields:
48 * stream ::
49 * The source input stream.
50 *
51 * start ::
52 * The position of the first index byte in the input stream.
53 *
54 * count ::
55 * The number of elements in the index.
56 *
57 * off_size ::
58 * The size in bytes of object offsets in index.
59 *
60 * data_offset ::
61 * The position of first data byte in the index's bytes.
62 *
63 * data_size ::
64 * The size of the data table in this index.
65 *
66 * offsets ::
67 * A table of element offsets in the index. Must be loaded explicitly.
68 *
69 * bytes ::
70 * If the index is loaded in memory, its bytes.
71 */
72 typedef struct CFF_IndexRec_
73 {
74 FT_Stream stream;
75 FT_ULong start;
76 FT_UInt hdr_size;
77 FT_UInt count;
78 FT_Byte off_size;
79 FT_ULong data_offset;
80 FT_ULong data_size;
81
82 FT_ULong* offsets;
83 FT_Byte* bytes;
84
85 } CFF_IndexRec, *CFF_Index;
86
87
88 typedef struct CFF_EncodingRec_
89 {
90 FT_UInt format;
91 FT_ULong offset;
92
93 FT_UInt count;
94 FT_UShort sids [256]; /* avoid dynamic allocations */
95 FT_UShort codes[256];
96
97 } CFF_EncodingRec, *CFF_Encoding;
98
99
100 typedef struct CFF_CharsetRec_
101 {
102
103 FT_UInt format;
104 FT_ULong offset;
105
106 FT_UShort* sids;
107 FT_UShort* cids; /* the inverse mapping of `sids'; only needed */
108 /* for CID-keyed fonts */
109 FT_UInt max_cid;
110 FT_UInt num_glyphs;
111
112 } CFF_CharsetRec, *CFF_Charset;
113
114
115 /* cf. similar fields in file `ttgxvar.h' from the `truetype' module */
116
117 typedef struct CFF_VarData_
118 {
119#if 0
120 FT_UInt itemCount; /* not used; always zero */
121 FT_UInt shortDeltaCount; /* not used; always zero */
122#endif
123
124 FT_UInt regionIdxCount; /* number of region indexes */
125 FT_UInt* regionIndices; /* array of `regionIdxCount' indices; */
126 /* these index `varRegionList' */
127 } CFF_VarData;
128
129
130 /* contribution of one axis to a region */
131 typedef struct CFF_AxisCoords_
132 {
133 FT_Fixed startCoord;
134 FT_Fixed peakCoord; /* zero peak means no effect (factor = 1) */
135 FT_Fixed endCoord;
136
137 } CFF_AxisCoords;
138
139
140 typedef struct CFF_VarRegion_
141 {
142 CFF_AxisCoords* axisList; /* array of axisCount records */
143
144 } CFF_VarRegion;
145
146
147 typedef struct CFF_VStoreRec_
148 {
149 FT_UInt dataCount;
150 CFF_VarData* varData; /* array of dataCount records */
151 /* vsindex indexes this array */
152 FT_UShort axisCount;
153 FT_UInt regionCount; /* total number of regions defined */
154 CFF_VarRegion* varRegionList;
155
156 } CFF_VStoreRec, *CFF_VStore;
157
158
159 /* forward reference */
160 typedef struct CFF_FontRec_* CFF_Font;
161
162
163 /* This object manages one cached blend vector. */
164 /* */
165 /* There is a BlendRec for Private DICT parsing in each subfont */
166 /* and a BlendRec for charstrings in CF2_Font instance data. */
167 /* A cached BV may be used across DICTs or Charstrings if inputs */
168 /* have not changed. */
169 /* */
170 /* `usedBV' is reset at the start of each parse or charstring. */
171 /* vsindex cannot be changed after a BV is used. */
172 /* */
173 /* Note: NDV is long (32/64 bit), while BV is 16.16 (FT_Int32). */
174 typedef struct CFF_BlendRec_
175 {
176 FT_Bool builtBV; /* blendV has been built */
177 FT_Bool usedBV; /* blendV has been used */
178 CFF_Font font; /* top level font struct */
179 FT_UInt lastVsindex; /* last vsindex used */
180 FT_UInt lenNDV; /* normDV length (aka numAxes) */
181 FT_Fixed* lastNDV; /* last NDV used */
182 FT_UInt lenBV; /* BlendV length (aka numMasters) */
183 FT_Int32* BV; /* current blendV (per DICT/glyph) */
184
185 } CFF_BlendRec, *CFF_Blend;
186
187
188 typedef struct CFF_FontRecDictRec_
189 {
190 FT_UInt version;
191 FT_UInt notice;
192 FT_UInt copyright;
193 FT_UInt full_name;
194 FT_UInt family_name;
195 FT_UInt weight;
196 FT_Bool is_fixed_pitch;
197 FT_Fixed italic_angle;
198 FT_Fixed underline_position;
199 FT_Fixed underline_thickness;
200 FT_Int paint_type;
201 FT_Int charstring_type;
202 FT_Matrix font_matrix;
203 FT_Bool has_font_matrix;
204 FT_ULong units_per_em; /* temporarily used as scaling value also */
205 FT_Vector font_offset;
206 FT_ULong unique_id;
207 FT_BBox font_bbox;
208 FT_Pos stroke_width;
209 FT_ULong charset_offset;
210 FT_ULong encoding_offset;
211 FT_ULong charstrings_offset;
212 FT_ULong private_offset;
213 FT_ULong private_size;
214 FT_Long synthetic_base;
215 FT_UInt embedded_postscript;
216
217 /* these should only be used for the top-level font dictionary */
218 FT_UInt cid_registry;
219 FT_UInt cid_ordering;
220 FT_Long cid_supplement;
221
222 FT_Long cid_font_version;
223 FT_Long cid_font_revision;
224 FT_Long cid_font_type;
225 FT_ULong cid_count;
226 FT_ULong cid_uid_base;
227 FT_ULong cid_fd_array_offset;
228 FT_ULong cid_fd_select_offset;
229 FT_UInt cid_font_name;
230
231 /* the next fields come from the data of the deprecated */
232 /* `MultipleMaster' operator; they are needed to parse the (also */
233 /* deprecated) `blend' operator in Type 2 charstrings */
234 FT_UShort num_designs;
235 FT_UShort num_axes;
236
237 /* fields for CFF2 */
238 FT_ULong vstore_offset;
239 FT_UInt maxstack;
240
241 } CFF_FontRecDictRec, *CFF_FontRecDict;
242
243
244 /* forward reference */
245 typedef struct CFF_SubFontRec_* CFF_SubFont;
246
247
248 typedef struct CFF_PrivateRec_
249 {
250 FT_Byte num_blue_values;
251 FT_Byte num_other_blues;
252 FT_Byte num_family_blues;
253 FT_Byte num_family_other_blues;
254
255 FT_Fixed blue_values[14];
256 FT_Fixed other_blues[10];
257 FT_Fixed family_blues[14];
258 FT_Fixed family_other_blues[10];
259
260 FT_Fixed blue_scale;
261 FT_Pos blue_shift;
262 FT_Pos blue_fuzz;
263 FT_Pos standard_width;
264 FT_Pos standard_height;
265
266 FT_Byte num_snap_widths;
267 FT_Byte num_snap_heights;
268 FT_Pos snap_widths[13];
269 FT_Pos snap_heights[13];
270 FT_Bool force_bold;
271 FT_Fixed force_bold_threshold;
272 FT_Int lenIV;
273 FT_Int language_group;
274 FT_Fixed expansion_factor;
275 FT_Long initial_random_seed;
276 FT_ULong local_subrs_offset;
277 FT_Pos default_width;
278 FT_Pos nominal_width;
279
280 /* fields for CFF2 */
281 FT_UInt vsindex;
282 CFF_SubFont subfont;
283
284 } CFF_PrivateRec, *CFF_Private;
285
286
287 typedef struct CFF_FDSelectRec_
288 {
289 FT_Byte format;
290 FT_UInt range_count;
291
292 /* that's the table, taken from the file `as is' */
293 FT_Byte* data;
294 FT_UInt data_size;
295
296 /* small cache for format 3 only */
297 FT_UInt cache_first;
298 FT_UInt cache_count;
299 FT_Byte cache_fd;
300
301 } CFF_FDSelectRec, *CFF_FDSelect;
302
303
304 /* A SubFont packs a font dict and a private dict together. They are */
305 /* needed to support CID-keyed CFF fonts. */
306 typedef struct CFF_SubFontRec_
307 {
308 CFF_FontRecDictRec font_dict;
309 CFF_PrivateRec private_dict;
310
311 /* fields for CFF2 */
312 CFF_BlendRec blend; /* current blend vector */
313 FT_UInt lenNDV; /* current length NDV or zero */
314 FT_Fixed* NDV; /* ptr to current NDV or NULL */
315
316 /* `blend_stack' is a writable buffer to hold blend results. */
317 /* This buffer is to the side of the normal cff parser stack; */
318 /* `cff_parse_blend' and `cff_blend_doBlend' push blend results here. */
319 /* The normal stack then points to these values instead of the DICT */
320 /* because all other operators in Private DICT clear the stack. */
321 /* `blend_stack' could be cleared at each operator other than blend. */
322 /* Blended values are stored as 5-byte fixed-point values. */
323
324 FT_Byte* blend_stack; /* base of stack allocation */
325 FT_Byte* blend_top; /* first empty slot */
326 FT_UInt blend_used; /* number of bytes in use */
327 FT_UInt blend_alloc; /* number of bytes allocated */
328
329 CFF_IndexRec local_subrs_index;
330 FT_Byte** local_subrs; /* array of pointers */
331 /* into Local Subrs INDEX data */
332
333 FT_UInt32 random;
334
335 } CFF_SubFontRec;
336
337
338#define CFF_MAX_CID_FONTS 256
339
340
341 typedef struct CFF_FontRec_
342 {
343 FT_Library library;
344 FT_Stream stream;
345 FT_Memory memory; /* TODO: take this from stream->memory? */
346 FT_ULong base_offset; /* offset to start of CFF */
347 FT_UInt num_faces;
348 FT_UInt num_glyphs;
349
350 FT_Byte version_major;
351 FT_Byte version_minor;
352 FT_Byte header_size;
353
354 FT_UInt top_dict_length; /* cff2 only */
355
356 FT_Bool cff2;
357
358 CFF_IndexRec name_index;
359 CFF_IndexRec top_dict_index;
360 CFF_IndexRec global_subrs_index;
361
362 CFF_EncodingRec encoding;
363 CFF_CharsetRec charset;
364
365 CFF_IndexRec charstrings_index;
366 CFF_IndexRec font_dict_index;
367 CFF_IndexRec private_index;
368 CFF_IndexRec local_subrs_index;
369
370 FT_String* font_name;
371
372 /* array of pointers into Global Subrs INDEX data */
373 FT_Byte** global_subrs;
374
375 /* array of pointers into String INDEX data stored at string_pool */
376 FT_UInt num_strings;
377 FT_Byte** strings;
378 FT_Byte* string_pool;
379 FT_ULong string_pool_size;
380
381 CFF_SubFontRec top_font;
382 FT_UInt num_subfonts;
383 CFF_SubFont subfonts[CFF_MAX_CID_FONTS];
384
385 CFF_FDSelectRec fd_select;
386
387 /* interface to PostScript hinter */
388 PSHinter_Service pshinter;
389
390 /* interface to Postscript Names service */
391 FT_Service_PsCMaps psnames;
392
393 /* interface to CFFLoad service */
394 const void* cffload;
395
396 /* since version 2.3.0 */
397 PS_FontInfoRec* font_info; /* font info dictionary */
398
399 /* since version 2.3.6 */
400 FT_String* registry;
401 FT_String* ordering;
402
403 /* since version 2.4.12 */
404 FT_Generic cf2_instance;
405
406 /* since version 2.7.1 */
407 CFF_VStoreRec vstore; /* parsed vstore structure */
408
409 /* since version 2.9 */
410 PS_FontExtraRec* font_extra;
411
412 } CFF_FontRec;
413
414
415FT_END_HEADER
416
417#endif /* CFFTYPES_H_ */
418
419
420/* END */