1 /**************************************************************************** 2 * 3 * t1tables.h 4 * 5 * Basic Type 1/Type 2 tables definitions and interface (specification 6 * only). 7 * 8 * Copyright (C) 1996-2019 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 T1TABLES_H_ 21 #define T1TABLES_H_ 22 23 24 #include <ft2build.h> 25 #include FT_FREETYPE_H 26 27 #ifdef FREETYPE_H 28 #error "freetype.h of FreeType 1 has been loaded!" 29 #error "Please fix the directory search order for header files" 30 #error "so that freetype.h of FreeType 2 is found first." 31 #endif 32 33 34 FT_BEGIN_HEADER 35 36 37 /************************************************************************** 38 * 39 * @section: 40 * type1_tables 41 * 42 * @title: 43 * Type 1 Tables 44 * 45 * @abstract: 46 * Type~1-specific font tables. 47 * 48 * @description: 49 * This section contains the definition of Type~1-specific tables, 50 * including structures related to other PostScript font formats. 51 * 52 * @order: 53 * PS_FontInfoRec 54 * PS_FontInfo 55 * PS_PrivateRec 56 * PS_Private 57 * 58 * CID_FaceDictRec 59 * CID_FaceDict 60 * CID_FaceInfoRec 61 * CID_FaceInfo 62 * 63 * FT_Has_PS_Glyph_Names 64 * FT_Get_PS_Font_Info 65 * FT_Get_PS_Font_Private 66 * FT_Get_PS_Font_Value 67 * 68 * T1_Blend_Flags 69 * T1_EncodingType 70 * PS_Dict_Keys 71 * 72 */ 73 74 75 /* Note that we separate font data in PS_FontInfoRec and PS_PrivateRec */ 76 /* structures in order to support Multiple Master fonts. */ 77 78 79 /************************************************************************** 80 * 81 * @struct: 82 * PS_FontInfoRec 83 * 84 * @description: 85 * A structure used to model a Type~1 or Type~2 FontInfo dictionary. 86 * Note that for Multiple Master fonts, each instance has its own 87 * FontInfo dictionary. 88 */ 89 typedef struct PS_FontInfoRec_ 90 { 91 FT_String* version; 92 FT_String* notice; 93 FT_String* full_name; 94 FT_String* family_name; 95 FT_String* weight; 96 FT_Long italic_angle; 97 FT_Bool is_fixed_pitch; 98 FT_Short underline_position; 99 FT_UShort underline_thickness; 100 101 } PS_FontInfoRec; 102 103 104 /************************************************************************** 105 * 106 * @struct: 107 * PS_FontInfo 108 * 109 * @description: 110 * A handle to a @PS_FontInfoRec structure. 111 */ 112 typedef struct PS_FontInfoRec_* PS_FontInfo; 113 114 115 /************************************************************************** 116 * 117 * @struct: 118 * T1_FontInfo 119 * 120 * @description: 121 * This type is equivalent to @PS_FontInfoRec. It is deprecated but kept 122 * to maintain source compatibility between various versions of FreeType. 123 */ 124 typedef PS_FontInfoRec T1_FontInfo; 125 126 127 /************************************************************************** 128 * 129 * @struct: 130 * PS_PrivateRec 131 * 132 * @description: 133 * A structure used to model a Type~1 or Type~2 private dictionary. Note 134 * that for Multiple Master fonts, each instance has its own Private 135 * dictionary. 136 */ 137 typedef struct PS_PrivateRec_ 138 { 139 FT_Int unique_id; 140 FT_Int lenIV; 141 142 FT_Byte num_blue_values; 143 FT_Byte num_other_blues; 144 FT_Byte num_family_blues; 145 FT_Byte num_family_other_blues; 146 147 FT_Short blue_values[14]; 148 FT_Short other_blues[10]; 149 150 FT_Short family_blues [14]; 151 FT_Short family_other_blues[10]; 152 153 FT_Fixed blue_scale; 154 FT_Int blue_shift; 155 FT_Int blue_fuzz; 156 157 FT_UShort standard_width[1]; 158 FT_UShort standard_height[1]; 159 160 FT_Byte num_snap_widths; 161 FT_Byte num_snap_heights; 162 FT_Bool force_bold; 163 FT_Bool round_stem_up; 164 165 FT_Short snap_widths [13]; /* including std width */ 166 FT_Short snap_heights[13]; /* including std height */ 167 168 FT_Fixed expansion_factor; 169 170 FT_Long language_group; 171 FT_Long password; 172 173 FT_Short min_feature[2]; 174 175 } PS_PrivateRec; 176 177 178 /************************************************************************** 179 * 180 * @struct: 181 * PS_Private 182 * 183 * @description: 184 * A handle to a @PS_PrivateRec structure. 185 */ 186 typedef struct PS_PrivateRec_* PS_Private; 187 188 189 /************************************************************************** 190 * 191 * @struct: 192 * T1_Private 193 * 194 * @description: 195 * This type is equivalent to @PS_PrivateRec. It is deprecated but kept 196 * to maintain source compatibility between various versions of FreeType. 197 */ 198 typedef PS_PrivateRec T1_Private; 199 200 201 /************************************************************************** 202 * 203 * @enum: 204 * T1_Blend_Flags 205 * 206 * @description: 207 * A set of flags used to indicate which fields are present in a given 208 * blend dictionary (font info or private). Used to support Multiple 209 * Masters fonts. 210 * 211 * @values: 212 * T1_BLEND_UNDERLINE_POSITION :: 213 * T1_BLEND_UNDERLINE_THICKNESS :: 214 * T1_BLEND_ITALIC_ANGLE :: 215 * T1_BLEND_BLUE_VALUES :: 216 * T1_BLEND_OTHER_BLUES :: 217 * T1_BLEND_STANDARD_WIDTH :: 218 * T1_BLEND_STANDARD_HEIGHT :: 219 * T1_BLEND_STEM_SNAP_WIDTHS :: 220 * T1_BLEND_STEM_SNAP_HEIGHTS :: 221 * T1_BLEND_BLUE_SCALE :: 222 * T1_BLEND_BLUE_SHIFT :: 223 * T1_BLEND_FAMILY_BLUES :: 224 * T1_BLEND_FAMILY_OTHER_BLUES :: 225 * T1_BLEND_FORCE_BOLD :: 226 */ 227 typedef enum T1_Blend_Flags_ 228 { 229 /* required fields in a FontInfo blend dictionary */ 230 T1_BLEND_UNDERLINE_POSITION = 0, 231 T1_BLEND_UNDERLINE_THICKNESS, 232 T1_BLEND_ITALIC_ANGLE, 233 234 /* required fields in a Private blend dictionary */ 235 T1_BLEND_BLUE_VALUES, 236 T1_BLEND_OTHER_BLUES, 237 T1_BLEND_STANDARD_WIDTH, 238 T1_BLEND_STANDARD_HEIGHT, 239 T1_BLEND_STEM_SNAP_WIDTHS, 240 T1_BLEND_STEM_SNAP_HEIGHTS, 241 T1_BLEND_BLUE_SCALE, 242 T1_BLEND_BLUE_SHIFT, 243 T1_BLEND_FAMILY_BLUES, 244 T1_BLEND_FAMILY_OTHER_BLUES, 245 T1_BLEND_FORCE_BOLD, 246 247 T1_BLEND_MAX /* do not remove */ 248 249 } T1_Blend_Flags; 250 251 252 /* these constants are deprecated; use the corresponding */ 253 /* `T1_Blend_Flags` values instead */ 254 #define t1_blend_underline_position T1_BLEND_UNDERLINE_POSITION 255 #define t1_blend_underline_thickness T1_BLEND_UNDERLINE_THICKNESS 256 #define t1_blend_italic_angle T1_BLEND_ITALIC_ANGLE 257 #define t1_blend_blue_values T1_BLEND_BLUE_VALUES 258 #define t1_blend_other_blues T1_BLEND_OTHER_BLUES 259 #define t1_blend_standard_widths T1_BLEND_STANDARD_WIDTH 260 #define t1_blend_standard_height T1_BLEND_STANDARD_HEIGHT 261 #define t1_blend_stem_snap_widths T1_BLEND_STEM_SNAP_WIDTHS 262 #define t1_blend_stem_snap_heights T1_BLEND_STEM_SNAP_HEIGHTS 263 #define t1_blend_blue_scale T1_BLEND_BLUE_SCALE 264 #define t1_blend_blue_shift T1_BLEND_BLUE_SHIFT 265 #define t1_blend_family_blues T1_BLEND_FAMILY_BLUES 266 #define t1_blend_family_other_blues T1_BLEND_FAMILY_OTHER_BLUES 267 #define t1_blend_force_bold T1_BLEND_FORCE_BOLD 268 #define t1_blend_max T1_BLEND_MAX 269 270 /* */ 271 272 273 /* maximum number of Multiple Masters designs, as defined in the spec */ 274 #define T1_MAX_MM_DESIGNS 16 275 276 /* maximum number of Multiple Masters axes, as defined in the spec */ 277 #define T1_MAX_MM_AXIS 4 278 279 /* maximum number of elements in a design map */ 280 #define T1_MAX_MM_MAP_POINTS 20 281 282 283 /* this structure is used to store the BlendDesignMap entry for an axis */ 284 typedef struct PS_DesignMap_ 285 { 286 FT_Byte num_points; 287 FT_Long* design_points; 288 FT_Fixed* blend_points; 289 290 } PS_DesignMapRec, *PS_DesignMap; 291 292 /* backward compatible definition */ 293 typedef PS_DesignMapRec T1_DesignMap; 294 295 296 typedef struct PS_BlendRec_ 297 { 298 FT_UInt num_designs; 299 FT_UInt num_axis; 300 301 FT_String* axis_names[T1_MAX_MM_AXIS]; 302 FT_Fixed* design_pos[T1_MAX_MM_DESIGNS]; 303 PS_DesignMapRec design_map[T1_MAX_MM_AXIS]; 304 305 FT_Fixed* weight_vector; 306 FT_Fixed* default_weight_vector; 307 308 PS_FontInfo font_infos[T1_MAX_MM_DESIGNS + 1]; 309 PS_Private privates [T1_MAX_MM_DESIGNS + 1]; 310 311 FT_ULong blend_bitflags; 312 313 FT_BBox* bboxes [T1_MAX_MM_DESIGNS + 1]; 314 315 /* since 2.3.0 */ 316 317 /* undocumented, optional: the default design instance; */ 318 /* corresponds to default_weight_vector -- */ 319 /* num_default_design_vector == 0 means it is not present */ 320 /* in the font and associated metrics files */ 321 FT_UInt default_design_vector[T1_MAX_MM_DESIGNS]; 322 FT_UInt num_default_design_vector; 323 324 } PS_BlendRec, *PS_Blend; 325 326 327 /* backward compatible definition */ 328 typedef PS_BlendRec T1_Blend; 329 330 331 /************************************************************************** 332 * 333 * @struct: 334 * CID_FaceDictRec 335 * 336 * @description: 337 * A structure used to represent data in a CID top-level dictionary. In 338 * most cases, they are part of the font's '/FDArray' array. Within a 339 * CID font file, such (internal) subfont dictionaries are enclosed by 340 * '%ADOBeginFontDict' and '%ADOEndFontDict' comments. 341 * 342 * Note that `CID_FaceDictRec` misses a field for the '/FontName' 343 * keyword, specifying the subfont's name (the top-level font name is 344 * given by the '/CIDFontName' keyword). This is an oversight, but it 345 * doesn't limit the 'cid' font module's functionality because FreeType 346 * neither needs this entry nor gives access to CID subfonts. 347 */ 348 typedef struct CID_FaceDictRec_ 349 { 350 PS_PrivateRec private_dict; 351 352 FT_UInt len_buildchar; 353 FT_Fixed forcebold_threshold; 354 FT_Pos stroke_width; 355 FT_Fixed expansion_factor; /* this is a duplicate of */ 356 /* `private_dict->expansion_factor' */ 357 FT_Byte paint_type; 358 FT_Byte font_type; 359 FT_Matrix font_matrix; 360 FT_Vector font_offset; 361 362 FT_UInt num_subrs; 363 FT_ULong subrmap_offset; 364 FT_Int sd_bytes; 365 366 } CID_FaceDictRec; 367 368 369 /************************************************************************** 370 * 371 * @struct: 372 * CID_FaceDict 373 * 374 * @description: 375 * A handle to a @CID_FaceDictRec structure. 376 */ 377 typedef struct CID_FaceDictRec_* CID_FaceDict; 378 379 380 /************************************************************************** 381 * 382 * @struct: 383 * CID_FontDict 384 * 385 * @description: 386 * This type is equivalent to @CID_FaceDictRec. It is deprecated but 387 * kept to maintain source compatibility between various versions of 388 * FreeType. 389 */ 390 typedef CID_FaceDictRec CID_FontDict; 391 392 393 /************************************************************************** 394 * 395 * @struct: 396 * CID_FaceInfoRec 397 * 398 * @description: 399 * A structure used to represent CID Face information. 400 */ 401 typedef struct CID_FaceInfoRec_ 402 { 403 FT_String* cid_font_name; 404 FT_Fixed cid_version; 405 FT_Int cid_font_type; 406 407 FT_String* registry; 408 FT_String* ordering; 409 FT_Int supplement; 410 411 PS_FontInfoRec font_info; 412 FT_BBox font_bbox; 413 FT_ULong uid_base; 414 415 FT_Int num_xuid; 416 FT_ULong xuid[16]; 417 418 FT_ULong cidmap_offset; 419 FT_Int fd_bytes; 420 FT_Int gd_bytes; 421 FT_ULong cid_count; 422 423 FT_Int num_dicts; 424 CID_FaceDict font_dicts; 425 426 FT_ULong data_offset; 427 428 } CID_FaceInfoRec; 429 430 431 /************************************************************************** 432 * 433 * @struct: 434 * CID_FaceInfo 435 * 436 * @description: 437 * A handle to a @CID_FaceInfoRec structure. 438 */ 439 typedef struct CID_FaceInfoRec_* CID_FaceInfo; 440 441 442 /************************************************************************** 443 * 444 * @struct: 445 * CID_Info 446 * 447 * @description: 448 * This type is equivalent to @CID_FaceInfoRec. It is deprecated but kept 449 * to maintain source compatibility between various versions of FreeType. 450 */ 451 typedef CID_FaceInfoRec CID_Info; 452 453 454 /************************************************************************** 455 * 456 * @function: 457 * FT_Has_PS_Glyph_Names 458 * 459 * @description: 460 * Return true if a given face provides reliable PostScript glyph names. 461 * This is similar to using the @FT_HAS_GLYPH_NAMES macro, except that 462 * certain fonts (mostly TrueType) contain incorrect glyph name tables. 463 * 464 * When this function returns true, the caller is sure that the glyph 465 * names returned by @FT_Get_Glyph_Name are reliable. 466 * 467 * @input: 468 * face :: 469 * face handle 470 * 471 * @return: 472 * Boolean. True if glyph names are reliable. 473 * 474 */ 475 FT_EXPORT( FT_Int ) 476 FT_Has_PS_Glyph_Names( FT_Face face ); 477 478 479 /************************************************************************** 480 * 481 * @function: 482 * FT_Get_PS_Font_Info 483 * 484 * @description: 485 * Retrieve the @PS_FontInfoRec structure corresponding to a given 486 * PostScript font. 487 * 488 * @input: 489 * face :: 490 * PostScript face handle. 491 * 492 * @output: 493 * afont_info :: 494 * Output font info structure pointer. 495 * 496 * @return: 497 * FreeType error code. 0~means success. 498 * 499 * @note: 500 * String pointers within the @PS_FontInfoRec structure are owned by the 501 * face and don't need to be freed by the caller. Missing entries in 502 * the font's FontInfo dictionary are represented by `NULL` pointers. 503 * 504 * If the font's format is not PostScript-based, this function will 505 * return the `FT_Err_Invalid_Argument` error code. 506 * 507 */ 508 FT_EXPORT( FT_Error ) 509 FT_Get_PS_Font_Info( FT_Face face, 510 PS_FontInfo afont_info ); 511 512 513 /************************************************************************** 514 * 515 * @function: 516 * FT_Get_PS_Font_Private 517 * 518 * @description: 519 * Retrieve the @PS_PrivateRec structure corresponding to a given 520 * PostScript font. 521 * 522 * @input: 523 * face :: 524 * PostScript face handle. 525 * 526 * @output: 527 * afont_private :: 528 * Output private dictionary structure pointer. 529 * 530 * @return: 531 * FreeType error code. 0~means success. 532 * 533 * @note: 534 * The string pointers within the @PS_PrivateRec structure are owned by 535 * the face and don't need to be freed by the caller. 536 * 537 * If the font's format is not PostScript-based, this function returns 538 * the `FT_Err_Invalid_Argument` error code. 539 * 540 */ 541 FT_EXPORT( FT_Error ) 542 FT_Get_PS_Font_Private( FT_Face face, 543 PS_Private afont_private ); 544 545 546 /************************************************************************** 547 * 548 * @enum: 549 * T1_EncodingType 550 * 551 * @description: 552 * An enumeration describing the 'Encoding' entry in a Type 1 dictionary. 553 * 554 * @values: 555 * T1_ENCODING_TYPE_NONE :: 556 * T1_ENCODING_TYPE_ARRAY :: 557 * T1_ENCODING_TYPE_STANDARD :: 558 * T1_ENCODING_TYPE_ISOLATIN1 :: 559 * T1_ENCODING_TYPE_EXPERT :: 560 * 561 * @since: 562 * 2.4.8 563 */ 564 typedef enum T1_EncodingType_ 565 { 566 T1_ENCODING_TYPE_NONE = 0, 567 T1_ENCODING_TYPE_ARRAY, 568 T1_ENCODING_TYPE_STANDARD, 569 T1_ENCODING_TYPE_ISOLATIN1, 570 T1_ENCODING_TYPE_EXPERT 571 572 } T1_EncodingType; 573 574 575 /************************************************************************** 576 * 577 * @enum: 578 * PS_Dict_Keys 579 * 580 * @description: 581 * An enumeration used in calls to @FT_Get_PS_Font_Value to identify the 582 * Type~1 dictionary entry to retrieve. 583 * 584 * @values: 585 * PS_DICT_FONT_TYPE :: 586 * PS_DICT_FONT_MATRIX :: 587 * PS_DICT_FONT_BBOX :: 588 * PS_DICT_PAINT_TYPE :: 589 * PS_DICT_FONT_NAME :: 590 * PS_DICT_UNIQUE_ID :: 591 * PS_DICT_NUM_CHAR_STRINGS :: 592 * PS_DICT_CHAR_STRING_KEY :: 593 * PS_DICT_CHAR_STRING :: 594 * PS_DICT_ENCODING_TYPE :: 595 * PS_DICT_ENCODING_ENTRY :: 596 * PS_DICT_NUM_SUBRS :: 597 * PS_DICT_SUBR :: 598 * PS_DICT_STD_HW :: 599 * PS_DICT_STD_VW :: 600 * PS_DICT_NUM_BLUE_VALUES :: 601 * PS_DICT_BLUE_VALUE :: 602 * PS_DICT_BLUE_FUZZ :: 603 * PS_DICT_NUM_OTHER_BLUES :: 604 * PS_DICT_OTHER_BLUE :: 605 * PS_DICT_NUM_FAMILY_BLUES :: 606 * PS_DICT_FAMILY_BLUE :: 607 * PS_DICT_NUM_FAMILY_OTHER_BLUES :: 608 * PS_DICT_FAMILY_OTHER_BLUE :: 609 * PS_DICT_BLUE_SCALE :: 610 * PS_DICT_BLUE_SHIFT :: 611 * PS_DICT_NUM_STEM_SNAP_H :: 612 * PS_DICT_STEM_SNAP_H :: 613 * PS_DICT_NUM_STEM_SNAP_V :: 614 * PS_DICT_STEM_SNAP_V :: 615 * PS_DICT_FORCE_BOLD :: 616 * PS_DICT_RND_STEM_UP :: 617 * PS_DICT_MIN_FEATURE :: 618 * PS_DICT_LEN_IV :: 619 * PS_DICT_PASSWORD :: 620 * PS_DICT_LANGUAGE_GROUP :: 621 * PS_DICT_VERSION :: 622 * PS_DICT_NOTICE :: 623 * PS_DICT_FULL_NAME :: 624 * PS_DICT_FAMILY_NAME :: 625 * PS_DICT_WEIGHT :: 626 * PS_DICT_IS_FIXED_PITCH :: 627 * PS_DICT_UNDERLINE_POSITION :: 628 * PS_DICT_UNDERLINE_THICKNESS :: 629 * PS_DICT_FS_TYPE :: 630 * PS_DICT_ITALIC_ANGLE :: 631 * 632 * @since: 633 * 2.4.8 634 */ 635 typedef enum PS_Dict_Keys_ 636 { 637 /* conventionally in the font dictionary */ 638 PS_DICT_FONT_TYPE, /* FT_Byte */ 639 PS_DICT_FONT_MATRIX, /* FT_Fixed */ 640 PS_DICT_FONT_BBOX, /* FT_Fixed */ 641 PS_DICT_PAINT_TYPE, /* FT_Byte */ 642 PS_DICT_FONT_NAME, /* FT_String* */ 643 PS_DICT_UNIQUE_ID, /* FT_Int */ 644 PS_DICT_NUM_CHAR_STRINGS, /* FT_Int */ 645 PS_DICT_CHAR_STRING_KEY, /* FT_String* */ 646 PS_DICT_CHAR_STRING, /* FT_String* */ 647 PS_DICT_ENCODING_TYPE, /* T1_EncodingType */ 648 PS_DICT_ENCODING_ENTRY, /* FT_String* */ 649 650 /* conventionally in the font Private dictionary */ 651 PS_DICT_NUM_SUBRS, /* FT_Int */ 652 PS_DICT_SUBR, /* FT_String* */ 653 PS_DICT_STD_HW, /* FT_UShort */ 654 PS_DICT_STD_VW, /* FT_UShort */ 655 PS_DICT_NUM_BLUE_VALUES, /* FT_Byte */ 656 PS_DICT_BLUE_VALUE, /* FT_Short */ 657 PS_DICT_BLUE_FUZZ, /* FT_Int */ 658 PS_DICT_NUM_OTHER_BLUES, /* FT_Byte */ 659 PS_DICT_OTHER_BLUE, /* FT_Short */ 660 PS_DICT_NUM_FAMILY_BLUES, /* FT_Byte */ 661 PS_DICT_FAMILY_BLUE, /* FT_Short */ 662 PS_DICT_NUM_FAMILY_OTHER_BLUES, /* FT_Byte */ 663 PS_DICT_FAMILY_OTHER_BLUE, /* FT_Short */ 664 PS_DICT_BLUE_SCALE, /* FT_Fixed */ 665 PS_DICT_BLUE_SHIFT, /* FT_Int */ 666 PS_DICT_NUM_STEM_SNAP_H, /* FT_Byte */ 667 PS_DICT_STEM_SNAP_H, /* FT_Short */ 668 PS_DICT_NUM_STEM_SNAP_V, /* FT_Byte */ 669 PS_DICT_STEM_SNAP_V, /* FT_Short */ 670 PS_DICT_FORCE_BOLD, /* FT_Bool */ 671 PS_DICT_RND_STEM_UP, /* FT_Bool */ 672 PS_DICT_MIN_FEATURE, /* FT_Short */ 673 PS_DICT_LEN_IV, /* FT_Int */ 674 PS_DICT_PASSWORD, /* FT_Long */ 675 PS_DICT_LANGUAGE_GROUP, /* FT_Long */ 676 677 /* conventionally in the font FontInfo dictionary */ 678 PS_DICT_VERSION, /* FT_String* */ 679 PS_DICT_NOTICE, /* FT_String* */ 680 PS_DICT_FULL_NAME, /* FT_String* */ 681 PS_DICT_FAMILY_NAME, /* FT_String* */ 682 PS_DICT_WEIGHT, /* FT_String* */ 683 PS_DICT_IS_FIXED_PITCH, /* FT_Bool */ 684 PS_DICT_UNDERLINE_POSITION, /* FT_Short */ 685 PS_DICT_UNDERLINE_THICKNESS, /* FT_UShort */ 686 PS_DICT_FS_TYPE, /* FT_UShort */ 687 PS_DICT_ITALIC_ANGLE, /* FT_Long */ 688 689 PS_DICT_MAX = PS_DICT_ITALIC_ANGLE 690 691 } PS_Dict_Keys; 692 693 694 /************************************************************************** 695 * 696 * @function: 697 * FT_Get_PS_Font_Value 698 * 699 * @description: 700 * Retrieve the value for the supplied key from a PostScript font. 701 * 702 * @input: 703 * face :: 704 * PostScript face handle. 705 * 706 * key :: 707 * An enumeration value representing the dictionary key to retrieve. 708 * 709 * idx :: 710 * For array values, this specifies the index to be returned. 711 * 712 * value :: 713 * A pointer to memory into which to write the value. 714 * 715 * valen_len :: 716 * The size, in bytes, of the memory supplied for the value. 717 * 718 * @output: 719 * value :: 720 * The value matching the above key, if it exists. 721 * 722 * @return: 723 * The amount of memory (in bytes) required to hold the requested value 724 * (if it exists, -1 otherwise). 725 * 726 * @note: 727 * The values returned are not pointers into the internal structures of 728 * the face, but are 'fresh' copies, so that the memory containing them 729 * belongs to the calling application. This also enforces the 730 * 'read-only' nature of these values, i.e., this function cannot be 731 * used to manipulate the face. 732 * 733 * `value` is a void pointer because the values returned can be of 734 * various types. 735 * 736 * If either `value` is `NULL` or `value_len` is too small, just the 737 * required memory size for the requested entry is returned. 738 * 739 * The `idx` parameter is used, not only to retrieve elements of, for 740 * example, the FontMatrix or FontBBox, but also to retrieve name keys 741 * from the CharStrings dictionary, and the charstrings themselves. It 742 * is ignored for atomic values. 743 * 744 * `PS_DICT_BLUE_SCALE` returns a value that is scaled up by 1000. To 745 * get the value as in the font stream, you need to divide by 65536000.0 746 * (to remove the FT_Fixed scale, and the x1000 scale). 747 * 748 * IMPORTANT: Only key/value pairs read by the FreeType interpreter can 749 * be retrieved. So, for example, PostScript procedures such as NP, ND, 750 * and RD are not available. Arbitrary keys are, obviously, not be 751 * available either. 752 * 753 * If the font's format is not PostScript-based, this function returns 754 * the `FT_Err_Invalid_Argument` error code. 755 * 756 * @since: 757 * 2.4.8 758 * 759 */ 760 FT_EXPORT( FT_Long ) 761 FT_Get_PS_Font_Value( FT_Face face, 762 PS_Dict_Keys key, 763 FT_UInt idx, 764 void *value, 765 FT_Long value_len ); 766 767 /* */ 768 769 FT_END_HEADER 770 771 #endif /* T1TABLES_H_ */ 772 773 774 /* END */ 775