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