#ifndef AFM_H
#define AFM_H
#ifndef ___P
#if PROTOTYPES
#define ___P(protos) protos
#else
#define ___P(protos) ()
#endif
#endif
#define AFM_TYPE_STRING 1
#define AFM_TYPE_NAME 2
#define AFM_TYPE_NUMBER 3
#define AFM_TYPE_INTEGER 4
#define AFM_TYPE_ARRAY 5
#define AFM_TYPE_BOOLEAN 6
typedef char *AFMString;
typedef char *AFMName;
typedef double AFMNumber;
typedef long AFMInteger;
typedef enum
{
AFMFalse = 0,
AFMTrue = 1
} AFMBoolean;
typedef struct afm_array_st *AFMArray;
struct afm_node_st
{
int type;
union
{
AFMString string;
AFMName name;
AFMNumber number;
AFMInteger integer;
AFMArray array;
AFMBoolean boolean;
} u;
};
typedef struct afm_node_st AFMNode;
struct afm_array_st
{
AFMNumber num_items;
AFMNode *items;
};
struct global_font_information_st
{
AFMString FontName;
AFMString FullName;
AFMString FamilyName;
AFMString Weight;
AFMNumber FontBBox_llx;
AFMNumber FontBBox_lly;
AFMNumber FontBBox_urx;
AFMNumber FontBBox_ury;
AFMString Version;
AFMString Notice;
AFMString EncodingScheme;
AFMInteger MappingScheme;
AFMInteger EscChar;
AFMString CharacterSet;
AFMInteger Characters;
AFMBoolean IsBaseFont;
AFMNumber VVector_0;
AFMNumber VVector_1;
AFMBoolean IsFixedV;
AFMNumber CapHeight;
AFMNumber XHeight;
AFMNumber Ascender;
AFMNumber Descender;
AFMArray BlendAxisTypes;
AFMArray BlendDesignPositions;
AFMArray BlendDesignMap;
AFMArray WeightVector;
};
typedef struct global_font_information_st AFMGlobalFontInformation;
struct writing_direction_metrics_st
{
AFMBoolean is_valid;
AFMNumber UnderlinePosition;
AFMNumber UnderlineThickness;
AFMNumber ItalicAngle;
AFMNumber CharWidth_x;
AFMNumber CharWidth_y;
AFMBoolean IsFixedPitch;
};
typedef struct writing_direction_metrics_st AFMWritingDirectionMetrics;
struct multiple_master_axis_info_st
{
AFMString AxisType;
AFMString AxisLabel;
};
typedef struct multiple_master_axis_info_st AFMMultipleMasterAxisInformation;
struct ligature_st
{
AFMName successor;
AFMName ligature;
};
typedef struct ligature_st AFMLigature;
struct individual_character_metrics_st
{
AFMInteger character_code;
AFMNumber w0x;
AFMNumber w0y;
AFMNumber w1x;
AFMNumber w1y;
AFMName name;
AFMNumber vv_x;
AFMNumber vv_y;
AFMNumber llx;
AFMNumber lly;
AFMNumber urx;
AFMNumber ury;
AFMNumber num_ligatures;
AFMLigature *ligatures;
};
typedef struct individual_character_metrics_st AFMIndividualCharacterMetrics;
struct track_kern_st
{
AFMInteger degree;
AFMNumber min_ptsize;
AFMNumber min_kern;
AFMNumber max_ptsize;
AFMNumber max_kern;
};
typedef struct track_kern_st AFMTrackKern;
struct pair_wise_kerning_st
{
AFMName name1;
AFMName name2;
AFMNumber kx;
AFMNumber ky;
};
typedef struct pair_wise_kerning_st AFMPairWiseKerning;
struct composite_component_st
{
AFMName name;
AFMNumber deltax;
AFMNumber deltay;
};
typedef struct composite_component_st AFMCompositeComponent;
struct composite_st
{
AFMName name;
AFMInteger num_components;
AFMCompositeComponent *components;
};
typedef struct composite_st AFMComposite;
#define UNITS_PER_POINT 1000
#define AFM_SUCCESS 0
#define AFM_I_MINIMUM 0x00
#define AFM_I_COMPOSITES 0x01
#define AFM_I_KERN_PAIRS 0x02
#define AFM_I_TRACK_KERNS 0x04
#define AFM_I_ALL 0xffffffff
#define AFM_ENCODE_ACCEPT_COMPOSITES 0x01
typedef unsigned int AFMError;
typedef struct afm_handle_st *AFMHandle;
typedef enum
{
AFM_ENCODING_DEFAULT,
AFM_ENCODING_ISO_8859_1,
AFM_ENCODING_ISO_8859_2,
AFM_ENCODING_ISO_8859_3,
AFM_ENCODING_ISO_8859_4,
AFM_ENCODING_ISO_8859_5,
AFM_ENCODING_ISO_8859_7,
AFM_ENCODING_IBMPC,
AFM_ENCODING_ASCII,
AFM_ENCODING_MAC,
AFM_ENCODING_VMS,
AFM_ENCODING_HP8,
AFM_ENCODING_KOI8
} AFMEncoding;
#define AFM_ENC_NONE ((void *) 0)
#define AFM_ENC_NON_EXISTENT ((void *) 1)
struct afm_font_st
{
struct afm_font_private_data_st *private;
AFMNumber version;
unsigned int info_level;
AFMIndividualCharacterMetrics *encoding[256];
AFMGlobalFontInformation global_info;
AFMWritingDirectionMetrics writing_direction_metrics[2];
AFMInteger num_character_metrics;
AFMIndividualCharacterMetrics *character_metrics;
AFMInteger num_composites;
AFMComposite *composites;
AFMInteger num_kern_pairs;
AFMPairWiseKerning *kern_pairs;
AFMInteger num_track_kerns;
AFMTrackKern *track_kerns;
};
typedef struct afm_font_st *AFMFont;
void afm_error_to_string ___P ((AFMError error, char *buf));
AFMError afm_create ___P ((const char *path, unsigned int verbose_level,
AFMHandle *handle_return));
AFMError afm_destroy ___P ((AFMHandle handle));
AFMError afm_set_verbose ___P ((AFMHandle handle, unsigned int level));
AFMError afm_font_prefix ___P ((AFMHandle handle, const char *fontname,
const char **prefix_return));
AFMError afm_open_font ___P ((AFMHandle handle, unsigned int info_level,
const char *name, AFMFont *font_return));
AFMError afm_open_file ___P ((AFMHandle handle, unsigned int info_level,
const char *filename, AFMFont *font_return));
AFMError afm_open_default_font ___P ((AFMHandle handle, AFMFont *font_return));
AFMError afm_close_font ___P ((AFMFont font));
void afm_font_dump ___P ((FILE *fp, AFMFont font));
AFMError afm_font_stringwidth ___P ((AFMFont font, AFMNumber ptsize,
char *string, unsigned int stringlen,
AFMNumber *w0x_return,
AFMNumber *w0y_return));
AFMError afm_font_charwidth ___P ((AFMFont font, AFMNumber ptsize,
char ch, AFMNumber *w0x_return,
AFMNumber *w0y_return));
AFMError afm_font_encode ___P ((AFMFont font, unsigned char code, char *name,
unsigned int flags));
AFMError afm_font_encoding ___P ((AFMFont font, AFMEncoding enc,
unsigned int flags));
#endif