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