forked from minhngoc25a/freetype2
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:
parent
f89f5cdf8e
commit
f740bd6576
|
@ -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 */
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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 );
|
||||
|
|
|
@ -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 */
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -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 */
|
||||
|
|
@ -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;
|
||||
|
|
|
@ -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 );
|
||||
|
||||
|
|
|
@ -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];
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -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 */
|
||||
|
|
Loading…
Reference in New Issue