1 | /***************************************************************************/ |
2 | /* */ |
3 | /* tttables.h */ |
4 | /* */ |
5 | /* Basic SFNT/TrueType tables definitions and interface */ |
6 | /* (specification only). */ |
7 | /* */ |
8 | /* Copyright 1996-2018 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 definitions of some basic tables specific to */ |
49 | /* TrueType and OpenType as well as some routines used to access and */ |
50 | /* process them. */ |
51 | /* */ |
52 | /* <Order> */ |
53 | /* TT_Header */ |
54 | /* TT_HoriHeader */ |
55 | /* TT_VertHeader */ |
56 | /* TT_OS2 */ |
57 | /* TT_Postscript */ |
58 | /* TT_PCLT */ |
59 | /* TT_MaxProfile */ |
60 | /* */ |
61 | /* FT_Sfnt_Tag */ |
62 | /* FT_Get_Sfnt_Table */ |
63 | /* FT_Load_Sfnt_Table */ |
64 | /* FT_Sfnt_Table_Info */ |
65 | /* */ |
66 | /* FT_Get_CMap_Language_ID */ |
67 | /* FT_Get_CMap_Format */ |
68 | /* */ |
69 | /* FT_PARAM_TAG_UNPATENTED_HINTING */ |
70 | /* */ |
71 | /*************************************************************************/ |
72 | |
73 | |
74 | /*************************************************************************/ |
75 | /* */ |
76 | /* <Struct> */ |
77 | /* TT_Header */ |
78 | /* */ |
79 | /* <Description> */ |
80 | /* A structure to model a TrueType font header table. All fields */ |
81 | /* follow the OpenType specification. */ |
82 | /* */ |
83 | typedef struct |
84 | { |
85 | FT_Fixed ; |
86 | FT_Fixed ; |
87 | |
88 | FT_Long ; |
89 | FT_Long ; |
90 | |
91 | FT_UShort ; |
92 | FT_UShort ; |
93 | |
94 | FT_Long [2]; |
95 | FT_Long [2]; |
96 | |
97 | FT_Short ; |
98 | FT_Short ; |
99 | FT_Short ; |
100 | FT_Short ; |
101 | |
102 | FT_UShort ; |
103 | FT_UShort ; |
104 | |
105 | FT_Short ; |
106 | FT_Short ; |
107 | FT_Short ; |
108 | |
109 | } ; |
110 | |
111 | |
112 | /*************************************************************************/ |
113 | /* */ |
114 | /* <Struct> */ |
115 | /* TT_HoriHeader */ |
116 | /* */ |
117 | /* <Description> */ |
118 | /* A structure to model a TrueType horizontal header, the `hhea' */ |
119 | /* table, as well as the corresponding horizontal metrics table, */ |
120 | /* `hmtx'. */ |
121 | /* */ |
122 | /* <Fields> */ |
123 | /* Version :: The table version. */ |
124 | /* */ |
125 | /* Ascender :: The font's ascender, i.e., the distance */ |
126 | /* from the baseline to the top-most of all */ |
127 | /* glyph points found in the font. */ |
128 | /* */ |
129 | /* This value is invalid in many fonts, as */ |
130 | /* it is usually set by the font designer, */ |
131 | /* and often reflects only a portion of the */ |
132 | /* glyphs found in the font (maybe ASCII). */ |
133 | /* */ |
134 | /* You should use the `sTypoAscender' field */ |
135 | /* of the `OS/2' table instead if you want */ |
136 | /* the correct one. */ |
137 | /* */ |
138 | /* Descender :: The font's descender, i.e., the distance */ |
139 | /* from the baseline to the bottom-most of */ |
140 | /* all glyph points found in the font. It */ |
141 | /* is negative. */ |
142 | /* */ |
143 | /* This value is invalid in many fonts, as */ |
144 | /* it is usually set by the font designer, */ |
145 | /* and often reflects only a portion of the */ |
146 | /* glyphs found in the font (maybe ASCII). */ |
147 | /* */ |
148 | /* You should use the `sTypoDescender' */ |
149 | /* field of the `OS/2' table instead if you */ |
150 | /* want the correct one. */ |
151 | /* */ |
152 | /* Line_Gap :: The font's line gap, i.e., the distance */ |
153 | /* to add to the ascender and descender to */ |
154 | /* get the BTB, i.e., the */ |
155 | /* baseline-to-baseline distance for the */ |
156 | /* font. */ |
157 | /* */ |
158 | /* advance_Width_Max :: This field is the maximum of all advance */ |
159 | /* widths found in the font. It can be */ |
160 | /* used to compute the maximum width of an */ |
161 | /* arbitrary string of text. */ |
162 | /* */ |
163 | /* min_Left_Side_Bearing :: The minimum left side bearing of all */ |
164 | /* glyphs within the font. */ |
165 | /* */ |
166 | /* min_Right_Side_Bearing :: The minimum right side bearing of all */ |
167 | /* glyphs within the font. */ |
168 | /* */ |
169 | /* xMax_Extent :: The maximum horizontal extent (i.e., the */ |
170 | /* `width' of a glyph's bounding box) for */ |
171 | /* all glyphs in the font. */ |
172 | /* */ |
173 | /* caret_Slope_Rise :: The rise coefficient of the cursor's */ |
174 | /* slope of the cursor (slope=rise/run). */ |
175 | /* */ |
176 | /* caret_Slope_Run :: The run coefficient of the cursor's */ |
177 | /* slope. */ |
178 | /* */ |
179 | /* caret_Offset :: The cursor's offset for slanted fonts. */ |
180 | /* */ |
181 | /* Reserved :: 8~reserved bytes. */ |
182 | /* */ |
183 | /* metric_Data_Format :: Always~0. */ |
184 | /* */ |
185 | /* number_Of_HMetrics :: Number of HMetrics entries in the `hmtx' */ |
186 | /* table -- this value can be smaller than */ |
187 | /* the total number of glyphs in the font. */ |
188 | /* */ |
189 | /* long_metrics :: A pointer into the `hmtx' table. */ |
190 | /* */ |
191 | /* short_metrics :: A pointer into the `hmtx' table. */ |
192 | /* */ |
193 | /* <Note> */ |
194 | /* For an OpenType variation font, the values of the following fields */ |
195 | /* can change after a call to @FT_Set_Var_Design_Coordinates (and */ |
196 | /* friends) if the font contains an `MVAR' table: `caret_Slope_Rise', */ |
197 | /* `caret_Slope_Run', and `caret_Offset'. */ |
198 | /* */ |
199 | typedef struct |
200 | { |
201 | FT_Fixed ; |
202 | FT_Short ; |
203 | FT_Short ; |
204 | FT_Short ; |
205 | |
206 | FT_UShort ; /* advance width maximum */ |
207 | |
208 | FT_Short ; /* minimum left-sb */ |
209 | FT_Short ; /* minimum right-sb */ |
210 | FT_Short ; /* xmax extents */ |
211 | FT_Short ; |
212 | FT_Short ; |
213 | FT_Short ; |
214 | |
215 | FT_Short [4]; |
216 | |
217 | FT_Short ; |
218 | FT_UShort ; |
219 | |
220 | /* The following fields are not defined by the OpenType specification */ |
221 | /* but they are used to connect the metrics header to the relevant */ |
222 | /* `hmtx' table. */ |
223 | |
224 | void* ; |
225 | void* ; |
226 | |
227 | } ; |
228 | |
229 | |
230 | /*************************************************************************/ |
231 | /* */ |
232 | /* <Struct> */ |
233 | /* TT_VertHeader */ |
234 | /* */ |
235 | /* <Description> */ |
236 | /* A structure used to model a TrueType vertical header, the `vhea' */ |
237 | /* table, as well as the corresponding vertical metrics table, */ |
238 | /* `vmtx'. */ |
239 | /* */ |
240 | /* <Fields> */ |
241 | /* Version :: The table version. */ |
242 | /* */ |
243 | /* Ascender :: The font's ascender, i.e., the distance */ |
244 | /* from the baseline to the top-most of */ |
245 | /* all glyph points found in the font. */ |
246 | /* */ |
247 | /* This value is invalid in many fonts, as */ |
248 | /* it is usually set by the font designer, */ |
249 | /* and often reflects only a portion of */ |
250 | /* the glyphs found in the font (maybe */ |
251 | /* ASCII). */ |
252 | /* */ |
253 | /* You should use the `sTypoAscender' */ |
254 | /* field of the `OS/2' table instead if */ |
255 | /* you want the correct one. */ |
256 | /* */ |
257 | /* Descender :: The font's descender, i.e., the */ |
258 | /* distance from the baseline to the */ |
259 | /* bottom-most of all glyph points found */ |
260 | /* in the font. It is negative. */ |
261 | /* */ |
262 | /* This value is invalid in many fonts, as */ |
263 | /* it is usually set by the font designer, */ |
264 | /* and often reflects only a portion of */ |
265 | /* the glyphs found in the font (maybe */ |
266 | /* ASCII). */ |
267 | /* */ |
268 | /* You should use the `sTypoDescender' */ |
269 | /* field of the `OS/2' table instead if */ |
270 | /* you want the correct one. */ |
271 | /* */ |
272 | /* Line_Gap :: The font's line gap, i.e., the distance */ |
273 | /* to add to the ascender and descender to */ |
274 | /* get the BTB, i.e., the */ |
275 | /* baseline-to-baseline distance for the */ |
276 | /* font. */ |
277 | /* */ |
278 | /* advance_Height_Max :: This field is the maximum of all */ |
279 | /* advance heights found in the font. It */ |
280 | /* can be used to compute the maximum */ |
281 | /* height of an arbitrary string of text. */ |
282 | /* */ |
283 | /* min_Top_Side_Bearing :: The minimum top side bearing of all */ |
284 | /* glyphs within the font. */ |
285 | /* */ |
286 | /* min_Bottom_Side_Bearing :: The minimum bottom side bearing of all */ |
287 | /* glyphs within the font. */ |
288 | /* */ |
289 | /* yMax_Extent :: The maximum vertical extent (i.e., the */ |
290 | /* `height' of a glyph's bounding box) for */ |
291 | /* all glyphs in the font. */ |
292 | /* */ |
293 | /* caret_Slope_Rise :: The rise coefficient of the cursor's */ |
294 | /* slope of the cursor (slope=rise/run). */ |
295 | /* */ |
296 | /* caret_Slope_Run :: The run coefficient of the cursor's */ |
297 | /* slope. */ |
298 | /* */ |
299 | /* caret_Offset :: The cursor's offset for slanted fonts. */ |
300 | /* */ |
301 | /* Reserved :: 8~reserved bytes. */ |
302 | /* */ |
303 | /* metric_Data_Format :: Always~0. */ |
304 | /* */ |
305 | /* number_Of_VMetrics :: Number of VMetrics entries in the */ |
306 | /* `vmtx' table -- this value can be */ |
307 | /* smaller than the total number of glyphs */ |
308 | /* in the font. */ |
309 | /* */ |
310 | /* long_metrics :: A pointer into the `vmtx' table. */ |
311 | /* */ |
312 | /* short_metrics :: A pointer into the `vmtx' table. */ |
313 | /* */ |
314 | /* <Note> */ |
315 | /* For an OpenType variation font, the values of the following fields */ |
316 | /* can change after a call to @FT_Set_Var_Design_Coordinates (and */ |
317 | /* friends) if the font contains an `MVAR' table: `Ascender', */ |
318 | /* `Descender', `Line_Gap', `caret_Slope_Rise', `caret_Slope_Run', */ |
319 | /* and `caret_Offset'. */ |
320 | /* */ |
321 | typedef struct |
322 | { |
323 | FT_Fixed ; |
324 | FT_Short ; |
325 | FT_Short ; |
326 | FT_Short ; |
327 | |
328 | FT_UShort ; /* advance height maximum */ |
329 | |
330 | FT_Short ; /* minimum top-sb */ |
331 | FT_Short ; /* minimum bottom-sb */ |
332 | FT_Short ; /* ymax extents */ |
333 | FT_Short ; |
334 | FT_Short ; |
335 | FT_Short ; |
336 | |
337 | FT_Short [4]; |
338 | |
339 | FT_Short ; |
340 | FT_UShort ; |
341 | |
342 | /* The following fields are not defined by the OpenType specification */ |
343 | /* but they are used to connect the metrics header to the relevant */ |
344 | /* `vmtx' table. */ |
345 | |
346 | void* ; |
347 | void* ; |
348 | |
349 | } ; |
350 | |
351 | |
352 | /*************************************************************************/ |
353 | /* */ |
354 | /* <Struct> */ |
355 | /* TT_OS2 */ |
356 | /* */ |
357 | /* <Description> */ |
358 | /* A structure to model a TrueType `OS/2' table. All fields comply */ |
359 | /* to the OpenType specification. */ |
360 | /* */ |
361 | /* Note that we now support old Mac fonts that do not include an */ |
362 | /* `OS/2' table. In this case, the `version' field is always set to */ |
363 | /* 0xFFFF. */ |
364 | /* */ |
365 | /* <Note> */ |
366 | /* For an OpenType variation font, the values of the following fields */ |
367 | /* can change after a call to @FT_Set_Var_Design_Coordinates (and */ |
368 | /* friends) if the font contains an `MVAR' table: `sCapHeight', */ |
369 | /* `sTypoAscender', `sTypoDescender', `sTypoLineGap', `sxHeight', */ |
370 | /* `usWinAscent', `usWinDescent', `yStrikeoutPosition', */ |
371 | /* `yStrikeoutSize', `ySubscriptXOffset', `ySubScriptXSize', */ |
372 | /* `ySubscriptYOffset', `ySubscriptYSize', `ySuperscriptXOffset', */ |
373 | /* `ySuperscriptXSize', `ySuperscriptYOffset', and */ |
374 | /* `ySuperscriptYSize'. */ |
375 | /* */ |
376 | /* Possible values for bits in the `ulUnicodeRangeX' fields are given */ |
377 | /* by the @TT_UCR_XXX macros. */ |
378 | /* */ |
379 | |
380 | typedef struct TT_OS2_ |
381 | { |
382 | FT_UShort version; /* 0x0001 - more or 0xFFFF */ |
383 | FT_Short xAvgCharWidth; |
384 | FT_UShort usWeightClass; |
385 | FT_UShort usWidthClass; |
386 | FT_UShort fsType; |
387 | FT_Short ySubscriptXSize; |
388 | FT_Short ySubscriptYSize; |
389 | FT_Short ySubscriptXOffset; |
390 | FT_Short ySubscriptYOffset; |
391 | FT_Short ySuperscriptXSize; |
392 | FT_Short ySuperscriptYSize; |
393 | FT_Short ySuperscriptXOffset; |
394 | FT_Short ySuperscriptYOffset; |
395 | FT_Short yStrikeoutSize; |
396 | FT_Short yStrikeoutPosition; |
397 | FT_Short sFamilyClass; |
398 | |
399 | FT_Byte panose[10]; |
400 | |
401 | FT_ULong ulUnicodeRange1; /* Bits 0-31 */ |
402 | FT_ULong ulUnicodeRange2; /* Bits 32-63 */ |
403 | FT_ULong ulUnicodeRange3; /* Bits 64-95 */ |
404 | FT_ULong ulUnicodeRange4; /* Bits 96-127 */ |
405 | |
406 | FT_Char achVendID[4]; |
407 | |
408 | FT_UShort fsSelection; |
409 | FT_UShort usFirstCharIndex; |
410 | FT_UShort usLastCharIndex; |
411 | FT_Short sTypoAscender; |
412 | FT_Short sTypoDescender; |
413 | FT_Short sTypoLineGap; |
414 | FT_UShort usWinAscent; |
415 | FT_UShort usWinDescent; |
416 | |
417 | /* only version 1 and higher: */ |
418 | |
419 | FT_ULong ; /* Bits 0-31 */ |
420 | FT_ULong ; /* Bits 32-63 */ |
421 | |
422 | /* only version 2 and higher: */ |
423 | |
424 | FT_Short sxHeight; |
425 | FT_Short sCapHeight; |
426 | FT_UShort usDefaultChar; |
427 | FT_UShort usBreakChar; |
428 | FT_UShort usMaxContext; |
429 | |
430 | /* only version 5 and higher: */ |
431 | |
432 | FT_UShort usLowerOpticalPointSize; /* in twips (1/20th points) */ |
433 | FT_UShort usUpperOpticalPointSize; /* in twips (1/20th points) */ |
434 | |
435 | } TT_OS2; |
436 | |
437 | |
438 | /*************************************************************************/ |
439 | /* */ |
440 | /* <Struct> */ |
441 | /* TT_Postscript */ |
442 | /* */ |
443 | /* <Description> */ |
444 | /* A structure to model a TrueType `post' table. All fields comply */ |
445 | /* to the OpenType specification. This structure does not reference */ |
446 | /* a font's PostScript glyph names; use @FT_Get_Glyph_Name to */ |
447 | /* retrieve them. */ |
448 | /* */ |
449 | /* <Note> */ |
450 | /* For an OpenType variation font, the values of the following fields */ |
451 | /* can change after a call to @FT_Set_Var_Design_Coordinates (and */ |
452 | /* friends) if the font contains an `MVAR' table: `underlinePosition' */ |
453 | /* and `underlineThickness'. */ |
454 | /* */ |
455 | typedef struct TT_Postscript_ |
456 | { |
457 | FT_Fixed FormatType; |
458 | FT_Fixed italicAngle; |
459 | FT_Short underlinePosition; |
460 | FT_Short underlineThickness; |
461 | FT_ULong isFixedPitch; |
462 | FT_ULong minMemType42; |
463 | FT_ULong maxMemType42; |
464 | FT_ULong minMemType1; |
465 | FT_ULong maxMemType1; |
466 | |
467 | /* Glyph names follow in the `post' table, but we don't */ |
468 | /* load them by default. */ |
469 | |
470 | } TT_Postscript; |
471 | |
472 | |
473 | /*************************************************************************/ |
474 | /* */ |
475 | /* <Struct> */ |
476 | /* TT_PCLT */ |
477 | /* */ |
478 | /* <Description> */ |
479 | /* A structure to model a TrueType `PCLT' table. All fields comply */ |
480 | /* to the OpenType specification. */ |
481 | /* */ |
482 | typedef struct TT_PCLT_ |
483 | { |
484 | FT_Fixed Version; |
485 | FT_ULong FontNumber; |
486 | FT_UShort Pitch; |
487 | FT_UShort xHeight; |
488 | FT_UShort Style; |
489 | FT_UShort TypeFamily; |
490 | FT_UShort CapHeight; |
491 | FT_UShort SymbolSet; |
492 | FT_Char TypeFace[16]; |
493 | FT_Char CharacterComplement[8]; |
494 | FT_Char FileName[6]; |
495 | FT_Char StrokeWeight; |
496 | FT_Char WidthType; |
497 | FT_Byte SerifStyle; |
498 | FT_Byte Reserved; |
499 | |
500 | } TT_PCLT; |
501 | |
502 | |
503 | /*************************************************************************/ |
504 | /* */ |
505 | /* <Struct> */ |
506 | /* TT_MaxProfile */ |
507 | /* */ |
508 | /* <Description> */ |
509 | /* The maximum profile (`maxp') table contains many max values, which */ |
510 | /* can be used to pre-allocate arrays for speeding up glyph loading */ |
511 | /* and hinting. */ |
512 | /* */ |
513 | /* <Fields> */ |
514 | /* version :: The version number. */ |
515 | /* */ |
516 | /* numGlyphs :: The number of glyphs in this TrueType */ |
517 | /* font. */ |
518 | /* */ |
519 | /* maxPoints :: The maximum number of points in a */ |
520 | /* non-composite TrueType glyph. See also */ |
521 | /* `maxCompositePoints'. */ |
522 | /* */ |
523 | /* maxContours :: The maximum number of contours in a */ |
524 | /* non-composite TrueType glyph. See also */ |
525 | /* `maxCompositeContours'. */ |
526 | /* */ |
527 | /* maxCompositePoints :: The maximum number of points in a */ |
528 | /* composite TrueType glyph. See also */ |
529 | /* `maxPoints'. */ |
530 | /* */ |
531 | /* maxCompositeContours :: The maximum number of contours in a */ |
532 | /* composite TrueType glyph. See also */ |
533 | /* `maxContours'. */ |
534 | /* */ |
535 | /* maxZones :: The maximum number of zones used for */ |
536 | /* glyph hinting. */ |
537 | /* */ |
538 | /* maxTwilightPoints :: The maximum number of points in the */ |
539 | /* twilight zone used for glyph hinting. */ |
540 | /* */ |
541 | /* maxStorage :: The maximum number of elements in the */ |
542 | /* storage area used for glyph hinting. */ |
543 | /* */ |
544 | /* maxFunctionDefs :: The maximum number of function */ |
545 | /* definitions in the TrueType bytecode for */ |
546 | /* this font. */ |
547 | /* */ |
548 | /* maxInstructionDefs :: The maximum number of instruction */ |
549 | /* definitions in the TrueType bytecode for */ |
550 | /* this font. */ |
551 | /* */ |
552 | /* maxStackElements :: The maximum number of stack elements used */ |
553 | /* during bytecode interpretation. */ |
554 | /* */ |
555 | /* maxSizeOfInstructions :: The maximum number of TrueType opcodes */ |
556 | /* used for glyph hinting. */ |
557 | /* */ |
558 | /* maxComponentElements :: The maximum number of simple (i.e., non- */ |
559 | /* composite) glyphs in a composite glyph. */ |
560 | /* */ |
561 | /* maxComponentDepth :: The maximum nesting depth of composite */ |
562 | /* glyphs. */ |
563 | /* */ |
564 | /* <Note> */ |
565 | /* This structure is only used during font loading. */ |
566 | /* */ |
567 | typedef struct TT_MaxProfile_ |
568 | { |
569 | FT_Fixed version; |
570 | FT_UShort numGlyphs; |
571 | FT_UShort maxPoints; |
572 | FT_UShort maxContours; |
573 | FT_UShort maxCompositePoints; |
574 | FT_UShort maxCompositeContours; |
575 | FT_UShort maxZones; |
576 | FT_UShort maxTwilightPoints; |
577 | FT_UShort maxStorage; |
578 | FT_UShort maxFunctionDefs; |
579 | FT_UShort maxInstructionDefs; |
580 | FT_UShort maxStackElements; |
581 | FT_UShort maxSizeOfInstructions; |
582 | FT_UShort maxComponentElements; |
583 | FT_UShort maxComponentDepth; |
584 | |
585 | } TT_MaxProfile; |
586 | |
587 | |
588 | /*************************************************************************/ |
589 | /* */ |
590 | /* <Enum> */ |
591 | /* FT_Sfnt_Tag */ |
592 | /* */ |
593 | /* <Description> */ |
594 | /* An enumeration to specify indices of SFNT tables loaded and parsed */ |
595 | /* by FreeType during initialization of an SFNT font. Used in the */ |
596 | /* @FT_Get_Sfnt_Table API function. */ |
597 | /* */ |
598 | /* <Values> */ |
599 | /* FT_SFNT_HEAD :: To access the font's @TT_Header structure. */ |
600 | /* */ |
601 | /* FT_SFNT_MAXP :: To access the font's @TT_MaxProfile structure. */ |
602 | /* */ |
603 | /* FT_SFNT_OS2 :: To access the font's @TT_OS2 structure. */ |
604 | /* */ |
605 | /* FT_SFNT_HHEA :: To access the font's @TT_HoriHeader structure. */ |
606 | /* */ |
607 | /* FT_SFNT_VHEA :: To access the font's @TT_VertHeader structure. */ |
608 | /* */ |
609 | /* FT_SFNT_POST :: To access the font's @TT_Postscript structure. */ |
610 | /* */ |
611 | /* FT_SFNT_PCLT :: To access the font's @TT_PCLT structure. */ |
612 | /* */ |
613 | typedef enum FT_Sfnt_Tag_ |
614 | { |
615 | FT_SFNT_HEAD, |
616 | FT_SFNT_MAXP, |
617 | FT_SFNT_OS2, |
618 | FT_SFNT_HHEA, |
619 | FT_SFNT_VHEA, |
620 | FT_SFNT_POST, |
621 | FT_SFNT_PCLT, |
622 | |
623 | FT_SFNT_MAX |
624 | |
625 | } FT_Sfnt_Tag; |
626 | |
627 | /* these constants are deprecated; use the corresponding `FT_Sfnt_Tag' */ |
628 | /* values instead */ |
629 | #define ft_sfnt_head FT_SFNT_HEAD |
630 | #define ft_sfnt_maxp FT_SFNT_MAXP |
631 | #define ft_sfnt_os2 FT_SFNT_OS2 |
632 | #define ft_sfnt_hhea FT_SFNT_HHEA |
633 | #define ft_sfnt_vhea FT_SFNT_VHEA |
634 | #define ft_sfnt_post FT_SFNT_POST |
635 | #define ft_sfnt_pclt FT_SFNT_PCLT |
636 | |
637 | |
638 | /*************************************************************************/ |
639 | /* */ |
640 | /* <Function> */ |
641 | /* FT_Get_Sfnt_Table */ |
642 | /* */ |
643 | /* <Description> */ |
644 | /* Return a pointer to a given SFNT table stored within a face. */ |
645 | /* */ |
646 | /* <Input> */ |
647 | /* face :: A handle to the source. */ |
648 | /* */ |
649 | /* tag :: The index of the SFNT table. */ |
650 | /* */ |
651 | /* <Return> */ |
652 | /* A type-less pointer to the table. This will be NULL in case of */ |
653 | /* error, or if the corresponding table was not found *OR* loaded */ |
654 | /* from the file. */ |
655 | /* */ |
656 | /* Use a typecast according to `tag' to access the structure */ |
657 | /* elements. */ |
658 | /* */ |
659 | /* <Note> */ |
660 | /* The table is owned by the face object and disappears with it. */ |
661 | /* */ |
662 | /* This function is only useful to access SFNT tables that are loaded */ |
663 | /* by the sfnt, truetype, and opentype drivers. See @FT_Sfnt_Tag for */ |
664 | /* a list. */ |
665 | /* */ |
666 | /* Here an example how to access the `vhea' table: */ |
667 | /* */ |
668 | /* { */ |
669 | /* TT_VertHeader* vert_header; */ |
670 | /* */ |
671 | /* */ |
672 | /* vert_header = */ |
673 | /* (TT_VertHeader*)FT_Get_Sfnt_Table( face, FT_SFNT_VHEA ); */ |
674 | /* } */ |
675 | /* */ |
676 | FT_EXPORT( void* ) |
677 | FT_Get_Sfnt_Table( FT_Face face, |
678 | FT_Sfnt_Tag tag ); |
679 | |
680 | |
681 | /************************************************************************** |
682 | * |
683 | * @function: |
684 | * FT_Load_Sfnt_Table |
685 | * |
686 | * @description: |
687 | * Load any SFNT font table into client memory. |
688 | * |
689 | * @input: |
690 | * face :: |
691 | * A handle to the source face. |
692 | * |
693 | * tag :: |
694 | * The four-byte tag of the table to load. Use value~0 if you want |
695 | * to access the whole font file. Otherwise, you can use one of the |
696 | * definitions found in the @FT_TRUETYPE_TAGS_H file, or forge a new |
697 | * one with @FT_MAKE_TAG. |
698 | * |
699 | * offset :: |
700 | * The starting offset in the table (or file if tag~==~0). |
701 | * |
702 | * @output: |
703 | * buffer :: |
704 | * The target buffer address. The client must ensure that the memory |
705 | * array is big enough to hold the data. |
706 | * |
707 | * @inout: |
708 | * length :: |
709 | * If the `length' parameter is NULL, try to load the whole table. |
710 | * Return an error code if it fails. |
711 | * |
712 | * Else, if `*length' is~0, exit immediately while returning the |
713 | * table's (or file) full size in it. |
714 | * |
715 | * Else the number of bytes to read from the table or file, from the |
716 | * starting offset. |
717 | * |
718 | * @return: |
719 | * FreeType error code. 0~means success. |
720 | * |
721 | * @note: |
722 | * If you need to determine the table's length you should first call this |
723 | * function with `*length' set to~0, as in the following example: |
724 | * |
725 | * { |
726 | * FT_ULong length = 0; |
727 | * |
728 | * |
729 | * error = FT_Load_Sfnt_Table( face, tag, 0, NULL, &length ); |
730 | * if ( error ) { ... table does not exist ... } |
731 | * |
732 | * buffer = malloc( length ); |
733 | * if ( buffer == NULL ) { ... not enough memory ... } |
734 | * |
735 | * error = FT_Load_Sfnt_Table( face, tag, 0, buffer, &length ); |
736 | * if ( error ) { ... could not load table ... } |
737 | * } |
738 | * |
739 | * Note that structures like @TT_Header or @TT_OS2 can't be used with |
740 | * this function; they are limited to @FT_Get_Sfnt_Table. Reason is that |
741 | * those structures depend on the processor architecture, with varying |
742 | * size (e.g. 32bit vs. 64bit) or order (big endian vs. little endian). |
743 | * |
744 | */ |
745 | FT_EXPORT( FT_Error ) |
746 | FT_Load_Sfnt_Table( FT_Face face, |
747 | FT_ULong tag, |
748 | FT_Long offset, |
749 | FT_Byte* buffer, |
750 | FT_ULong* length ); |
751 | |
752 | |
753 | /************************************************************************** |
754 | * |
755 | * @function: |
756 | * FT_Sfnt_Table_Info |
757 | * |
758 | * @description: |
759 | * Return information on an SFNT table. |
760 | * |
761 | * @input: |
762 | * face :: |
763 | * A handle to the source face. |
764 | * |
765 | * table_index :: |
766 | * The index of an SFNT table. The function returns |
767 | * FT_Err_Table_Missing for an invalid value. |
768 | * |
769 | * @inout: |
770 | * tag :: |
771 | * The name tag of the SFNT table. If the value is NULL, `table_index' |
772 | * is ignored, and `length' returns the number of SFNT tables in the |
773 | * font. |
774 | * |
775 | * @output: |
776 | * length :: |
777 | * The length of the SFNT table (or the number of SFNT tables, depending |
778 | * on `tag'). |
779 | * |
780 | * @return: |
781 | * FreeType error code. 0~means success. |
782 | * |
783 | * @note: |
784 | * While parsing fonts, FreeType handles SFNT tables with length zero as |
785 | * missing. |
786 | * |
787 | */ |
788 | FT_EXPORT( FT_Error ) |
789 | FT_Sfnt_Table_Info( FT_Face face, |
790 | FT_UInt table_index, |
791 | FT_ULong *tag, |
792 | FT_ULong *length ); |
793 | |
794 | |
795 | /*************************************************************************/ |
796 | /* */ |
797 | /* <Function> */ |
798 | /* FT_Get_CMap_Language_ID */ |
799 | /* */ |
800 | /* <Description> */ |
801 | /* Return cmap language ID as specified in the OpenType standard. */ |
802 | /* Definitions of language ID values are in file @FT_TRUETYPE_IDS_H. */ |
803 | /* */ |
804 | /* <Input> */ |
805 | /* charmap :: */ |
806 | /* The target charmap. */ |
807 | /* */ |
808 | /* <Return> */ |
809 | /* The language ID of `charmap'. If `charmap' doesn't belong to an */ |
810 | /* SFNT face, just return~0 as the default value. */ |
811 | /* */ |
812 | /* For a format~14 cmap (to access Unicode IVS), the return value is */ |
813 | /* 0xFFFFFFFF. */ |
814 | /* */ |
815 | FT_EXPORT( FT_ULong ) |
816 | FT_Get_CMap_Language_ID( FT_CharMap charmap ); |
817 | |
818 | |
819 | /*************************************************************************/ |
820 | /* */ |
821 | /* <Function> */ |
822 | /* FT_Get_CMap_Format */ |
823 | /* */ |
824 | /* <Description> */ |
825 | /* Return the format of an SFNT `cmap' table. */ |
826 | /* */ |
827 | /* <Input> */ |
828 | /* charmap :: */ |
829 | /* The target charmap. */ |
830 | /* */ |
831 | /* <Return> */ |
832 | /* The format of `charmap'. If `charmap' doesn't belong to an SFNT */ |
833 | /* face, return -1. */ |
834 | /* */ |
835 | FT_EXPORT( FT_Long ) |
836 | FT_Get_CMap_Format( FT_CharMap charmap ); |
837 | |
838 | /* */ |
839 | |
840 | |
841 | FT_END_HEADER |
842 | |
843 | #endif /* TTTABLES_H_ */ |
844 | |
845 | |
846 | /* END */ |
847 | |