| Index: src/psaux/psobjs.c
|
| diff --git a/src/psaux/psobjs.c b/src/psaux/psobjs.c
|
| index 06df6e664936c4d15ddcb719d658ffeb282b8a08..dd976d3a96b7e9f37674cdeb73afe59c31ac05b2 100644
|
| --- a/src/psaux/psobjs.c
|
| +++ b/src/psaux/psobjs.c
|
| @@ -4,7 +4,7 @@
|
| /* */
|
| /* Auxiliary functions for PostScript fonts (body). */
|
| /* */
|
| -/* Copyright 1996-2012 by */
|
| +/* Copyright 1996-2013 by */
|
| /* David Turner, Robert Wilhelm, and Werner Lemberg. */
|
| /* */
|
| /* This file is part of the FreeType project, and may only be used, */
|
| @@ -113,8 +113,8 @@
|
|
|
|
|
| static FT_Error
|
| - reallocate_t1_table( PS_Table table,
|
| - FT_Long new_size )
|
| + reallocate_t1_table( PS_Table table,
|
| + FT_Offset new_size )
|
| {
|
| FT_Memory memory = table->memory;
|
| FT_Byte* old_base = table->block;
|
| @@ -138,7 +138,7 @@
|
|
|
| table->capacity = new_size;
|
|
|
| - return PSaux_Err_Ok;
|
| + return FT_Err_Ok;
|
| }
|
|
|
|
|
| @@ -173,13 +173,13 @@
|
| if ( idx < 0 || idx >= table->max_elems )
|
| {
|
| FT_ERROR(( "ps_table_add: invalid index\n" ));
|
| - return PSaux_Err_Invalid_Argument;
|
| + return FT_THROW( Invalid_Argument );
|
| }
|
|
|
| if ( length < 0 )
|
| {
|
| FT_ERROR(( "ps_table_add: invalid length\n" ));
|
| - return PSaux_Err_Invalid_Argument;
|
| + return FT_THROW( Invalid_Argument );
|
| }
|
|
|
| /* grow the base block if needed */
|
| @@ -216,7 +216,7 @@
|
| FT_MEM_COPY( table->block + table->cursor, object, length );
|
|
|
| table->cursor += length;
|
| - return PSaux_Err_Ok;
|
| + return FT_Err_Ok;
|
| }
|
|
|
|
|
| @@ -341,7 +341,7 @@
|
| {
|
| FT_Byte* cur = *acur;
|
| FT_Int embed = 0;
|
| - FT_Error error = PSaux_Err_Invalid_File_Format;
|
| + FT_Error error = FT_ERR( Invalid_File_Format );
|
| unsigned int i;
|
|
|
|
|
| @@ -397,7 +397,7 @@
|
| embed--;
|
| if ( embed == 0 )
|
| {
|
| - error = PSaux_Err_Ok;
|
| + error = FT_Err_Ok;
|
| break;
|
| }
|
| }
|
| @@ -416,7 +416,7 @@
|
| FT_Byte* limit )
|
| {
|
| FT_Byte* cur = *acur;
|
| - FT_Error err = PSaux_Err_Ok;
|
| + FT_Error err = FT_Err_Ok;
|
|
|
|
|
| while ( ++cur < limit )
|
| @@ -433,7 +433,7 @@
|
| if ( cur < limit && *cur != '>' )
|
| {
|
| FT_ERROR(( "skip_string: missing closing delimiter `>'\n" ));
|
| - err = PSaux_Err_Invalid_File_Format;
|
| + err = FT_THROW( Invalid_File_Format );
|
| }
|
| else
|
| cur++;
|
| @@ -456,12 +456,12 @@
|
| {
|
| FT_Byte* cur;
|
| FT_Int embed = 0;
|
| - FT_Error error = PSaux_Err_Ok;
|
| + FT_Error error = FT_Err_Ok;
|
|
|
|
|
| FT_ASSERT( **acur == '{' );
|
|
|
| - for ( cur = *acur; cur < limit && error == PSaux_Err_Ok; ++cur )
|
| + for ( cur = *acur; cur < limit && error == FT_Err_Ok; ++cur )
|
| {
|
| switch ( *cur )
|
| {
|
| @@ -494,7 +494,7 @@
|
|
|
| end:
|
| if ( embed != 0 )
|
| - error = PSaux_Err_Invalid_File_Format;
|
| + error = FT_THROW( Invalid_File_Format );
|
|
|
| *acur = cur;
|
|
|
| @@ -519,7 +519,7 @@
|
|
|
| FT_Byte* cur = parser->cursor;
|
| FT_Byte* limit = parser->limit;
|
| - FT_Error error = PSaux_Err_Ok;
|
| + FT_Error error = FT_Err_Ok;
|
|
|
|
|
| skip_spaces( &cur, limit ); /* this also skips comments */
|
| @@ -567,7 +567,7 @@
|
| {
|
| FT_ERROR(( "ps_parser_skip_PS_token:"
|
| " unexpected closing delimiter `>'\n" ));
|
| - error = PSaux_Err_Invalid_File_Format;
|
| + error = FT_THROW( Invalid_File_Format );
|
| goto Exit;
|
| }
|
| cur++;
|
| @@ -597,7 +597,7 @@
|
| " but invalid at this point\n",
|
| *cur ));
|
|
|
| - error = PSaux_Err_Invalid_File_Format;
|
| + error = FT_THROW( Invalid_File_Format );
|
| }
|
|
|
| parser->error = error;
|
| @@ -644,7 +644,7 @@
|
| token->type = T1_TOKEN_TYPE_STRING;
|
| token->start = cur;
|
|
|
| - if ( skip_literal_string( &cur, limit ) == PSaux_Err_Ok )
|
| + if ( skip_literal_string( &cur, limit ) == FT_Err_Ok )
|
| token->limit = cur;
|
| break;
|
|
|
| @@ -653,7 +653,7 @@
|
| token->type = T1_TOKEN_TYPE_ARRAY;
|
| token->start = cur;
|
|
|
| - if ( skip_procedure( &cur, limit ) == PSaux_Err_Ok )
|
| + if ( skip_procedure( &cur, limit ) == FT_Err_Ok )
|
| token->limit = cur;
|
| break;
|
|
|
| @@ -1027,12 +1027,13 @@
|
| FT_UInt max_objects,
|
| FT_ULong* pflags )
|
| {
|
| - T1_TokenRec token;
|
| - FT_Byte* cur;
|
| - FT_Byte* limit;
|
| - FT_UInt count;
|
| - FT_UInt idx;
|
| - FT_Error error;
|
| + T1_TokenRec token;
|
| + FT_Byte* cur;
|
| + FT_Byte* limit;
|
| + FT_UInt count;
|
| + FT_UInt idx;
|
| + FT_Error error;
|
| + T1_FieldType type;
|
|
|
|
|
| /* this also skips leading whitespace */
|
| @@ -1045,8 +1046,10 @@
|
| cur = token.start;
|
| limit = token.limit;
|
|
|
| + type = field->type;
|
| +
|
| /* we must detect arrays in /FontBBox */
|
| - if ( field->type == T1_FIELD_TYPE_BBOX )
|
| + if ( type == T1_FIELD_TYPE_BBOX )
|
| {
|
| T1_TokenRec token2;
|
| FT_Byte* old_cur = parser->cursor;
|
| @@ -1062,17 +1065,21 @@
|
| parser->limit = old_limit;
|
|
|
| if ( token2.type == T1_TOKEN_TYPE_ARRAY )
|
| + {
|
| + type = T1_FIELD_TYPE_MM_BBOX;
|
| goto FieldArray;
|
| + }
|
| }
|
| else if ( token.type == T1_TOKEN_TYPE_ARRAY )
|
| {
|
| + count = max_objects;
|
| +
|
| FieldArray:
|
| /* if this is an array and we have no blend, an error occurs */
|
| if ( max_objects == 0 )
|
| goto Fail;
|
|
|
| - count = max_objects;
|
| - idx = 1;
|
| + idx = 1;
|
|
|
| /* don't include delimiters */
|
| cur++;
|
| @@ -1088,7 +1095,7 @@
|
|
|
| skip_spaces( &cur, limit );
|
|
|
| - switch ( field->type )
|
| + switch ( type )
|
| {
|
| case T1_FIELD_TYPE_BOOL:
|
| val = ps_tobool( &cur, limit );
|
| @@ -1160,7 +1167,7 @@
|
| " "
|
| " but found token of type %d instead\n",
|
| token.type ));
|
| - error = PSaux_Err_Invalid_File_Format;
|
| + error = FT_THROW( Invalid_File_Format );
|
| goto Exit;
|
| }
|
|
|
| @@ -1197,7 +1204,7 @@
|
| {
|
| FT_ERROR(( "ps_parser_load_field:"
|
| " expected four integers in bounding box\n" ));
|
| - error = PSaux_Err_Invalid_File_Format;
|
| + error = FT_THROW( Invalid_File_Format );
|
| goto Exit;
|
| }
|
|
|
| @@ -1208,6 +1215,54 @@
|
| }
|
| break;
|
|
|
| + case T1_FIELD_TYPE_MM_BBOX:
|
| + {
|
| + FT_Memory memory = parser->memory;
|
| + FT_Fixed* temp;
|
| + FT_Int result;
|
| + FT_UInt i;
|
| +
|
| +
|
| + if ( FT_NEW_ARRAY( temp, max_objects * 4 ) )
|
| + goto Exit;
|
| +
|
| + for ( i = 0; i < 4; i++ )
|
| + {
|
| + result = ps_tofixedarray( &cur, limit, max_objects,
|
| + temp + i * max_objects, 0 );
|
| + if ( result < 0 )
|
| + {
|
| + FT_ERROR(( "ps_parser_load_field:"
|
| + " expected %d integers in the %s subarray\n"
|
| + " "
|
| + " of /FontBBox in the /Blend dictionary\n",
|
| + max_objects,
|
| + i == 0 ? "first"
|
| + : ( i == 1 ? "second"
|
| + : ( i == 2 ? "third"
|
| + : "fourth" ) ) ));
|
| + error = FT_THROW( Invalid_File_Format );
|
| + goto Exit;
|
| + }
|
| +
|
| + skip_spaces( &cur, limit );
|
| + }
|
| +
|
| + for ( i = 0; i < max_objects; i++ )
|
| + {
|
| + FT_BBox* bbox = (FT_BBox*)objects[i];
|
| +
|
| +
|
| + bbox->xMin = FT_RoundFix( temp[i ] );
|
| + bbox->yMin = FT_RoundFix( temp[i + max_objects] );
|
| + bbox->xMax = FT_RoundFix( temp[i + 2 * max_objects] );
|
| + bbox->yMax = FT_RoundFix( temp[i + 3 * max_objects] );
|
| + }
|
| +
|
| + FT_FREE( temp );
|
| + }
|
| + break;
|
| +
|
| default:
|
| /* an error occurred */
|
| goto Fail;
|
| @@ -1221,13 +1276,13 @@
|
| FT_UNUSED( pflags );
|
| #endif
|
|
|
| - error = PSaux_Err_Ok;
|
| + error = FT_Err_Ok;
|
|
|
| Exit:
|
| return error;
|
|
|
| Fail:
|
| - error = PSaux_Err_Invalid_File_Format;
|
| + error = FT_THROW( Invalid_File_Format );
|
| goto Exit;
|
| }
|
|
|
| @@ -1245,7 +1300,7 @@
|
| T1_TokenRec elements[T1_MAX_TABLE_ELEMENTS];
|
| T1_Token token;
|
| FT_Int num_elements;
|
| - FT_Error error = PSaux_Err_Ok;
|
| + FT_Error error = FT_Err_Ok;
|
| FT_Byte* old_cursor;
|
| FT_Byte* old_limit;
|
| T1_FieldRec fieldrec = *(T1_Field)field;
|
| @@ -1260,7 +1315,7 @@
|
| T1_MAX_TABLE_ELEMENTS, &num_elements );
|
| if ( num_elements < 0 )
|
| {
|
| - error = PSaux_Err_Ignore;
|
| + error = FT_ERR( Ignore );
|
| goto Exit;
|
| }
|
| if ( (FT_UInt)num_elements > field->array_max )
|
| @@ -1317,7 +1372,7 @@
|
| FT_Long* pnum_bytes,
|
| FT_Bool delimiters )
|
| {
|
| - FT_Error error = PSaux_Err_Ok;
|
| + FT_Error error = FT_Err_Ok;
|
| FT_Byte* cur;
|
|
|
|
|
| @@ -1332,7 +1387,7 @@
|
| if ( *cur != '<' )
|
| {
|
| FT_ERROR(( "ps_parser_to_bytes: Missing starting delimiter `<'\n" ));
|
| - error = PSaux_Err_Invalid_File_Format;
|
| + error = FT_THROW( Invalid_File_Format );
|
| goto Exit;
|
| }
|
|
|
| @@ -1349,7 +1404,7 @@
|
| if ( cur < parser->limit && *cur != '>' )
|
| {
|
| FT_ERROR(( "ps_parser_to_bytes: Missing closing delimiter `>'\n" ));
|
| - error = PSaux_Err_Invalid_File_Format;
|
| + error = FT_THROW( Invalid_File_Format );
|
| goto Exit;
|
| }
|
|
|
| @@ -1419,7 +1474,7 @@
|
| FT_Byte* limit,
|
| FT_Memory memory )
|
| {
|
| - parser->error = PSaux_Err_Ok;
|
| + parser->error = FT_Err_Ok;
|
| parser->base = base;
|
| parser->limit = limit;
|
| parser->cursor = base;
|
| @@ -1592,13 +1647,13 @@
|
| if ( !outline )
|
| {
|
| FT_ERROR(( "t1_builder_add_contour: no outline to add points to\n" ));
|
| - return PSaux_Err_Invalid_File_Format;
|
| + return FT_THROW( Invalid_File_Format );
|
| }
|
|
|
| if ( !builder->load_points )
|
| {
|
| outline->n_contours++;
|
| - return PSaux_Err_Ok;
|
| + return FT_Err_Ok;
|
| }
|
|
|
| error = FT_GLYPHLOADER_CHECK_POINTS( builder->loader, 0, 1 );
|
| @@ -1621,13 +1676,13 @@
|
| FT_Pos x,
|
| FT_Pos y )
|
| {
|
| - FT_Error error = PSaux_Err_Invalid_File_Format;
|
| + FT_Error error = FT_ERR( Invalid_File_Format );
|
|
|
|
|
| /* test whether we are building a new contour */
|
|
|
| if ( builder->parse_state == T1_Parse_Have_Path )
|
| - error = PSaux_Err_Ok;
|
| + error = FT_Err_Ok;
|
| else
|
| {
|
| builder->parse_state = T1_Parse_Have_Path;
|
|
|