37 #include FT_INTERNAL_DEBUG_H
38 #include FT_INTERNAL_STREAM_H
39 #include FT_INTERNAL_POSTSCRIPT_AUX_H
53 #define FT_COMPONENT trace_t1parse
84 if ( tag == 0x8001U || tag == 0x8002U )
99 const char* header_string,
100 size_t header_length )
125 error = T1_Err_Unknown_File_Format;
146 psaux->ps_parser_funcs->init( &parser->root, 0, 0, memory );
149 parser->base_len = 0;
150 parser->base_dict = 0;
151 parser->private_len = 0;
152 parser->private_dict = 0;
154 parser->in_memory = 0;
155 parser->single_block = 0;
161 if ( error != T1_Err_Unknown_File_Format )
197 if ( tag != 0x8001U )
214 parser->base_dict = (
FT_Byte*)stream->base + stream->pos;
215 parser->base_len = size;
216 parser->in_memory = 1;
225 if (
FT_ALLOC( parser->base_dict, size ) ||
228 parser->base_len =
size;
231 parser->root.base = parser->base_dict;
232 parser->root.cursor = parser->base_dict;
233 parser->root.limit = parser->root.cursor + parser->base_len;
236 if ( error && !parser->in_memory )
250 FT_FREE( parser->private_dict );
253 if ( !parser->in_memory )
256 parser->root.funcs.done( &parser->root );
270 if ( parser->in_pfb )
280 parser->private_len = 0;
287 if ( tag != 0x8002U )
290 parser->private_len +=
size;
298 if ( parser->private_len == 0 )
301 " invalid private dictionary section\n" ));
302 error = T1_Err_Invalid_File_Format;
307 FT_ALLOC( parser->private_dict, parser->private_len ) )
310 parser->private_len = 0;
314 if ( error || tag != 0x8002U )
324 parser->private_len +=
size;
335 FT_Byte* cur = parser->base_dict;
344 if ( c ==
'e' && cur + 9 < limit )
347 if ( cur[1] ==
'e' &&
357 " could not find `eexec' keyword\n" ));
358 error = T1_Err_Invalid_File_Format;
366 parser->root.cursor = parser->base_dict;
367 parser->root.limit = cur + 9;
369 cur = parser->root.cursor;
370 limit = parser->root.limit;
372 while ( cur < limit )
374 if ( *cur ==
'e' &&
ft_strncmp( (
char*)cur,
"eexec", 5 ) == 0 )
378 if ( parser->root.error )
381 cur = parser->root.cursor;
388 limit = parser->base_dict + parser->base_len;
396 parser->root.limit = parser->base_dict + parser->base_len;
399 cur = parser->root.cursor;
405 while ( cur < limit &&
414 " `eexec' not properly terminated\n" ));
415 error = T1_Err_Invalid_File_Format;
419 size = parser->base_len - ( cur - parser->base_dict );
421 if ( parser->in_memory )
424 if (
FT_ALLOC( parser->private_dict, size + 1 ) )
426 parser->private_len =
size;
430 parser->single_block = 1;
431 parser->private_dict = parser->base_dict;
432 parser->private_len =
size;
433 parser->base_dict = 0;
434 parser->base_len = 0;
451 parser->root.cursor = cur;
452 (
void)psaux->ps_parser_funcs->to_bytes( &parser->root,
453 parser->private_dict,
457 parser->private_len =
len;
460 parser->private_dict[
len] =
'\0';
468 psaux->t1_decrypt( parser->private_dict, parser->private_len, 55665U );
470 if ( parser->private_len < 4 )
473 " invalid private dictionary section\n" ));
474 error = T1_Err_Invalid_File_Format;
479 parser->private_dict[0] =
' ';
480 parser->private_dict[1] =
' ';
481 parser->private_dict[2] =
' ';
482 parser->private_dict[3] =
' ';
484 parser->root.base = parser->private_dict;
485 parser->root.cursor = parser->private_dict;
486 parser->root.limit = parser->root.cursor + parser->private_len;
#define FT_ALLOC(ptr, size)
T1_Finalize_Parser(T1_Parser parser)
GLvoid **typedef void(GLAPIENTRY *PFNGLGETVERTEXATTRIBDVPROC)(GLuint
T1_New_Parser(T1_Parser parser, FT_Stream stream, FT_Memory memory, PSAux_Service psaux)
static FT_Error check_type1_format(FT_Stream stream, const char *header_string, size_t header_length)
#define T1_Skip_Spaces(p)
#define FT_READ_USHORT(var)
#define FT_ERROR(varformat)
#define FT_STREAM_SKIP(distance)
#define T1_Skip_PS_Token(p)
static FT_Error read_pfb_tag(FT_Stream stream, FT_UShort *atag, FT_ULong *asize)
#define FT_TRACE2(varformat)
#define FT_READ_ULONG_LE(var)
T1_Get_Private_Dict(T1_Parser parser, PSAux_Service psaux)
typedefFT_BEGIN_HEADER struct FT_MemoryRec_ * FT_Memory
#define FT_STREAM_SEEK(position)
#define FT_FRAME_ENTER(size)
FT_BEGIN_HEADER struct T1_ParserRec_ * T1_Parser
#define FT_MEM_MOVE(dest, source, count)
#define FT_STREAM_READ(buffer, count)