added draft "psaux" code

the t1 driver now reads the complete font matrix

and applies it (some fonts do not work properly without
hinting though...)
This commit is contained in:
David Turner 2000-08-17 01:09:06 +00:00
parent 710354b8e9
commit 24d7024c44
10 changed files with 1924 additions and 151 deletions

View File

@ -0,0 +1,459 @@
#ifndef PSAUX_H
#define PSAUX_H
#include <freetype/internal/ftobjs.h>
/*************************************************************************/
/*************************************************************************/
/***** *****/
/***** T1_TABLE *****/
/***** *****/
/*************************************************************************/
/*************************************************************************/
/*************************************************************************/
/* */
/* <Struct> */
/* T1_Table */
/* */
/* <Description> */
/* A T1_Table is a simple object used to store an array of objects in */
/* a single memory block. */
/* */
/* <Fields> */
/* block :: The address in memory of the growheap's block. This */
/* can change between two object adds, due to */
/* reallocation. */
/* */
/* cursor :: The current top of the grow heap within its block. */
/* */
/* capacity :: The current size of the heap block. Increments by */
/* 1kByte chunks. */
/* */
/* max_elems :: The maximum number of elements in table. */
/* */
/* num_elems :: The current number of elements in table. */
/* */
/* elements :: A table of element addresses within the block. */
/* */
/* lengths :: A table of element sizes within the block. */
/* */
/* memory :: The object used for memory operations */
/* (alloc/realloc). */
/* */
typedef struct T1_Table_
{
FT_Byte* block; /* current memory block */
FT_Int cursor; /* current cursor in memory block */
FT_Int capacity; /* current size of memory block */
FT_Long init;
FT_Int max_elems;
FT_Int num_elems;
FT_Byte** elements; /* addresses of table elements */
FT_Int* lengths; /* lengths of table elements */
FT_Memory memory;
} T1_Table;
/*************************************************************************/
/* */
/* <Struct> */
/* T1_Table_Funcs */
/* */
/* <Description> */
/* A set of function pointers used to manage T1_Table objects.. */
/* */
/* <Fields> */
/* table_init :: used to initialise a a table */
/* table_done :: finalize/destroy a given table */
/* table_add :: add one new object to a table */
/* table_release :: release table data, then finalize it */
/* */
typedef struct T1_Table_Funcs_
{
FT_Error (*init) ( T1_Table* table,
FT_Int count,
FT_Memory memory );
void (*done) ( T1_Table* table );
FT_Error (*add) ( T1_Table* table,
FT_Int index,
void* object,
FT_Int length );
void (*release)( T1_Table* table );
} T1_Table_Funcs;
/*************************************************************************/
/*************************************************************************/
/***** *****/
/***** T1 FIELDS & TOKENS *****/
/***** *****/
/*************************************************************************/
/*************************************************************************/
/* simple enumeration type used to identify token types */
typedef enum T1_Token_Type_
{
t1_token_none = 0,
t1_token_any,
t1_token_string,
t1_token_array,
/* do not remove */
t1_token_max
} T1_Token_Type;
/* a simple structure used to identify tokens */
typedef struct T1_Token_
{
FT_Byte* start; /* first character of token in input stream */
FT_Byte* limit; /* first character after the token */
T1_Token_Type type; /* type of token.. */
} T1_Token;
/* enumeration type used to identify object fields */
typedef enum T1_Field_Type_
{
t1_field_none = 0,
t1_field_bool,
t1_field_integer,
t1_field_fixed,
t1_field_string,
t1_field_integer_array,
t1_field_fixed_array,
/* do not remove */
t1_field_max
} T1_Field_Type;
/* structure type used to model object fields */
typedef struct T1_Field_
{
T1_Field_Type type; /* type of field */
FT_UInt offset; /* offset of field in object */
FT_Byte size; /* size of field in bytes */
FT_UInt array_max; /* maximum number of elements for array */
FT_UInt count_offset; /* offset of element count for arrays */
FT_Int flag_bit; /* bit number for field flag */
} T1_Field;
#define T1_FIELD_BOOL( _fname ) \
{ \
t1_field_bool, \
FT_FIELD_OFFSET( _fname ), \
FT_FIELD_SIZE( _fname ), \
0, 0, 0 \
}
#define T1_FIELD_NUM( _fname ) \
{ \
t1_field_integer, \
FT_FIELD_OFFSET( _fname ), \
FT_FIELD_SIZE( _fname ), \
0, 0, 0 \
}
#define T1_FIELD_FIXED( _fname, _power ) \
{ \
t1_field_fixed, \
FT_FIELD_OFFSET( _fname ), \
FT_FIELD_SIZE( _fname ), \
0, 0, 0 \
}
#define T1_FIELD_STRING( _fname ) \
{ \
t1_field_string, \
FT_FIELD_OFFSET( _fname ), \
FT_FIELD_SIZE( _fname ), \
0, 0, 0 \
}
#define T1_FIELD_NUM_ARRAY( _fname, _fcount, _fmax ) \
{ \
t1_field_integer, \
FT_FIELD_OFFSET( _fname ), \
FT_FIELD_SIZE_DELTA( _fname ), \
_fmax, \
FT_FIELD_OFFSET( _fcount ), \
0 \
}
#define T1_FIELD_FIXED_ARRAY( _fname, _fcount, _fmax ) \
{ \
t1_field_fixed, \
FT_FIELD_OFFSET( _fname ), \
FT_FIELD_SIZE_DELTA( _fname ), \
_fmax, \
FT_FIELD_OFFSET( _fcount ), \
0 \
}
#define T1_FIELD_NUM_ARRAY2( _fname, _fmax ) \
{ \
t1_field_integer, \
FT_FIELD_OFFSET( _fname ), \
FT_FIELD_SIZE_DELTA( _fname ), \
_fmax, \
0, 0 \
}
#define T1_FIELD_FIXED_ARRAY2( _fname, _fmax ) \
{ \
t1_field_fixed, \
FT_FIELD_OFFSTE( _fname ), \
FT_FIELD_SIZE_DELTA( _fname ), \
_fmax, \
0, 0 \
}
/*************************************************************************/
/*************************************************************************/
/***** *****/
/***** T1 PARSER *****/
/***** *****/
/*************************************************************************/
/*************************************************************************/
/*************************************************************************/
/* */
/* <Struct> */
/* T1_Parser */
/* */
/* <Description> */
/* A T1_Parser is an object used to parse a Type 1 font very */
/* quickly. */
/* */
/* <Fields> */
/* cursor :: current position in text. */
/* base :: start of processed text. */
/* limit :: end of processed text. */
/* error :: last error returned. */
/* */
typedef struct T1_Parser_
{
FT_Byte* cursor;
FT_Byte* base;
FT_Byte* limit;
FT_Error error;
FT_Memory memory;
} T1_Parser;
typedef struct T1_Parser_Funcs_
{
void (*init) ( T1_Parser* parser,
FT_Byte* base,
FT_Byte* limit,
FT_Memory memory );
void (*done) ( T1_Parser* parser );
void (*skip_spaces) ( T1_Parser* parser );
void (*skip_alpha) ( T1_Parser* parser );
FT_Long (*to_int) ( T1_Parser* parser );
FT_Fixed (*to_fixed) ( T1_Parser* parser,
FT_Int power_ten );
FT_Int (*to_coord_array)( T1_Parser* parser,
FT_Int max_coords,
FT_Short* coords );
FT_Int (*to_fixed_array)( T1_Parser* parser,
FT_Int max_values,
FT_Fixed* values,
FT_Int power_ten );
void (*to_token) ( T1_Parser* parser,
T1_Token *token );
void (*to_token_array)( T1_Parser* parser,
T1_Token* tokens,
FT_UInt max_tokens,
FT_Int *pnum_tokens );
FT_Error (*load_field) ( T1_Parser* parser,
const T1_Field* field,
void** objects,
FT_UInt max_objects,
FT_ULong* pflags );
FT_Error (*load_field_table)( T1_Parser* parser,
const T1_Field* field,
void** objects,
FT_UInt max_objects,
FT_ULong* pflags );
} T1_Parser_Funcs;
/*************************************************************************/
/*************************************************************************/
/***** *****/
/***** T1 BUILDER *****/
/***** *****/
/*************************************************************************/
/*************************************************************************/
/*************************************************************************/
/* */
/* <Structure> */
/* T1_Builder */
/* */
/* <Description> */
/* A structure used during glyph loading to store its outline. */
/* */
/* <Fields> */
/* memory :: The current memory object. */
/* */
/* face :: The current face object. */
/* */
/* glyph :: The current glyph slot. */
/* */
/* current :: The current glyph outline. */
/* */
/* base :: The base glyph outline. */
/* */
/* max_points :: maximum points in builder outline */
/* */
/* max_contours :: Maximal number of contours in builder outline. */
/* */
/* last :: The last point position. */
/* */
/* scale_x :: The horizontal scale (FUnits to sub-pixels). */
/* */
/* scale_y :: The vertical scale (FUnits to sub-pixels). */
/* */
/* pos_x :: The horizontal translation (if composite glyph). */
/* */
/* pos_y :: The vertical translation (if composite glyph). */
/* */
/* left_bearing :: The left side bearing point. */
/* */
/* advance :: The horizontal advance vector. */
/* */
/* bbox :: Unused. */
/* */
/* path_begun :: A flag which indicates that a new path has begun. */
/* */
/* load_points :: If this flag is not set, no points are loaded. */
/* */
/* no_recurse :: Set but not used. */
/* */
/* error :: An error code that is only used to report memory */
/* allocation problems. */
/* */
/* metrics_only :: A boolean indicating that we only want to compute */
/* the metrics of a given glyph, not load all of its */
/* points. */
/* */
typedef struct T2_Builder_
{
FT_Memory memory;
FT_Face face;
FT_GlyphSlot glyph;
FT_GlyphLoader* loader;
FT_Outline* base;
FT_Outline* current;
FT_Vector last;
FT_Fixed scale_x;
FT_Fixed scale_y;
FT_Pos pos_x;
FT_Pos pos_y;
FT_Vector left_bearing;
FT_Vector advance;
FT_BBox bbox; /* bounding box */
FT_Bool path_begun;
FT_Bool load_points;
FT_Bool no_recurse;
FT_Error error; /* only used for memory errors */
FT_Bool metrics_only;
} T1_Builder;
typedef FT_Error (*T1_Builder_Check_Points_Func)( T1_Builder* builder,
FT_Int count );
typedef void (*T1_Builder_Add_Point_Func) ( T1_Builder* builder,
FT_Pos x,
FT_Pos y,
FT_Byte flag );
typedef void (*T1_Builder_Add_Point1_Func)( T1_Builder* builder,
FT_Pos x,
FT_Pos y );
typedef FT_Error (*T1_Builder_Add_Contour_Func)( T1_Builder* builder );
typedef FT_Error (*T1_Builder_Start_Point_Func)( T1_Builder* builder,
FT_Pos x,
FT_Pos y );
typedef void (*T1_Builder_Close_Contour_Func)( T1_Builder* builder );
typedef struct T1_Builder_Funcs_
{
FT_Error (*init)( T1_Builder* builder,
FT_Face face,
FT_Size size,
FT_GlyphSlot slot );
void (*done)( T1_Builder* builder );
T1_Builder_Check_Points_Func check_points;
T1_Builder_Add_Points_Func add_point;
T1_Builder_Add_Point1_Func add_point1;
T1_Builder_Add_Contour_Func add_contour;
T1_Builder_Start_Point_Func start_point;
T1_Builder_Close_Contour_Func close_contour;
} T1_Builder_Funcs;
/*************************************************************************/
/*************************************************************************/
/***** *****/
/***** PSAux Module Interface *****/
/***** *****/
/*************************************************************************/
/*************************************************************************/
typedef struct PSAux_Interface_
{
const T1_Table_Funcs* t1_table_funcs;
const T1_Parser_Funcs* t1_parser_funcs;
const T1_Builder_Funcs* t1_builder_funcs;
} PSAux_Interface;
#endif /* PSAUX_H */

