1 | /***************************************************************************/
|
---|
2 | /* */
|
---|
3 | /* tttables.h */
|
---|
4 | /* */
|
---|
5 | /* Basic SFNT/TrueType tables definitions and interface */
|
---|
6 | /* (specification only). */
|
---|
7 | /* */
|
---|
8 | /* Copyright 1996-2001, 2002, 2003, 2004 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 |
|
---|
20 | #ifndef __TTTABLES_H__
|
---|
21 | #define __TTTABLES_H__
|
---|
22 |
|
---|
23 |
|
---|
24 | #include <ft2build.h>
|
---|
25 | #include FT_FREETYPE_H
|
---|
26 |
|
---|
27 | #ifdef FREETYPE_H
|
---|
28 | #error "freetype.h of FreeType 1 has been loaded!"
|
---|
29 | #error "Please fix the directory search order for header files"
|
---|
30 | #error "so that freetype.h of FreeType 2 is found first."
|
---|
31 | #endif
|
---|
32 |
|
---|
33 |
|
---|
34 | FT_BEGIN_HEADER
|
---|
35 |
|
---|
36 | /*************************************************************************/
|
---|
37 | /* */
|
---|
38 | /* <Section> */
|
---|
39 | /* truetype_tables */
|
---|
40 | /* */
|
---|
41 | /* <Title> */
|
---|
42 | /* TrueType Tables */
|
---|
43 | /* */
|
---|
44 | /* <Abstract> */
|
---|
45 | /* TrueType specific table types and functions. */
|
---|
46 | /* */
|
---|
47 | /* <Description> */
|
---|
48 | /* This section contains the definition of TrueType-specific tables */
|
---|
49 | /* as well as some routines used to access and process them. */
|
---|
50 | /* */
|
---|
51 | /*************************************************************************/
|
---|
52 |
|
---|
53 |
|
---|
54 | /*************************************************************************/
|
---|
55 | /* */
|
---|
56 | /* <Struct> */
|
---|
57 | /* TT_Header */
|
---|
58 | /* */
|
---|
59 | /* <Description> */
|
---|
60 | /* A structure used to model a TrueType font header table. All */
|
---|
61 | /* fields follow the TrueType specification. */
|
---|
62 | /* */
|
---|
63 | typedef struct TT_Header_
|
---|
64 | {
|
---|
65 | FT_Fixed Table_Version;
|
---|
66 | FT_Fixed Font_Revision;
|
---|
67 |
|
---|
68 | FT_Long CheckSum_Adjust;
|
---|
69 | FT_Long Magic_Number;
|
---|
70 |
|
---|
71 | FT_UShort Flags;
|
---|
72 | FT_UShort Units_Per_EM;
|
---|
73 |
|
---|
74 | FT_Long Created [2];
|
---|
75 | FT_Long Modified[2];
|
---|
76 |
|
---|
77 | FT_Short xMin;
|
---|
78 | FT_Short yMin;
|
---|
79 | FT_Short xMax;
|
---|
80 | FT_Short yMax;
|
---|
81 |
|
---|
82 | FT_UShort Mac_Style;
|
---|
83 | FT_UShort Lowest_Rec_PPEM;
|
---|
84 |
|
---|
85 | FT_Short Font_Direction;
|
---|
86 | FT_Short Index_To_Loc_Format;
|
---|
87 | FT_Short Glyph_Data_Format;
|
---|
88 |
|
---|
89 | } TT_Header;
|
---|
90 |
|
---|
91 |
|
---|
92 | /*************************************************************************/
|
---|
93 | /* */
|
---|
94 | /* <Struct> */
|
---|
95 | /* TT_HoriHeader */
|
---|
96 | /* */
|
---|
97 | /* <Description> */
|
---|
98 | /* A structure used to model a TrueType horizontal header, the `hhea' */
|
---|
99 | /* table, as well as the corresponding horizontal metrics table, */
|
---|
100 | /* i.e., the `hmtx' table. */
|
---|
101 | /* */
|
---|
102 | /* <Fields> */
|
---|
103 | /* Version :: The table version. */
|
---|
104 | /* */
|
---|
105 | /* Ascender :: The font's ascender, i.e., the distance */
|
---|
106 | /* from the baseline to the top-most of all */
|
---|
107 | /* glyph points found in the font. */
|
---|
108 | /* */
|
---|
109 | /* This value is invalid in many fonts, as */
|
---|
110 | /* it is usually set by the font designer, */
|
---|
111 | /* and often reflects only a portion of the */
|
---|
112 | /* glyphs found in the font (maybe ASCII). */
|
---|
113 | /* */
|
---|
114 | /* You should use the `sTypoAscender' field */
|
---|
115 | /* of the OS/2 table instead if you want */
|
---|
116 | /* the correct one. */
|
---|
117 | /* */
|
---|
118 | /* Descender :: The font's descender, i.e., the distance */
|
---|
119 | /* from the baseline to the bottom-most of */
|
---|
120 | /* all glyph points found in the font. It */
|
---|
121 | /* is negative. */
|
---|
122 | /* */
|
---|
123 | /* This value is invalid in many fonts, as */
|
---|
124 | /* it is usually set by the font designer, */
|
---|
125 | /* and often reflects only a portion of the */
|
---|
126 | /* glyphs found in the font (maybe ASCII). */
|
---|
127 | /* */
|
---|
128 | /* You should use the `sTypoDescender' */
|
---|
129 | /* field of the OS/2 table instead if you */
|
---|
130 | /* want the correct one. */
|
---|
131 | /* */
|
---|
132 | /* Line_Gap :: The font's line gap, i.e., the distance */
|
---|
133 | /* to add to the ascender and descender to */
|
---|
134 | /* get the BTB, i.e., the */
|
---|
135 | /* baseline-to-baseline distance for the */
|
---|
136 | /* font. */
|
---|
137 | /* */
|
---|
138 | /* advance_Width_Max :: This field is the maximum of all advance */
|
---|
139 | /* widths found in the font. It can be */
|
---|
140 | /* used to compute the maximum width of an */
|
---|
141 | /* arbitrary string of text. */
|
---|
142 | /* */
|
---|
143 | /* min_Left_Side_Bearing :: The minimum left side bearing of all */
|
---|
144 | /* glyphs within the font. */
|
---|
145 | /* */
|
---|
146 | /* min_Right_Side_Bearing :: The minimum right side bearing of all */
|
---|
147 | /* glyphs within the font. */
|
---|
148 | /* */
|
---|
149 | /* xMax_Extent :: The maximum horizontal extent (i.e., the */
|
---|
150 | /* `width' of a glyph's bounding box) for */
|
---|
151 | /* all glyphs in the font. */
|
---|
152 | /* */
|
---|
153 | /* caret_Slope_Rise :: The rise coefficient of the cursor's */
|
---|
154 | /* slope of the cursor (slope=rise/run). */
|
---|
155 | /* */
|
---|
156 | /* caret_Slope_Run :: The run coefficient of the cursor's */
|
---|
157 | /* slope. */
|
---|
158 | /* */
|
---|
159 | /* Reserved :: 10 reserved bytes. */
|
---|
160 | /* */
|
---|
161 | /* metric_Data_Format :: Always 0. */
|
---|
162 | /* */
|
---|
163 | /* number_Of_HMetrics :: Number of HMetrics entries in the `hmtx' */
|
---|
164 | /* table -- this value can be smaller than */
|
---|
165 | /* the total number of glyphs in the font. */
|
---|
166 | /* */
|
---|
167 | /* long_metrics :: A pointer into the `hmtx' table. */
|
---|
168 | /* */
|
---|
169 | /* short_metrics :: A pointer into the `hmtx' table. */
|
---|
170 | /* */
|
---|
171 | /* <Note> */
|
---|
172 | /* IMPORTANT: The TT_HoriHeader and TT_VertHeader structures should */
|
---|
173 | /* be identical except for the names of their fields which */
|
---|
174 | /* are different. */
|
---|
175 | /* */
|
---|
176 | /* This ensures that a single function in the `ttload' */
|
---|
177 | /* module is able to read both the horizontal and vertical */
|
---|
178 | /* headers. */
|
---|
179 | /* */
|
---|
180 | typedef struct TT_HoriHeader_
|
---|
181 | {
|
---|
182 | FT_Fixed Version;
|
---|
183 | FT_Short Ascender;
|
---|
184 | FT_Short Descender;
|
---|
185 | FT_Short Line_Gap;
|
---|
186 |
|
---|
187 | FT_UShort advance_Width_Max; /* advance width maximum */
|
---|
188 |
|
---|
189 | FT_Short min_Left_Side_Bearing; /* minimum left-sb */
|
---|
190 | FT_Short min_Right_Side_Bearing; /* minimum right-sb */
|
---|
191 | FT_Short xMax_Extent; /* xmax extents */
|
---|
192 | FT_Short caret_Slope_Rise;
|
---|
193 | FT_Short caret_Slope_Run;
|
---|
194 | FT_Short caret_Offset;
|
---|
195 |
|
---|
196 | FT_Short Reserved[4];
|
---|
197 |
|
---|
198 | FT_Short metric_Data_Format;
|
---|
199 | FT_UShort number_Of_HMetrics;
|
---|
200 |
|
---|
201 | /* The following fields are not defined by the TrueType specification */
|
---|
202 | /* but they are used to connect the metrics header to the relevant */
|
---|
203 | /* `HMTX' table. */
|
---|
204 |
|
---|
205 | void* long_metrics;
|
---|
206 | void* short_metrics;
|
---|
207 |
|
---|
208 | } TT_HoriHeader;
|
---|
209 |
|
---|
210 |
|
---|
211 | /*************************************************************************/
|
---|
212 | /* */
|
---|
213 | /* <Struct> */
|
---|
214 | /* TT_VertHeader */
|
---|
215 | /* */
|
---|
216 | /* <Description> */
|
---|
217 | /* A structure used to model a TrueType vertical header, the `vhea' */
|
---|
218 | /* table, as well as the corresponding vertical metrics table, i.e., */
|
---|
219 | /* the `vmtx' table. */
|
---|
220 | /* */
|
---|
221 | /* <Fields> */
|
---|
222 | /* Version :: The table version. */
|
---|
223 | /* */
|
---|
224 | /* Ascender :: The font's ascender, i.e., the distance */
|
---|
225 | /* from the baseline to the top-most of */
|
---|
226 | /* all glyph points found in the font. */
|
---|
227 | /* */
|
---|
228 | /* This value is invalid in many fonts, as */
|
---|
229 | /* it is usually set by the font designer, */
|
---|
230 | /* and often reflects only a portion of */
|
---|
231 | /* the glyphs found in the font (maybe */
|
---|
232 | /* ASCII). */
|
---|
233 | /* */
|
---|
234 | /* You should use the `sTypoAscender' */
|
---|
235 | /* field of the OS/2 table instead if you */
|
---|
236 | /* want the correct one. */
|
---|
237 | /* */
|
---|
238 | /* Descender :: The font's descender, i.e., the */
|
---|
239 | /* distance from the baseline to the */
|
---|
240 | /* bottom-most of all glyph points found */
|
---|
241 | /* in the font. It is negative. */
|
---|
242 | /* */
|
---|
243 | /* This value is invalid in many fonts, as */
|
---|
244 | /* it is usually set by the font designer, */
|
---|
245 | /* and often reflects only a portion of */
|
---|
246 | /* the glyphs found in the font (maybe */
|
---|
247 | /* ASCII). */
|
---|
248 | /* */
|
---|
249 | /* You should use the `sTypoDescender' */
|
---|
250 | /* field of the OS/2 table instead if you */
|
---|
251 | /* want the correct one. */
|
---|
252 | /* */
|
---|
253 | /* Line_Gap :: The font's line gap, i.e., the distance */
|
---|
254 | /* to add to the ascender and descender to */
|
---|
255 | /* get the BTB, i.e., the */
|
---|
256 | /* baseline-to-baseline distance for the */
|
---|
257 | /* font. */
|
---|
258 | /* */
|
---|
259 | /* advance_Height_Max :: This field is the maximum of all */
|
---|
260 | /* advance heights found in the font. It */
|
---|
261 | /* can be used to compute the maximum */
|
---|
262 | /* height of an arbitrary string of text. */
|
---|
263 | /* */
|
---|
264 | /* min_Top_Side_Bearing :: The minimum top side bearing of all */
|
---|
265 | /* glyphs within the font. */
|
---|
266 | /* */
|
---|
267 | /* min_Bottom_Side_Bearing :: The minimum bottom side bearing of all */
|
---|
268 | /* glyphs within the font. */
|
---|
269 | /* */
|
---|
270 | /* yMax_Extent :: The maximum vertical extent (i.e., the */
|
---|
271 | /* `height' of a glyph's bounding box) for */
|
---|
272 | /* all glyphs in the font. */
|
---|
273 | /* */
|
---|
274 | /* caret_Slope_Rise :: The rise coefficient of the cursor's */
|
---|
275 | /* slope of the cursor (slope=rise/run). */
|
---|
276 | /* */
|
---|
277 | /* caret_Slope_Run :: The run coefficient of the cursor's */
|
---|
278 | /* slope. */
|
---|
279 | /* */
|
---|
280 | /* caret_Offset :: The cursor's offset for slanted fonts. */
|
---|
281 | /* This value is `reserved' in vmtx */
|
---|
282 | /* version 1.0. */
|
---|
283 | /* */
|
---|
284 | /* Reserved :: 8 reserved bytes. */
|
---|
285 | /* */
|
---|
286 | /* metric_Data_Format :: Always 0. */
|
---|
287 | /* */
|
---|
288 | /* number_Of_HMetrics :: Number of VMetrics entries in the */
|
---|
289 | /* `vmtx' table -- this value can be */
|
---|
290 | /* smaller than the total number of glyphs */
|
---|
291 | /* in the font. */
|
---|
292 | /* */
|
---|
293 | /* long_metrics :: A pointer into the `vmtx' table. */
|
---|
294 | /* */
|
---|
295 | /* short_metrics :: A pointer into the `vmtx' table. */
|
---|
296 | /* */
|
---|
297 | /* <Note> */
|
---|
298 | /* IMPORTANT: The TT_HoriHeader and TT_VertHeader structures should */
|
---|
299 | /* be identical except for the names of their fields which */
|
---|
300 | /* are different. */
|
---|
301 | /* */
|
---|
302 | /* This ensures that a single function in the `ttload' */
|
---|
303 | /* module is able to read both the horizontal and vertical */
|
---|
304 | /* headers. */
|
---|
305 | /* */
|
---|
306 | typedef struct TT_VertHeader_
|
---|
307 | {
|
---|
308 | FT_Fixed Version;
|
---|
309 | FT_Short Ascender;
|
---|
310 | FT_Short Descender;
|
---|
311 | FT_Short Line_Gap;
|
---|
312 |
|
---|
313 | FT_UShort advance_Height_Max; /* advance height maximum */
|
---|
314 |
|
---|
315 | FT_Short min_Top_Side_Bearing; /* minimum left-sb or top-sb */
|
---|
316 | FT_Short min_Bottom_Side_Bearing; /* minimum right-sb or bottom-sb */
|
---|
317 | FT_Short yMax_Extent; /* xmax or ymax extents */
|
---|
318 | FT_Short caret_Slope_Rise;
|
---|
319 | FT_Short caret_Slope_Run;
|
---|
320 | FT_Short caret_Offset;
|
---|
321 |
|
---|
322 | FT_Short Reserved[4];
|
---|
323 |
|
---|
324 | FT_Short metric_Data_Format;
|
---|
325 | FT_UShort number_Of_VMetrics;
|
---|
326 |
|
---|
327 | /* The following fields are not defined by the TrueType specification */
|
---|
328 | /* but they're used to connect the metrics header to the relevant */
|
---|
329 | /* `HMTX' or `VMTX' table. */
|
---|
330 |
|
---|
331 | void* long_metrics;
|
---|
332 | void* short_metrics;
|
---|
333 |
|
---|
334 | } TT_VertHeader;
|
---|
335 |
|
---|
336 |
|
---|
337 | /*************************************************************************/
|
---|
338 | /* */
|
---|
339 | /* <Struct> */
|
---|
340 | /* TT_OS2 */
|
---|
341 | /* */
|
---|
342 | /* <Description> */
|
---|
343 | /* A structure used to model a TrueType OS/2 table. This is the long */
|
---|
344 | /* table version. All fields comply to the TrueType specification. */
|
---|
345 | /* */
|
---|
346 | /* Note that we now support old Mac fonts which do not include an */
|
---|
347 | /* OS/2 table. In this case, the `version' field is always set to */
|
---|
348 | /* 0xFFFF. */
|
---|
349 | /* */
|
---|
350 | typedef struct TT_OS2_
|
---|
351 | {
|
---|
352 | FT_UShort version; /* 0x0001 - more or 0xFFFF */
|
---|
353 | FT_Short xAvgCharWidth;
|
---|
354 | FT_UShort usWeightClass;
|
---|
355 | FT_UShort usWidthClass;
|
---|
356 | FT_Short fsType;
|
---|
357 | FT_Short ySubscriptXSize;
|
---|
358 | FT_Short ySubscriptYSize;
|
---|
359 | FT_Short ySubscriptXOffset;
|
---|
360 | FT_Short ySubscriptYOffset;
|
---|
361 | FT_Short ySuperscriptXSize;
|
---|
362 | FT_Short ySuperscriptYSize;
|
---|
363 | FT_Short ySuperscriptXOffset;
|
---|
364 | FT_Short ySuperscriptYOffset;
|
---|
365 | FT_Short yStrikeoutSize;
|
---|
366 | FT_Short yStrikeoutPosition;
|
---|
367 | FT_Short sFamilyClass;
|
---|
368 |
|
---|
369 | FT_Byte panose[10];
|
---|
370 |
|
---|
371 | FT_ULong ulUnicodeRange1; /* Bits 0-31 */
|
---|
372 | FT_ULong ulUnicodeRange2; /* Bits 32-63 */
|
---|
373 | FT_ULong ulUnicodeRange3; /* Bits 64-95 */
|
---|
374 | FT_ULong ulUnicodeRange4; /* Bits 96-127 */
|
---|
375 |
|
---|
376 | FT_Char achVendID[4];
|
---|
377 |
|
---|
378 | FT_UShort fsSelection;
|
---|
379 | FT_UShort usFirstCharIndex;
|
---|
380 | FT_UShort usLastCharIndex;
|
---|
381 | FT_Short sTypoAscender;
|
---|
382 | FT_Short sTypoDescender;
|
---|
383 | FT_Short sTypoLineGap;
|
---|
384 | FT_UShort usWinAscent;
|
---|
385 | FT_UShort usWinDescent;
|
---|
386 |
|
---|
387 | /* only version 1 tables: */
|
---|
388 |
|
---|
389 | FT_ULong ulCodePageRange1; /* Bits 0-31 */
|
---|
390 | FT_ULong ulCodePageRange2; /* Bits 32-63 */
|
---|
391 |
|
---|
392 | /* only version 2 tables: */
|
---|
393 |
|
---|
394 | FT_Short sxHeight;
|
---|
395 | FT_Short sCapHeight;
|
---|
396 | FT_UShort usDefaultChar;
|
---|
397 | FT_UShort usBreakChar;
|
---|
398 | FT_UShort usMaxContext;
|
---|
399 |
|
---|
400 | } TT_OS2;
|
---|
401 |
|
---|
402 |
|
---|
403 | /*************************************************************************/
|
---|
404 | /* */
|
---|
405 | /* <Struct> */
|
---|
406 | /* TT_Postscript */
|
---|
407 | /* */
|
---|
408 | /* <Description> */
|
---|
409 | /* A structure used to model a TrueType Postscript table. All fields */
|
---|
410 | /* comply to the TrueType table. This structure does not reference */
|
---|
411 | /* the Postscript glyph names, which can be nevertheless accessed */
|
---|
412 | /* with the `ttpost' module. */
|
---|
413 | /* */
|
---|
414 | typedef struct TT_Postscript_
|
---|
415 | {
|
---|
416 | FT_Fixed FormatType;
|
---|
417 | FT_Fixed italicAngle;
|
---|
418 | FT_Short underlinePosition;
|
---|
419 | FT_Short underlineThickness;
|
---|
420 | FT_ULong isFixedPitch;
|
---|
421 | FT_ULong minMemType42;
|
---|
422 | FT_ULong maxMemType42;
|
---|
423 | FT_ULong minMemType1;
|
---|
424 | FT_ULong maxMemType1;
|
---|
425 |
|
---|
426 | /* Glyph names follow in the file, but we don't */
|
---|
427 | /* load them by default. See the ttpost.c file. */
|
---|
428 |
|
---|
429 | } TT_Postscript;
|
---|
430 |
|
---|
431 |
|
---|
432 | /*************************************************************************/
|
---|
433 | /* */
|
---|
434 | /* <Struct> */
|
---|
435 | /* TT_PCLT */
|
---|
436 | /* */
|
---|
437 | /* <Description> */
|
---|
438 | /* A structure used to model a TrueType PCLT table. All fields */
|
---|
439 | /* comply to the TrueType table. */
|
---|
440 | /* */
|
---|
441 | typedef struct TT_PCLT_
|
---|
442 | {
|
---|
443 | FT_Fixed Version;
|
---|
444 | FT_ULong FontNumber;
|
---|
445 | FT_UShort Pitch;
|
---|
446 | FT_UShort xHeight;
|
---|
447 | FT_UShort Style;
|
---|
448 | FT_UShort TypeFamily;
|
---|
449 | FT_UShort CapHeight;
|
---|
450 | FT_UShort SymbolSet;
|
---|
451 | FT_Char TypeFace[16];
|
---|
452 | FT_Char CharacterComplement[8];
|
---|
453 | FT_Char FileName[6];
|
---|
454 | FT_Char StrokeWeight;
|
---|
455 | FT_Char WidthType;
|
---|
456 | FT_Byte SerifStyle;
|
---|
457 | FT_Byte Reserved;
|
---|
458 |
|
---|
459 | } TT_PCLT;
|
---|
460 |
|
---|
461 |
|
---|
462 | /*************************************************************************/
|
---|
463 | /* */
|
---|
464 | /* <Struct> */
|
---|
465 | /* TT_MaxProfile */
|
---|
466 | /* */
|
---|
467 | /* <Description> */
|
---|
468 | /* The maximum profile is a table containing many max values which */
|
---|
469 | /* can be used to pre-allocate arrays. This ensures that no memory */
|
---|
470 | /* allocation occurs during a glyph load. */
|
---|
471 | /* */
|
---|
472 | /* <Fields> */
|
---|
473 | /* version :: The version number. */
|
---|
474 | /* */
|
---|
475 | /* numGlyphs :: The number of glyphs in this TrueType */
|
---|
476 | /* font. */
|
---|
477 | /* */
|
---|
478 | /* maxPoints :: The maximum number of points in a */
|
---|
479 | /* non-composite TrueType glyph. See also */
|
---|
480 | /* the structure element */
|
---|
481 | /* `maxCompositePoints'. */
|
---|
482 | /* */
|
---|
483 | /* maxContours :: The maximum number of contours in a */
|
---|
484 | /* non-composite TrueType glyph. See also */
|
---|
485 | /* the structure element */
|
---|
486 | /* `maxCompositeContours'. */
|
---|
487 | /* */
|
---|
488 | /* maxCompositePoints :: The maximum number of points in a */
|
---|
489 | /* composite TrueType glyph. See also the */
|
---|
490 | /* structure element `maxPoints'. */
|
---|
491 | /* */
|
---|
492 | /* maxCompositeContours :: The maximum number of contours in a */
|
---|
493 | /* composite TrueType glyph. See also the */
|
---|
494 | /* structure element `maxContours'. */
|
---|
495 | /* */
|
---|
496 | /* maxZones :: The maximum number of zones used for */
|
---|
497 | /* glyph hinting. */
|
---|
498 | /* */
|
---|
499 | /* maxTwilightPoints :: The maximum number of points in the */
|
---|
500 | /* twilight zone used for glyph hinting. */
|
---|
501 | /* */
|
---|
502 | /* maxStorage :: The maximum number of elements in the */
|
---|
503 | /* storage area used for glyph hinting. */
|
---|
504 | /* */
|
---|
505 | /* maxFunctionDefs :: The maximum number of function */
|
---|
506 | /* definitions in the TrueType bytecode for */
|
---|
507 | /* this font. */
|
---|
508 | /* */
|
---|
509 | /* maxInstructionDefs :: The maximum number of instruction */
|
---|
510 | /* definitions in the TrueType bytecode for */
|
---|
511 | /* this font. */
|
---|
512 | /* */
|
---|
513 | /* maxStackElements :: The maximum number of stack elements used */
|
---|
514 | /* during bytecode interpretation. */
|
---|
515 | /* */
|
---|
516 | /* maxSizeOfInstructions :: The maximum number of TrueType opcodes */
|
---|
517 | /* used for glyph hinting. */
|
---|
518 | /* */
|
---|
519 | /* maxComponentElements :: The maximum number of simple (i.e., non- */
|
---|
520 | /* composite) glyphs in a composite glyph. */
|
---|
521 | /* */
|
---|
522 | /* maxComponentDepth :: The maximum nesting depth of composite */
|
---|
523 | /* glyphs. */
|
---|
524 | /* */
|
---|
525 | /* <Note> */
|
---|
526 | /* This structure is only used during font loading. */
|
---|
527 | /* */
|
---|
528 | typedef struct TT_MaxProfile_
|
---|
529 | {
|
---|
530 | FT_Fixed version;
|
---|
531 | FT_UShort numGlyphs;
|
---|
532 | FT_UShort maxPoints;
|
---|
533 | FT_UShort maxContours;
|
---|
534 | FT_UShort maxCompositePoints;
|
---|
535 | FT_UShort maxCompositeContours;
|
---|
536 | FT_UShort maxZones;
|
---|
537 | FT_UShort maxTwilightPoints;
|
---|
538 | FT_UShort maxStorage;
|
---|
539 | FT_UShort maxFunctionDefs;
|
---|
540 | FT_UShort maxInstructionDefs;
|
---|
541 | FT_UShort maxStackElements;
|
---|
542 | FT_UShort maxSizeOfInstructions;
|
---|
543 | FT_UShort maxComponentElements;
|
---|
544 | FT_UShort maxComponentDepth;
|
---|
545 |
|
---|
546 | } TT_MaxProfile;
|
---|
547 |
|
---|
548 |
|
---|
549 | /*************************************************************************/
|
---|
550 | /* */
|
---|
551 | /* <Enum> */
|
---|
552 | /* FT_Sfnt_Tag */
|
---|
553 | /* */
|
---|
554 | /* <Description> */
|
---|
555 | /* An enumeration used to specify the index of an SFNT table. */
|
---|
556 | /* Used in the @FT_Get_Sfnt_Table API function. */
|
---|
557 | /* */
|
---|
558 | typedef enum
|
---|
559 | {
|
---|
560 | ft_sfnt_head = 0,
|
---|
561 | ft_sfnt_maxp = 1,
|
---|
562 | ft_sfnt_os2 = 2,
|
---|
563 | ft_sfnt_hhea = 3,
|
---|
564 | ft_sfnt_vhea = 4,
|
---|
565 | ft_sfnt_post = 5,
|
---|
566 | ft_sfnt_pclt = 6,
|
---|
567 |
|
---|
568 | sfnt_max /* internal end mark */
|
---|
569 |
|
---|
570 | } FT_Sfnt_Tag;
|
---|
571 |
|
---|
572 | /* */
|
---|
573 |
|
---|
574 |
|
---|
575 | /*************************************************************************/
|
---|
576 | /* */
|
---|
577 | /* <Function> */
|
---|
578 | /* FT_Get_Sfnt_Table */
|
---|
579 | /* */
|
---|
580 | /* <Description> */
|
---|
581 | /* Returns a pointer to a given SFNT table within a face. */
|
---|
582 | /* */
|
---|
583 | /* <Input> */
|
---|
584 | /* face :: A handle to the source. */
|
---|
585 | /* */
|
---|
586 | /* tag :: The index of the SFNT table. */
|
---|
587 | /* */
|
---|
588 | /* <Return> */
|
---|
589 | /* A type-less pointer to the table. This will be 0 in case of */
|
---|
590 | /* error, or if the corresponding table was not found *OR* loaded */
|
---|
591 | /* from the file. */
|
---|
592 | /* */
|
---|
593 | /* <Note> */
|
---|
594 | /* The table is owned by the face object and disappears with it. */
|
---|
595 | /* */
|
---|
596 | /* This function is only useful to access SFNT tables that are loaded */
|
---|
597 | /* by the sfnt/truetype/opentype drivers. See @FT_Sfnt_Tag for a */
|
---|
598 | /* list. */
|
---|
599 | /* */
|
---|
600 | FT_EXPORT( void* )
|
---|
601 | FT_Get_Sfnt_Table( FT_Face face,
|
---|
602 | FT_Sfnt_Tag tag );
|
---|
603 |
|
---|
604 |
|
---|
605 | /**************************************************************************
|
---|
606 | *
|
---|
607 | * <Function>
|
---|
608 | * FT_Load_Sfnt_Table
|
---|
609 | *
|
---|
610 | * <Description>
|
---|
611 | * Loads any font table into client memory.
|
---|
612 | *
|
---|
613 | * <Input>
|
---|
614 | * face :: A handle to the source face.
|
---|
615 | *
|
---|
616 | * tag :: The 4-byte tag of the table to load. Use the value 0 if
|
---|
617 | * you want to access the whole font file. Otherwise, you can
|
---|
618 | * use one of the definitions found in the @FT_TRUETYPE_TAGS_H
|
---|
619 | * file, or forge a new one with @FT_MAKE_TAG.
|
---|
620 | *
|
---|
621 | * offset :: The starting offset in the table (or file if tag == 0).
|
---|
622 | *
|
---|
623 | * <Output>
|
---|
624 | * buffer :: The target buffer address. The client must ensure that
|
---|
625 | * the memory array is big enough to hold the data.
|
---|
626 | *
|
---|
627 | * <InOut>
|
---|
628 | * length :: If the `length' parameter is NULL, then try to load the whole
|
---|
629 | * table. Return an error code if it fails.
|
---|
630 | *
|
---|
631 | * Else, if `*length' is 0, exit immediately while returning
|
---|
632 | * the table's (or file) full size in it.
|
---|
633 | *
|
---|
634 | * Else the number of bytes to read from the table or file,
|
---|
635 | * from the starting offset.
|
---|
636 | *
|
---|
637 | * <Return>
|
---|
638 | * FreeType error code. 0 means success.
|
---|
639 | *
|
---|
640 | * <Note>
|
---|
641 | * If you need to determine the table's length you should first call this
|
---|
642 | * function with `*length' set to 0, as in the following example:
|
---|
643 | *
|
---|
644 | * {
|
---|
645 | * FT_ULong length = 0;
|
---|
646 | *
|
---|
647 | *
|
---|
648 | * error = FT_Load_Sfnt_Table( face, tag, 0, NULL, &length );
|
---|
649 | * if ( error ) { ... table does not exist ... }
|
---|
650 | *
|
---|
651 | * buffer = malloc( length );
|
---|
652 | * if ( buffer == NULL ) { ... not enough memory ... }
|
---|
653 | *
|
---|
654 | * error = FT_Load_Sfnt_Table( face, tag, 0, buffer, &length );
|
---|
655 | * if ( error ) { ... could not load table ... }
|
---|
656 | * }
|
---|
657 | */
|
---|
658 | FT_EXPORT( FT_Error )
|
---|
659 | FT_Load_Sfnt_Table( FT_Face face,
|
---|
660 | FT_ULong tag,
|
---|
661 | FT_Long offset,
|
---|
662 | FT_Byte* buffer,
|
---|
663 | FT_ULong* length );
|
---|
664 |
|
---|
665 |
|
---|
666 | /**************************************************************************
|
---|
667 | *
|
---|
668 | * <Function>
|
---|
669 | * FT_Sfnt_Table_Info
|
---|
670 | *
|
---|
671 | * <Description>
|
---|
672 | * Returns information on an SFNT table.
|
---|
673 | *
|
---|
674 | * <Input>
|
---|
675 | * face ::
|
---|
676 | * A handle to the source face.
|
---|
677 | *
|
---|
678 | * table_index ::
|
---|
679 | * The index of an SFNT table. The function returns
|
---|
680 | * FT_Err_Table_Missing for an invalid value.
|
---|
681 | *
|
---|
682 | * <Output>
|
---|
683 | * tag ::
|
---|
684 | * The name tag of the SFNT table.
|
---|
685 | *
|
---|
686 | * length ::
|
---|
687 | * The length of the SFNT table.
|
---|
688 | *
|
---|
689 | * <Return>
|
---|
690 | * FreeType error code. 0 means success.
|
---|
691 | *
|
---|
692 | * <Note>
|
---|
693 | * SFNT tables with length zero are treated as missing by Windows.
|
---|
694 | *
|
---|
695 | */
|
---|
696 | FT_EXPORT( FT_Error )
|
---|
697 | FT_Sfnt_Table_Info( FT_Face face,
|
---|
698 | FT_UInt table_index,
|
---|
699 | FT_ULong *tag,
|
---|
700 | FT_ULong *length );
|
---|
701 |
|
---|
702 |
|
---|
703 | /*************************************************************************/
|
---|
704 | /* */
|
---|
705 | /* <Function> */
|
---|
706 | /* FT_Get_CMap_Language_ID */
|
---|
707 | /* */
|
---|
708 | /* <Description> */
|
---|
709 | /* Return TrueType/sfnt specific cmap language ID. Definitions of */
|
---|
710 | /* language ID values are in freetype/ttnameid.h. */
|
---|
711 | /* */
|
---|
712 | /* <Input> */
|
---|
713 | /* charmap :: */
|
---|
714 | /* The target charmap. */
|
---|
715 | /* */
|
---|
716 | /* <Return> */
|
---|
717 | /* The language ID of `charmap'. If `charmap' doesn't belong to a */
|
---|
718 | /* TrueType/sfnt face, just return 0 as the default value. */
|
---|
719 | /* */
|
---|
720 | FT_EXPORT( FT_ULong )
|
---|
721 | FT_Get_CMap_Language_ID( FT_CharMap charmap );
|
---|
722 |
|
---|
723 | /* */
|
---|
724 |
|
---|
725 |
|
---|
726 | FT_END_HEADER
|
---|
727 |
|
---|
728 | #endif /* __TTTABLES_H__ */
|
---|
729 |
|
---|
730 |
|
---|
731 | /* END */
|
---|