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