View File

@ -116,6 +116,7 @@
FT_Byte paint_type;
FT_Byte font_type;
FT_Matrix font_matrix;
FT_Vector font_offset;
FT_BBox font_bbox;
FT_Long font_id;

View File

@ -1020,7 +1020,7 @@
}
/* now, transform the glyph image when needed */
if ( face->transform_flags )
if ( face->transform_flags && !(load_flags & FT_LOAD_NO_RECURSE))
{
/* get renderer */
FT_Renderer renderer = ft_lookup_glyph_renderer( slot );

View File

@ -1,8 +1,7 @@
#ifndef OLTYPES_H
#define OLTYPES_H
#include <ftobjs.h>
#include <tttypes.h>
#include <freetype/internal/ftobjs.h>
/*************************************************************
*
@ -48,34 +47,34 @@
{
FT_Memory memory;
TT_Int num_scripts;
TT_Tag* script_tags;
FT_Int num_scripts;
FT_Tag* script_tags;
TT_Int max_languages;
TT_Int num_languages;
TT_Tag* language_tags;
FT_Int max_languages;
FT_Int num_languages;
FT_Tag* language_tags;
TT_Int max_features;
TT_Tag* feature_tags;
TT_Bool* features;
FT_Int max_features;
FT_Tag* feature_tags;
FT_Bool* features;
TT_Int max_lookups;
TT_Bool* lookups;
FT_Int max_lookups;
FT_Bool* lookups;
TT_Byte* scripts_table;
TT_Long scripts_len;
FT_Byte* scripts_table;
FT_Long scripts_len;
TT_Byte* features_table;
TT_Long* features_len;
FT_Byte* features_table;
FT_Long* features_len;
TT_Byte* lookups_table;
TT_Byte* lookups_len;
FT_Byte* lookups_table;
FT_Byte* lookups_len;
TT_Byte* cur_script; /* current script */
TT_Byte* cur_language; /* current language */
FT_Byte* cur_script; /* current script */
FT_Byte* cur_language; /* current language */
TT_Byte* cur_base_values;
TT_Byte* cur_min_max;
FT_Byte* cur_base_values;
FT_Byte* cur_min_max;
OTL_Type otl_type;
@ -84,58 +83,43 @@
typedef struct OTL_BaseCoord_
{
TT_UShort format;
TT_Short coordinate;
TT_UShort ref_glyph;
TT_UShort ref_point;
TT_Byte* device;
FT_UShort format;
FT_Short coordinate;
FT_UShort ref_glyph;
FT_UShort ref_point;
FT_Byte* device;
} OTL_BaseCoord;
typedef struct OTL_ValueRecord_
{
TT_Vector placement;
TT_Vector advance;
FT_Vector placement;
FT_Vector advance;
TT_Byte* device_pla_x;
TT_Byte* device_pla_y;
TT_Byte* device_adv_x;
TT_Byte* device_adv_y;
FT_Byte* device_pla_x;
FT_Byte* device_pla_y;
FT_Byte* device_adv_x;
FT_Byte* device_adv_y;
} OTL_ValueRecord;
typedef struct OTL_Anchor_
{
TT_UInt format;
TT_Vector coord;
TT_UInt anchor_point;
TT_Byte* device_x;
TT_Byte* device_y;
FT_UInt format;
FT_Vector coord;
FT_UInt anchor_point;
FT_Byte* device_x;
FT_Byte* device_y;
} OTL_Anchor;
LOCAL_DEF
TT_Error OTL_Table_Init( OTL_Table* table,
FT_Error OTL_Table_Init( OTL_Table* table,
FT_Memory memory );
LOCAL_DEF
TT_Error OTL_Table_Set_Scripts( OTL_Table* table,
TT_Byte* bytes,
TT_Long len,
OTL_Type otl_type );
LOCAL_DEF
TT_Error OTL_Table_Set_Features( OTL_Table* table,
TT_Byte* bytes,
TT_Long len );
LOCAL_DEF
TT_Error OTL_Table_Set_Lookups( OTL_Table* table,
TT_Byte* bytes,
TT_Long len );
LOCAL_DEF
void OTL_Table_Done( OTL_Table* table );
@ -153,6 +137,12 @@
* table->num_scripts is the number of scripts
*
*/
LOCAL_DEF
FT_Error OTL_Table_Set_Scripts( OTL_Table* table,
FT_Byte* bytes,
FT_Long len,
OTL_Type otl_type );
/********************************************************
*
@ -169,6 +159,18 @@
* it is empty (zero-filled) by default.
*
*/
LOCAL_DEF
FT_Error OTL_Table_Set_Features( OTL_Table* table,
FT_Byte* bytes,
FT_Long len );
LOCAL_DEF
FT_Error OTL_Table_Set_Lookups( OTL_Table* table,
FT_Byte* bytes,
FT_Long len );
/*******************************************************************
*
@ -187,7 +189,7 @@
*/
LOCAL_DEF
void OTL_Get_Languages_List( OTL_Table* table,
TT_ULong script_tag );
FT_ULong script_tag );
/*******************************************************************
@ -208,15 +210,15 @@
*/
LOCAL_DEF
void OTL_Get_Features_List( OTL_Table* table,
TT_ULong language_tag );
FT_ULong language_tag );
LOCAL_DEF
void OTL_Get_Baseline_Values( OTL_Table* table,
TT_ULong language_tag );
FT_ULong language_tag );
LOCAL_DEF
void OTL_Get_Justification( OTL_Table* table,
TT_ULong language_tag );
FT_ULong language_tag );
/*******************************************************************
*
@ -259,52 +261,52 @@
LOCAL_DEF
TT_Long OTL_Get_Coverage_Index( TT_Byte* coverage,
TT_UInt glyph_id );
FT_Long OTL_Get_Coverage_Index( FT_Byte* coverage,
FT_UInt glyph_id );
LOCAL_DEF
TT_UInt OTL_Get_Glyph_Class( TT_Byte* class_def,
TT_UInt glyph_id );
FT_UInt OTL_Get_Glyph_Class( FT_Byte* class_def,
FT_UInt glyph_id );
LOCAL_DEF
TT_Int OTL_Get_Device_Adjustment( TT_Byte* device,
TT_UInt size );
FT_Int OTL_Get_Device_Adjustment( FT_Byte* device,
FT_UInt size );
LOCAL_DEF
void OTL_Get_Base_Coordinate( TT_Byte* base_coord,
void OTL_Get_Base_Coordinate( FT_Byte* base_coord,
OTL_BaseCoord* coord );
LOCAL_DEF
TT_Int OTL_ValueRecord_Size( TT_UShort value_format );
FT_Int OTL_ValueRecord_Size( FT_UShort value_format );
LOCAL_DEF
void OTL_Get_ValueRecord( TT_Byte* value_record,
TT_UShort value_format,
TT_Byte* pos_table,
void OTL_Get_ValueRecord( FT_Byte* value_record,
FT_UShort value_format,
FT_Byte* pos_table,
OTL_ValueRecord* record );
LOCAL_DEF
void OTL_Get_Anchor( TT_Byte* anchor_table,
void OTL_Get_Anchor( FT_Byte* anchor_table,
OTL_Anchor* anchor );
LOCAL_DEF
void OTL_Get_Mark( TT_Byte* mark_array,
TT_UInt index,
TT_UShort* clazz,
void OTL_Get_Mark( FT_Byte* mark_array,
FT_UInt index,
FT_UShort* clazz,
OTL_Anchor* anchor );
#define OTL_Byte(p) (p++, p[-1])
#define OTL_UShort(p) (p+=2, ((TT_UShort)p[-2] << 8) | p[-1])
#define OTL_UShort(p) (p+=2, ((FT_UShort)p[-2] << 8) | p[-1])
#define OTL_ULong(p) (p+=4, ((TT_ULong)p[-4] << 24) | \
((TT_ULong)p[-3] << 16) | \
((TT_ULong)p[-2] << 8 ) | p[-1] )
#define OTL_ULong(p) (p+=4, ((FT_ULong)p[-4] << 24) | \
((FT_ULong)p[-3] << 16) | \
((FT_ULong)p[-2] << 8 ) | p[-1] )
#endif /* OLTYPES_H */

