David Turner 7c388ba491 added support for multiple master fonts in "type1z". It is
now working, but there is no way currently to change the default
weight vector (tested with custom vectors though).

Note that you should remove the "type1" driver from the
module list to be able to test it..
2000-05-26 02:07:40 +00:00

223 lines
5.9 KiB
C

/***************************************************************************/
/* */
/* t1tables.h */
/* */
/* Basic Type 1/Type 2 tables definitions and interface */
/* */
/* */
/* Copyright 1996-2000 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used */
/* modified and distributed under the terms of the FreeType project */
/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
/* this file you indicate that you have read the license and */
/* understand and accept it fully. */
/* */
/***************************************************************************/
#ifndef T1TABLES_H
#define T1TABLES_H
#include <freetype/freetype.h>
/* Note that we separate font data in T1_FontInfo and T1_Private structures */
/* in order to later support multiple master fonts.. */
/*************************************************************************
*
* <Struct>
* T1_FontInfo
*
* <Description>
* A structure used to model a Type1/Type2 FontInfo dictionary
* Note that for multiple-master fonts, each instance has its own
* FontInfo.
*
*/
typedef struct T1_FontInfo
{
FT_String* version;
FT_String* notice;
FT_String* full_name;
FT_String* family_name;
FT_String* weight;
FT_Long italic_angle;
FT_Bool is_fixed_pitch;
FT_Short underline_position;
FT_UShort underline_thickness;
} T1_FontInfo;
/*************************************************************************
*
* <Struct>
* T1_Private
*
* <Description>
* A structure used to model a Type1/Type2 FontInfo dictionary
* Note that for multiple-master fonts, each instance has its own
* Private dict.
*
*/
typedef struct T1_Private
{
FT_Int unique_id;
FT_Int lenIV;
FT_Byte num_blues;
FT_Byte num_other_blues;
FT_Byte num_family_blues;
FT_Byte num_family_other_blues;
FT_Short blue_values[14];
FT_Short other_blues[10];
FT_Short family_blues [14];
FT_Short family_other_blues[10];
FT_Fixed blue_scale;
FT_Int blue_shift;
FT_Int blue_fuzz;
FT_UShort standard_width[1];
FT_UShort standard_height[1];
FT_Byte num_snap_widths;
FT_Byte num_snap_heights;
FT_Bool force_bold;
FT_Bool round_stem_up;
FT_Short stem_snap_widths [13]; /* reserve one place for the std */
FT_Short stem_snap_heights[13]; /* reserve one place for the std */
FT_Long language_group;
FT_Long password;
FT_Short min_feature[2];
} T1_Private;
/*************************************************************************
*
* <Enum>
* T1_Blend_Flags
*
* <Description>
* A set of flags used to indicate which fields are present in a
* given blen dictionary (font info or private). Used to support
* multiple masters..
*
*/
typedef enum
{
/* required fields in a FontInfo blend dictionary */
t1_blend_underline_position = 0,
t1_blend_underline_thickness,
t1_blend_italic_angle,
/* required fields in a Private blend dictionary */
t1_blend_blue_values,
t1_blend_other_blues,
t1_blend_standard_width,
t1_blend_standard_height,
t1_blend_stem_snap_widths,
t1_blend_stem_snap_heights,
t1_blend_blue_scale,
t1_blend_blue_shift,
t1_blend_family_blues,
t1_blend_family_other_blues,
t1_blend_force_bold,
/* never remove */
t1_blend_max
} T1_Blend_Flags;
/* maximum number of multiple-masters designs, per-se the spec */
#define T1_MAX_MM_DESIGNS 16
/* maximum number of multiple-masters axis, per-se the spec */
#define T1_MAX_MM_AXIS 4
/* maximum number of elements in a design map */
#define T1_MAX_MM_MAP_POINTS 20
/* this structure is used to store the BlendDesignMap entry for an axis */
typedef struct T1_DesignMap_
{
FT_Byte num_points;
FT_Fixed* design_points;
FT_Fixed* blend_points;
} T1_DesignMap;
typedef struct T1_Blend_
{
FT_UInt num_designs;
FT_UInt num_axis;
FT_String* axis_names[ T1_MAX_MM_AXIS ];
FT_Fixed* design_pos[ T1_MAX_MM_DESIGNS ];
T1_DesignMap design_map[ T1_MAX_MM_AXIS ];
FT_Fixed* weight_vector;
FT_Fixed* default_weight_vector;
T1_FontInfo* font_infos[ T1_MAX_MM_DESIGNS+1 ];
T1_Private* privates [ T1_MAX_MM_DESIGNS+1 ];
FT_ULong blend_bitflags;
} T1_Blend;
typedef struct CID_FontDict_
{
T1_FontInfo font_info;
T1_Private private_dict;
FT_UInt num_subrs;
FT_ULong subrmap_offset;
FT_Int sd_bytes;
} CID_FontDict;
typedef struct CID_Info_
{
FT_String* cid_font_name;
FT_Fixed cid_version;
FT_Int cid_font_type;
FT_String* registry;
FT_String* ordering;
FT_Int supplement;
FT_ULong uid_base;
FT_Int num_xuid;
FT_ULong xuid[16];
FT_ULong cidmap_offset;
FT_Int fd_bytes;
FT_Int gd_bytes;
FT_ULong cid_count;
FT_Int num_font_dicts;
CID_FontDict* font_dicts;
} CID_Info;
#endif /* T1TABLES_H */