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
81 #define FT_COMPONENT trace_t1load
84 #ifndef T1_CONFIG_OPTION_NO_MM_SUPPORT
117 if ( num_designs > 0 )
137 for ( nn = 2; nn <= num_designs; nn++ )
162 if ( num_designs && num_axis && blend->
design_pos[0] == 0 )
170 for ( n = 1; n < num_designs; n++ )
178 error = T1_Err_Invalid_File_Format;
192 error = T1_Err_Invalid_Argument;
199 for ( n = 0; n < blend->
num_axis; n++ )
229 if ( ncv <= axismap->blend_points[0] )
232 for ( j = 1; j < axismap->num_points; ++
j )
234 if ( ncv <= axismap->blend_points[j] )
238 axismap->blend_points[j] -
239 axismap->blend_points[j - 1] );
243 axismap->design_points[j] -
244 axismap->design_points[j - 1],
249 return INT_TO_FIXED( axismap->design_points[axismap->num_points - 1] );
265 if ( axis_count == 1 )
266 axiscoords[0] = weights[1];
268 else if ( axis_count == 2 )
270 axiscoords[0] = weights[3] + weights[1];
271 axiscoords[1] = weights[3] + weights[2];
274 else if ( axis_count == 3 )
276 axiscoords[0] = weights[7] + weights[5] + weights[3] + weights[1];
277 axiscoords[1] = weights[7] + weights[6] + weights[3] + weights[2];
278 axiscoords[2] = weights[7] + weights[6] + weights[5] + weights[4];
283 axiscoords[0] = weights[15] + weights[13] + weights[11] + weights[9] +
284 weights[7] + weights[5] + weights[3] + weights[1];
285 axiscoords[1] = weights[15] + weights[14] + weights[11] + weights[10] +
286 weights[7] + weights[6] + weights[3] + weights[2];
287 axiscoords[2] = weights[15] + weights[14] + weights[13] + weights[12] +
288 weights[7] + weights[6] + weights[5] + weights[4];
289 axiscoords[3] = weights[15] + weights[14] + weights[13] + weights[12] +
290 weights[11] + weights[10] + weights[9] + weights[8];
328 for ( i = 0 ; i < mmaster.
num_axis; ++
i )
375 error = T1_Err_Invalid_Argument;
377 if ( blend && blend->
num_axis == num_coords )
387 for ( m = 0; m < blend->
num_axis; m++ )
394 if ( factor < 0 ) factor = 0;
395 if ( factor > 0x10000L ) factor = 0x10000L;
397 if ( ( n & ( 1 << m ) ) == 0 )
398 factor = 0x10000L - factor;
422 error = T1_Err_Invalid_Argument;
423 if ( blend && blend->
num_axis == num_coords )
429 for ( n = 0; n < blend->
num_axis; n++ )
436 FT_Int before = -1, after = -1;
445 if ( design == p_design )
447 the_blend = blends[
p];
451 if ( design < p_design )
462 the_blend = blends[0];
464 else if ( after < 0 )
468 the_blend =
FT_MulDiv( design - designs[before],
469 blends [after] - blends [before],
470 designs[after] - designs[before] );
473 final_blends[
n] = the_blend;
498 error = T1_Err_Invalid_Argument;
499 if ( num_coords <= 4 && num_coords > 0 )
501 for ( i = 0; i < num_coords; ++
i )
526 for ( n = 1; n < num_designs; n++ )
534 for ( n = 0; n < num_designs; n++ )
546 for ( n = 0; n < num_axis; n++ )
550 for ( n = 0; n < num_axis; n++ )
580 error = T1_Err_Ignore;
585 FT_ERROR((
"parse_blend_axis_types: incorrect number of axes: %d\n",
587 error = T1_Err_Invalid_File_Format;
600 for ( n = 0; n < num_axis; n++ )
608 if ( token->
start[0] ==
'/' )
614 error = T1_Err_Invalid_File_Format;
627 loader->parser.root.error =
error;
647 if ( num_designs < 0 )
649 error = T1_Err_Ignore;
654 FT_ERROR((
"parse_blend_design_positions:"
655 " incorrect number of designs: %d\n",
657 error = T1_Err_Invalid_File_Format;
662 FT_Byte* old_cursor = parser->root.cursor;
663 FT_Byte* old_limit = parser->root.limit;
670 for ( n = 0; n < num_designs; n++ )
678 token = design_tokens +
n;
679 parser->root.cursor = token->
start;
680 parser->root.limit = token->
limit;
687 FT_ERROR((
"parse_blend_design_positions:"
688 " invalid number of axes: %d\n",
690 error = T1_Err_Invalid_File_Format;
700 else if ( n_axis != num_axis )
702 FT_ERROR((
"parse_blend_design_positions: incorrect table\n" ));
703 error = T1_Err_Invalid_File_Format;
708 for ( axis = 0; axis < n_axis; axis++ )
710 T1_Token token2 = axis_tokens + axis;
713 parser->root.cursor = token2->
start;
714 parser->root.limit = token2->
limit;
719 loader->parser.root.cursor = old_cursor;
720 loader->parser.root.limit = old_limit;
724 loader->parser.root.error =
error;
746 error = T1_Err_Ignore;
751 FT_ERROR((
"parse_blend_design_map: incorrect number of axes: %d\n",
753 error = T1_Err_Invalid_File_Format;
757 old_cursor = parser->root.cursor;
758 old_limit = parser->root.limit;
766 for ( n = 0; n < num_axis; n++ )
774 axis_token = axis_tokens +
n;
776 parser->root.cursor = axis_token->
start;
777 parser->root.limit = axis_token->
limit;
783 FT_ERROR((
"parse_blend_design_map: incorrect table\n" ));
784 error = T1_Err_Invalid_File_Format;
794 for ( p = 0; p < num_points; p++ )
799 point_token = point_tokens +
p;
802 parser->root.cursor = point_token->
start + 1;
803 parser->root.limit = point_token->
limit - 1;
810 parser->root.cursor = old_cursor;
811 parser->root.limit = old_limit;
814 parser->root.error =
error;
835 if ( num_designs < 0 )
837 error = T1_Err_Ignore;
843 " incorrect number of designs: %d\n",
845 error = T1_Err_Invalid_File_Format;
859 " /BlendDesignPosition and /WeightVector have\n"
861 " different number of elements\n" ));
862 error = T1_Err_Invalid_File_Format;
866 old_cursor = parser->root.cursor;
867 old_limit = parser->root.limit;
869 for ( n = 0; n < num_designs; n++ )
871 token = design_tokens +
n;
872 parser->root.cursor = token->
start;
873 parser->root.limit = token->
limit;
879 parser->root.cursor = old_cursor;
880 parser->root.limit = old_limit;
883 parser->root.error =
error;
931 error = loader->parser.root.error;
941 objects = &dummy_object;
953 objects = &dummy_object;
959 objects = &dummy_object;
971 objects = &dummy_object;
976 objects = (
void**)blend->
bboxes;
982 dummy_object = loader;
983 objects = &dummy_object;
989 objects = &dummy_object;
993 #ifndef T1_CONFIG_OPTION_NO_MM_SUPPORT
995 dummy_object = face->
blend;
996 objects = &dummy_object;
1002 dummy_object = &face->
type1;
1003 objects = &dummy_object;
1010 objects, max_objects, 0 );
1013 objects, max_objects, 0 );
1047 cur = parser->root.cursor;
1058 *base = parser->root.cursor + 1;
1060 if ( s >= 0 && s < limit - *base )
1062 parser->root.cursor += s + 1;
1064 return !parser->root.error;
1068 FT_ERROR((
"read_binary_data: invalid size field\n" ));
1069 parser->root.error = T1_Err_Invalid_File_Format;
1094 parser->root.error = T1_Err_Invalid_File_Format;
1098 temp_scale =
FT_ABS( temp[3] );
1100 if ( temp_scale == 0 )
1102 FT_ERROR((
"t1_parse_font_matrix: invalid font matrix\n" ));
1103 parser->root.error = T1_Err_Invalid_File_Format;
1112 temp_scale ) >> 16 );
1115 if ( temp_scale != 0x10000L )
1117 temp[0] =
FT_DivFix( temp[0], temp_scale );
1118 temp[1] =
FT_DivFix( temp[1], temp_scale );
1119 temp[2] =
FT_DivFix( temp[2], temp_scale );
1120 temp[4] =
FT_DivFix( temp[4], temp_scale );
1121 temp[5] =
FT_DivFix( temp[5], temp_scale );
1122 temp[3] = temp[3] < 0 ? -0x10000L : 0x10000L;
1125 matrix->
xx = temp[0];
1126 matrix->
yx = temp[1];
1127 matrix->
xy = temp[2];
1128 matrix->
yy = temp[3];
1131 offset->
x = temp[4] >> 16;
1132 offset->
y = temp[5] >> 16;
1148 cur = parser->root.cursor;
1151 FT_ERROR((
"parse_encoding: out of bounds\n" ));
1152 parser->root.error = T1_Err_Invalid_File_Format;
1162 PS_Table char_table = &loader->encoding_table;
1172 only_immediates = 1;
1173 parser->root.cursor++;
1179 if ( parser->root.cursor >= limit )
1183 loader->num_chars = encode->num_chars =
count;
1187 char_table, count, memory ) ) )
1189 parser->root.error =
error;
1194 for ( n = 0; n <
count; n++ )
1196 char* notdef = (
char *)
".notdef";
1225 while ( parser->root.cursor < limit )
1227 cur = parser->root.cursor;
1230 if ( *cur ==
'd' && cur + 3 < limit )
1232 if ( cur[1] ==
'e' &&
1254 if ( only_immediates )
1262 cur = parser->root.cursor;
1264 if ( *cur ==
'/' && cur + 2 < limit && n < count )
1271 parser->root.cursor = cur;
1273 if ( parser->root.error )
1276 len = parser->root.cursor - cur;
1278 parser->root.error =
T1_Add_Table( char_table, charcode,
1280 if ( parser->root.error )
1282 char_table->elements[charcode][
len] =
'\0';
1286 else if ( only_immediates )
1296 parser->root.error = FT_Err_Unknown_File_Format;
1303 if ( parser->root.error )
1311 parser->root.cursor = cur;
1318 if ( cur + 17 < limit &&
1319 ft_strncmp( (
const char*)cur,
"StandardEncoding", 16 ) == 0 )
1322 else if ( cur + 15 < limit &&
1323 ft_strncmp( (
const char*)cur,
"ExpertEncoding", 14 ) == 0 )
1326 else if ( cur + 18 < limit &&
1327 ft_strncmp( (
const char*)cur,
"ISOLatin1Encoding", 17 ) == 0 )
1331 parser->root.error = T1_Err_Ignore;
1352 if ( parser->root.cursor < parser->root.limit &&
1353 *parser->root.cursor ==
'[' )
1357 if ( parser->root.cursor >= parser->root.limit ||
1358 *parser->root.cursor !=
']' )
1359 parser->root.error = T1_Err_Invalid_File_Format;
1367 if ( parser->root.error )
1373 if ( !loader->num_subrs )
1391 if ( parser->root.cursor + 4 < parser->root.limit &&
1392 ft_strncmp( (
char*)parser->root.cursor,
"dup", 3 ) != 0 )
1407 if ( parser->root.error )
1411 if ( parser->root.cursor + 4 < parser->root.limit &&
1412 ft_strncmp( (
char*)parser->root.cursor,
"put", 3 ) == 0 )
1419 if ( loader->num_subrs )
1437 error = T1_Err_Invalid_File_Format;
1457 if ( !loader->num_subrs )
1458 loader->num_subrs = num_subrs;
1463 parser->root.error =
error;
1467 #define TABLE_EXTEND 5
1475 PS_Table code_table = &loader->charstrings;
1476 PS_Table name_table = &loader->glyph_names;
1477 PS_Table swap_table = &loader->swap_table;
1493 if ( num_glyphs == 0 || parser->root.error )
1503 if ( !loader->num_glyphs )
1536 cur = parser->root.cursor;
1543 if ( cur[0] ==
'd' &&
1561 if ( cur[0] ==
'e' &&
1568 if ( parser->root.error )
1576 if ( cur + 1 >=
limit )
1578 error = T1_Err_Invalid_File_Format;
1583 len = parser->root.cursor - cur;
1591 if ( loader->num_glyphs )
1599 name_table->elements[
n][
len] =
'\0';
1604 (
const char*)(name_table->elements[n]) ) == 0 )
1618 error = T1_Err_Invalid_File_Format;
1641 loader->num_glyphs =
n;
1644 if ( notdef_found &&
1645 ft_strcmp(
".notdef", (
const char*)name_table->elements[0] ) )
1655 name_table->elements[0],
1656 name_table->lengths [0] );
1662 code_table->elements[0],
1663 code_table->lengths [0] );
1669 name_table->elements[notdef_index],
1670 name_table->lengths [notdef_index] );
1676 code_table->elements[notdef_index],
1677 code_table->lengths [notdef_index] );
1682 swap_table->elements[0],
1683 swap_table->lengths [0] );
1688 swap_table->elements[1],
1689 swap_table->lengths [1] );
1694 swap_table->elements[2],
1695 swap_table->lengths [2] );
1700 swap_table->elements[3],
1701 swap_table->lengths [3] );
1706 else if ( !notdef_found )
1714 FT_Byte notdef_glyph[] = { 0x8B, 0xF7, 0xE1, 0x0D, 0x0E };
1715 char* notdef_name = (
char *)
".notdef";
1719 name_table->elements[0],
1720 name_table->lengths [0] );
1725 code_table->elements[0],
1726 code_table->lengths [0] );
1734 error =
T1_Add_Table( code_table, 0, notdef_glyph, 5 );
1740 swap_table->elements[0],
1741 swap_table->lengths [0] );
1746 swap_table->elements[1],
1747 swap_table->lengths [1] );
1752 loader->num_glyphs += 1;
1758 parser->root.error =
error;
1788 #ifndef T1_CONFIG_OPTION_NO_MM_SUPPORT
1805 #define T1_FIELD_COUNT \
1806 ( sizeof ( t1_keywords ) / sizeof ( t1_keywords[0] ) )
1820 parser->root.cursor = base;
1821 parser->root.limit = base +
size;
1822 parser->root.error = T1_Err_Ok;
1824 limit = parser->root.limit;
1828 while ( parser->root.cursor < limit )
1833 cur = parser->root.cursor;
1840 else if (
IS_PS_TOKEN( cur, limit,
"closefile" ) )
1845 else if (
IS_PS_TOKEN( cur, limit,
"FontDirectory" ) )
1847 if ( loader->keywords_encountered &
T1_PRIVATE )
1848 loader->keywords_encountered |=
1850 parser->root.cursor += 13;
1858 if ( parser->root.error )
1866 else if ( *cur ==
'R' && cur + 6 < limit && *(cur + 1) ==
'D' &&
1873 parser->root.cursor = start_binary;
1875 return T1_Err_Invalid_File_Format;
1879 else if ( *cur ==
'-' && cur + 6 < limit && *(cur + 1) ==
'|' &&
1886 parser->root.cursor = start_binary;
1888 return T1_Err_Invalid_File_Format;
1893 else if ( *cur ==
'/' && cur + 2 < limit )
1900 parser->root.cursor = cur;
1902 if ( parser->root.error )
1905 len = parser->root.cursor - cur;
1922 if ( cur[0] == name[0] &&
1954 ( loader->keywords_encountered &
T1_PRIVATE )
1958 if ( !( dict & keyword->
dict ) )
1960 FT_TRACE1((
"parse_dict: found %s but ignoring it "
1961 "since it is in the wrong dictionary\n",
1966 if ( !( loader->keywords_encountered &
1968 ft_strcmp( (
const char*)name,
"CharStrings" ) == 0 )
1973 if ( parser->root.error != T1_Err_Ok )
1976 parser->root.error = T1_Err_Ok;
1978 return parser->root.error;
1993 if ( parser->root.error )
2002 return parser->root.error;
2013 loader->num_glyphs = 0;
2014 loader->num_chars = 0;
2017 loader->encoding_table.init = 0;
2018 loader->charstrings.init = 0;
2019 loader->glyph_names.init = 0;
2020 loader->subrs.init = 0;
2021 loader->swap_table.init = 0;
2022 loader->fontdata = 0;
2023 loader->keywords_encountered = 0;
2062 face->len_buildchar = 0;
2070 parser = &loader.parser;
2079 parser->base_dict, parser->base_len );
2088 parser->private_dict, parser->private_len );
2095 #ifndef T1_CONFIG_OPTION_NO_MM_SUPPORT
2098 face->blend->num_default_design_vector != 0 &&
2099 face->blend->num_default_design_vector != face->blend->num_axis )
2102 FT_ERROR((
"T1_Open_Face(): /DesignVector contains %u entries "
2103 "while there are %u axes.\n",
2104 face->blend->num_default_design_vector,
2105 face->blend->num_axis ));
2107 face->blend->num_default_design_vector = 0;
2113 ( !face->blend->num_designs || !face->blend->num_axis ) )
2122 for ( i = 0; i < face->blend->num_axis; i++ )
2123 if ( !face->blend->design_map[i].num_points )
2132 if ( face->len_buildchar > 0 )
2137 if (
FT_NEW_ARRAY( face->buildchar, face->len_buildchar ) )
2139 FT_ERROR((
"T1_Open_Face: cannot allocate BuildCharArray\n" ));
2140 face->len_buildchar = 0;
2146 face->len_buildchar = 0;
2154 if ( loader.subrs.init )
2156 loader.subrs.init = 0;
2159 type1->
subrs = loader.subrs.elements;
2160 type1->
subrs_len = loader.subrs.lengths;
2163 #ifdef FT_CONFIG_OPTION_INCREMENTAL
2164 if ( !face->root.internal->incremental_interface )
2166 if ( !loader.charstrings.init )
2168 FT_ERROR((
"T1_Open_Face: no `/CharStrings' array in face\n" ));
2169 error = T1_Err_Invalid_File_Format;
2172 loader.charstrings.init = 0;
2181 loader.glyph_names.block = 0;
2182 loader.glyph_names.elements = 0;
2187 FT_Int charcode,
idx, min_char, max_char;
2201 for ( ; charcode < loader.encoding_table.max_elems; charcode++ )
2203 type1->
encoding.char_index[charcode] = 0;
2204 type1->
encoding.char_name [charcode] = (
char *)
".notdef";
2206 char_name = loader.encoding_table.elements[charcode];
2208 for ( idx = 0; idx < type1->
num_glyphs; idx++ )
2212 (
const char*)glyph_name ) == 0 )
2215 type1->
encoding.char_name [charcode] = (
char*)glyph_name;
2220 (
const char*)glyph_name ) != 0 )
2222 if ( charcode < min_char )
2223 min_char = charcode;
2224 if ( charcode >= max_char )
2225 max_char = charcode + 1;
2232 type1->
encoding.code_first = min_char;
2233 type1->
encoding.code_last = max_char;
2234 type1->
encoding.num_chars = loader.num_chars;
#define FT_ALLOC(ptr, size)
GLenum GLsizei GLenum GLenum const GLvoid * table
T1_Finalize_Parser(T1_Parser parser)
FT_DivFix(FT_Long a, FT_Long b)
#define T1_Add_Table(p, i, o, l)
#define T1_MAX_MM_MAP_POINTS
PS_PrivateRec private_dict
FT_MM_Axis axis[T1_MAX_MM_AXIS]
#define FT_MEM_ZERO(dest, count)
PS_FontExtraRec font_extra
T1_New_Parser(T1_Parser parser, FT_Stream stream, FT_Memory memory, PSAux_Service psaux)
#define T1_Skip_Spaces(p)
PS_DesignMapRec design_map[T1_MAX_MM_AXIS]
static void t1_parse_font_matrix(T1_Face face, T1_Loader loader)
static void t1_done_loader(T1_Loader loader)
T1_Set_MM_Blend(T1_Face face, FT_UInt num_coords, FT_Fixed *coords)
#define T1_Release_Table(p)
FT_String * axis_names[T1_MAX_MM_AXIS]
FT_BEGIN_HEADER struct T1_EncodingRecRec_ * T1_Encoding
static FT_Error parse_dict(T1_Face face, T1_Loader loader, FT_Byte *base, FT_Long size)
FT_BEGIN_HEADER struct FT_MM_Axis_ FT_MM_Axis
const PS_Table_FuncsRec * ps_table_funcs
EGLImageKHR EGLint * name
static FT_Error t1_load_keyword(T1_Face face, T1_Loader loader, const T1_Field field)
T1_Set_Var_Design(T1_Face face, FT_UInt num_coords, FT_Fixed *coords)
FT_Fixed expansion_factor
#define T1_ToTokenArray(p, t, m, c)
FT_BEGIN_HEADER typedef unsigned char FT_Bool
#define FT_TRACE1(varformat)
#define FT_ERROR(varformat)
#define FT_ASSERT(condition)
FT_UInt num_default_design_vector
T1_Set_MM_Design(T1_Face face, FT_UInt num_coords, FT_Long *coords)
#define T1_MAX_MM_DESIGNS
#define T1_ToFixedArray(p, m, f, t)
static void parse_weight_vector(T1_Face face, T1_Loader loader)
FT_Error(* init)(PS_Table table, FT_Int count, FT_Memory memory)
static void parse_subrs(T1_Face face, T1_Loader loader)
PS_Private privates[T1_MAX_MM_DESIGNS+1]
static void parse_buildchar(T1_Face face, T1_Loader loader)
mm_weights_unmap(FT_Fixed *weights, FT_Fixed *axiscoords, FT_UInt axis_count)
FT_Byte * charstrings_block
#define T1_Load_Field_Table(p, f, o, m, pf)
struct T1_FieldRec_ * T1_Field
void(* t1_decrypt)(FT_Byte *buffer, FT_Offset length, FT_UShort seed)
FT_MulDiv(FT_Long a, FT_Long b, FT_Long c)
FT_Fixed * default_weight_vector
#define IS_PS_TOKEN(cur, limit, token)
FT_BBox * bboxes[T1_MAX_MM_DESIGNS+1]
#define T1_Skip_PS_Token(p)
FT_BEGIN_HEADER struct T1_Loader_ * T1_Loader
#define T1_FIELD_CALLBACK(_ident, _name, _dict)
struct PSAux_ServiceRec_ * PSAux_Service
static void parse_blend_design_map(T1_Face face, T1_Loader loader)
static FT_Error t1_allocate_blend(T1_Face face, FT_UInt num_designs, FT_UInt num_axis)
FT_PtrDist * charstrings_len
FT_BEGIN_HEADER struct T1_Loader_ T1_LoaderRec
static void parse_blend_axis_types(T1_Face face, T1_Loader loader)
struct FT_FaceRec_ * FT_Face
mm_axis_unmap(PS_DesignMap axismap, FT_Fixed ncv)
static void parse_blend_design_positions(T1_Face face, T1_Loader loader)
FT_Fixed * design_pos[T1_MAX_MM_DESIGNS]
PS_FontInfo font_infos[T1_MAX_MM_DESIGNS+1]
FT_Byte * glyph_names_block
static void t1_init_loader(T1_Loader loader, T1_Face face)
T1_Done_Blend(T1_Face face)
T1_Get_Private_Dict(T1_Parser parser, PSAux_Service psaux)
typedefFT_BEGIN_HEADER struct FT_MemoryRec_ * FT_Memory
T1_EncodingType encoding_type
static void parse_private(T1_Face face, T1_Loader loader)
#define FT_NEW_ARRAY(ptr, count)
FT_MulFix(FT_Long a, FT_Long b)
typedefFT_BEGIN_HEADER struct PS_TableRec_ * PS_Table
#define FT_TRACE6(varformat)
static void parse_charstrings(T1_Face face, T1_Loader loader)
#define T1_Load_Field(p, f, o, m, pf)
#define FT_SET_ERROR(expression)
T1_Field_ParseFunc reader
T1_Get_MM_Var(T1_Face face, FT_MM_Var **master)
T1_Open_Face(T1_Face face)
GLdouble GLdouble GLdouble b
T1_FieldLocation location
#define FT_MAKE_TAG(_x1, _x2, _x3, _x4)
static int read_binary_data(T1_Parser parser, FT_Long *size, FT_Byte **base)
FT_BEGIN_HEADER struct T1_ParserRec_ * T1_Parser
const GLubyte GLuint GLuint GLuint GLuint alpha GLboolean GLboolean GLboolean GLboolean alpha GLint GLint GLsizei GLsizei GLenum type GLenum GLint GLenum GLint GLint GLsizei GLsizei GLint border GLenum GLint GLint GLint GLint GLint GLsizei GLsizei height GLsizei GLsizei GLenum GLenum const GLvoid *pixels GLenum GLint GLint GLint GLint j2 GLdouble GLdouble GLdouble GLdouble GLdouble GLdouble zFar GLenum GLenum GLint *params GLenum GLenum GLint *params GLenum GLenum GLint *params GLenum GLenum GLfloat *params GLenum GLint GLenum GLenum GLvoid *pixels GLenum GLint GLenum GLint *params GLenum GLenum GLint *params GLenum GLsizei const GLvoid *pointer GLenum GLenum const GLint *params GLenum GLfloat GLfloat GLint GLint const GLfloat *points GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat *points GLint GLfloat GLfloat GLint GLfloat GLfloat v2 GLenum GLenum const GLint *params GLdouble GLdouble GLdouble GLdouble GLdouble GLdouble zFar GLenum map
#define FT_MEM_COPY(dest, source, count)
T1_Get_Multi_Master(T1_Face face, FT_Multi_Master *master)
static void parse_encoding(T1_Face face, T1_Loader loader)
FT_Var_Named_Style * namedstyle
#define T1_FONTDIR_AFTER_PRIVATE
static const T1_FieldRec t1_keywords[]
#define T1_FIELD_DICT_PRIVATE
#define T1_FIELD_DICT_FONTDICT