1 /**************************************************************************** 2 * 3 * tttypes.h 4 * 5 * Basic SFNT/TrueType type definitions and interface (specification 6 * 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 TTTYPES_H_ 21 #define TTTYPES_H_ 22 23 24 #include <ft2build.h> 25 #include FT_TRUETYPE_TABLES_H 26 #include FT_INTERNAL_OBJECTS_H 27 #include FT_COLOR_H 28 29 #ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT 30 #include FT_MULTIPLE_MASTERS_H 31 #endif 32 33 34 FT_BEGIN_HEADER 35 36 37 /*************************************************************************/ 38 /*************************************************************************/ 39 /*************************************************************************/ 40 /*** ***/ 41 /*** ***/ 42 /*** REQUIRED TRUETYPE/OPENTYPE TABLES DEFINITIONS ***/ 43 /*** ***/ 44 /*** ***/ 45 /*************************************************************************/ 46 /*************************************************************************/ 47 /*************************************************************************/ 48 49 50 /************************************************************************** 51 * 52 * @struct: 53 * TTC_HeaderRec 54 * 55 * @description: 56 * TrueType collection header. This table contains the offsets of 57 * the font headers of each distinct TrueType face in the file. 58 * 59 * @fields: 60 * tag :: 61 * Must be `ttc ' to indicate a TrueType collection. 62 * 63 * version :: 64 * The version number. 65 * 66 * count :: 67 * The number of faces in the collection. The 68 * specification says this should be an unsigned long, but 69 * we use a signed long since we need the value -1 for 70 * specific purposes. 71 * 72 * offsets :: 73 * The offsets of the font headers, one per face. 74 */ 75 typedef struct TTC_HeaderRec_ 76 { 77 FT_ULong tag; 78 FT_Fixed version; 79 FT_Long count; 80 FT_ULong* offsets; 81 82 } TTC_HeaderRec; 83 84 85 /************************************************************************** 86 * 87 * @struct: 88 * SFNT_HeaderRec 89 * 90 * @description: 91 * SFNT file format header. 92 * 93 * @fields: 94 * format_tag :: 95 * The font format tag. 96 * 97 * num_tables :: 98 * The number of tables in file. 99 * 100 * search_range :: 101 * Must be `16 * (max power of 2 <= num_tables)'. 102 * 103 * entry_selector :: 104 * Must be log2 of `search_range / 16'. 105 * 106 * range_shift :: 107 * Must be `num_tables * 16 - search_range'. 108 */ 109 typedef struct SFNT_HeaderRec_ 110 { 111 FT_ULong format_tag; 112 FT_UShort num_tables; 113 FT_UShort search_range; 114 FT_UShort entry_selector; 115 FT_UShort range_shift; 116 117 FT_ULong offset; /* not in file */ 118 119 } SFNT_HeaderRec, *SFNT_Header; 120 121 122 /************************************************************************** 123 * 124 * @struct: 125 * TT_TableRec 126 * 127 * @description: 128 * This structure describes a given table of a TrueType font. 129 * 130 * @fields: 131 * Tag :: 132 * A four-bytes tag describing the table. 133 * 134 * CheckSum :: 135 * The table checksum. This value can be ignored. 136 * 137 * Offset :: 138 * The offset of the table from the start of the TrueType 139 * font in its resource. 140 * 141 * Length :: 142 * The table length (in bytes). 143 */ 144 typedef struct TT_TableRec_ 145 { 146 FT_ULong Tag; /* table type */ 147 FT_ULong CheckSum; /* table checksum */ 148 FT_ULong Offset; /* table file offset */ 149 FT_ULong Length; /* table length */ 150 151 } TT_TableRec, *TT_Table; 152 153 154 /************************************************************************** 155 * 156 * @struct: 157 * WOFF_HeaderRec 158 * 159 * @description: 160 * WOFF file format header. 161 * 162 * @fields: 163 * See 164 * 165 * https://www.w3.org/TR/WOFF/#WOFFHeader 166 */ 167 typedef struct WOFF_HeaderRec_ 168 { 169 FT_ULong signature; 170 FT_ULong flavor; 171 FT_ULong length; 172 FT_UShort num_tables; 173 FT_UShort reserved; 174 FT_ULong totalSfntSize; 175 FT_UShort majorVersion; 176 FT_UShort minorVersion; 177 FT_ULong metaOffset; 178 FT_ULong metaLength; 179 FT_ULong metaOrigLength; 180 FT_ULong privOffset; 181 FT_ULong privLength; 182 183 } WOFF_HeaderRec, *WOFF_Header; 184 185 186 /************************************************************************** 187 * 188 * @struct: 189 * WOFF_TableRec 190 * 191 * @description: 192 * This structure describes a given table of a WOFF font. 193 * 194 * @fields: 195 * Tag :: 196 * A four-bytes tag describing the table. 197 * 198 * Offset :: 199 * The offset of the table from the start of the WOFF 200 * font in its resource. 201 * 202 * CompLength :: 203 * Compressed table length (in bytes). 204 * 205 * OrigLength :: 206 * Uncompressed table length (in bytes). 207 * 208 * CheckSum :: 209 * The table checksum. This value can be ignored. 210 * 211 * OrigOffset :: 212 * The uncompressed table file offset. This value gets 213 * computed while constructing the (uncompressed) SFNT 214 * header. It is not contained in the WOFF file. 215 */ 216 typedef struct WOFF_TableRec_ 217 { 218 FT_ULong Tag; /* table ID */ 219 FT_ULong Offset; /* table file offset */ 220 FT_ULong CompLength; /* compressed table length */ 221 FT_ULong OrigLength; /* uncompressed table length */ 222 FT_ULong CheckSum; /* uncompressed checksum */ 223 224 FT_ULong OrigOffset; /* uncompressed table file offset */ 225 /* (not in the WOFF file) */ 226 } WOFF_TableRec, *WOFF_Table; 227 228 229 /************************************************************************** 230 * 231 * @struct: 232 * TT_LongMetricsRec 233 * 234 * @description: 235 * A structure modeling the long metrics of the `hmtx' and `vmtx' 236 * TrueType tables. The values are expressed in font units. 237 * 238 * @fields: 239 * advance :: 240 * The advance width or height for the glyph. 241 * 242 * bearing :: 243 * The left-side or top-side bearing for the glyph. 244 */ 245 typedef struct TT_LongMetricsRec_ 246 { 247 FT_UShort advance; 248 FT_Short bearing; 249 250 } TT_LongMetricsRec, *TT_LongMetrics; 251 252 253 /************************************************************************** 254 * 255 * @type: 256 * TT_ShortMetrics 257 * 258 * @description: 259 * A simple type to model the short metrics of the `hmtx' and `vmtx' 260 * tables. 261 */ 262 typedef FT_Short TT_ShortMetrics; 263 264 265 /************************************************************************** 266 * 267 * @struct: 268 * TT_NameRec 269 * 270 * @description: 271 * A structure modeling TrueType name records. Name records are used 272 * to store important strings like family name, style name, 273 * copyright, etc. in _localized_ versions (i.e., language, encoding, 274 * etc). 275 * 276 * @fields: 277 * platformID :: 278 * The ID of the name's encoding platform. 279 * 280 * encodingID :: 281 * The platform-specific ID for the name's encoding. 282 * 283 * languageID :: 284 * The platform-specific ID for the name's language. 285 * 286 * nameID :: 287 * The ID specifying what kind of name this is. 288 * 289 * stringLength :: 290 * The length of the string in bytes. 291 * 292 * stringOffset :: 293 * The offset to the string in the `name' table. 294 * 295 * string :: 296 * A pointer to the string's bytes. Note that these 297 * are usually UTF-16 encoded characters. 298 */ 299 typedef struct TT_NameRec_ 300 { 301 FT_UShort platformID; 302 FT_UShort encodingID; 303 FT_UShort languageID; 304 FT_UShort nameID; 305 FT_UShort stringLength; 306 FT_ULong stringOffset; 307 308 /* this last field is not defined in the spec */ 309 /* but used by the FreeType engine */ 310 311 FT_Byte* string; 312 313 } TT_NameRec, *TT_Name; 314 315 316 /************************************************************************** 317 * 318 * @struct: 319 * TT_LangTagRec 320 * 321 * @description: 322 * A structure modeling language tag records in SFNT `name' tables, 323 * introduced in OpenType version 1.6. 324 * 325 * @fields: 326 * stringLength :: 327 * The length of the string in bytes. 328 * 329 * stringOffset :: 330 * The offset to the string in the `name' table. 331 * 332 * string :: 333 * A pointer to the string's bytes. Note that these 334 * are UTF-16BE encoded characters. 335 */ 336 typedef struct TT_LangTagRec_ 337 { 338 FT_UShort stringLength; 339 FT_ULong stringOffset; 340 341 /* this last field is not defined in the spec */ 342 /* but used by the FreeType engine */ 343 344 FT_Byte* string; 345 346 } TT_LangTagRec, *TT_LangTag; 347 348 349 /************************************************************************** 350 * 351 * @struct: 352 * TT_NameTableRec 353 * 354 * @description: 355 * A structure modeling the TrueType name table. 356 * 357 * @fields: 358 * format :: 359 * The format of the name table. 360 * 361 * numNameRecords :: 362 * The number of names in table. 363 * 364 * storageOffset :: 365 * The offset of the name table in the `name' 366 * TrueType table. 367 * 368 * names :: 369 * An array of name records. 370 * 371 * numLangTagRecords :: 372 * The number of language tags in table. 373 * 374 * langTags :: 375 * An array of language tag records. 376 * 377 * stream :: 378 * The file's input stream. 379 */ 380 typedef struct TT_NameTableRec_ 381 { 382 FT_UShort format; 383 FT_UInt numNameRecords; 384 FT_UInt storageOffset; 385 TT_NameRec* names; 386 FT_UInt numLangTagRecords; 387 TT_LangTagRec* langTags; 388 FT_Stream stream; 389 390 } TT_NameTableRec, *TT_NameTable; 391 392 393 /*************************************************************************/ 394 /*************************************************************************/ 395 /*************************************************************************/ 396 /*** ***/ 397 /*** ***/ 398 /*** OPTIONAL TRUETYPE/OPENTYPE TABLES DEFINITIONS ***/ 399 /*** ***/ 400 /*** ***/ 401 /*************************************************************************/ 402 /*************************************************************************/ 403 /*************************************************************************/ 404 405 406 /************************************************************************** 407 * 408 * @struct: 409 * TT_GaspRangeRec 410 * 411 * @description: 412 * A tiny structure used to model a gasp range according to the 413 * TrueType specification. 414 * 415 * @fields: 416 * maxPPEM :: 417 * The maximum ppem value to which `gaspFlag' applies. 418 * 419 * gaspFlag :: 420 * A flag describing the grid-fitting and anti-aliasing 421 * modes to be used. 422 */ 423 typedef struct TT_GaspRangeRec_ 424 { 425 FT_UShort maxPPEM; 426 FT_UShort gaspFlag; 427 428 } TT_GaspRangeRec, *TT_GaspRange; 429 430 431 #define TT_GASP_GRIDFIT 0x01 432 #define TT_GASP_DOGRAY 0x02 433 434 435 /************************************************************************** 436 * 437 * @struct: 438 * TT_GaspRec 439 * 440 * @description: 441 * A structure modeling the TrueType `gasp' table used to specify 442 * grid-fitting and anti-aliasing behaviour. 443 * 444 * @fields: 445 * version :: 446 * The version number. 447 * 448 * numRanges :: 449 * The number of gasp ranges in table. 450 * 451 * gaspRanges :: 452 * An array of gasp ranges. 453 */ 454 typedef struct TT_Gasp_ 455 { 456 FT_UShort version; 457 FT_UShort numRanges; 458 TT_GaspRange gaspRanges; 459 460 } TT_GaspRec; 461 462 463 /*************************************************************************/ 464 /*************************************************************************/ 465 /*************************************************************************/ 466 /*** ***/ 467 /*** ***/ 468 /*** EMBEDDED BITMAPS SUPPORT ***/ 469 /*** ***/ 470 /*** ***/ 471 /*************************************************************************/ 472 /*************************************************************************/ 473 /*************************************************************************/ 474 475 476 /************************************************************************** 477 * 478 * @struct: 479 * TT_SBit_MetricsRec 480 * 481 * @description: 482 * A structure used to hold the big metrics of a given glyph bitmap 483 * in a TrueType or OpenType font. These are usually found in the 484 * `EBDT' (Microsoft) or `bloc' (Apple) table. 485 * 486 * @fields: 487 * height :: 488 * The glyph height in pixels. 489 * 490 * width :: 491 * The glyph width in pixels. 492 * 493 * horiBearingX :: 494 * The horizontal left bearing. 495 * 496 * horiBearingY :: 497 * The horizontal top bearing. 498 * 499 * horiAdvance :: 500 * The horizontal advance. 501 * 502 * vertBearingX :: 503 * The vertical left bearing. 504 * 505 * vertBearingY :: 506 * The vertical top bearing. 507 * 508 * vertAdvance :: 509 * The vertical advance. 510 */ 511 typedef struct TT_SBit_MetricsRec_ 512 { 513 FT_UShort height; 514 FT_UShort width; 515 516 FT_Short horiBearingX; 517 FT_Short horiBearingY; 518 FT_UShort horiAdvance; 519 520 FT_Short vertBearingX; 521 FT_Short vertBearingY; 522 FT_UShort vertAdvance; 523 524 } TT_SBit_MetricsRec, *TT_SBit_Metrics; 525 526 527 /************************************************************************** 528 * 529 * @struct: 530 * TT_SBit_SmallMetricsRec 531 * 532 * @description: 533 * A structure used to hold the small metrics of a given glyph bitmap 534 * in a TrueType or OpenType font. These are usually found in the 535 * `EBDT' (Microsoft) or the `bdat' (Apple) table. 536 * 537 * @fields: 538 * height :: 539 * The glyph height in pixels. 540 * 541 * width :: 542 * The glyph width in pixels. 543 * 544 * bearingX :: 545 * The left-side bearing. 546 * 547 * bearingY :: 548 * The top-side bearing. 549 * 550 * advance :: 551 * The advance width or height. 552 */ 553 typedef struct TT_SBit_Small_Metrics_ 554 { 555 FT_Byte height; 556 FT_Byte width; 557 558 FT_Char bearingX; 559 FT_Char bearingY; 560 FT_Byte advance; 561 562 } TT_SBit_SmallMetricsRec, *TT_SBit_SmallMetrics; 563 564 565 /************************************************************************** 566 * 567 * @struct: 568 * TT_SBit_LineMetricsRec 569 * 570 * @description: 571 * A structure used to describe the text line metrics of a given 572 * bitmap strike, for either a horizontal or vertical layout. 573 * 574 * @fields: 575 * ascender :: 576 * The ascender in pixels. 577 * 578 * descender :: 579 * The descender in pixels. 580 * 581 * max_width :: 582 * The maximum glyph width in pixels. 583 * 584 * caret_slope_enumerator :: 585 * Rise of the caret slope, typically set 586 * to 1 for non-italic fonts. 587 * 588 * caret_slope_denominator :: 589 * Rise of the caret slope, typically set 590 * to 0 for non-italic fonts. 591 * 592 * caret_offset :: 593 * Offset in pixels to move the caret for 594 * proper positioning. 595 * 596 * min_origin_SB :: 597 * Minimum of horiBearingX (resp. 598 * vertBearingY). 599 * min_advance_SB :: 600 * Minimum of 601 * 602 * horizontal advance - 603 * ( horiBearingX + width ) 604 * 605 * resp. 606 * 607 * vertical advance - 608 * ( vertBearingY + height ) 609 * 610 * max_before_BL :: 611 * Maximum of horiBearingY (resp. 612 * vertBearingY). 613 * 614 * min_after_BL :: 615 * Minimum of 616 * 617 * horiBearingY - height 618 * 619 * resp. 620 * 621 * vertBearingX - width 622 * 623 * pads :: 624 * Unused (to make the size of the record 625 * a multiple of 32 bits. 626 */ 627 typedef struct TT_SBit_LineMetricsRec_ 628 { 629 FT_Char ascender; 630 FT_Char descender; 631 FT_Byte max_width; 632 FT_Char caret_slope_numerator; 633 FT_Char caret_slope_denominator; 634 FT_Char caret_offset; 635 FT_Char min_origin_SB; 636 FT_Char min_advance_SB; 637 FT_Char max_before_BL; 638 FT_Char min_after_BL; 639 FT_Char pads[2]; 640 641 } TT_SBit_LineMetricsRec, *TT_SBit_LineMetrics; 642 643 644 /************************************************************************** 645 * 646 * @struct: 647 * TT_SBit_RangeRec 648 * 649 * @description: 650 * A TrueType/OpenType subIndexTable as defined in the `EBLC' 651 * (Microsoft) or `bloc' (Apple) tables. 652 * 653 * @fields: 654 * first_glyph :: 655 * The first glyph index in the range. 656 * 657 * last_glyph :: 658 * The last glyph index in the range. 659 * 660 * index_format :: 661 * The format of index table. Valid values are 1 662 * to 5. 663 * 664 * image_format :: 665 * The format of `EBDT' image data. 666 * 667 * image_offset :: 668 * The offset to image data in `EBDT'. 669 * 670 * image_size :: 671 * For index formats 2 and 5. This is the size in 672 * bytes of each glyph bitmap. 673 * 674 * big_metrics :: 675 * For index formats 2 and 5. This is the big 676 * metrics for each glyph bitmap. 677 * 678 * num_glyphs :: 679 * For index formats 4 and 5. This is the number of 680 * glyphs in the code array. 681 * 682 * glyph_offsets :: 683 * For index formats 1 and 3. 684 * 685 * glyph_codes :: 686 * For index formats 4 and 5. 687 * 688 * table_offset :: 689 * The offset of the index table in the `EBLC' 690 * table. Only used during strike loading. 691 */ 692 typedef struct TT_SBit_RangeRec_ 693 { 694 FT_UShort first_glyph; 695 FT_UShort last_glyph; 696 697 FT_UShort index_format; 698 FT_UShort image_format; 699 FT_ULong image_offset; 700 701 FT_ULong image_size; 702 TT_SBit_MetricsRec metrics; 703 FT_ULong num_glyphs; 704 705 FT_ULong* glyph_offsets; 706 FT_UShort* glyph_codes; 707 708 FT_ULong table_offset; 709 710 } TT_SBit_RangeRec, *TT_SBit_Range; 711 712 713 /************************************************************************** 714 * 715 * @struct: 716 * TT_SBit_StrikeRec 717 * 718 * @description: 719 * A structure used describe a given bitmap strike in the `EBLC' 720 * (Microsoft) or `bloc' (Apple) tables. 721 * 722 * @fields: 723 * num_index_ranges :: 724 * The number of index ranges. 725 * 726 * index_ranges :: 727 * An array of glyph index ranges. 728 * 729 * color_ref :: 730 * Unused. `color_ref' is put in for future 731 * enhancements, but these fields are already 732 * in use by other platforms (e.g. Newton). 733 * For details, please see 734 * 735 * https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6bloc.html 736 * 737 * hori :: 738 * The line metrics for horizontal layouts. 739 * 740 * vert :: 741 * The line metrics for vertical layouts. 742 * 743 * start_glyph :: 744 * The lowest glyph index for this strike. 745 * 746 * end_glyph :: 747 * The highest glyph index for this strike. 748 * 749 * x_ppem :: 750 * The number of horizontal pixels per EM. 751 * 752 * y_ppem :: 753 * The number of vertical pixels per EM. 754 * 755 * bit_depth :: 756 * The bit depth. Valid values are 1, 2, 4, 757 * and 8. 758 * 759 * flags :: 760 * Is this a vertical or horizontal strike? For 761 * details, please see 762 * 763 * https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6bloc.html 764 */ 765 typedef struct TT_SBit_StrikeRec_ 766 { 767 FT_Int num_ranges; 768 TT_SBit_Range sbit_ranges; 769 FT_ULong ranges_offset; 770 771 FT_ULong color_ref; 772 773 TT_SBit_LineMetricsRec hori; 774 TT_SBit_LineMetricsRec vert; 775 776 FT_UShort start_glyph; 777 FT_UShort end_glyph; 778 779 FT_Byte x_ppem; 780 FT_Byte y_ppem; 781 782 FT_Byte bit_depth; 783 FT_Char flags; 784 785 } TT_SBit_StrikeRec, *TT_SBit_Strike; 786 787 788 /************************************************************************** 789 * 790 * @struct: 791 * TT_SBit_ComponentRec 792 * 793 * @description: 794 * A simple structure to describe a compound sbit element. 795 * 796 * @fields: 797 * glyph_code :: 798 * The element's glyph index. 799 * 800 * x_offset :: 801 * The element's left bearing. 802 * 803 * y_offset :: 804 * The element's top bearing. 805 */ 806 typedef struct TT_SBit_ComponentRec_ 807 { 808 FT_UShort glyph_code; 809 FT_Char x_offset; 810 FT_Char y_offset; 811 812 } TT_SBit_ComponentRec, *TT_SBit_Component; 813 814 815 /************************************************************************** 816 * 817 * @struct: 818 * TT_SBit_ScaleRec 819 * 820 * @description: 821 * A structure used describe a given bitmap scaling table, as defined 822 * in the `EBSC' table. 823 * 824 * @fields: 825 * hori :: 826 * The horizontal line metrics. 827 * 828 * vert :: 829 * The vertical line metrics. 830 * 831 * x_ppem :: 832 * The number of horizontal pixels per EM. 833 * 834 * y_ppem :: 835 * The number of vertical pixels per EM. 836 * 837 * x_ppem_substitute :: 838 * Substitution x_ppem value. 839 * 840 * y_ppem_substitute :: 841 * Substitution y_ppem value. 842 */ 843 typedef struct TT_SBit_ScaleRec_ 844 { 845 TT_SBit_LineMetricsRec hori; 846 TT_SBit_LineMetricsRec vert; 847 848 FT_Byte x_ppem; 849 FT_Byte y_ppem; 850 851 FT_Byte x_ppem_substitute; 852 FT_Byte y_ppem_substitute; 853 854 } TT_SBit_ScaleRec, *TT_SBit_Scale; 855 856 857 /*************************************************************************/ 858 /*************************************************************************/ 859 /*************************************************************************/ 860 /*** ***/ 861 /*** ***/ 862 /*** POSTSCRIPT GLYPH NAMES SUPPORT ***/ 863 /*** ***/ 864 /*** ***/ 865 /*************************************************************************/ 866 /*************************************************************************/ 867 /*************************************************************************/ 868 869 870 /************************************************************************** 871 * 872 * @struct: 873 * TT_Post_20Rec 874 * 875 * @description: 876 * Postscript names sub-table, format 2.0. Stores the PS name of 877 * each glyph in the font face. 878 * 879 * @fields: 880 * num_glyphs :: 881 * The number of named glyphs in the table. 882 * 883 * num_names :: 884 * The number of PS names stored in the table. 885 * 886 * glyph_indices :: 887 * The indices of the glyphs in the names arrays. 888 * 889 * glyph_names :: 890 * The PS names not in Mac Encoding. 891 */ 892 typedef struct TT_Post_20Rec_ 893 { 894 FT_UShort num_glyphs; 895 FT_UShort num_names; 896 FT_UShort* glyph_indices; 897 FT_Char** glyph_names; 898 899 } TT_Post_20Rec, *TT_Post_20; 900 901 902 /************************************************************************** 903 * 904 * @struct: 905 * TT_Post_25Rec 906 * 907 * @description: 908 * Postscript names sub-table, format 2.5. Stores the PS name of 909 * each glyph in the font face. 910 * 911 * @fields: 912 * num_glyphs :: 913 * The number of glyphs in the table. 914 * 915 * offsets :: 916 * An array of signed offsets in a normal Mac 917 * Postscript name encoding. 918 */ 919 typedef struct TT_Post_25_ 920 { 921 FT_UShort num_glyphs; 922 FT_Char* offsets; 923 924 } TT_Post_25Rec, *TT_Post_25; 925 926 927 /************************************************************************** 928 * 929 * @struct: 930 * TT_Post_NamesRec 931 * 932 * @description: 933 * Postscript names table, either format 2.0 or 2.5. 934 * 935 * @fields: 936 * loaded :: 937 * A flag to indicate whether the PS names are loaded. 938 * 939 * format_20 :: 940 * The sub-table used for format 2.0. 941 * 942 * format_25 :: 943 * The sub-table used for format 2.5. 944 */ 945 typedef struct TT_Post_NamesRec_ 946 { 947 FT_Bool loaded; 948 949 union 950 { 951 TT_Post_20Rec format_20; 952 TT_Post_25Rec format_25; 953 954 } names; 955 956 } TT_Post_NamesRec, *TT_Post_Names; 957 958 959 /*************************************************************************/ 960 /*************************************************************************/ 961 /*************************************************************************/ 962 /*** ***/ 963 /*** ***/ 964 /*** GX VARIATION TABLE SUPPORT ***/ 965 /*** ***/ 966 /*** ***/ 967 /*************************************************************************/ 968 /*************************************************************************/ 969 /*************************************************************************/ 970 971 972 #ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT 973 typedef struct GX_BlendRec_ *GX_Blend; 974 #endif 975 976 /*************************************************************************/ 977 /*************************************************************************/ 978 /*************************************************************************/ 979 /*** ***/ 980 /*** ***/ 981 /*** EMBEDDED BDF PROPERTIES TABLE SUPPORT ***/ 982 /*** ***/ 983 /*** ***/ 984 /*************************************************************************/ 985 /*************************************************************************/ 986 /*************************************************************************/ 987 988 /* 989 * These types are used to support a `BDF ' table that isn't part of the 990 * official TrueType specification. It is mainly used in SFNT-based 991 * bitmap fonts that were generated from a set of BDF fonts. 992 * 993 * The format of the table is as follows. 994 * 995 * USHORT version `BDF ' table version number, should be 0x0001. 996 * USHORT strikeCount Number of strikes (bitmap sizes) in this table. 997 * ULONG stringTable Offset (from start of BDF table) to string 998 * table. 999 * 1000 * This is followed by an array of `strikeCount' descriptors, having the 1001 * following format. 1002 * 1003 * USHORT ppem Vertical pixels per EM for this strike. 1004 * USHORT numItems Number of items for this strike (properties and 1005 * atoms). Maximum is 255. 1006 * 1007 * This array in turn is followed by `strikeCount' value sets. Each 1008 * `value set' is an array of `numItems' items with the following format. 1009 * 1010 * ULONG item_name Offset in string table to item name. 1011 * USHORT item_type The item type. Possible values are 1012 * 0 => string (e.g., COMMENT) 1013 * 1 => atom (e.g., FONT or even SIZE) 1014 * 2 => int32 1015 * 3 => uint32 1016 * 0x10 => A flag to indicate a properties. This 1017 * is ORed with the above values. 1018 * ULONG item_value For strings => Offset into string table without 1019 * the corresponding double quotes. 1020 * For atoms => Offset into string table. 1021 * For integers => Direct value. 1022 * 1023 * All strings in the string table consist of bytes and are 1024 * zero-terminated. 1025 * 1026 */ 1027 1028 #ifdef TT_CONFIG_OPTION_BDF 1029 1030 typedef struct TT_BDFRec_ 1031 { 1032 FT_Byte* table; 1033 FT_Byte* table_end; 1034 FT_Byte* strings; 1035 FT_ULong strings_size; 1036 FT_UInt num_strikes; 1037 FT_Bool loaded; 1038 1039 } TT_BDFRec, *TT_BDF; 1040 1041 #endif /* TT_CONFIG_OPTION_BDF */ 1042 1043 /*************************************************************************/ 1044 /*************************************************************************/ 1045 /*************************************************************************/ 1046 /*** ***/ 1047 /*** ***/ 1048 /*** ORIGINAL TT_FACE CLASS DEFINITION ***/ 1049 /*** ***/ 1050 /*** ***/ 1051 /*************************************************************************/ 1052 /*************************************************************************/ 1053 /*************************************************************************/ 1054 1055 1056 /************************************************************************** 1057 * 1058 * This structure/class is defined here because it is common to the 1059 * following formats: TTF, OpenType-TT, and OpenType-CFF. 1060 * 1061 * Note, however, that the classes TT_Size and TT_GlyphSlot are not 1062 * shared between font drivers, and are thus defined in `ttobjs.h'. 1063 * 1064 */ 1065 1066 1067 /************************************************************************** 1068 * 1069 * @type: 1070 * TT_Face 1071 * 1072 * @description: 1073 * A handle to a TrueType face/font object. A TT_Face encapsulates 1074 * the resolution and scaling independent parts of a TrueType font 1075 * resource. 1076 * 1077 * @note: 1078 * The TT_Face structure is also used as a `parent class' for the 1079 * OpenType-CFF class (T2_Face). 1080 */ 1081 typedef struct TT_FaceRec_* TT_Face; 1082 1083 1084 /* a function type used for the truetype bytecode interpreter hooks */ 1085 typedef FT_Error 1086 (*TT_Interpreter)( void* exec_context ); 1087 1088 /* forward declaration */ 1089 typedef struct TT_LoaderRec_* TT_Loader; 1090 1091 1092 /************************************************************************** 1093 * 1094 * @functype: 1095 * TT_Loader_GotoTableFunc 1096 * 1097 * @description: 1098 * Seeks a stream to the start of a given TrueType table. 1099 * 1100 * @input: 1101 * face :: 1102 * A handle to the target face object. 1103 * 1104 * tag :: 1105 * A 4-byte tag used to name the table. 1106 * 1107 * stream :: 1108 * The input stream. 1109 * 1110 * @output: 1111 * length :: 1112 * The length of the table in bytes. Set to 0 if not 1113 * needed. 1114 * 1115 * @return: 1116 * FreeType error code. 0 means success. 1117 * 1118 * @note: 1119 * The stream cursor must be at the font file's origin. 1120 */ 1121 typedef FT_Error 1122 (*TT_Loader_GotoTableFunc)( TT_Face face, 1123 FT_ULong tag, 1124 FT_Stream stream, 1125 FT_ULong* length ); 1126 1127 1128 /************************************************************************** 1129 * 1130 * @functype: 1131 * TT_Loader_StartGlyphFunc 1132 * 1133 * @description: 1134 * Seeks a stream to the start of a given glyph element, and opens a 1135 * frame for it. 1136 * 1137 * @input: 1138 * loader :: 1139 * The current TrueType glyph loader object. 1140 * 1141 * glyph index :: The index of the glyph to access. 1142 * 1143 * offset :: 1144 * The offset of the glyph according to the 1145 * `locations' table. 1146 * 1147 * byte_count :: 1148 * The size of the frame in bytes. 1149 * 1150 * @return: 1151 * FreeType error code. 0 means success. 1152 * 1153 * @note: 1154 * This function is normally equivalent to FT_STREAM_SEEK(offset) 1155 * followed by FT_FRAME_ENTER(byte_count) with the loader's stream, 1156 * but alternative formats (e.g. compressed ones) might use something 1157 * different. 1158 */ 1159 typedef FT_Error 1160 (*TT_Loader_StartGlyphFunc)( TT_Loader loader, 1161 FT_UInt glyph_index, 1162 FT_ULong offset, 1163 FT_UInt byte_count ); 1164 1165 1166 /************************************************************************** 1167 * 1168 * @functype: 1169 * TT_Loader_ReadGlyphFunc 1170 * 1171 * @description: 1172 * Reads one glyph element (its header, a simple glyph, or a 1173 * composite) from the loader's current stream frame. 1174 * 1175 * @input: 1176 * loader :: 1177 * The current TrueType glyph loader object. 1178 * 1179 * @return: 1180 * FreeType error code. 0 means success. 1181 */ 1182 typedef FT_Error 1183 (*TT_Loader_ReadGlyphFunc)( TT_Loader loader ); 1184 1185 1186 /************************************************************************** 1187 * 1188 * @functype: 1189 * TT_Loader_EndGlyphFunc 1190 * 1191 * @description: 1192 * Closes the current loader stream frame for the glyph. 1193 * 1194 * @input: 1195 * loader :: 1196 * The current TrueType glyph loader object. 1197 */ 1198 typedef void 1199 (*TT_Loader_EndGlyphFunc)( TT_Loader loader ); 1200 1201 1202 typedef enum TT_SbitTableType_ 1203 { 1204 TT_SBIT_TABLE_TYPE_NONE = 0, 1205 TT_SBIT_TABLE_TYPE_EBLC, /* `EBLC' (Microsoft), */ 1206 /* `bloc' (Apple) */ 1207 TT_SBIT_TABLE_TYPE_CBLC, /* `CBLC' (Google) */ 1208 TT_SBIT_TABLE_TYPE_SBIX, /* `sbix' (Apple) */ 1209 1210 /* do not remove */ 1211 TT_SBIT_TABLE_TYPE_MAX 1212 1213 } TT_SbitTableType; 1214 1215 1216 /* OpenType 1.8 brings new tables for variation font support; */ 1217 /* to make the old MM and GX fonts still work we need to check */ 1218 /* the presence (and validity) of the functionality provided */ 1219 /* by those tables. The following flag macros are for the */ 1220 /* field `variation_support'. */ 1221 /* */ 1222 /* Note that `fvar' gets checked immediately at font loading, */ 1223 /* while the other features are only loaded if MM support is */ 1224 /* actually requested. */ 1225 1226 /* FVAR */ 1227 #define TT_FACE_FLAG_VAR_FVAR ( 1 << 0 ) 1228 1229 /* HVAR */ 1230 #define TT_FACE_FLAG_VAR_HADVANCE ( 1 << 1 ) 1231 #define TT_FACE_FLAG_VAR_LSB ( 1 << 2 ) 1232 #define TT_FACE_FLAG_VAR_RSB ( 1 << 3 ) 1233 1234 /* VVAR */ 1235 #define TT_FACE_FLAG_VAR_VADVANCE ( 1 << 4 ) 1236 #define TT_FACE_FLAG_VAR_TSB ( 1 << 5 ) 1237 #define TT_FACE_FLAG_VAR_BSB ( 1 << 6 ) 1238 #define TT_FACE_FLAG_VAR_VORG ( 1 << 7 ) 1239 1240 /* MVAR */ 1241 #define TT_FACE_FLAG_VAR_MVAR ( 1 << 8 ) 1242 1243 1244 /************************************************************************** 1245 * 1246 * TrueType Face Type 1247 * 1248 * @struct: 1249 * TT_Face 1250 * 1251 * @description: 1252 * The TrueType face class. These objects model the resolution and 1253 * point-size independent data found in a TrueType font file. 1254 * 1255 * @fields: 1256 * root :: 1257 * The base FT_Face structure, managed by the 1258 * base layer. 1259 * 1260 * ttc_header :: 1261 * The TrueType collection header, used when 1262 * the file is a `ttc' rather than a `ttf'. 1263 * For ordinary font files, the field 1264 * `ttc_header.count' is set to 0. 1265 * 1266 * format_tag :: 1267 * The font format tag. 1268 * 1269 * num_tables :: 1270 * The number of TrueType tables in this font 1271 * file. 1272 * 1273 * dir_tables :: 1274 * The directory of TrueType tables for this 1275 * font file. 1276 * 1277 * header :: 1278 * The font's font header (`head' table). 1279 * Read on font opening. 1280 * 1281 * horizontal :: 1282 * The font's horizontal header (`hhea' 1283 * table). This field also contains the 1284 * associated horizontal metrics table 1285 * (`hmtx'). 1286 * 1287 * max_profile :: 1288 * The font's maximum profile table. Read on 1289 * font opening. Note that some maximum 1290 * values cannot be taken directly from this 1291 * table. We thus define additional fields 1292 * below to hold the computed maxima. 1293 * 1294 * vertical_info :: 1295 * A boolean which is set when the font file 1296 * contains vertical metrics. If not, the 1297 * value of the `vertical' field is 1298 * undefined. 1299 * 1300 * vertical :: 1301 * The font's vertical header (`vhea' table). 1302 * This field also contains the associated 1303 * vertical metrics table (`vmtx'), if found. 1304 * IMPORTANT: The contents of this field is 1305 * undefined if the `vertical_info' field is 1306 * unset. 1307 * 1308 * num_names :: 1309 * The number of name records within this 1310 * TrueType font. 1311 * 1312 * name_table :: 1313 * The table of name records (`name'). 1314 * 1315 * os2 :: 1316 * The font's OS/2 table (`OS/2'). 1317 * 1318 * postscript :: 1319 * The font's PostScript table (`post' 1320 * table). The PostScript glyph names are 1321 * not loaded by the driver on face opening. 1322 * See the `ttpost' module for more details. 1323 * 1324 * cmap_table :: 1325 * Address of the face's `cmap' SFNT table 1326 * in memory (it's an extracted frame). 1327 * 1328 * cmap_size :: 1329 * The size in bytes of the `cmap_table' 1330 * described above. 1331 * 1332 * goto_table :: 1333 * A function called by each TrueType table 1334 * loader to position a stream's cursor to 1335 * the start of a given table according to 1336 * its tag. It defaults to TT_Goto_Face but 1337 * can be different for strange formats (e.g. 1338 * Type 42). 1339 * 1340 * access_glyph_frame :: 1341 * A function used to access the frame of a 1342 * given glyph within the face's font file. 1343 * 1344 * forget_glyph_frame :: 1345 * A function used to forget the frame of a 1346 * given glyph when all data has been loaded. 1347 * 1348 * read_glyph_header :: 1349 * A function used to read a glyph header. 1350 * It must be called between an `access' and 1351 * `forget'. 1352 * 1353 * read_simple_glyph :: 1354 * A function used to read a simple glyph. 1355 * It must be called after the header was 1356 * read, and before the `forget'. 1357 * 1358 * read_composite_glyph :: 1359 * A function used to read a composite glyph. 1360 * It must be called after the header was 1361 * read, and before the `forget'. 1362 * 1363 * sfnt :: 1364 * A pointer to the SFNT service. 1365 * 1366 * psnames :: 1367 * A pointer to the PostScript names service. 1368 * 1369 * mm :: 1370 * A pointer to the Multiple Masters service. 1371 * 1372 * var :: 1373 * A pointer to the Metrics Variations 1374 * service. 1375 * 1376 * hdmx :: 1377 * The face's horizontal device metrics 1378 * (`hdmx' table). This table is optional in 1379 * TrueType/OpenType fonts. 1380 * 1381 * gasp :: 1382 * The grid-fitting and scaling properties 1383 * table (`gasp'). This table is optional in 1384 * TrueType/OpenType fonts. 1385 * 1386 * pclt :: 1387 * The `pclt' SFNT table. 1388 * 1389 * num_sbit_scales :: 1390 * The number of sbit scales for this font. 1391 * 1392 * sbit_scales :: 1393 * Array of sbit scales embedded in this 1394 * font. This table is optional in a 1395 * TrueType/OpenType font. 1396 * 1397 * postscript_names :: 1398 * A table used to store the Postscript names 1399 * of the glyphs for this font. See the 1400 * file `ttconfig.h' for comments on the 1401 * TT_CONFIG_OPTION_POSTSCRIPT_NAMES option. 1402 * 1403 * palette_data :: 1404 * Some fields from the `CPAL' table that are directly indexed. 1405 * 1406 * palette_index :: 1407 * The current palette index, as set by @FT_Palette_Select. 1408 * 1409 * palette :: 1410 * An array containing the current palette's colors. 1411 * 1412 * have_foreground_color :: 1413 * There was a call to @FT_Palette_Set_Foreground_Color. 1414 * 1415 * foreground_color :: 1416 * The current foreground color corresponding to `CPAL' color index 1417 * 0xFFFF. Only valid if `have_foreground_color' is set. 1418 * 1419 * font_program_size :: 1420 * Size in bytecodes of the face's font 1421 * program. 0 if none defined. Ignored for 1422 * Type 2 fonts. 1423 * 1424 * font_program :: 1425 * The face's font program (bytecode stream) 1426 * executed at load time, also used during 1427 * glyph rendering. Comes from the `fpgm' 1428 * table. Ignored for Type 2 font fonts. 1429 * 1430 * cvt_program_size :: 1431 * The size in bytecodes of the face's cvt 1432 * program. Ignored for Type 2 fonts. 1433 * 1434 * cvt_program :: 1435 * The face's cvt program (bytecode stream) 1436 * executed each time an instance/size is 1437 * changed/reset. Comes from the `prep' 1438 * table. Ignored for Type 2 fonts. 1439 * 1440 * cvt_size :: 1441 * Size of the control value table (in 1442 * entries). Ignored for Type 2 fonts. 1443 * 1444 * cvt :: 1445 * The face's original control value table. 1446 * Coordinates are expressed in unscaled font 1447 * units. Comes from the `cvt ' table. 1448 * Ignored for Type 2 fonts. 1449 * 1450 * interpreter :: 1451 * A pointer to the TrueType bytecode 1452 * interpreters field is also used to hook 1453 * the debugger in `ttdebug'. 1454 * 1455 * extra :: 1456 * Reserved for third-party font drivers. 1457 * 1458 * postscript_name :: 1459 * The PS name of the font. Used by the 1460 * postscript name service. 1461 * 1462 * glyf_len :: 1463 * The length of the `glyf' table. Needed 1464 * for malformed `loca' tables. 1465 * 1466 * glyf_offset :: 1467 * The file offset of the `glyf' table. 1468 * 1469 * is_cff2 :: 1470 * Set if the font format is CFF2. 1471 * 1472 * doblend :: 1473 * A boolean which is set if the font should 1474 * be blended (this is for GX var). 1475 * 1476 * blend :: 1477 * Contains the data needed to control GX 1478 * variation tables (rather like Multiple 1479 * Master data). 1480 * 1481 * variation_support :: 1482 * Flags that indicate which OpenType 1483 * functionality related to font variation 1484 * support is present, valid, and usable. 1485 * For example, TT_FACE_FLAG_VAR_FVAR is only 1486 * set if we have at least one design axis. 1487 * 1488 * var_postscript_prefix :: 1489 * The PostScript name prefix needed for 1490 * constructing a variation font instance's 1491 * PS name . 1492 * 1493 * var_postscript_prefix_len :: 1494 * The length of the `var_postscript_prefix' 1495 * string. 1496 * 1497 * horz_metrics_size :: 1498 * The size of the `hmtx' table. 1499 * 1500 * vert_metrics_size :: 1501 * The size of the `vmtx' table. 1502 * 1503 * num_locations :: 1504 * The number of glyph locations in this 1505 * TrueType file. This should be 1506 * identical to the number of glyphs. 1507 * Ignored for Type 2 fonts. 1508 * 1509 * glyph_locations :: 1510 * An array of longs. These are offsets to 1511 * glyph data within the `glyf' table. 1512 * Ignored for Type 2 font faces. 1513 * 1514 * hdmx_table :: 1515 * A pointer to the `hdmx' table. 1516 * 1517 * hdmx_table_size :: 1518 * The size of the `hdmx' table. 1519 * 1520 * hdmx_record_count :: 1521 * The number of hdmx records. 1522 * 1523 * hdmx_record_size :: 1524 * The size of a single hdmx record. 1525 * 1526 * hdmx_record_sizes :: 1527 * An array holding the ppem sizes available 1528 * in the `hdmx' table. 1529 * 1530 * sbit_table :: 1531 * A pointer to the font's embedded bitmap 1532 * location table. 1533 * 1534 * sbit_table_size :: 1535 * The size of `sbit_table'. 1536 * 1537 * sbit_table_type :: 1538 * The sbit table type (CBLC, sbix, etc.). 1539 * 1540 * sbit_num_strikes :: 1541 * The number of sbit strikes exposed by 1542 * FreeType's API, omitting invalid strikes. 1543 * 1544 * sbit_strike_map :: 1545 * A mapping between the strike indices 1546 * exposed by the API and the indices used in 1547 * the font's sbit table. 1548 * 1549 * cpal :: 1550 * A pointer to data related to the `CPAL' table. NULL if the table 1551 * is not available. 1552 * 1553 * colr :: 1554 * A pointer to data related to the `COLR' table. NULL if the table 1555 * is not available. 1556 * 1557 * kern_table :: 1558 * A pointer to the `kern' table. 1559 * 1560 * kern_table_size :: 1561 * The size of the `kern' table. 1562 * 1563 * num_kern_tables :: 1564 * The number of supported kern subtables 1565 * (up to 32; FreeType recognizes only 1566 * horizontal ones with format 0). 1567 * 1568 * kern_avail_bits :: 1569 * The availability status of kern subtables; 1570 * if bit n is set, table n is available. 1571 * 1572 * kern_order_bits :: 1573 * The sortedness status of kern subtables; 1574 * if bit n is set, table n is sorted. 1575 * 1576 * bdf :: 1577 * Data related to an SFNT font's `bdf' 1578 * table; see `tttypes.h'. 1579 * 1580 * horz_metrics_offset :: 1581 * The file offset of the `hmtx' table. 1582 * 1583 * vert_metrics_offset :: 1584 * The file offset of the `vmtx' table. 1585 * 1586 * sph_found_func_flags :: 1587 * Flags identifying special bytecode 1588 * functions (used by the v38 implementation 1589 * of the bytecode interpreter). 1590 * 1591 * sph_compatibility_mode :: 1592 * This flag is set if we are in ClearType 1593 * backward compatibility mode (used by the 1594 * v38 implementation of the bytecode 1595 * interpreter). 1596 * 1597 * ebdt_start :: 1598 * The file offset of the sbit data table 1599 * (CBDT, bdat, etc.). 1600 * 1601 * ebdt_size :: 1602 * The size of the sbit data table. 1603 */ 1604 typedef struct TT_FaceRec_ 1605 { 1606 FT_FaceRec root; 1607 1608 TTC_HeaderRec ttc_header; 1609 1610 FT_ULong format_tag; 1611 FT_UShort num_tables; 1612 TT_Table dir_tables; 1613 1614 TT_Header header; /* TrueType header table */ 1615 TT_HoriHeader horizontal; /* TrueType horizontal header */ 1616 1617 TT_MaxProfile max_profile; 1618 1619 FT_Bool vertical_info; 1620 TT_VertHeader vertical; /* TT Vertical header, if present */ 1621 1622 FT_UShort num_names; /* number of name records */ 1623 TT_NameTableRec name_table; /* name table */ 1624 1625 TT_OS2 os2; /* TrueType OS/2 table */ 1626 TT_Postscript postscript; /* TrueType Postscript table */ 1627 1628 FT_Byte* cmap_table; /* extracted `cmap' table */ 1629 FT_ULong cmap_size; 1630 1631 TT_Loader_GotoTableFunc goto_table; 1632 1633 TT_Loader_StartGlyphFunc access_glyph_frame; 1634 TT_Loader_EndGlyphFunc forget_glyph_frame; 1635 TT_Loader_ReadGlyphFunc read_glyph_header; 1636 TT_Loader_ReadGlyphFunc read_simple_glyph; 1637 TT_Loader_ReadGlyphFunc read_composite_glyph; 1638 1639 /* a typeless pointer to the SFNT_Interface table used to load */ 1640 /* the basic TrueType tables in the face object */ 1641 void* sfnt; 1642 1643 /* a typeless pointer to the FT_Service_PsCMapsRec table used to */ 1644 /* handle glyph names <-> unicode & Mac values */ 1645 void* psnames; 1646 1647 #ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT 1648 /* a typeless pointer to the FT_Service_MultiMasters table used to */ 1649 /* handle variation fonts */ 1650 void* mm; 1651 1652 /* a typeless pointer to the FT_Service_MetricsVariationsRec table */ 1653 /* used to handle the HVAR, VVAR, and MVAR OpenType tables */ 1654 void* var; 1655 #endif 1656 1657 /* a typeless pointer to the PostScript Aux service */ 1658 void* psaux; 1659 1660 1661 /************************************************************************ 1662 * 1663 * Optional TrueType/OpenType tables 1664 * 1665 */ 1666 1667 /* grid-fitting and scaling table */ 1668 TT_GaspRec gasp; /* the `gasp' table */ 1669 1670 /* PCL 5 table */ 1671 TT_PCLT pclt; 1672 1673 /* embedded bitmaps support */ 1674 FT_ULong num_sbit_scales; 1675 TT_SBit_Scale sbit_scales; 1676 1677 /* postscript names table */ 1678 TT_Post_NamesRec postscript_names; 1679 1680 /* glyph colors */ 1681 FT_Palette_Data palette_data; /* since 2.10 */ 1682 FT_UShort palette_index; 1683 FT_Color* palette; 1684 FT_Bool have_foreground_color; 1685 FT_Color foreground_color; 1686 1687 1688 /************************************************************************ 1689 * 1690 * TrueType-specific fields (ignored by the CFF driver) 1691 * 1692 */ 1693 1694 /* the font program, if any */ 1695 FT_ULong font_program_size; 1696 FT_Byte* font_program; 1697 1698 /* the cvt program, if any */ 1699 FT_ULong cvt_program_size; 1700 FT_Byte* cvt_program; 1701 1702 /* the original, unscaled, control value table */ 1703 FT_ULong cvt_size; 1704 FT_Short* cvt; 1705 1706 /* A pointer to the bytecode interpreter to use. This is also */ 1707 /* used to hook the debugger for the `ttdebug' utility. */ 1708 TT_Interpreter interpreter; 1709 1710 1711 /************************************************************************ 1712 * 1713 * Other tables or fields. This is used by derivative formats like 1714 * OpenType. 1715 * 1716 */ 1717 1718 FT_Generic extra; 1719 1720 const char* postscript_name; 1721 1722 FT_ULong glyf_len; 1723 FT_ULong glyf_offset; /* since 2.7.1 */ 1724 1725 FT_Bool is_cff2; /* since 2.7.1 */ 1726 1727 #ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT 1728 FT_Bool doblend; 1729 GX_Blend blend; 1730 1731 FT_UInt32 variation_support; /* since 2.7.1 */ 1732 1733 const char* var_postscript_prefix; /* since 2.7.2 */ 1734 FT_UInt var_postscript_prefix_len; /* since 2.7.2 */ 1735 1736 #endif 1737 1738 /* since version 2.2 */ 1739 1740 FT_ULong horz_metrics_size; 1741 FT_ULong vert_metrics_size; 1742 1743 FT_ULong num_locations; /* in broken TTF, gid > 0xFFFF */ 1744 FT_Byte* glyph_locations; 1745 1746 FT_Byte* hdmx_table; 1747 FT_ULong hdmx_table_size; 1748 FT_UInt hdmx_record_count; 1749 FT_ULong hdmx_record_size; 1750 FT_Byte* hdmx_record_sizes; 1751 1752 FT_Byte* sbit_table; 1753 FT_ULong sbit_table_size; 1754 TT_SbitTableType sbit_table_type; 1755 FT_UInt sbit_num_strikes; 1756 FT_UInt* sbit_strike_map; 1757 1758 FT_Byte* kern_table; 1759 FT_ULong kern_table_size; 1760 FT_UInt num_kern_tables; 1761 FT_UInt32 kern_avail_bits; 1762 FT_UInt32 kern_order_bits; 1763 1764 #ifdef TT_CONFIG_OPTION_BDF 1765 TT_BDFRec bdf; 1766 #endif /* TT_CONFIG_OPTION_BDF */ 1767 1768 /* since 2.3.0 */ 1769 FT_ULong horz_metrics_offset; 1770 FT_ULong vert_metrics_offset; 1771 1772 #ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY 1773 /* since 2.4.12 */ 1774 FT_ULong sph_found_func_flags; /* special functions found */ 1775 /* for this face */ 1776 FT_Bool sph_compatibility_mode; 1777 #endif /* TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY */ 1778 1779 #ifdef TT_CONFIG_OPTION_EMBEDDED_BITMAPS 1780 /* since 2.7 */ 1781 FT_ULong ebdt_start; /* either `CBDT', `EBDT', or `bdat' */ 1782 FT_ULong ebdt_size; 1783 #endif 1784 1785 /* since 2.10 */ 1786 void* cpal; 1787 void* colr; 1788 1789 } TT_FaceRec; 1790 1791 1792 /************************************************************************** 1793 * 1794 * @struct: 1795 * TT_GlyphZoneRec 1796 * 1797 * @description: 1798 * A glyph zone is used to load, scale and hint glyph outline 1799 * coordinates. 1800 * 1801 * @fields: 1802 * memory :: 1803 * A handle to the memory manager. 1804 * 1805 * max_points :: 1806 * The maximum size in points of the zone. 1807 * 1808 * max_contours :: 1809 * Max size in links contours of the zone. 1810 * 1811 * n_points :: 1812 * The current number of points in the zone. 1813 * 1814 * n_contours :: 1815 * The current number of contours in the zone. 1816 * 1817 * org :: 1818 * The original glyph coordinates (font 1819 * units/scaled). 1820 * 1821 * cur :: 1822 * The current glyph coordinates (scaled/hinted). 1823 * 1824 * tags :: 1825 * The point control tags. 1826 * 1827 * contours :: 1828 * The contours end points. 1829 * 1830 * first_point :: 1831 * Offset of the current subglyph's first point. 1832 */ 1833 typedef struct TT_GlyphZoneRec_ 1834 { 1835 FT_Memory memory; 1836 FT_UShort max_points; 1837 FT_Short max_contours; 1838 FT_UShort n_points; /* number of points in zone */ 1839 FT_Short n_contours; /* number of contours */ 1840 1841 FT_Vector* org; /* original point coordinates */ 1842 FT_Vector* cur; /* current point coordinates */ 1843 FT_Vector* orus; /* original (unscaled) point coordinates */ 1844 1845 FT_Byte* tags; /* current touch flags */ 1846 FT_UShort* contours; /* contour end points */ 1847 1848 FT_UShort first_point; /* offset of first (#0) point */ 1849 1850 } TT_GlyphZoneRec, *TT_GlyphZone; 1851 1852 1853 /* handle to execution context */ 1854 typedef struct TT_ExecContextRec_* TT_ExecContext; 1855 1856 1857 /************************************************************************** 1858 * 1859 * @type: 1860 * TT_Size 1861 * 1862 * @description: 1863 * A handle to a TrueType size object. 1864 */ 1865 typedef struct TT_SizeRec_* TT_Size; 1866 1867 1868 /* glyph loader structure */ 1869 typedef struct TT_LoaderRec_ 1870 { 1871 TT_Face face; 1872 TT_Size size; 1873 FT_GlyphSlot glyph; 1874 FT_GlyphLoader gloader; 1875 1876 FT_ULong load_flags; 1877 FT_UInt glyph_index; 1878 1879 FT_Stream stream; 1880 FT_Int byte_len; 1881 1882 FT_Short n_contours; 1883 FT_BBox bbox; 1884 FT_Int left_bearing; 1885 FT_Int advance; 1886 FT_Int linear; 1887 FT_Bool linear_def; 1888 FT_Vector pp1; 1889 FT_Vector pp2; 1890 1891 /* the zone where we load our glyphs */ 1892 TT_GlyphZoneRec base; 1893 TT_GlyphZoneRec zone; 1894 1895 TT_ExecContext exec; 1896 FT_Byte* instructions; 1897 FT_ULong ins_pos; 1898 1899 /* for possible extensibility in other formats */ 1900 void* other; 1901 1902 /* since version 2.1.8 */ 1903 FT_Int top_bearing; 1904 FT_Int vadvance; 1905 FT_Vector pp3; 1906 FT_Vector pp4; 1907 1908 /* since version 2.2.1 */ 1909 FT_Byte* cursor; 1910 FT_Byte* limit; 1911 1912 /* since version 2.6.2 */ 1913 FT_ListRec composites; 1914 1915 } TT_LoaderRec; 1916 1917 1918 FT_END_HEADER 1919 1920 #endif /* TTTYPES_H_ */ 1921 1922 1923 /* END */ 1924