vrshoot

annotate libs/ft2static/freetype/t1tables.h @ 0:b2f14e535253

initial commit
author John Tsiombikas <nuclear@member.fsf.org>
date Sat, 01 Feb 2014 19:58:19 +0200
parents
children
rev   line source
nuclear@0 1 /***************************************************************************/
nuclear@0 2 /* */
nuclear@0 3 /* t1tables.h */
nuclear@0 4 /* */
nuclear@0 5 /* Basic Type 1/Type 2 tables definitions and interface (specification */
nuclear@0 6 /* only). */
nuclear@0 7 /* */
nuclear@0 8 /* Copyright 1996-2001, 2002, 2003, 2004, 2006, 2008, 2009 by */
nuclear@0 9 /* David Turner, Robert Wilhelm, and Werner Lemberg. */
nuclear@0 10 /* */
nuclear@0 11 /* This file is part of the FreeType project, and may only be used, */
nuclear@0 12 /* modified, and distributed under the terms of the FreeType project */
nuclear@0 13 /* license, LICENSE.TXT. By continuing to use, modify, or distribute */
nuclear@0 14 /* this file you indicate that you have read the license and */
nuclear@0 15 /* understand and accept it fully. */
nuclear@0 16 /* */
nuclear@0 17 /***************************************************************************/
nuclear@0 18
nuclear@0 19
nuclear@0 20 #ifndef __T1TABLES_H__
nuclear@0 21 #define __T1TABLES_H__
nuclear@0 22
nuclear@0 23
nuclear@0 24 #include <ft2build.h>
nuclear@0 25 #include FT_FREETYPE_H
nuclear@0 26
nuclear@0 27 #ifdef FREETYPE_H
nuclear@0 28 #error "freetype.h of FreeType 1 has been loaded!"
nuclear@0 29 #error "Please fix the directory search order for header files"
nuclear@0 30 #error "so that freetype.h of FreeType 2 is found first."
nuclear@0 31 #endif
nuclear@0 32
nuclear@0 33
nuclear@0 34 FT_BEGIN_HEADER
nuclear@0 35
nuclear@0 36
nuclear@0 37 /*************************************************************************/
nuclear@0 38 /* */
nuclear@0 39 /* <Section> */
nuclear@0 40 /* type1_tables */
nuclear@0 41 /* */
nuclear@0 42 /* <Title> */
nuclear@0 43 /* Type 1 Tables */
nuclear@0 44 /* */
nuclear@0 45 /* <Abstract> */
nuclear@0 46 /* Type~1 (PostScript) specific font tables. */
nuclear@0 47 /* */
nuclear@0 48 /* <Description> */
nuclear@0 49 /* This section contains the definition of Type 1-specific tables, */
nuclear@0 50 /* including structures related to other PostScript font formats. */
nuclear@0 51 /* */
nuclear@0 52 /*************************************************************************/
nuclear@0 53
nuclear@0 54
nuclear@0 55 /* Note that we separate font data in PS_FontInfoRec and PS_PrivateRec */
nuclear@0 56 /* structures in order to support Multiple Master fonts. */
nuclear@0 57
nuclear@0 58
nuclear@0 59 /*************************************************************************/
nuclear@0 60 /* */
nuclear@0 61 /* <Struct> */
nuclear@0 62 /* PS_FontInfoRec */
nuclear@0 63 /* */
nuclear@0 64 /* <Description> */
nuclear@0 65 /* A structure used to model a Type~1 or Type~2 FontInfo dictionary. */
nuclear@0 66 /* Note that for Multiple Master fonts, each instance has its own */
nuclear@0 67 /* FontInfo dictionary. */
nuclear@0 68 /* */
nuclear@0 69 typedef struct PS_FontInfoRec_
nuclear@0 70 {
nuclear@0 71 FT_String* version;
nuclear@0 72 FT_String* notice;
nuclear@0 73 FT_String* full_name;
nuclear@0 74 FT_String* family_name;
nuclear@0 75 FT_String* weight;
nuclear@0 76 FT_Long italic_angle;
nuclear@0 77 FT_Bool is_fixed_pitch;
nuclear@0 78 FT_Short underline_position;
nuclear@0 79 FT_UShort underline_thickness;
nuclear@0 80
nuclear@0 81 } PS_FontInfoRec;
nuclear@0 82
nuclear@0 83
nuclear@0 84 /*************************************************************************/
nuclear@0 85 /* */
nuclear@0 86 /* <Struct> */
nuclear@0 87 /* PS_FontInfo */
nuclear@0 88 /* */
nuclear@0 89 /* <Description> */
nuclear@0 90 /* A handle to a @PS_FontInfoRec structure. */
nuclear@0 91 /* */
nuclear@0 92 typedef struct PS_FontInfoRec_* PS_FontInfo;
nuclear@0 93
nuclear@0 94
nuclear@0 95 /*************************************************************************/
nuclear@0 96 /* */
nuclear@0 97 /* <Struct> */
nuclear@0 98 /* T1_FontInfo */
nuclear@0 99 /* */
nuclear@0 100 /* <Description> */
nuclear@0 101 /* This type is equivalent to @PS_FontInfoRec. It is deprecated but */
nuclear@0 102 /* kept to maintain source compatibility between various versions of */
nuclear@0 103 /* FreeType. */
nuclear@0 104 /* */
nuclear@0 105 typedef PS_FontInfoRec T1_FontInfo;
nuclear@0 106
nuclear@0 107
nuclear@0 108 /*************************************************************************/
nuclear@0 109 /* */
nuclear@0 110 /* <Struct> */
nuclear@0 111 /* PS_PrivateRec */
nuclear@0 112 /* */
nuclear@0 113 /* <Description> */
nuclear@0 114 /* A structure used to model a Type~1 or Type~2 private dictionary. */
nuclear@0 115 /* Note that for Multiple Master fonts, each instance has its own */
nuclear@0 116 /* Private dictionary. */
nuclear@0 117 /* */
nuclear@0 118 typedef struct PS_PrivateRec_
nuclear@0 119 {
nuclear@0 120 FT_Int unique_id;
nuclear@0 121 FT_Int lenIV;
nuclear@0 122
nuclear@0 123 FT_Byte num_blue_values;
nuclear@0 124 FT_Byte num_other_blues;
nuclear@0 125 FT_Byte num_family_blues;
nuclear@0 126 FT_Byte num_family_other_blues;
nuclear@0 127
nuclear@0 128 FT_Short blue_values[14];
nuclear@0 129 FT_Short other_blues[10];
nuclear@0 130
nuclear@0 131 FT_Short family_blues [14];
nuclear@0 132 FT_Short family_other_blues[10];
nuclear@0 133
nuclear@0 134 FT_Fixed blue_scale;
nuclear@0 135 FT_Int blue_shift;
nuclear@0 136 FT_Int blue_fuzz;
nuclear@0 137
nuclear@0 138 FT_UShort standard_width[1];
nuclear@0 139 FT_UShort standard_height[1];
nuclear@0 140
nuclear@0 141 FT_Byte num_snap_widths;
nuclear@0 142 FT_Byte num_snap_heights;
nuclear@0 143 FT_Bool force_bold;
nuclear@0 144 FT_Bool round_stem_up;
nuclear@0 145
nuclear@0 146 FT_Short snap_widths [13]; /* including std width */
nuclear@0 147 FT_Short snap_heights[13]; /* including std height */
nuclear@0 148
nuclear@0 149 FT_Fixed expansion_factor;
nuclear@0 150
nuclear@0 151 FT_Long language_group;
nuclear@0 152 FT_Long password;
nuclear@0 153
nuclear@0 154 FT_Short min_feature[2];
nuclear@0 155
nuclear@0 156 } PS_PrivateRec;
nuclear@0 157
nuclear@0 158
nuclear@0 159 /*************************************************************************/
nuclear@0 160 /* */
nuclear@0 161 /* <Struct> */
nuclear@0 162 /* PS_Private */
nuclear@0 163 /* */
nuclear@0 164 /* <Description> */
nuclear@0 165 /* A handle to a @PS_PrivateRec structure. */
nuclear@0 166 /* */
nuclear@0 167 typedef struct PS_PrivateRec_* PS_Private;
nuclear@0 168
nuclear@0 169
nuclear@0 170 /*************************************************************************/
nuclear@0 171 /* */
nuclear@0 172 /* <Struct> */
nuclear@0 173 /* T1_Private */
nuclear@0 174 /* */
nuclear@0 175 /* <Description> */
nuclear@0 176 /* This type is equivalent to @PS_PrivateRec. It is deprecated but */
nuclear@0 177 /* kept to maintain source compatibility between various versions of */
nuclear@0 178 /* FreeType. */
nuclear@0 179 /* */
nuclear@0 180 typedef PS_PrivateRec T1_Private;
nuclear@0 181
nuclear@0 182
nuclear@0 183 /*************************************************************************/
nuclear@0 184 /* */
nuclear@0 185 /* <Enum> */
nuclear@0 186 /* T1_Blend_Flags */
nuclear@0 187 /* */
nuclear@0 188 /* <Description> */
nuclear@0 189 /* A set of flags used to indicate which fields are present in a */
nuclear@0 190 /* given blend dictionary (font info or private). Used to support */
nuclear@0 191 /* Multiple Masters fonts. */
nuclear@0 192 /* */
nuclear@0 193 typedef enum T1_Blend_Flags_
nuclear@0 194 {
nuclear@0 195 /*# required fields in a FontInfo blend dictionary */
nuclear@0 196 T1_BLEND_UNDERLINE_POSITION = 0,
nuclear@0 197 T1_BLEND_UNDERLINE_THICKNESS,
nuclear@0 198 T1_BLEND_ITALIC_ANGLE,
nuclear@0 199
nuclear@0 200 /*# required fields in a Private blend dictionary */
nuclear@0 201 T1_BLEND_BLUE_VALUES,
nuclear@0 202 T1_BLEND_OTHER_BLUES,
nuclear@0 203 T1_BLEND_STANDARD_WIDTH,
nuclear@0 204 T1_BLEND_STANDARD_HEIGHT,
nuclear@0 205 T1_BLEND_STEM_SNAP_WIDTHS,
nuclear@0 206 T1_BLEND_STEM_SNAP_HEIGHTS,
nuclear@0 207 T1_BLEND_BLUE_SCALE,
nuclear@0 208 T1_BLEND_BLUE_SHIFT,
nuclear@0 209 T1_BLEND_FAMILY_BLUES,
nuclear@0 210 T1_BLEND_FAMILY_OTHER_BLUES,
nuclear@0 211 T1_BLEND_FORCE_BOLD,
nuclear@0 212
nuclear@0 213 /*# never remove */
nuclear@0 214 T1_BLEND_MAX
nuclear@0 215
nuclear@0 216 } T1_Blend_Flags;
nuclear@0 217
nuclear@0 218 /* */
nuclear@0 219
nuclear@0 220
nuclear@0 221 /*# backwards compatible definitions */
nuclear@0 222 #define t1_blend_underline_position T1_BLEND_UNDERLINE_POSITION
nuclear@0 223 #define t1_blend_underline_thickness T1_BLEND_UNDERLINE_THICKNESS
nuclear@0 224 #define t1_blend_italic_angle T1_BLEND_ITALIC_ANGLE
nuclear@0 225 #define t1_blend_blue_values T1_BLEND_BLUE_VALUES
nuclear@0 226 #define t1_blend_other_blues T1_BLEND_OTHER_BLUES
nuclear@0 227 #define t1_blend_standard_widths T1_BLEND_STANDARD_WIDTH
nuclear@0 228 #define t1_blend_standard_height T1_BLEND_STANDARD_HEIGHT
nuclear@0 229 #define t1_blend_stem_snap_widths T1_BLEND_STEM_SNAP_WIDTHS
nuclear@0 230 #define t1_blend_stem_snap_heights T1_BLEND_STEM_SNAP_HEIGHTS
nuclear@0 231 #define t1_blend_blue_scale T1_BLEND_BLUE_SCALE
nuclear@0 232 #define t1_blend_blue_shift T1_BLEND_BLUE_SHIFT
nuclear@0 233 #define t1_blend_family_blues T1_BLEND_FAMILY_BLUES
nuclear@0 234 #define t1_blend_family_other_blues T1_BLEND_FAMILY_OTHER_BLUES
nuclear@0 235 #define t1_blend_force_bold T1_BLEND_FORCE_BOLD
nuclear@0 236 #define t1_blend_max T1_BLEND_MAX
nuclear@0 237
nuclear@0 238
nuclear@0 239 /* maximum number of Multiple Masters designs, as defined in the spec */
nuclear@0 240 #define T1_MAX_MM_DESIGNS 16
nuclear@0 241
nuclear@0 242 /* maximum number of Multiple Masters axes, as defined in the spec */
nuclear@0 243 #define T1_MAX_MM_AXIS 4
nuclear@0 244
nuclear@0 245 /* maximum number of elements in a design map */
nuclear@0 246 #define T1_MAX_MM_MAP_POINTS 20
nuclear@0 247
nuclear@0 248
nuclear@0 249 /* this structure is used to store the BlendDesignMap entry for an axis */
nuclear@0 250 typedef struct PS_DesignMap_
nuclear@0 251 {
nuclear@0 252 FT_Byte num_points;
nuclear@0 253 FT_Long* design_points;
nuclear@0 254 FT_Fixed* blend_points;
nuclear@0 255
nuclear@0 256 } PS_DesignMapRec, *PS_DesignMap;
nuclear@0 257
nuclear@0 258 /* backwards-compatible definition */
nuclear@0 259 typedef PS_DesignMapRec T1_DesignMap;
nuclear@0 260
nuclear@0 261
nuclear@0 262 typedef struct PS_BlendRec_
nuclear@0 263 {
nuclear@0 264 FT_UInt num_designs;
nuclear@0 265 FT_UInt num_axis;
nuclear@0 266
nuclear@0 267 FT_String* axis_names[T1_MAX_MM_AXIS];
nuclear@0 268 FT_Fixed* design_pos[T1_MAX_MM_DESIGNS];
nuclear@0 269 PS_DesignMapRec design_map[T1_MAX_MM_AXIS];
nuclear@0 270
nuclear@0 271 FT_Fixed* weight_vector;
nuclear@0 272 FT_Fixed* default_weight_vector;
nuclear@0 273
nuclear@0 274 PS_FontInfo font_infos[T1_MAX_MM_DESIGNS + 1];
nuclear@0 275 PS_Private privates [T1_MAX_MM_DESIGNS + 1];
nuclear@0 276
nuclear@0 277 FT_ULong blend_bitflags;
nuclear@0 278
nuclear@0 279 FT_BBox* bboxes [T1_MAX_MM_DESIGNS + 1];
nuclear@0 280
nuclear@0 281 /* since 2.3.0 */
nuclear@0 282
nuclear@0 283 /* undocumented, optional: the default design instance; */
nuclear@0 284 /* corresponds to default_weight_vector -- */
nuclear@0 285 /* num_default_design_vector == 0 means it is not present */
nuclear@0 286 /* in the font and associated metrics files */
nuclear@0 287 FT_UInt default_design_vector[T1_MAX_MM_DESIGNS];
nuclear@0 288 FT_UInt num_default_design_vector;
nuclear@0 289
nuclear@0 290 } PS_BlendRec, *PS_Blend;
nuclear@0 291
nuclear@0 292
nuclear@0 293 /* backwards-compatible definition */
nuclear@0 294 typedef PS_BlendRec T1_Blend;
nuclear@0 295
nuclear@0 296
nuclear@0 297 /*************************************************************************/
nuclear@0 298 /* */
nuclear@0 299 /* <Struct> */
nuclear@0 300 /* CID_FaceDictRec */
nuclear@0 301 /* */
nuclear@0 302 /* <Description> */
nuclear@0 303 /* A structure used to represent data in a CID top-level dictionary. */
nuclear@0 304 /* */
nuclear@0 305 typedef struct CID_FaceDictRec_
nuclear@0 306 {
nuclear@0 307 PS_PrivateRec private_dict;
nuclear@0 308
nuclear@0 309 FT_UInt len_buildchar;
nuclear@0 310 FT_Fixed forcebold_threshold;
nuclear@0 311 FT_Pos stroke_width;
nuclear@0 312 FT_Fixed expansion_factor;
nuclear@0 313
nuclear@0 314 FT_Byte paint_type;
nuclear@0 315 FT_Byte font_type;
nuclear@0 316 FT_Matrix font_matrix;
nuclear@0 317 FT_Vector font_offset;
nuclear@0 318
nuclear@0 319 FT_UInt num_subrs;
nuclear@0 320 FT_ULong subrmap_offset;
nuclear@0 321 FT_Int sd_bytes;
nuclear@0 322
nuclear@0 323 } CID_FaceDictRec;
nuclear@0 324
nuclear@0 325
nuclear@0 326 /*************************************************************************/
nuclear@0 327 /* */
nuclear@0 328 /* <Struct> */
nuclear@0 329 /* CID_FaceDict */
nuclear@0 330 /* */
nuclear@0 331 /* <Description> */
nuclear@0 332 /* A handle to a @CID_FaceDictRec structure. */
nuclear@0 333 /* */
nuclear@0 334 typedef struct CID_FaceDictRec_* CID_FaceDict;
nuclear@0 335
nuclear@0 336 /* */
nuclear@0 337
nuclear@0 338
nuclear@0 339 /* backwards-compatible definition */
nuclear@0 340 typedef CID_FaceDictRec CID_FontDict;
nuclear@0 341
nuclear@0 342
nuclear@0 343 /*************************************************************************/
nuclear@0 344 /* */
nuclear@0 345 /* <Struct> */
nuclear@0 346 /* CID_FaceInfoRec */
nuclear@0 347 /* */
nuclear@0 348 /* <Description> */
nuclear@0 349 /* A structure used to represent CID Face information. */
nuclear@0 350 /* */
nuclear@0 351 typedef struct CID_FaceInfoRec_
nuclear@0 352 {
nuclear@0 353 FT_String* cid_font_name;
nuclear@0 354 FT_Fixed cid_version;
nuclear@0 355 FT_Int cid_font_type;
nuclear@0 356
nuclear@0 357 FT_String* registry;
nuclear@0 358 FT_String* ordering;
nuclear@0 359 FT_Int supplement;
nuclear@0 360
nuclear@0 361 PS_FontInfoRec font_info;
nuclear@0 362 FT_BBox font_bbox;
nuclear@0 363 FT_ULong uid_base;
nuclear@0 364
nuclear@0 365 FT_Int num_xuid;
nuclear@0 366 FT_ULong xuid[16];
nuclear@0 367
nuclear@0 368 FT_ULong cidmap_offset;
nuclear@0 369 FT_Int fd_bytes;
nuclear@0 370 FT_Int gd_bytes;
nuclear@0 371 FT_ULong cid_count;
nuclear@0 372
nuclear@0 373 FT_Int num_dicts;
nuclear@0 374 CID_FaceDict font_dicts;
nuclear@0 375
nuclear@0 376 FT_ULong data_offset;
nuclear@0 377
nuclear@0 378 } CID_FaceInfoRec;
nuclear@0 379
nuclear@0 380
nuclear@0 381 /*************************************************************************/
nuclear@0 382 /* */
nuclear@0 383 /* <Struct> */
nuclear@0 384 /* CID_FaceInfo */
nuclear@0 385 /* */
nuclear@0 386 /* <Description> */
nuclear@0 387 /* A handle to a @CID_FaceInfoRec structure. */
nuclear@0 388 /* */
nuclear@0 389 typedef struct CID_FaceInfoRec_* CID_FaceInfo;
nuclear@0 390
nuclear@0 391
nuclear@0 392 /*************************************************************************/
nuclear@0 393 /* */
nuclear@0 394 /* <Struct> */
nuclear@0 395 /* CID_Info */
nuclear@0 396 /* */
nuclear@0 397 /* <Description> */
nuclear@0 398 /* This type is equivalent to @CID_FaceInfoRec. It is deprecated but */
nuclear@0 399 /* kept to maintain source compatibility between various versions of */
nuclear@0 400 /* FreeType. */
nuclear@0 401 /* */
nuclear@0 402 typedef CID_FaceInfoRec CID_Info;
nuclear@0 403
nuclear@0 404
nuclear@0 405 /************************************************************************
nuclear@0 406 *
nuclear@0 407 * @function:
nuclear@0 408 * FT_Has_PS_Glyph_Names
nuclear@0 409 *
nuclear@0 410 * @description:
nuclear@0 411 * Return true if a given face provides reliable PostScript glyph
nuclear@0 412 * names. This is similar to using the @FT_HAS_GLYPH_NAMES macro,
nuclear@0 413 * except that certain fonts (mostly TrueType) contain incorrect
nuclear@0 414 * glyph name tables.
nuclear@0 415 *
nuclear@0 416 * When this function returns true, the caller is sure that the glyph
nuclear@0 417 * names returned by @FT_Get_Glyph_Name are reliable.
nuclear@0 418 *
nuclear@0 419 * @input:
nuclear@0 420 * face ::
nuclear@0 421 * face handle
nuclear@0 422 *
nuclear@0 423 * @return:
nuclear@0 424 * Boolean. True if glyph names are reliable.
nuclear@0 425 *
nuclear@0 426 */
nuclear@0 427 FT_EXPORT( FT_Int )
nuclear@0 428 FT_Has_PS_Glyph_Names( FT_Face face );
nuclear@0 429
nuclear@0 430
nuclear@0 431 /************************************************************************
nuclear@0 432 *
nuclear@0 433 * @function:
nuclear@0 434 * FT_Get_PS_Font_Info
nuclear@0 435 *
nuclear@0 436 * @description:
nuclear@0 437 * Retrieve the @PS_FontInfoRec structure corresponding to a given
nuclear@0 438 * PostScript font.
nuclear@0 439 *
nuclear@0 440 * @input:
nuclear@0 441 * face ::
nuclear@0 442 * PostScript face handle.
nuclear@0 443 *
nuclear@0 444 * @output:
nuclear@0 445 * afont_info ::
nuclear@0 446 * Output font info structure pointer.
nuclear@0 447 *
nuclear@0 448 * @return:
nuclear@0 449 * FreeType error code. 0~means success.
nuclear@0 450 *
nuclear@0 451 * @note:
nuclear@0 452 * The string pointers within the font info structure are owned by
nuclear@0 453 * the face and don't need to be freed by the caller.
nuclear@0 454 *
nuclear@0 455 * If the font's format is not PostScript-based, this function will
nuclear@0 456 * return the `FT_Err_Invalid_Argument' error code.
nuclear@0 457 *
nuclear@0 458 */
nuclear@0 459 FT_EXPORT( FT_Error )
nuclear@0 460 FT_Get_PS_Font_Info( FT_Face face,
nuclear@0 461 PS_FontInfo afont_info );
nuclear@0 462
nuclear@0 463
nuclear@0 464 /************************************************************************
nuclear@0 465 *
nuclear@0 466 * @function:
nuclear@0 467 * FT_Get_PS_Font_Private
nuclear@0 468 *
nuclear@0 469 * @description:
nuclear@0 470 * Retrieve the @PS_PrivateRec structure corresponding to a given
nuclear@0 471 * PostScript font.
nuclear@0 472 *
nuclear@0 473 * @input:
nuclear@0 474 * face ::
nuclear@0 475 * PostScript face handle.
nuclear@0 476 *
nuclear@0 477 * @output:
nuclear@0 478 * afont_private ::
nuclear@0 479 * Output private dictionary structure pointer.
nuclear@0 480 *
nuclear@0 481 * @return:
nuclear@0 482 * FreeType error code. 0~means success.
nuclear@0 483 *
nuclear@0 484 * @note:
nuclear@0 485 * The string pointers within the @PS_PrivateRec structure are owned by
nuclear@0 486 * the face and don't need to be freed by the caller.
nuclear@0 487 *
nuclear@0 488 * If the font's format is not PostScript-based, this function returns
nuclear@0 489 * the `FT_Err_Invalid_Argument' error code.
nuclear@0 490 *
nuclear@0 491 */
nuclear@0 492 FT_EXPORT( FT_Error )
nuclear@0 493 FT_Get_PS_Font_Private( FT_Face face,
nuclear@0 494 PS_Private afont_private );
nuclear@0 495
nuclear@0 496 /* */
nuclear@0 497
nuclear@0 498
nuclear@0 499 FT_END_HEADER
nuclear@0 500
nuclear@0 501 #endif /* __T1TABLES_H__ */
nuclear@0 502
nuclear@0 503
nuclear@0 504 /* END */