64#include FT_INTERNAL_DEBUG_H
65#include FT_CONFIG_CONFIG_H
66#include FT_MULTIPLE_MASTERS_H
67#include FT_INTERNAL_TYPE1_TYPES_H
68#include FT_INTERNAL_CALC_H
69#include FT_INTERNAL_HASH_H
75#ifdef FT_CONFIG_OPTION_INCREMENTAL
76#define IS_INCREMENTAL (FT_Bool)( face->root.internal->incremental_interface != 0 )
78#define IS_INCREMENTAL 0
89#define FT_COMPONENT trace_t1load
92#ifndef T1_CONFIG_OPTION_NO_MM_SUPPORT
125 if ( num_designs > 0 )
145 for ( nn = 2; nn <= num_designs; nn++ )
170 if ( num_designs && num_axis && blend->
design_pos[0] == 0 )
178 for (
n = 1;
n < num_designs;
n++ )
214 axis->minimum =
map->design_points[0];
215 axis->maximum =
map->design_points[
map->num_points - 1];
237 if ( ncv <= axismap->blend_points[0] )
242 if ( ncv <= axismap->blend_points[
j] )
266 if ( axis_count == 1 )
269 else if ( axis_count == 2 )
275 else if ( axis_count == 3 )
381 return FT_THROW( Invalid_Argument );
405 if ( (
n & ( 1 <<
m ) ) == 0 )
438 face->root.face_flags &= ~FT_FACE_FLAG_VARIATION;
456 return FT_THROW( Invalid_Argument );
465 FT_TRACE2((
"T1_Get_MM_Blend: only using first %d of %d coordinates\n",
470 for (
i = 0;
i < nc;
i++ )
472 for ( ;
i < num_coords;
i++ )
491 return FT_THROW( Invalid_Argument );
509 if (
n < num_coords )
512 design = ( designs[
map->num_points - 1] - designs[0] ) / 2;
520 if ( design == p_design )
522 the_blend = blends[
p];
526 if ( design < p_design )
537 the_blend = blends[0];
539 else if (
after < 0 )
540 the_blend = blends[
map->num_points - 1];
548 final_blends[
n] = the_blend;
558 face->root.face_flags &= ~FT_FACE_FLAG_VARIATION;
593 for (
i = 0;
i < num_coords;
i++ )
612 return FT_THROW( Invalid_Argument );
622 " only using first %d of %d coordinates\n",
627 for (
i = 0;
i < nc;
i++ )
629 for ( ;
i < num_coords;
i++ )
652 for (
n = 1;
n < num_designs;
n++ )
660 for (
n = 0;
n < num_designs;
n++ )
672 for (
n = 0;
n < num_axis;
n++ )
676 for (
n = 0;
n < num_axis;
n++ )
711 FT_ERROR((
"parse_blend_axis_types: incorrect number of axes: %d\n",
726 for (
n = 0;
n < num_axis;
n++ )
734 if (
token->start[0] ==
'/' )
748 " overwriting axis name `%s' with `%*.s'\n",
762 loader->parser.root.error =
error;
782 if ( num_designs < 0 )
789 FT_ERROR((
"parse_blend_design_positions:"
790 " incorrect number of designs: %d\n",
805 for (
n = 0;
n < num_designs;
n++ )
813 token = design_tokens +
n;
822 FT_ERROR((
"parse_blend_design_positions:"
823 " invalid number of axes: %d\n",
837 else if ( n_axis != num_axis )
839 FT_ERROR((
"parse_blend_design_positions: incorrect table\n" ));
845 for ( axis = 0; axis < n_axis; axis++ )
847 T1_Token token2 = axis_tokens + axis;
856 loader->parser.root.cursor = old_cursor;
857 loader->parser.root.limit = old_limit;
861 loader->parser.root.error =
error;
888 FT_ERROR((
"parse_blend_design_map: incorrect number of axes: %d\n",
894 old_cursor =
parser->root.cursor;
895 old_limit =
parser->root.limit;
903 for (
n = 0;
n < num_axis;
n++ )
911 axis_token = axis_tokens +
n;
920 FT_ERROR((
"parse_blend_design_map: incorrect table\n" ));
925 if (
map->design_points )
927 FT_ERROR((
"parse_blend_design_map: duplicate table\n" ));
935 map->blend_points =
map->design_points + num_points;
938 for (
p = 0;
p < num_points;
p++ )
943 point_token = point_tokens +
p;
954 parser->root.cursor = old_cursor;
955 parser->root.limit = old_limit;
979 if ( num_designs < 0 )
987 " incorrect number of designs: %d\n",
1003 " /BlendDesignPosition and /WeightVector have\n"
1005 " different number of elements\n" ));
1010 old_cursor =
parser->root.cursor;
1011 old_limit =
parser->root.limit;
1013 for (
n = 0;
n < num_designs;
n++ )
1015 token = design_tokens +
n;
1023 parser->root.cursor = old_cursor;
1024 parser->root.limit = old_limit;
1075 error = loader->parser.root.error;
1081 switch (
field->location )
1084 dummy_object = &
face->type1.font_info;
1096 dummy_object = &
face->type1.font_extra;
1102 dummy_object = &
face->type1.private_dict;
1114 dummy_object = &
face->type1.font_bbox;
1126 dummy_object = loader;
1132 dummy_object =
face;
1137#ifndef T1_CONFIG_OPTION_NO_MM_SUPPORT
1139 dummy_object =
face->blend;
1146 dummy_object = &
face->type1;
1163 FT_TRACE1((
"t1_load_keyword: ignoring keyword `%s'"
1164 " which is not valid at this point\n"
1165 " (probably due to missing keywords)\n",
1228 FT_ERROR((
"read_binary_data: invalid size field\n" ));
1263 if ( temp_scale == 0 )
1265 FT_ERROR((
"t1_parse_font_matrix: invalid font matrix\n" ));
1271 if ( temp_scale != 0x10000L )
1281 temp[3] =
temp[3] < 0 ? -0x10000L : 0x10000L;
1310 FT_ERROR((
"parse_encoding: out of bounds\n" ));
1321 PS_Table char_table = &loader->encoding_table;
1331 only_immediates = 1;
1341 " only using first 256 encoding array entries\n" ));
1350 if ( encode->char_index )
1352 FT_FREE( encode->char_index );
1358 loader->num_chars = encode->num_chars =
array_size;
1371 char* notdef = (
char *)
".notdef";
1407 if (
cur[1] ==
'e' &&
1429 if ( only_immediates )
1473 else if ( only_immediates )
1506 ft_strncmp( (
const char*)
cur,
"StandardEncoding", 16 ) == 0 )
1514 ft_strncmp( (
const char*)
cur,
"ISOLatin1Encoding", 17 ) == 0 )
1541 *
parser->root.cursor ==
'[' )
1546 *
parser->root.cursor !=
']' )
1552 if ( num_subrs < 0 )
1560 num_subrs > (
parser->root.limit -
parser->root.cursor ) >> 3 )
1577 FT_TRACE0((
"parse_subrs: adjusting number of subroutines"
1578 " (from %d to %d)\n",
1581 num_subrs = (
parser->root.limit -
parser->root.cursor ) >> 3;
1583 if ( !loader->subrs_hash )
1585 if (
FT_NEW( loader->subrs_hash ) )
1602 if ( !loader->num_subrs )
1651 if ( loader->subrs_hash )
1658 if ( loader->num_subrs )
1666 if (
face->type1.private_dict.lenIV >= 0 )
1696 if ( !loader->num_subrs )
1697 loader->num_subrs = num_subrs;
1706#define TABLE_EXTEND 5
1714 PS_Table code_table = &loader->charstrings;
1715 PS_Table name_table = &loader->glyph_names;
1716 PS_Table swap_table = &loader->swap_table;
1730 if ( num_glyphs < 0 )
1737 if ( num_glyphs > (
limit -
cur ) >> 3 )
1739 FT_TRACE0((
"parse_charstrings: adjusting number of glyphs"
1740 " (from %d to %d)\n",
1741 num_glyphs, (
limit -
cur ) >> 3 ));
1757 if ( !loader->num_glyphs )
1797 if (
cur[0] ==
'd' &&
1815 if (
cur[0] ==
'e' &&
1850 if ( loader->num_glyphs )
1863 (
const char*)(name_table->
elements[
n]) ) == 0 )
1869 if (
face->type1.private_dict.lenIV >= 0 &&
1906 loader->num_glyphs =
n;
1909 if ( notdef_found &&
1934 name_table->
elements[notdef_index],
1935 name_table->
lengths [notdef_index] );
1941 code_table->
elements[notdef_index],
1942 code_table->
lengths [notdef_index] );
1971 else if ( !notdef_found )
1979 FT_Byte notdef_glyph[] = { 0x8B, 0xF7, 0xE1, 0x0D, 0x0E };
1980 char* notdef_name = (
char *)
".notdef";
2017 loader->num_glyphs += 1;
2053#ifndef T1_CONFIG_OPTION_NO_MM_SUPPORT
2108 if ( loader->keywords_encountered &
T1_PRIVATE )
2109 loader->keywords_encountered |=
2111 parser->root.cursor += 13;
2134 parser->root.cursor = start_binary;
2136 return FT_THROW( Invalid_File_Format );
2147 parser->root.cursor = start_binary;
2149 return FT_THROW( Invalid_File_Format );
2168 if (
len > 0 && len < 22 && parser->
root.cursor <
limit )
2215 ( loader->keywords_encountered &
T1_PRIVATE )
2219 if ( !( dict &
keyword->dict ) )
2221 FT_TRACE1((
"parse_dict: found `%s' but ignoring it"
2222 " since it is in the wrong dictionary\n",
2227 if ( !( loader->keywords_encountered &
2293 FT_FREE( loader->subrs_hash );
2317 face->len_buildchar = 0;
2350#ifndef T1_CONFIG_OPTION_NO_MM_SUPPORT
2353 face->blend->num_default_design_vector != 0 &&
2354 face->blend->num_default_design_vector !=
face->blend->num_axis )
2357 FT_ERROR((
"T1_Open_Face(): /DesignVector contains %u entries "
2358 "while there are %u axes.\n",
2359 face->blend->num_default_design_vector,
2360 face->blend->num_axis ));
2362 face->blend->num_default_design_vector = 0;
2368 ( !
face->blend->num_designs || !
face->blend->num_axis ) )
2377 for (
i = 0;
i <
face->blend->num_axis;
i++ )
2378 if ( !
face->blend->design_map[
i].num_points )
2387 if (
face->len_buildchar > 0 )
2394 FT_ERROR((
"T1_Open_Face: cannot allocate BuildCharArray\n" ));
2395 face->len_buildchar = 0;
2401 face->len_buildchar = 0;
2409 if ( loader.subrs.init )
2413 type1->
subrs = loader.subrs.elements;
2414 type1->
subrs_len = loader.subrs.lengths;
2418 loader.subrs.init = 0;
2419 loader.subrs_hash =
NULL;
2423 if ( !loader.charstrings.init )
2425 FT_ERROR((
"T1_Open_Face: no `/CharStrings' array in face\n" ));
2429 loader.charstrings.init = 0;
2438 loader.glyph_names.block =
NULL;
2439 loader.glyph_names.elements =
NULL;
2444 FT_Int charcode,
idx, min_char, max_char;
2457 for ( ; charcode < loader.encoding_table.max_elems; charcode++ )
2462 type1->
encoding.char_index[charcode] = 0;
2463 type1->
encoding.char_name [charcode] = (
char *)
".notdef";
2465 char_name = loader.encoding_table.elements[charcode];
2471 (
const char*)glyph_name ) == 0 )
2474 type1->
encoding.char_name [charcode] = (
char*)glyph_name;
2479 (
const char*)glyph_name ) != 0 )
2481 if ( charcode < min_char )
2482 min_char = charcode;
2483 if ( charcode >= max_char )
2484 max_char = charcode + 1;
2491 type1->
encoding.code_first = min_char;
2492 type1->
encoding.code_last = max_char;
2493 type1->
encoding.num_chars = loader.num_chars;
FT_DivFix(FT_Long a, FT_Long b)
struct FT_FaceRec_ * FT_Face
#define FT_FACE_FLAG_VARIATION
FT_MulDiv(FT_Long a, FT_Long b, FT_Long c)
FT_MulFix(FT_Long a, FT_Long b)
#define FT_ASSERT(condition)
#define FT_TRACE0(varformat)
#define FT_ERROR(varformat)
#define FT_TRACE6(varformat)
#define FT_TRACE2(varformat)
#define FT_TRACE1(varformat)
FT_Error ft_hash_num_init(FT_Hash hash, FT_Memory memory)
FT_Error ft_hash_num_insert(FT_Int num, size_t data, FT_Hash hash, FT_Memory memory)
#define FT_NEW_ARRAY(ptr, count)
#define FT_SET_ERROR(expression)
#define FT_ALLOC(ptr, size)
#define FT_MEM_COPY(dest, source, count)
FT_BEGIN_HEADER struct FT_MM_Axis_ FT_MM_Axis
typedefFT_BEGIN_HEADER struct FT_MemoryRec_ * FT_Memory
FT_BEGIN_HEADER typedef unsigned char FT_Bool
#define FT_MAKE_TAG(_x1, _x2, _x3, _x4)
GLuint GLuint GLsizei count
GLenum GLuint GLint GLenum face
GLboolean GLboolean GLboolean b
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint factor
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat token
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint GLint GLint j
static const CLSID * objects[]
static char memory[1024 *256]
#define T1_FIELD_DICT_FONTDICT
#define T1_FIELD_DICT_PRIVATE
struct PSAux_ServiceRec_ * PSAux_Service
@ T1_FIELD_TYPE_INTEGER_ARRAY
@ T1_FIELD_TYPE_FIXED_ARRAY
#define T1_FIELD_CALLBACK(_ident, _name, _dict)
#define IS_PS_TOKEN(cur, limit, token)
@ T1_FIELD_LOCATION_FONT_EXTRA
@ T1_FIELD_LOCATION_BLEND
@ T1_FIELD_LOCATION_CID_INFO
@ T1_FIELD_LOCATION_PRIVATE
@ T1_FIELD_LOCATION_LOADER
@ T1_FIELD_LOCATION_FONT_INFO
struct T1_FieldRec_ * T1_Field
FT_Var_Named_Style * namedstyle
FT_MM_Axis axis[T1_MAX_MM_AXIS]
void(* t1_decrypt)(FT_Byte *buffer, FT_Offset length, FT_UShort seed)
const PS_Table_FuncsRec * ps_table_funcs
PS_DesignMapRec design_map[T1_MAX_MM_AXIS]
FT_Fixed * default_weight_vector
PS_Private privates[T1_MAX_MM_DESIGNS+1]
FT_BBox * bboxes[T1_MAX_MM_DESIGNS+1]
PS_FontInfo font_infos[T1_MAX_MM_DESIGNS+1]
FT_Fixed * design_pos[T1_MAX_MM_DESIGNS]
FT_UInt num_default_design_vector
FT_String * axis_names[T1_MAX_MM_AXIS]
FT_Fixed expansion_factor
FT_Error(* init)(PS_Table table, FT_Int count, FT_Memory memory)
PS_PrivateRec private_dict
T1_EncodingType encoding_type
FT_UInt * charstrings_len
FT_Byte * charstrings_block
FT_Byte * glyph_names_block
static void parse_private(T1_Face face, T1_Loader loader)
static FT_Error t1_load_keyword(T1_Face face, T1_Loader loader, const T1_Field field)
static void t1_init_loader(T1_Loader loader, T1_Face face)
static FT_Error t1_allocate_blend(T1_Face face, FT_UInt num_designs, FT_UInt num_axis)
T1_Reset_MM_Blend(T1_Face face, FT_UInt instance_index)
static void parse_weight_vector(T1_Face face, T1_Loader loader)
T1_Get_Var_Design(T1_Face face, FT_UInt num_coords, FT_Fixed *coords)
static void t1_parse_font_matrix(T1_Face face, T1_Loader loader)
T1_Get_MM_Blend(T1_Face face, FT_UInt num_coords, FT_Fixed *coords)
static void parse_blend_design_positions(T1_Face face, T1_Loader loader)
static FT_Fixed mm_axis_unmap(PS_DesignMap axismap, FT_Fixed ncv)
T1_Set_Var_Design(T1_Face face, FT_UInt num_coords, FT_Fixed *coords)
T1_Set_MM_Blend(T1_Face face, FT_UInt num_coords, FT_Fixed *coords)
static void parse_subrs(T1_Face face, T1_Loader loader)
static FT_Error t1_set_mm_blend(T1_Face face, FT_UInt num_coords, FT_Fixed *coords)
static void mm_weights_unmap(FT_Fixed *weights, FT_Fixed *axiscoords, FT_UInt axis_count)
static void parse_blend_design_map(T1_Face face, T1_Loader loader)
T1_Done_Blend(T1_Face face)
T1_Open_Face(T1_Face face)
T1_Set_MM_Design(T1_Face face, FT_UInt num_coords, FT_Long *coords)
static void t1_done_loader(T1_Loader loader)
static const T1_FieldRec t1_keywords[]
static void parse_encoding(T1_Face face, T1_Loader loader)
T1_Get_MM_Var(T1_Face face, FT_MM_Var **master)
static FT_Error parse_dict(T1_Face face, T1_Loader loader, FT_Byte *base, FT_ULong size)
T1_Get_Multi_Master(T1_Face face, FT_Multi_Master *master)
static void parse_blend_axis_types(T1_Face face, T1_Loader loader)
static void parse_buildchar(T1_Face face, T1_Loader loader)
static int read_binary_data(T1_Parser parser, FT_ULong *size, FT_Byte **base, FT_Bool incremental)
static void parse_charstrings(T1_Face face, T1_Loader loader)
FT_BEGIN_HEADER struct T1_Loader_ * T1_Loader
#define T1_FONTDIR_AFTER_PRIVATE
FT_BEGIN_HEADER struct T1_Loader_ T1_LoaderRec
T1_Finalize_Parser(T1_Parser parser)
T1_New_Parser(T1_Parser parser, FT_Stream stream, FT_Memory memory, PSAux_Service psaux)
T1_Get_Private_Dict(T1_Parser parser, PSAux_Service psaux)
#define T1_ToFixedArray(p, m, f, t)
FT_BEGIN_HEADER struct T1_ParserRec_ * T1_Parser
#define T1_Add_Table(p, i, o, l)
#define T1_Release_Table(p)
#define T1_Skip_Spaces(p)
#define T1_Skip_PS_Token(p)
#define T1_ToTokenArray(p, t, m, c)
#define T1_Load_Field(p, f, o, m, pf)
#define T1_Load_Field_Table(p, f, o, m, pf)
@ T1_ENCODING_TYPE_ISOLATIN1
@ T1_ENCODING_TYPE_STANDARD
@ T1_ENCODING_TYPE_EXPERT
#define T1_MAX_MM_MAP_POINTS
#define T1_MAX_MM_DESIGNS
FT_BEGIN_HEADER struct T1_EncodingRecRec_ * T1_Encoding
__inline int before(__u32 seq1, __u32 seq2)
__inline int after(__u32 seq1, __u32 seq2)
ActualNumberDriverObjects * sizeof(PDRIVER_OBJECT)) PDRIVER_OBJECT *DriverObjectList