1244
src/psaux/psobjs.c Normal file

File diff suppressed because it is too large Load Diff

113
src/psaux/psobjs.h Normal file
View File

@ -0,0 +1,113 @@
#ifndef PSOBJS_H
#define PSOBJS_H
#include <freetype/internal/psaux.h>
/*************************************************************************/
/*************************************************************************/
/***** *****/
/***** T1_TABLE *****/
/***** *****/
/*************************************************************************/
/*************************************************************************/
LOCAL_DEF
FT_Error T1_New_Table( T1_Table* table,
FT_Int count,
FT_Memory memory );
LOCAL_DEF
FT_Error T1_Add_Table( T1_Table* table,
FT_Int index,
void* object,
FT_Int length );
LOCAL_DEF
void T1_Done_Table( T1_Table* table );
LOCAL_DEF
void T1_Release_Table( T1_Table* table );
/*************************************************************************/
/*************************************************************************/
/***** *****/
/***** T1 PARSER *****/
/***** *****/
/*************************************************************************/
/*************************************************************************/
LOCAL_DEF
void T1_Skip_Spaces( T1_Parser* parser );
LOCAL_DEF
void T1_Skip_Alpha( T1_Parser* parser );
LOCAL_DEF
void T1_ToToken( T1_Parser* parser,
T1_Token* token );
LOCAL_DEF
void T1_ToTokenArray( T1_Parser* parser,
T1_Token* tokens,
FT_UInt max_tokens,
FT_Int* pnum_tokens );
LOCAL_DEF
FT_Error T1_Load_Field( T1_Parser* parser,
const T1_Field* field,
void** objects,
FT_UInt max_objects,
FT_ULong* pflags );
LOCAL_DEF
FT_Error T1_Load_Field_Table( T1_Parser* parser,
const T1_Field* field,
void** objects,
FT_UInt max_objects,
FT_ULong* pflags );
LOCAL_DEF
FT_Long T1_ToInt ( T1_Parser* parser );
LOCAL_DEF
FT_Fixed T1_ToFixed( T1_Parser* parser,
FT_Int power_ten );
LOCAL_DEF
FT_Int T1_ToCoordArray( T1_Parser* parser,
FT_Int max_coords,
FT_Short* coords );
LOCAL_DEF
FT_Int T1_ToFixedArray( T1_Parser* parser,
FT_Int max_values,
FT_Fixed* values,
FT_Int power_ten );
LOCAL_DEF
void T1_Init_Parser( T1_Parser* parser,
FT_Byte* base,
FT_Byte* limit,
FT_Memory memory );
LOCAL_DEF
void T1_Done_Parser( T1_Parser* parser )
LOCAL_DEF
void T1_Decrypt( FT_Byte* buffer,
FT_Int length,
FT_UShort seed );
#endif /* PSOBJS_H */

