1 /***************************************************************************/ 2 /* */ 3 /* t1tables.h */ 4 /* */ 5 /* Basic Type 1/Type 2 tables definitions and interface (specification */ 6 /* only). */ 7 /* */ 8 /* Copyright 1996-2017 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 (PostScript) 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 /* backwards-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 /* backwards-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. */ 340 /* */ 341 typedef struct CID_FaceDictRec_ 342 { 343 PS_PrivateRec private_dict; 344 345 FT_UInt len_buildchar; 346 FT_Fixed forcebold_threshold; 347 FT_Pos stroke_width; 348 FT_Fixed expansion_factor; 349 350 FT_Byte paint_type; 351 FT_Byte font_type; 352 FT_Matrix font_matrix; 353 FT_Vector font_offset; 354 355 FT_UInt num_subrs; 356 FT_ULong subrmap_offset; 357 FT_Int sd_bytes; 358 359 } CID_FaceDictRec; 360 361 362 /*************************************************************************/ 363 /* */ 364 /* <Struct> */ 365 /* CID_FaceDict */ 366 /* */ 367 /* <Description> */ 368 /* A handle to a @CID_FaceDictRec structure. */ 369 /* */ 370 typedef struct CID_FaceDictRec_* CID_FaceDict; 371 372 373 /*************************************************************************/ 374 /* */ 375 /* <Struct> */ 376 /* CID_FontDict */ 377 /* */ 378 /* <Description> */ 379 /* This type is equivalent to @CID_FaceDictRec. It is deprecated but */ 380 /* kept to maintain source compatibility between various versions of */ 381 /* FreeType. */ 382 /* */ 383 typedef CID_FaceDictRec CID_FontDict; 384 385 386 /*************************************************************************/ 387 /* */ 388 /* <Struct> */ 389 /* CID_FaceInfoRec */ 390 /* */ 391 /* <Description> */ 392 /* A structure used to represent CID Face information. */ 393 /* */ 394 typedef struct CID_FaceInfoRec_ 395 { 396 FT_String* cid_font_name; 397 FT_Fixed cid_version; 398 FT_Int cid_font_type; 399 400 FT_String* registry; 401 FT_String* ordering; 402 FT_Int supplement; 403 404 PS_FontInfoRec font_info; 405 FT_BBox font_bbox; 406 FT_ULong uid_base; 407 408 FT_Int num_xuid; 409 FT_ULong xuid[16]; 410 411 FT_ULong cidmap_offset; 412 FT_Int fd_bytes; 413 FT_Int gd_bytes; 414 FT_ULong cid_count; 415 416 FT_Int num_dicts; 417 CID_FaceDict font_dicts; 418 419 FT_ULong data_offset; 420 421 } CID_FaceInfoRec; 422 423 424 /*************************************************************************/ 425 /* */ 426 /* <Struct> */ 427 /* CID_FaceInfo */ 428 /* */ 429 /* <Description> */ 430 /* A handle to a @CID_FaceInfoRec structure. */ 431 /* */ 432 typedef struct CID_FaceInfoRec_* CID_FaceInfo; 433 434 435 /*************************************************************************/ 436 /* */ 437 /* <Struct> */ 438 /* CID_Info */ 439 /* */ 440 /* <Description> */ 441 /* This type is equivalent to @CID_FaceInfoRec. It is deprecated but */ 442 /* kept to maintain source compatibility between various versions of */ 443 /* FreeType. */ 444 /* */ 445 typedef CID_FaceInfoRec CID_Info; 446 447 448 /************************************************************************ 449 * 450 * @function: 451 * FT_Has_PS_Glyph_Names 452 * 453 * @description: 454 * Return true if a given face provides reliable PostScript glyph 455 * names. This is similar to using the @FT_HAS_GLYPH_NAMES macro, 456 * except that certain fonts (mostly TrueType) contain incorrect 457 * glyph name tables. 458 * 459 * When this function returns true, the caller is sure that the glyph 460 * names returned by @FT_Get_Glyph_Name are reliable. 461 * 462 * @input: 463 * face :: 464 * face handle 465 * 466 * @return: 467 * Boolean. True if glyph names are reliable. 468 * 469 */ 470 FT_EXPORT( FT_Int ) 471 FT_Has_PS_Glyph_Names( FT_Face face ); 472 473 474 /************************************************************************ 475 * 476 * @function: 477 * FT_Get_PS_Font_Info 478 * 479 * @description: 480 * Retrieve the @PS_FontInfoRec structure corresponding to a given 481 * PostScript font. 482 * 483 * @input: 484 * face :: 485 * PostScript face handle. 486 * 487 * @output: 488 * afont_info :: 489 * Output font info structure pointer. 490 * 491 * @return: 492 * FreeType error code. 0~means success. 493 * 494 * @note: 495 * String pointers within the @PS_FontInfoRec structure are owned by 496 * the face and don't need to be freed by the caller. Missing entries 497 * in the font's FontInfo dictionary are represented by NULL pointers. 498 * 499 * If the font's format is not PostScript-based, this function will 500 * return the `FT_Err_Invalid_Argument' error code. 501 * 502 */ 503 FT_EXPORT( FT_Error ) 504 FT_Get_PS_Font_Info( FT_Face face, 505 PS_FontInfo afont_info ); 506 507 508 /************************************************************************ 509 * 510 * @function: 511 * FT_Get_PS_Font_Private 512 * 513 * @description: 514 * Retrieve the @PS_PrivateRec structure corresponding to a given 515 * PostScript font. 516 * 517 * @input: 518 * face :: 519 * PostScript face handle. 520 * 521 * @output: 522 * afont_private :: 523 * Output private dictionary structure pointer. 524 * 525 * @return: 526 * FreeType error code. 0~means success. 527 * 528 * @note: 529 * The string pointers within the @PS_PrivateRec structure are owned by 530 * the face and don't need to be freed by the caller. 531 * 532 * If the font's format is not PostScript-based, this function returns 533 * the `FT_Err_Invalid_Argument' error code. 534 * 535 */ 536 FT_EXPORT( FT_Error ) 537 FT_Get_PS_Font_Private( FT_Face face, 538 PS_Private afont_private ); 539 540 541 /*************************************************************************/ 542 /* */ 543 /* <Enum> */ 544 /* T1_EncodingType */ 545 /* */ 546 /* <Description> */ 547 /* An enumeration describing the `Encoding' entry in a Type 1 */ 548 /* dictionary. */ 549 /* */ 550 /* <Values> */ 551 /* T1_ENCODING_TYPE_NONE :: */ 552 /* T1_ENCODING_TYPE_ARRAY :: */ 553 /* T1_ENCODING_TYPE_STANDARD :: */ 554 /* T1_ENCODING_TYPE_ISOLATIN1 :: */ 555 /* T1_ENCODING_TYPE_EXPERT :: */ 556 /* */ 557 typedef enum T1_EncodingType_ 558 { 559 T1_ENCODING_TYPE_NONE = 0, 560 T1_ENCODING_TYPE_ARRAY, 561 T1_ENCODING_TYPE_STANDARD, 562 T1_ENCODING_TYPE_ISOLATIN1, 563 T1_ENCODING_TYPE_EXPERT 564 565 } T1_EncodingType; 566 567 568 /*************************************************************************/ 569 /* */ 570 /* <Enum> */ 571 /* PS_Dict_Keys */ 572 /* */ 573 /* <Description> */ 574 /* An enumeration used in calls to @FT_Get_PS_Font_Value to identify */ 575 /* the Type~1 dictionary entry to retrieve. */ 576 /* */ 577 /* <Values> */ 578 /* PS_DICT_FONT_TYPE :: */ 579 /* PS_DICT_FONT_MATRIX :: */ 580 /* PS_DICT_FONT_BBOX :: */ 581 /* PS_DICT_PAINT_TYPE :: */ 582 /* PS_DICT_FONT_NAME :: */ 583 /* PS_DICT_UNIQUE_ID :: */ 584 /* PS_DICT_NUM_CHAR_STRINGS :: */ 585 /* PS_DICT_CHAR_STRING_KEY :: */ 586 /* PS_DICT_CHAR_STRING :: */ 587 /* PS_DICT_ENCODING_TYPE :: */ 588 /* PS_DICT_ENCODING_ENTRY :: */ 589 /* PS_DICT_NUM_SUBRS :: */ 590 /* PS_DICT_SUBR :: */ 591 /* PS_DICT_STD_HW :: */ 592 /* PS_DICT_STD_VW :: */ 593 /* PS_DICT_NUM_BLUE_VALUES :: */ 594 /* PS_DICT_BLUE_VALUE :: */ 595 /* PS_DICT_BLUE_FUZZ :: */ 596 /* PS_DICT_NUM_OTHER_BLUES :: */ 597 /* PS_DICT_OTHER_BLUE :: */ 598 /* PS_DICT_NUM_FAMILY_BLUES :: */ 599 /* PS_DICT_FAMILY_BLUE :: */ 600 /* PS_DICT_NUM_FAMILY_OTHER_BLUES :: */ 601 /* PS_DICT_FAMILY_OTHER_BLUE :: */ 602 /* PS_DICT_BLUE_SCALE :: */ 603 /* PS_DICT_BLUE_SHIFT :: */ 604 /* PS_DICT_NUM_STEM_SNAP_H :: */ 605 /* PS_DICT_STEM_SNAP_H :: */ 606 /* PS_DICT_NUM_STEM_SNAP_V :: */ 607 /* PS_DICT_STEM_SNAP_V :: */ 608 /* PS_DICT_FORCE_BOLD :: */ 609 /* PS_DICT_RND_STEM_UP :: */ 610 /* PS_DICT_MIN_FEATURE :: */ 611 /* PS_DICT_LEN_IV :: */ 612 /* PS_DICT_PASSWORD :: */ 613 /* PS_DICT_LANGUAGE_GROUP :: */ 614 /* PS_DICT_VERSION :: */ 615 /* PS_DICT_NOTICE :: */ 616 /* PS_DICT_FULL_NAME :: */ 617 /* PS_DICT_FAMILY_NAME :: */ 618 /* PS_DICT_WEIGHT :: */ 619 /* PS_DICT_IS_FIXED_PITCH :: */ 620 /* PS_DICT_UNDERLINE_POSITION :: */ 621 /* PS_DICT_UNDERLINE_THICKNESS :: */ 622 /* PS_DICT_FS_TYPE :: */ 623 /* PS_DICT_ITALIC_ANGLE :: */ 624 /* */ 625 typedef enum PS_Dict_Keys_ 626 { 627 /* conventionally in the font dictionary */ 628 PS_DICT_FONT_TYPE, /* FT_Byte */ 629 PS_DICT_FONT_MATRIX, /* FT_Fixed */ 630 PS_DICT_FONT_BBOX, /* FT_Fixed */ 631 PS_DICT_PAINT_TYPE, /* FT_Byte */ 632 PS_DICT_FONT_NAME, /* FT_String* */ 633 PS_DICT_UNIQUE_ID, /* FT_Int */ 634 PS_DICT_NUM_CHAR_STRINGS, /* FT_Int */ 635 PS_DICT_CHAR_STRING_KEY, /* FT_String* */ 636 PS_DICT_CHAR_STRING, /* FT_String* */ 637 PS_DICT_ENCODING_TYPE, /* T1_EncodingType */ 638 PS_DICT_ENCODING_ENTRY, /* FT_String* */ 639 640 /* conventionally in the font Private dictionary */ 641 PS_DICT_NUM_SUBRS, /* FT_Int */ 642 PS_DICT_SUBR, /* FT_String* */ 643 PS_DICT_STD_HW, /* FT_UShort */ 644 PS_DICT_STD_VW, /* FT_UShort */ 645 PS_DICT_NUM_BLUE_VALUES, /* FT_Byte */ 646 PS_DICT_BLUE_VALUE, /* FT_Short */ 647 PS_DICT_BLUE_FUZZ, /* FT_Int */ 648 PS_DICT_NUM_OTHER_BLUES, /* FT_Byte */ 649 PS_DICT_OTHER_BLUE, /* FT_Short */ 650 PS_DICT_NUM_FAMILY_BLUES, /* FT_Byte */ 651 PS_DICT_FAMILY_BLUE, /* FT_Short */ 652 PS_DICT_NUM_FAMILY_OTHER_BLUES, /* FT_Byte */ 653 PS_DICT_FAMILY_OTHER_BLUE, /* FT_Short */ 654 PS_DICT_BLUE_SCALE, /* FT_Fixed */ 655 PS_DICT_BLUE_SHIFT, /* FT_Int */ 656 PS_DICT_NUM_STEM_SNAP_H, /* FT_Byte */ 657 PS_DICT_STEM_SNAP_H, /* FT_Short */ 658 PS_DICT_NUM_STEM_SNAP_V, /* FT_Byte */ 659 PS_DICT_STEM_SNAP_V, /* FT_Short */ 660 PS_DICT_FORCE_BOLD, /* FT_Bool */ 661 PS_DICT_RND_STEM_UP, /* FT_Bool */ 662 PS_DICT_MIN_FEATURE, /* FT_Short */ 663 PS_DICT_LEN_IV, /* FT_Int */ 664 PS_DICT_PASSWORD, /* FT_Long */ 665 PS_DICT_LANGUAGE_GROUP, /* FT_Long */ 666 667 /* conventionally in the font FontInfo dictionary */ 668 PS_DICT_VERSION, /* FT_String* */ 669 PS_DICT_NOTICE, /* FT_String* */ 670 PS_DICT_FULL_NAME, /* FT_String* */ 671 PS_DICT_FAMILY_NAME, /* FT_String* */ 672 PS_DICT_WEIGHT, /* FT_String* */ 673 PS_DICT_IS_FIXED_PITCH, /* FT_Bool */ 674 PS_DICT_UNDERLINE_POSITION, /* FT_Short */ 675 PS_DICT_UNDERLINE_THICKNESS, /* FT_UShort */ 676 PS_DICT_FS_TYPE, /* FT_UShort */ 677 PS_DICT_ITALIC_ANGLE, /* FT_Long */ 678 679 PS_DICT_MAX = PS_DICT_ITALIC_ANGLE 680 681 } PS_Dict_Keys; 682 683 684 /************************************************************************ 685 * 686 * @function: 687 * FT_Get_PS_Font_Value 688 * 689 * @description: 690 * Retrieve the value for the supplied key from a PostScript font. 691 * 692 * @input: 693 * face :: 694 * PostScript face handle. 695 * 696 * key :: 697 * An enumeration value representing the dictionary key to retrieve. 698 * 699 * idx :: 700 * For array values, this specifies the index to be returned. 701 * 702 * value :: 703 * A pointer to memory into which to write the value. 704 * 705 * valen_len :: 706 * The size, in bytes, of the memory supplied for the value. 707 * 708 * @output: 709 * value :: 710 * The value matching the above key, if it exists. 711 * 712 * @return: 713 * The amount of memory (in bytes) required to hold the requested 714 * value (if it exists, -1 otherwise). 715 * 716 * @note: 717 * The values returned are not pointers into the internal structures of 718 * the face, but are `fresh' copies, so that the memory containing them 719 * belongs to the calling application. This also enforces the 720 * `read-only' nature of these values, i.e., this function cannot be 721 * used to manipulate the face. 722 * 723 * `value' is a void pointer because the values returned can be of 724 * various types. 725 * 726 * If either `value' is NULL or `value_len' is too small, just the 727 * required memory size for the requested entry is returned. 728 * 729 * The `idx' parameter is used, not only to retrieve elements of, for 730 * example, the FontMatrix or FontBBox, but also to retrieve name keys 731 * from the CharStrings dictionary, and the charstrings themselves. It 732 * is ignored for atomic values. 733 * 734 * PS_DICT_BLUE_SCALE returns a value that is scaled up by 1000. To 735 * get the value as in the font stream, you need to divide by 736 * 65536000.0 (to remove the FT_Fixed scale, and the x1000 scale). 737 * 738 * IMPORTANT: Only key/value pairs read by the FreeType interpreter can 739 * be retrieved. So, for example, PostScript procedures such as NP, 740 * ND, and RD are not available. Arbitrary keys are, obviously, not be 741 * available either. 742 * 743 * If the font's format is not PostScript-based, this function returns 744 * the `FT_Err_Invalid_Argument' error code. 745 * 746 */ 747 FT_EXPORT( FT_Long ) 748 FT_Get_PS_Font_Value( FT_Face face, 749 PS_Dict_Keys key, 750 FT_UInt idx, 751 void *value, 752 FT_Long value_len ); 753 754 /* */ 755 756 FT_END_HEADER 757 758 #endif /* T1TABLES_H_ */ 759 760 761 /* END */ 762