|
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 <ft2build.h> |
|
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 */ |