[692] | 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 */
|
---|