xref: /inferno-os/libfreetype/pfrtypes.h (revision 37da2899f40661e3e9631e497da8dc59b971cbd0)
1*37da2899SCharles.Forsyth /***************************************************************************/
2*37da2899SCharles.Forsyth /*                                                                         */
3*37da2899SCharles.Forsyth /*  pfrtypes.h                                                             */
4*37da2899SCharles.Forsyth /*                                                                         */
5*37da2899SCharles.Forsyth /*    FreeType PFR data structures (specification only).                   */
6*37da2899SCharles.Forsyth /*                                                                         */
7*37da2899SCharles.Forsyth /*  Copyright 2002 by                                                      */
8*37da2899SCharles.Forsyth /*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
9*37da2899SCharles.Forsyth /*                                                                         */
10*37da2899SCharles.Forsyth /*  This file is part of the FreeType project, and may only be used,       */
11*37da2899SCharles.Forsyth /*  modified, and distributed under the terms of the FreeType project      */
12*37da2899SCharles.Forsyth /*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
13*37da2899SCharles.Forsyth /*  this file you indicate that you have read the license and              */
14*37da2899SCharles.Forsyth /*  understand and accept it fully.                                        */
15*37da2899SCharles.Forsyth /*                                                                         */
16*37da2899SCharles.Forsyth /***************************************************************************/
17*37da2899SCharles.Forsyth 
18*37da2899SCharles.Forsyth 
19*37da2899SCharles.Forsyth #ifndef __PFRTYPES_H__
20*37da2899SCharles.Forsyth #define __PFRTYPES_H__
21*37da2899SCharles.Forsyth 
22*37da2899SCharles.Forsyth #include <ft2build.h>
23*37da2899SCharles.Forsyth #include FT_INTERNAL_OBJECTS_H
24*37da2899SCharles.Forsyth 
25*37da2899SCharles.Forsyth FT_BEGIN_HEADER
26*37da2899SCharles.Forsyth 
27*37da2899SCharles.Forsyth   /************************************************************************/
28*37da2899SCharles.Forsyth 
29*37da2899SCharles.Forsyth   /* the PFR Header structure */
30*37da2899SCharles.Forsyth   typedef struct  PFR_HeaderRec_
31*37da2899SCharles.Forsyth   {
32*37da2899SCharles.Forsyth     FT_UInt32  signature;
33*37da2899SCharles.Forsyth     FT_UInt    version;
34*37da2899SCharles.Forsyth     FT_UInt    signature2;
35*37da2899SCharles.Forsyth     FT_UInt    header_size;
36*37da2899SCharles.Forsyth 
37*37da2899SCharles.Forsyth     FT_UInt    log_dir_size;
38*37da2899SCharles.Forsyth     FT_UInt    log_dir_offset;
39*37da2899SCharles.Forsyth 
40*37da2899SCharles.Forsyth     FT_UInt    log_font_max_size;
41*37da2899SCharles.Forsyth     FT_UInt32  log_font_section_size;
42*37da2899SCharles.Forsyth     FT_UInt32  log_font_section_offset;
43*37da2899SCharles.Forsyth 
44*37da2899SCharles.Forsyth     FT_UInt32  phy_font_max_size;
45*37da2899SCharles.Forsyth     FT_UInt32  phy_font_section_size;
46*37da2899SCharles.Forsyth     FT_UInt32  phy_font_section_offset;
47*37da2899SCharles.Forsyth 
48*37da2899SCharles.Forsyth     FT_UInt    gps_max_size;
49*37da2899SCharles.Forsyth     FT_UInt32  gps_section_size;
50*37da2899SCharles.Forsyth     FT_UInt32  gps_section_offset;
51*37da2899SCharles.Forsyth 
52*37da2899SCharles.Forsyth     FT_UInt    max_blue_values;
53*37da2899SCharles.Forsyth     FT_UInt    max_x_orus;
54*37da2899SCharles.Forsyth     FT_UInt    max_y_orus;
55*37da2899SCharles.Forsyth 
56*37da2899SCharles.Forsyth     FT_UInt    phy_font_max_size_high;
57*37da2899SCharles.Forsyth     FT_UInt    color_flags;
58*37da2899SCharles.Forsyth 
59*37da2899SCharles.Forsyth     FT_UInt32  bct_max_size;
60*37da2899SCharles.Forsyth     FT_UInt32  bct_set_max_size;
61*37da2899SCharles.Forsyth     FT_UInt32  phy_bct_set_max_size;
62*37da2899SCharles.Forsyth 
63*37da2899SCharles.Forsyth     FT_UInt    num_phy_fonts;
64*37da2899SCharles.Forsyth     FT_UInt    max_vert_stem_snap;
65*37da2899SCharles.Forsyth     FT_UInt    max_horz_stem_snap;
66*37da2899SCharles.Forsyth     FT_UInt    max_chars;
67*37da2899SCharles.Forsyth 
68*37da2899SCharles.Forsyth   } PFR_HeaderRec, *PFR_Header;
69*37da2899SCharles.Forsyth 
70*37da2899SCharles.Forsyth 
71*37da2899SCharles.Forsyth   /* used in `color_flags' field of the PFR_Header */
72*37da2899SCharles.Forsyth   typedef enum  PFR_HeaderFlags_
73*37da2899SCharles.Forsyth   {
74*37da2899SCharles.Forsyth     PFR_FLAG_BLACK_PIXEL   = 1,
75*37da2899SCharles.Forsyth     PFR_FLAG_INVERT_BITMAP = 2
76*37da2899SCharles.Forsyth 
77*37da2899SCharles.Forsyth   } PFR_HeaderFlags;
78*37da2899SCharles.Forsyth 
79*37da2899SCharles.Forsyth 
80*37da2899SCharles.Forsyth   /************************************************************************/
81*37da2899SCharles.Forsyth 
82*37da2899SCharles.Forsyth   typedef struct  PFR_LogFontRec_
83*37da2899SCharles.Forsyth   {
84*37da2899SCharles.Forsyth     FT_UInt32  size;
85*37da2899SCharles.Forsyth     FT_UInt32  offset;
86*37da2899SCharles.Forsyth 
87*37da2899SCharles.Forsyth     FT_Int32   matrix[4];
88*37da2899SCharles.Forsyth     FT_UInt    stroke_flags;
89*37da2899SCharles.Forsyth     FT_Int     stroke_thickness;
90*37da2899SCharles.Forsyth     FT_Int     bold_thickness;
91*37da2899SCharles.Forsyth     FT_Int32   miter_limit;
92*37da2899SCharles.Forsyth 
93*37da2899SCharles.Forsyth     FT_UInt32  phys_size;
94*37da2899SCharles.Forsyth     FT_UInt32  phys_offset;
95*37da2899SCharles.Forsyth 
96*37da2899SCharles.Forsyth   } PFR_LogFontRec, *PFR_LogFont;
97*37da2899SCharles.Forsyth 
98*37da2899SCharles.Forsyth 
99*37da2899SCharles.Forsyth   typedef enum  PFR_LogFlags_
100*37da2899SCharles.Forsyth   {
101*37da2899SCharles.Forsyth     PFR_LOG_EXTRA_ITEMS  = 0x40,
102*37da2899SCharles.Forsyth     PFR_LOG_2BYTE_BOLD   = 0x20,
103*37da2899SCharles.Forsyth     PFR_LOG_BOLD         = 0x10,
104*37da2899SCharles.Forsyth     PFR_LOG_2BYTE_STROKE = 8,
105*37da2899SCharles.Forsyth     PFR_LOG_STROKE       = 4,
106*37da2899SCharles.Forsyth     PFR_LINE_JOIN_MASK   = 3
107*37da2899SCharles.Forsyth 
108*37da2899SCharles.Forsyth   } PFR_LogFlags;
109*37da2899SCharles.Forsyth 
110*37da2899SCharles.Forsyth 
111*37da2899SCharles.Forsyth   typedef enum  PFR_LineJoinFlags_
112*37da2899SCharles.Forsyth   {
113*37da2899SCharles.Forsyth     PFR_LINE_JOIN_MITER = 0,
114*37da2899SCharles.Forsyth     PFR_LINE_JOIN_ROUND = 1,
115*37da2899SCharles.Forsyth     PFR_LINE_JOIN_BEVEL = 2
116*37da2899SCharles.Forsyth 
117*37da2899SCharles.Forsyth   } PFR_LineJoinFlags;
118*37da2899SCharles.Forsyth 
119*37da2899SCharles.Forsyth 
120*37da2899SCharles.Forsyth   /************************************************************************/
121*37da2899SCharles.Forsyth 
122*37da2899SCharles.Forsyth   typedef enum  PFR_BitmapFlags_
123*37da2899SCharles.Forsyth   {
124*37da2899SCharles.Forsyth     PFR_BITMAP_3BYTE_OFFSET   = 4,
125*37da2899SCharles.Forsyth     PFR_BITMAP_2BYTE_SIZE     = 2,
126*37da2899SCharles.Forsyth     PFR_BITMAP_2BYTE_CHARCODE = 1
127*37da2899SCharles.Forsyth 
128*37da2899SCharles.Forsyth   } PFR_BitmapFlags;
129*37da2899SCharles.Forsyth 
130*37da2899SCharles.Forsyth 
131*37da2899SCharles.Forsyth   typedef struct  PFR_BitmapCharRec_
132*37da2899SCharles.Forsyth   {
133*37da2899SCharles.Forsyth     FT_UInt    char_code;
134*37da2899SCharles.Forsyth     FT_UInt    gps_size;
135*37da2899SCharles.Forsyth     FT_UInt32  gps_offset;
136*37da2899SCharles.Forsyth 
137*37da2899SCharles.Forsyth   } PFR_BitmapCharRec, *PFR_BitmapChar;
138*37da2899SCharles.Forsyth 
139*37da2899SCharles.Forsyth 
140*37da2899SCharles.Forsyth   typedef enum  PFR_StrikeFlags_
141*37da2899SCharles.Forsyth   {
142*37da2899SCharles.Forsyth     PFR_STRIKE_2BYTE_COUNT  = 0x10,
143*37da2899SCharles.Forsyth     PFR_STRIKE_3BYTE_OFFSET = 0x08,
144*37da2899SCharles.Forsyth     PFR_STRIKE_3BYTE_SIZE   = 0x04,
145*37da2899SCharles.Forsyth     PFR_STRIKE_2BYTE_YPPM   = 0x02,
146*37da2899SCharles.Forsyth     PFR_STRIKE_2BYTE_XPPM   = 0x01
147*37da2899SCharles.Forsyth 
148*37da2899SCharles.Forsyth   } PFR_StrikeFlags;
149*37da2899SCharles.Forsyth 
150*37da2899SCharles.Forsyth 
151*37da2899SCharles.Forsyth   typedef struct  PFR_StrikeRec_
152*37da2899SCharles.Forsyth   {
153*37da2899SCharles.Forsyth     FT_UInt         x_ppm;
154*37da2899SCharles.Forsyth     FT_UInt         y_ppm;
155*37da2899SCharles.Forsyth     FT_UInt         flags;
156*37da2899SCharles.Forsyth 
157*37da2899SCharles.Forsyth     FT_UInt32       gps_size;
158*37da2899SCharles.Forsyth     FT_UInt32       gps_offset;
159*37da2899SCharles.Forsyth 
160*37da2899SCharles.Forsyth     FT_UInt32       bct_size;
161*37da2899SCharles.Forsyth     FT_UInt32       bct_offset;
162*37da2899SCharles.Forsyth 
163*37da2899SCharles.Forsyth     /* optional */
164*37da2899SCharles.Forsyth     FT_UInt         num_bitmaps;
165*37da2899SCharles.Forsyth     PFR_BitmapChar  bitmaps;
166*37da2899SCharles.Forsyth 
167*37da2899SCharles.Forsyth   } PFR_StrikeRec, *PFR_Strike;
168*37da2899SCharles.Forsyth 
169*37da2899SCharles.Forsyth 
170*37da2899SCharles.Forsyth   /************************************************************************/
171*37da2899SCharles.Forsyth 
172*37da2899SCharles.Forsyth   typedef struct  PFR_CharRec_
173*37da2899SCharles.Forsyth   {
174*37da2899SCharles.Forsyth     FT_UInt    char_code;
175*37da2899SCharles.Forsyth     FT_Int     advance;
176*37da2899SCharles.Forsyth     FT_UInt    gps_size;
177*37da2899SCharles.Forsyth     FT_UInt32  gps_offset;
178*37da2899SCharles.Forsyth 
179*37da2899SCharles.Forsyth   } PFR_CharRec, *PFR_Char;
180*37da2899SCharles.Forsyth 
181*37da2899SCharles.Forsyth 
182*37da2899SCharles.Forsyth   /************************************************************************/
183*37da2899SCharles.Forsyth 
184*37da2899SCharles.Forsyth   typedef struct  PFR_DimensionRec_
185*37da2899SCharles.Forsyth   {
186*37da2899SCharles.Forsyth     FT_UInt  standard;
187*37da2899SCharles.Forsyth     FT_UInt  num_stem_snaps;
188*37da2899SCharles.Forsyth     FT_Int*  stem_snaps;
189*37da2899SCharles.Forsyth 
190*37da2899SCharles.Forsyth   } PFR_DimensionRec, *PFR_Dimension;
191*37da2899SCharles.Forsyth 
192*37da2899SCharles.Forsyth   /************************************************************************/
193*37da2899SCharles.Forsyth 
194*37da2899SCharles.Forsyth   typedef struct PFR_KernItemRec_*  PFR_KernItem;
195*37da2899SCharles.Forsyth 
196*37da2899SCharles.Forsyth   typedef struct  PFR_KernItemRec_
197*37da2899SCharles.Forsyth   {
198*37da2899SCharles.Forsyth     PFR_KernItem  next;
199*37da2899SCharles.Forsyth     FT_UInt       pair_count;
200*37da2899SCharles.Forsyth     FT_UInt       pair_size;
201*37da2899SCharles.Forsyth     FT_Int        base_adj;
202*37da2899SCharles.Forsyth     FT_UInt       flags;
203*37da2899SCharles.Forsyth     FT_UInt32     offset;
204*37da2899SCharles.Forsyth     FT_UInt32     pair1;
205*37da2899SCharles.Forsyth     FT_UInt32     pair2;
206*37da2899SCharles.Forsyth 
207*37da2899SCharles.Forsyth   } PFR_KernItemRec;
208*37da2899SCharles.Forsyth 
209*37da2899SCharles.Forsyth #define PFR_KERN_INDEX( g1, g2 ) \
210*37da2899SCharles.Forsyth   ( ( (FT_UInt32)(g1) << 16 ) | (FT_UInt16)(g2) )
211*37da2899SCharles.Forsyth 
212*37da2899SCharles.Forsyth   typedef struct  PFR_KernPairRec_
213*37da2899SCharles.Forsyth   {
214*37da2899SCharles.Forsyth     FT_UInt    glyph1;
215*37da2899SCharles.Forsyth     FT_UInt    glyph2;
216*37da2899SCharles.Forsyth     FT_Vector  kerning;
217*37da2899SCharles.Forsyth 
218*37da2899SCharles.Forsyth   } PFR_KernPairRec, *PFR_KernPair;
219*37da2899SCharles.Forsyth 
220*37da2899SCharles.Forsyth   /************************************************************************/
221*37da2899SCharles.Forsyth 
222*37da2899SCharles.Forsyth   typedef struct  PFR_PhyFontRec_
223*37da2899SCharles.Forsyth   {
224*37da2899SCharles.Forsyth     FT_Memory          memory;
225*37da2899SCharles.Forsyth     FT_UInt32          offset;
226*37da2899SCharles.Forsyth 
227*37da2899SCharles.Forsyth     FT_UInt            font_ref_number;
228*37da2899SCharles.Forsyth     FT_UInt            outline_resolution;
229*37da2899SCharles.Forsyth     FT_UInt            metrics_resolution;
230*37da2899SCharles.Forsyth     FT_BBox            bbox;
231*37da2899SCharles.Forsyth     FT_UInt            flags;
232*37da2899SCharles.Forsyth     FT_UInt            standard_advance;
233*37da2899SCharles.Forsyth 
234*37da2899SCharles.Forsyth     PFR_DimensionRec   horizontal;
235*37da2899SCharles.Forsyth     PFR_DimensionRec   vertical;
236*37da2899SCharles.Forsyth 
237*37da2899SCharles.Forsyth     FT_String*         font_id;
238*37da2899SCharles.Forsyth 
239*37da2899SCharles.Forsyth     FT_UInt            num_strikes;
240*37da2899SCharles.Forsyth     FT_UInt            max_strikes;
241*37da2899SCharles.Forsyth     PFR_StrikeRec*     strikes;
242*37da2899SCharles.Forsyth 
243*37da2899SCharles.Forsyth     FT_UInt            num_blue_values;
244*37da2899SCharles.Forsyth     FT_Int            *blue_values;
245*37da2899SCharles.Forsyth     FT_UInt            blue_fuzz;
246*37da2899SCharles.Forsyth     FT_UInt            blue_scale;
247*37da2899SCharles.Forsyth 
248*37da2899SCharles.Forsyth     FT_UInt            num_chars;
249*37da2899SCharles.Forsyth     FT_UInt32          chars_offset;
250*37da2899SCharles.Forsyth     PFR_Char           chars;
251*37da2899SCharles.Forsyth 
252*37da2899SCharles.Forsyth     FT_UInt            num_kern_pairs;
253*37da2899SCharles.Forsyth     PFR_KernItem       kern_items;
254*37da2899SCharles.Forsyth     PFR_KernItem*      kern_items_tail;
255*37da2899SCharles.Forsyth 
256*37da2899SCharles.Forsyth     /* not part of the spec, but used during load */
257*37da2899SCharles.Forsyth     FT_UInt32          bct_offset;
258*37da2899SCharles.Forsyth     FT_Byte*           cursor;
259*37da2899SCharles.Forsyth 
260*37da2899SCharles.Forsyth   } PFR_PhyFontRec, *PFR_PhyFont;
261*37da2899SCharles.Forsyth 
262*37da2899SCharles.Forsyth 
263*37da2899SCharles.Forsyth   typedef enum  PFR_PhyFlags_
264*37da2899SCharles.Forsyth   {
265*37da2899SCharles.Forsyth     PFR_PHY_EXTRA_ITEMS      = 0x80,
266*37da2899SCharles.Forsyth     PFR_PHY_3BYTE_GPS_OFFSET = 0x20,
267*37da2899SCharles.Forsyth     PFR_PHY_2BYTE_GPS_SIZE   = 0x10,
268*37da2899SCharles.Forsyth     PFR_PHY_ASCII_CODE       = 0x08,
269*37da2899SCharles.Forsyth     PFR_PHY_PROPORTIONAL     = 0x04,
270*37da2899SCharles.Forsyth     PFR_PHY_2BYTE_CHARCODE   = 0x02,
271*37da2899SCharles.Forsyth     PFR_PHY_VERTICAL         = 0x01
272*37da2899SCharles.Forsyth 
273*37da2899SCharles.Forsyth   } PFR_PhyFlags;
274*37da2899SCharles.Forsyth 
275*37da2899SCharles.Forsyth 
276*37da2899SCharles.Forsyth   typedef enum PFR_KernFlags_
277*37da2899SCharles.Forsyth   {
278*37da2899SCharles.Forsyth     PFR_KERN_2BYTE_ADJ   = 0x01,
279*37da2899SCharles.Forsyth     PFR_KERN_2BYTE_CHAR  = 0x02
280*37da2899SCharles.Forsyth 
281*37da2899SCharles.Forsyth   } PFR_KernFlags;
282*37da2899SCharles.Forsyth 
283*37da2899SCharles.Forsyth 
284*37da2899SCharles.Forsyth   /************************************************************************/
285*37da2899SCharles.Forsyth 
286*37da2899SCharles.Forsyth   typedef enum  PFR_GlyphFlags_
287*37da2899SCharles.Forsyth   {
288*37da2899SCharles.Forsyth     PFR_GLYPH_IS_COMPOUND   = 0x80,
289*37da2899SCharles.Forsyth     PFR_GLYPH_EXTRA_ITEMS   = 0x08,
290*37da2899SCharles.Forsyth     PFR_GLYPH_1BYTE_XYCOUNT = 0x04,
291*37da2899SCharles.Forsyth     PFR_GLYPH_XCOUNT        = 0x02,
292*37da2899SCharles.Forsyth     PFR_GLYPH_YCOUNT        = 0x01
293*37da2899SCharles.Forsyth 
294*37da2899SCharles.Forsyth   } PFR_GlyphFlags;
295*37da2899SCharles.Forsyth 
296*37da2899SCharles.Forsyth 
297*37da2899SCharles.Forsyth   /* controlled coordinate */
298*37da2899SCharles.Forsyth   typedef struct  PFR_CoordRec_
299*37da2899SCharles.Forsyth   {
300*37da2899SCharles.Forsyth     FT_UInt  org;
301*37da2899SCharles.Forsyth     FT_UInt  cur;
302*37da2899SCharles.Forsyth 
303*37da2899SCharles.Forsyth   } PFR_CoordRec, *PFR_Coord;
304*37da2899SCharles.Forsyth 
305*37da2899SCharles.Forsyth 
306*37da2899SCharles.Forsyth   typedef struct  PFR_SubGlyphRec_
307*37da2899SCharles.Forsyth   {
308*37da2899SCharles.Forsyth     FT_Fixed   x_scale;
309*37da2899SCharles.Forsyth     FT_Fixed   y_scale;
310*37da2899SCharles.Forsyth     FT_Int     x_delta;
311*37da2899SCharles.Forsyth     FT_Int     y_delta;
312*37da2899SCharles.Forsyth     FT_UInt32  gps_offset;
313*37da2899SCharles.Forsyth     FT_UInt    gps_size;
314*37da2899SCharles.Forsyth 
315*37da2899SCharles.Forsyth   } PFR_SubGlyphRec, *PFR_SubGlyph;
316*37da2899SCharles.Forsyth 
317*37da2899SCharles.Forsyth 
318*37da2899SCharles.Forsyth   typedef enum  PFR_SubgGlyphFlags_
319*37da2899SCharles.Forsyth   {
320*37da2899SCharles.Forsyth     PFR_SUBGLYPH_3BYTE_OFFSET = 0x80,
321*37da2899SCharles.Forsyth     PFR_SUBGLYPH_2BYTE_SIZE   = 0x40,
322*37da2899SCharles.Forsyth     PFR_SUBGLYPH_YSCALE       = 0x20,
323*37da2899SCharles.Forsyth     PFR_SUBGLYPH_XSCALE       = 0x10
324*37da2899SCharles.Forsyth 
325*37da2899SCharles.Forsyth   } PFR_SubGlyphFlags;
326*37da2899SCharles.Forsyth 
327*37da2899SCharles.Forsyth 
328*37da2899SCharles.Forsyth   typedef struct  PFR_GlyphRec_
329*37da2899SCharles.Forsyth   {
330*37da2899SCharles.Forsyth     FT_Byte           format;
331*37da2899SCharles.Forsyth 
332*37da2899SCharles.Forsyth     FT_UInt           num_x_control;
333*37da2899SCharles.Forsyth     FT_UInt           num_y_control;
334*37da2899SCharles.Forsyth     FT_UInt           max_xy_control;
335*37da2899SCharles.Forsyth     FT_Pos*           x_control;
336*37da2899SCharles.Forsyth     FT_Pos*           y_control;
337*37da2899SCharles.Forsyth 
338*37da2899SCharles.Forsyth 
339*37da2899SCharles.Forsyth     FT_UInt           num_subs;
340*37da2899SCharles.Forsyth     FT_UInt           max_subs;
341*37da2899SCharles.Forsyth     PFR_SubGlyphRec*  subs;
342*37da2899SCharles.Forsyth 
343*37da2899SCharles.Forsyth     FT_GlyphLoader    loader;
344*37da2899SCharles.Forsyth     FT_Bool           path_begun;
345*37da2899SCharles.Forsyth 
346*37da2899SCharles.Forsyth   } PFR_GlyphRec, *PFR_Glyph;
347*37da2899SCharles.Forsyth 
348*37da2899SCharles.Forsyth 
349*37da2899SCharles.Forsyth FT_END_HEADER
350*37da2899SCharles.Forsyth 
351*37da2899SCharles.Forsyth #endif /* __PFRTYPES_H__ */
352*37da2899SCharles.Forsyth 
353*37da2899SCharles.Forsyth 
354*37da2899SCharles.Forsyth /* END */
355