xref: /inferno-os/include/freetype/internal/cfftypes.h (revision 37da2899f40661e3e9631e497da8dc59b971cbd0)
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