OLD | NEW |
| (Empty) |
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 "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 */ | |
OLD | NEW |