]>
Commit | Line | Data |
---|---|---|
7407ac7f BB |
1 | /***************************************************************************/ |
2 | /* */ | |
3 | /* tttables.h */ | |
4 | /* */ | |
5 | /* Basic SFNT/TrueType tables definitions and interface */ | |
6 | /* (specification only). */ | |
7 | /* */ | |
8 | /* Copyright 1996-2005, 2008-2012 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 :: 8~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 specification. This structure does not */ | |
411 | /* reference the PostScript glyph names, which can be nevertheless */ | |
412 | /* accessed 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 specification. */ | |
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 FT_Sfnt_Tag_ | |
559 | { | |
560 | ft_sfnt_head = 0, /* TT_Header */ | |
561 | ft_sfnt_maxp = 1, /* TT_MaxProfile */ | |
562 | ft_sfnt_os2 = 2, /* TT_OS2 */ | |
563 | ft_sfnt_hhea = 3, /* TT_HoriHeader */ | |
564 | ft_sfnt_vhea = 4, /* TT_VertHeader */ | |
565 | ft_sfnt_post = 5, /* TT_Postscript */ | |
566 | ft_sfnt_pclt = 6, /* TT_PCLT */ | |
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 | /* Return 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 | /* Use a typecast according to `tag' to access the structure */ | |
594 | /* elements. */ | |
595 | /* */ | |
596 | /* <Note> */ | |
597 | /* The table is owned by the face object and disappears with it. */ | |
598 | /* */ | |
599 | /* This function is only useful to access SFNT tables that are loaded */ | |
600 | /* by the sfnt, truetype, and opentype drivers. See @FT_Sfnt_Tag for */ | |
601 | /* a list. */ | |
602 | /* */ | |
603 | /* Here an example how to access the `vhea' table: */ | |
604 | /* */ | |
605 | /* { */ | |
606 | /* TT_VertHeader* vert_header; */ | |
607 | /* */ | |
608 | /* */ | |
609 | /* vert_header = */ | |
610 | /* (TT_VertHeader*)FT_Get_Sfnt_Table( face, ft_sfnt_vhea ); */ | |
611 | /* } */ | |
612 | /* */ | |
613 | FT_EXPORT( void* ) | |
614 | FT_Get_Sfnt_Table( FT_Face face, | |
615 | FT_Sfnt_Tag tag ); | |
616 | ||
617 | ||
618 | /************************************************************************** | |
619 | * | |
620 | * @function: | |
621 | * FT_Load_Sfnt_Table | |
622 | * | |
623 | * @description: | |
624 | * Load any font table into client memory. | |
625 | * | |
626 | * @input: | |
627 | * face :: | |
628 | * A handle to the source face. | |
629 | * | |
630 | * tag :: | |
631 | * The four-byte tag of the table to load. Use the value~0 if you want | |
632 | * to access the whole font file. Otherwise, you can use one of the | |
633 | * definitions found in the @FT_TRUETYPE_TAGS_H file, or forge a new | |
634 | * one with @FT_MAKE_TAG. | |
635 | * | |
636 | * offset :: | |
637 | * The starting offset in the table (or file if tag == 0). | |
638 | * | |
639 | * @output: | |
640 | * buffer :: | |
641 | * The target buffer address. The client must ensure that the memory | |
642 | * array is big enough to hold the data. | |
643 | * | |
644 | * @inout: | |
645 | * length :: | |
646 | * If the `length' parameter is NULL, then try to load the whole table. | |
647 | * Return an error code if it fails. | |
648 | * | |
649 | * Else, if `*length' is~0, exit immediately while returning the | |
650 | * table's (or file) full size in it. | |
651 | * | |
652 | * Else the number of bytes to read from the table or file, from the | |
653 | * starting offset. | |
654 | * | |
655 | * @return: | |
656 | * FreeType error code. 0~means success. | |
657 | * | |
658 | * @note: | |
659 | * If you need to determine the table's length you should first call this | |
660 | * function with `*length' set to~0, as in the following example: | |
661 | * | |
662 | * { | |
663 | * FT_ULong length = 0; | |
664 | * | |
665 | * | |
666 | * error = FT_Load_Sfnt_Table( face, tag, 0, NULL, &length ); | |
667 | * if ( error ) { ... table does not exist ... } | |
668 | * | |
669 | * buffer = malloc( length ); | |
670 | * if ( buffer == NULL ) { ... not enough memory ... } | |
671 | * | |
672 | * error = FT_Load_Sfnt_Table( face, tag, 0, buffer, &length ); | |
673 | * if ( error ) { ... could not load table ... } | |
674 | * } | |
675 | */ | |
676 | FT_EXPORT( FT_Error ) | |
677 | FT_Load_Sfnt_Table( FT_Face face, | |
678 | FT_ULong tag, | |
679 | FT_Long offset, | |
680 | FT_Byte* buffer, | |
681 | FT_ULong* length ); | |
682 | ||
683 | ||
684 | /************************************************************************** | |
685 | * | |
686 | * @function: | |
687 | * FT_Sfnt_Table_Info | |
688 | * | |
689 | * @description: | |
690 | * Return information on an SFNT table. | |
691 | * | |
692 | * @input: | |
693 | * face :: | |
694 | * A handle to the source face. | |
695 | * | |
696 | * table_index :: | |
697 | * The index of an SFNT table. The function returns | |
698 | * FT_Err_Table_Missing for an invalid value. | |
699 | * | |
700 | * @inout: | |
701 | * tag :: | |
702 | * The name tag of the SFNT table. If the value is NULL, `table_index' | |
703 | * is ignored, and `length' returns the number of SFNT tables in the | |
704 | * font. | |
705 | * | |
706 | * @output: | |
707 | * length :: | |
708 | * The length of the SFNT table (or the number of SFNT tables, depending | |
709 | * on `tag'). | |
710 | * | |
711 | * @return: | |
712 | * FreeType error code. 0~means success. | |
713 | * | |
714 | * @note: | |
715 | * While parsing fonts, FreeType handles SFNT tables with length zero as | |
716 | * missing. | |
717 | * | |
718 | */ | |
719 | FT_EXPORT( FT_Error ) | |
720 | FT_Sfnt_Table_Info( FT_Face face, | |
721 | FT_UInt table_index, | |
722 | FT_ULong *tag, | |
723 | FT_ULong *length ); | |
724 | ||
725 | ||
726 | /*************************************************************************/ | |
727 | /* */ | |
728 | /* <Function> */ | |
729 | /* FT_Get_CMap_Language_ID */ | |
730 | /* */ | |
731 | /* <Description> */ | |
732 | /* Return TrueType/sfnt specific cmap language ID. Definitions of */ | |
733 | /* language ID values are in `freetype/ttnameid.h'. */ | |
734 | /* */ | |
735 | /* <Input> */ | |
736 | /* charmap :: */ | |
737 | /* The target charmap. */ | |
738 | /* */ | |
739 | /* <Return> */ | |
740 | /* The language ID of `charmap'. If `charmap' doesn't belong to a */ | |
741 | /* TrueType/sfnt face, just return~0 as the default value. */ | |
742 | /* */ | |
743 | /* For a format~14 cmap (to access Unicode IVS), the return value is */ | |
744 | /* 0xFFFFFFFF. */ | |
745 | /* */ | |
746 | FT_EXPORT( FT_ULong ) | |
747 | FT_Get_CMap_Language_ID( FT_CharMap charmap ); | |
748 | ||
749 | ||
750 | /*************************************************************************/ | |
751 | /* */ | |
752 | /* <Function> */ | |
753 | /* FT_Get_CMap_Format */ | |
754 | /* */ | |
755 | /* <Description> */ | |
756 | /* Return TrueType/sfnt specific cmap format. */ | |
757 | /* */ | |
758 | /* <Input> */ | |
759 | /* charmap :: */ | |
760 | /* The target charmap. */ | |
761 | /* */ | |
762 | /* <Return> */ | |
763 | /* The format of `charmap'. If `charmap' doesn't belong to a */ | |
764 | /* TrueType/sfnt face, return -1. */ | |
765 | /* */ | |
766 | FT_EXPORT( FT_Long ) | |
767 | FT_Get_CMap_Format( FT_CharMap charmap ); | |
768 | ||
769 | /* */ | |
770 | ||
771 | ||
772 | FT_END_HEADER | |
773 | ||
774 | #endif /* __TTTABLES_H__ */ | |
775 | ||
776 | ||
777 | /* END */ |