* src/autofit/hbshim.c: Partially revert commit from 2014-04-17.

Using input glyph coverage data is simply wrong.

Problem reported by Nikolaus Waxweiler <madigens@gmail.com> and
Mantas Mikulėnas <grawity@gmail.com>.
This commit is contained in:
Werner Lemberg 2014-04-25 22:13:32 +02:00
parent 426f0e0453
commit abb3fcac85
2 changed files with 25 additions and 23 deletions

View File

@ -1,3 +1,12 @@
2014-04-25 Werner Lemberg <wl@gnu.org>
* src/autofit/hbshim.c: Partially revert commit from 2014-04-17.
Using input glyph coverage data is simply wrong.
Problem reported by Nikolaus Waxweiler <madigens@gmail.com> and
Mantas Mikulėnas <grawity@gmail.com>.
2014-04-23 Werner Lemberg <wl@gnu.org> 2014-04-23 Werner Lemberg <wl@gnu.org>
* src/raster/ftraster.c (Vertical_Sweep_Span): Use drop-out mode. * src/raster/ftraster.c (Vertical_Sweep_Span): Use drop-out mode.

View File

@ -103,9 +103,7 @@
hb_face_t* face; hb_face_t* face;
hb_set_t* gsub_lookups; /* GSUB lookups for a given script */ 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; /* 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_lookups; /* GPOS lookups for a given script */
hb_set_t* gpos_glyphs; /* glyphs covered by GPOS lookups */ hb_set_t* gpos_glyphs; /* glyphs covered by GPOS lookups */
@ -128,8 +126,7 @@
face = hb_font_get_face( globals->hb_font ); face = hb_font_get_face( globals->hb_font );
gsub_lookups = hb_set_create(); gsub_lookups = hb_set_create();
gsub_glyphs_in = hb_set_create(); gsub_glyphs = hb_set_create();
gsub_glyphs_out = hb_set_create();
gpos_lookups = hb_set_create(); gpos_lookups = hb_set_create();
gpos_glyphs = hb_set_create(); gpos_glyphs = hb_set_create();
@ -202,9 +199,9 @@
HB_OT_TAG_GSUB, HB_OT_TAG_GSUB,
idx, idx,
NULL, NULL,
gsub_glyphs_in,
NULL, NULL,
gsub_glyphs_out ); NULL,
gsub_glyphs );
} }
#ifdef FT_DEBUG_LEVEL_TRACE #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 * Various OpenType features might use the same glyphs at different
* vertical positions; for example, superscript and subscript glyphs * vertical positions; for example, superscript and subscript glyphs
@ -343,14 +337,14 @@
* *
*/ */
if ( style_class->coverage != AF_COVERAGE_DEFAULT ) 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 #ifdef FT_DEBUG_LEVEL_TRACE
FT_TRACE4(( " glyphs without GPOS data (`*' means already assigned)" )); FT_TRACE4(( " glyphs without GPOS data (`*' means already assigned)" ));
count = 0; count = 0;
#endif #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 #ifdef FT_DEBUG_LEVEL_TRACE
if ( !( count % 10 ) ) if ( !( count % 10 ) )
@ -383,8 +377,7 @@
Exit: Exit:
hb_set_destroy( gsub_lookups ); hb_set_destroy( gsub_lookups );
hb_set_destroy( gsub_glyphs_in ); hb_set_destroy( gsub_glyphs );
hb_set_destroy( gsub_glyphs_out );
hb_set_destroy( gpos_lookups ); hb_set_destroy( gpos_lookups );
hb_set_destroy( gpos_glyphs ); hb_set_destroy( gpos_glyphs );