Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Details | Last modification | View Log | RSS feed

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