diff --git a/src/cff/cffgload.c b/src/cff/cffgload.c index 753cf979c..9fd8968d4 100644 --- a/src/cff/cffgload.c +++ b/src/cff/cffgload.c @@ -570,25 +570,20 @@ /* For incremental fonts get the character data using the */ /* callback function. */ if ( face->root.internal->incremental_interface ) - { - FT_Data data; - FT_Error error = face->root.internal->incremental_interface->funcs->get_glyph_data( - face->root.internal->incremental_interface->object, - glyph_index, &data ); - - + { + FT_Data data; + FT_Error error = face->root.internal->incremental_interface->funcs->get_glyph_data( + face->root.internal->incremental_interface->object, + glyph_index, &data ); *pointer = (FT_Byte*)data.pointer; - *length = data.length; - + *length = data.length; return error; } else #endif /* FT_CONFIG_OPTION_INCREMENTAL */ { - CFF_Font cff = (CFF_Font)(face->extra.data); - - + CFF_Font cff = (CFF_Font)(face->extra.data); return cff_index_access_element( &cff->charstrings_index, glyph_index, pointer, length ); } @@ -608,12 +603,10 @@ /* For incremental fonts get the character data using the */ /* callback function. */ if ( face->root.internal->incremental_interface ) - { - FT_Data data; - - - data.pointer = *pointer; - data.length = length; + { + FT_Data data; + data.pointer = *pointer; + data.length = length; face->root.internal->incremental_interface->funcs->free_glyph_data( face->root.internal->incremental_interface->object,&data ); } @@ -621,9 +614,7 @@ #endif /* FT_CONFIG_OPTION_INCREMENTAL */ { - CFF_Font cff = (CFF_Font)(face->extra.data); - - + CFF_Font cff = (CFF_Font)(face->extra.data); cff_index_forget_element( &cff->charstrings_index, pointer ); } } @@ -640,14 +631,26 @@ FT_Int bchar_index, achar_index, n_base_points; FT_Outline* base = decoder->builder.base; TT_Face face = decoder->builder.face; - CFF_Font cff = (CFF_Font)(face->extra.data); FT_Vector left_bearing, advance; FT_Byte* charstring; FT_ULong charstring_len; +#ifdef FT_CONFIG_OPTION_INCREMENTAL + /* Incremental fonts don't necessarily have valid charsets. */ + /* They use the character code, not the glyph index, in this case. */ + if ( face->root.internal->incremental_interface ) + { + bchar_index = bchar; + achar_index = achar; + } + else +#endif /* FT_CONFIG_OPTION_INCREMENTAL */ + { + CFF_Font cff = (CFF_Font)(face->extra.data); - bchar_index = cff_lookup_glyph_by_stdcharcode( cff, bchar ); - achar_index = cff_lookup_glyph_by_stdcharcode( cff, achar ); + bchar_index = cff_lookup_glyph_by_stdcharcode( cff, bchar ); + achar_index = cff_lookup_glyph_by_stdcharcode( cff, achar ); + } if ( bchar_index < 0 || achar_index < 0 ) { @@ -699,7 +702,8 @@ &charstring, &charstring_len ); if ( !error ) { - error = cff_decoder_parse_charstrings( decoder, charstring, charstring_len ); + error = cff_decoder_parse_charstrings( decoder, charstring, + charstring_len ); if ( error ) goto Exit; @@ -2312,7 +2316,7 @@ #ifdef FT_CONFIG_OPTION_INCREMENTAL - /* Control data and length may not be available for incremental */ + /* Control data and length may not be available for incremental */ /* fonts. */ if ( face->root.internal->incremental_interface ) { @@ -2326,13 +2330,11 @@ /* See how charstring loads at cff_index_access_element() in */ /* cffload.c. */ { - CFF_IndexRec csindex = cff->charstrings_index; - - - glyph->root.control_data = - csindex.bytes + csindex.offsets[glyph_index] - 1; - glyph->root.control_len = - charstring_len; + CFF_IndexRec csindex = cff->charstrings_index; + glyph->root.control_data = + csindex.bytes + csindex.offsets[glyph_index] - 1; + glyph->root.control_len = + charstring_len; } } diff --git a/src/cff/cffload.c b/src/cff/cffload.c index be40d0ed9..896df2d13 100644 --- a/src/cff/cffload.c +++ b/src/cff/cffload.c @@ -2027,8 +2027,7 @@ FT_LOCAL_DEF( FT_Error ) cff_font_load( FT_Stream stream, FT_Int face_index, - CFF_Font font, - CFF_Face face ) + CFF_Font font ) { static const FT_Frame_Field cff_header_fields[] = { @@ -2048,11 +2047,6 @@ FT_ULong base_offset; CFF_FontRecDict dict; -#ifndef FT_CONFIG_OPTION_INCREMENTAL - FT_UNUSED( face ); -#endif - - FT_ZERO( font ); font->stream = stream; @@ -2164,27 +2158,21 @@ else font->num_subfonts = 0; -#ifdef FT_CONFIG_OPTION_INCREMENTAL - /* Incremental fonts don't need character recipes. */ - if ( !face->root.internal->incremental_interface ) -#endif + /* read the charstrings index now */ + if ( dict->charstrings_offset == 0 ) { - /* read the charstrings index now */ - if ( dict->charstrings_offset == 0 ) - { - FT_ERROR(( "cff_font_load: no charstrings offset!\n" )); - error = CFF_Err_Unknown_File_Format; - goto Exit; - } - - if ( FT_STREAM_SEEK( base_offset + dict->charstrings_offset ) ) - goto Exit; - - error = cff_new_index( &font->charstrings_index, stream, 0 ); - if ( error ) - goto Exit; + FT_ERROR(( "cff_font_load: no charstrings offset!\n" )); + error = CFF_Err_Unknown_File_Format; + goto Exit; } + if ( FT_STREAM_SEEK( base_offset + dict->charstrings_offset ) ) + goto Exit; + + error = cff_new_index( &font->charstrings_index, stream, 0 ); + if ( error ) + goto Exit; + /* explicit the global subrs */ font->num_global_subrs = font->global_subrs_index.count; font->num_glyphs = font->charstrings_index.count; @@ -2199,7 +2187,7 @@ if ( font->num_glyphs > 0 ) { error = cff_charset_load( &font->charset, font->num_glyphs, stream, - base_offset, dict->charset_offset ); + base_offset, dict->charset_offset ); if ( error ) goto Exit; diff --git a/src/cff/cffload.h b/src/cff/cffload.h index 3051a2502..4cadfe6bb 100644 --- a/src/cff/cffload.h +++ b/src/cff/cffload.h @@ -55,8 +55,7 @@ FT_BEGIN_HEADER FT_LOCAL( FT_Error ) cff_font_load( FT_Stream stream, FT_Int face_index, - CFF_Font font, - CFF_Face face ); + CFF_Font font ); FT_LOCAL( void ) cff_font_done( CFF_Font font ); diff --git a/src/cff/cffobjs.c b/src/cff/cffobjs.c index 3dead514a..a1b6166c3 100644 --- a/src/cff/cffobjs.c +++ b/src/cff/cffobjs.c @@ -342,7 +342,7 @@ goto Exit; face->extra.data = cff; - error = cff_font_load( stream, face_index, cff, face ); + error = cff_font_load( stream, face_index, cff ); if ( error ) goto Exit;