View File

@ -436,7 +436,7 @@
stream = face->root.stream;
/* the `if' is syntactic sugar for picky compilers */
if ( FILE_Read_At( offset, buffer, size ) )
;
goto Exit;
Exit:
return error;

View File

@ -1425,6 +1425,14 @@
if ( size && size->root.metrics.y_ppem < 24 )
glyph->root.outline.flags |= ft_outline_high_precision;
/* apply the font matrix */
FT_Outline_Transform( &glyph->root.outline,
&face->type1.font_matrix );
FT_Outline_Translate( &glyph->root.outline,
face->type1.font_offset.x,
face->type1.font_offset.y );
#if 0
glyph->root.outline.second_pass = TRUE;
glyph->root.outline.high_precision = size->root.metrics.y_ppem < 24;
@ -1458,10 +1466,6 @@
metrics->vertBearingY = FT_MulFix( metrics->vertBearingY, y_scale );
}
/* apply the font matrix */
FT_Outline_Transform( &glyph->root.outline,
&face->type1.font_matrix );
/* compute the other metrics */
FT_Outline_Get_CBox( &glyph->root.outline, &cbox );

View File

@ -1069,18 +1069,33 @@
{
Z1_Parser* parser = &loader->parser;
FT_Matrix* matrix = &face->type1.font_matrix;
FT_Fixed temp[4];
FT_Vector* offset = &face->type1.font_offset;
FT_Fixed temp[6];
if ( matrix->xx || matrix->yx )
/* with synthetic fonts, it's possible we get here twice */
return;
(void)Z1_ToFixedArray( parser, 4, temp, 3 );
(void)Z1_ToFixedArray( parser, 6, temp, 3 );
/* we need to scale the values by 1.0/temp[3] */
if ( temp[3] != 0x10000 )
{
temp[0] = FT_DivFix( temp[0], temp[3] );
temp[1] = FT_DivFix( temp[1], temp[3] );
temp[2] = FT_DivFix( temp[2], temp[3] );
temp[4] = FT_DivFix( temp[4], temp[3] );
temp[5] = FT_DivFix( temp[5], temp[3] );
temp[3] = 0x10000;
}
matrix->xx = temp[0];
matrix->yx = temp[1];
matrix->xy = temp[2];
matrix->yy = temp[3];
offset->x = temp[4];
offset->y = temp[5];
}

