From abb3fcac8578c4161606973e751beb7d3f05b2c2 Mon Sep 17 00:00:00 2001 From: Werner Lemberg Date: Fri, 25 Apr 2014 22:13:32 +0200 Subject: [PATCH] * src/autofit/hbshim.c: Partially revert commit from 2014-04-17. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Using input glyph coverage data is simply wrong. Problem reported by Nikolaus Waxweiler and Mantas Mikulėnas . --- ChangeLog | 9 +++++++++ src/autofit/hbshim.c | 39 ++++++++++++++++----------------------- 2 files changed, 25 insertions(+), 23 deletions(-) diff --git a/ChangeLog b/ChangeLog index 7be682099..c9f93b207 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,12 @@ +2014-04-25 Werner Lemberg + + * src/autofit/hbshim.c: Partially revert commit from 2014-04-17. + + Using input glyph coverage data is simply wrong. + + Problem reported by Nikolaus Waxweiler and + Mantas Mikulėnas . + 2014-04-23 Werner Lemberg * src/raster/ftraster.c (Vertical_Sweep_Span): Use drop-out mode. diff --git a/src/autofit/hbshim.c b/src/autofit/hbshim.c index 431360e19..cf375a0e3 100644 --- a/src/autofit/hbshim.c +++ b/src/autofit/hbshim.c @@ -102,12 +102,10 @@ { hb_face_t* face; - hb_set_t* gsub_lookups; /* GSUB lookups for a given script */ - hb_set_t* gsub_glyphs_in; /* glyphs covered by GSUB lookups */ - hb_set_t* gsub_glyphs_out; - - hb_set_t* gpos_lookups; /* GPOS lookups for a given script */ - hb_set_t* gpos_glyphs; /* glyphs covered by GPOS lookups */ + hb_set_t* gsub_lookups; /* GSUB lookups for a given script */ + hb_set_t* gsub_glyphs; /* glyphs covered by GSUB lookups */ + hb_set_t* gpos_lookups; /* GPOS lookups for a given script */ + hb_set_t* gpos_glyphs; /* glyphs covered by GPOS lookups */ hb_script_t script; const hb_tag_t* coverage_tags; @@ -127,11 +125,10 @@ face = hb_font_get_face( globals->hb_font ); - gsub_lookups = hb_set_create(); - gsub_glyphs_in = hb_set_create(); - gsub_glyphs_out = hb_set_create(); - gpos_lookups = hb_set_create(); - gpos_glyphs = hb_set_create(); + gsub_lookups = hb_set_create(); + gsub_glyphs = hb_set_create(); + gpos_lookups = hb_set_create(); + gpos_glyphs = hb_set_create(); coverage_tags = coverages[style_class->coverage]; script = scripts[style_class->script]; @@ -202,9 +199,9 @@ HB_OT_TAG_GSUB, idx, NULL, - gsub_glyphs_in, NULL, - gsub_glyphs_out ); + NULL, + gsub_glyphs ); } #ifdef FT_DEBUG_LEVEL_TRACE @@ -292,9 +289,6 @@ } } - /* merge in and out glyphs */ - hb_set_union( gsub_glyphs_out, gsub_glyphs_in ); - /* * Various OpenType features might use the same glyphs at different * vertical positions; for example, superscript and subscript glyphs @@ -343,14 +337,14 @@ * */ if ( style_class->coverage != AF_COVERAGE_DEFAULT ) - hb_set_subtract( gsub_glyphs_out, gpos_glyphs ); + hb_set_subtract( gsub_glyphs, gpos_glyphs ); #ifdef FT_DEBUG_LEVEL_TRACE FT_TRACE4(( " glyphs without GPOS data (`*' means already assigned)" )); count = 0; #endif - for ( idx = -1; hb_set_next( gsub_glyphs_out, &idx ); ) + for ( idx = -1; hb_set_next( gsub_glyphs, &idx ); ) { #ifdef FT_DEBUG_LEVEL_TRACE if ( !( count % 10 ) ) @@ -382,11 +376,10 @@ #endif Exit: - hb_set_destroy( gsub_lookups ); - hb_set_destroy( gsub_glyphs_in ); - hb_set_destroy( gsub_glyphs_out ); - hb_set_destroy( gpos_lookups ); - hb_set_destroy( gpos_glyphs ); + hb_set_destroy( gsub_lookups ); + hb_set_destroy( gsub_glyphs ); + hb_set_destroy( gpos_lookups ); + hb_set_destroy( gpos_glyphs ); return FT_Err_Ok; }