View File

@ -64,69 +64,4 @@
Z1_TOPDICT_NUM( "FontType", font_type )
Z1_TOPDICT_NUM( "StrokeWidth", stroke_width )
#if 0
/* define the font info dictionary parsing callbacks */
#undef FACE
#define FACE (face->type1.font_info)
PARSE_STRING( "version", version )
PARSE_STRING( "Notice", notice )
PARSE_STRING( "FullName", full_name )
PARSE_STRING( "FamilyName", family_name )
PARSE_STRING( "Weight", weight )
PARSE_INT ( "ItalicAngle", italic_angle )
PARSE_BOOL ( "isFixedPitch", is_fixed_pitch )
PARSE_NUM ( "UnderlinePosition", underline_position, FT_Short )
PARSE_NUM ( "UnderlineThickness", underline_thickness, FT_UShort )
/* define the private dict parsing callbacks */
#undef FACE
#define FACE (face->type1.private_dict)
PARSE_INT ("UniqueID", unique_id )
PARSE_INT ("lenIV", lenIV )
PARSE_COORDS ( "BlueValues", num_blues, 14, blue_values)
PARSE_COORDS ( "OtherBlues", num_other_blues, 10, other_blues)
PARSE_COORDS ( "FamilyBlues", num_family_blues, 14, family_blues )
PARSE_COORDS ( "FamilyOtherBlues", num_family_other_blues, 10,
family_other_blues )
PARSE_FIXED ( "BlueScale", blue_scale )
PARSE_INT ( "BlueShift", blue_shift )
PARSE_INT ( "BlueFuzz", blue_fuzz )
PARSE_COORDS2( "StdHW", 1, standard_width )
PARSE_COORDS2( "StdVW", 1, standard_height )
PARSE_COORDS ( "StemSnapH", num_snap_widths, 12, stem_snap_widths )
PARSE_COORDS ( "StemSnapV", num_snap_heights, 12, stem_snap_heights )
PARSE_INT ( "LanguageGroup", language_group )
PARSE_INT ( "password", password )
PARSE_COORDS2( "MinFeature", 2, min_feature )
/* define the top-level dictionary parsing callbacks */
#undef FACE
#define FACE (face->type1)
/*PARSE_STRING ( "FontName", font_name ) -- handled by special routine */
PARSE_NUM ( "PaintType", paint_type, FT_Byte )
PARSE_NUM ( "FontType", font_type, FT_Byte )
PARSE_FIXEDS2( "FontMatrix", 4, font_matrix )
/*PARSE_COORDS2( "FontBBox", 4, font_bbox ) -- handled by special routine */
PARSE_INT ( "StrokeWidth", stroke_width )
#undef FACE
#endif /* 0 */
/* END */