[autofit] Fix handling of default coverages.

With this commit, the implementation of coverage handling is
completed.

* src/autofit/hbshim.c (af_get_coverage): Exit early if nothing to
do.
Reject coverages which don't contain appropriate glyphs for blue
zones.
2.6.5
Werner Lemberg 11 years ago
parent a42f918434
commit 1b5bc89754
  1. 12
      ChangeLog
  2. 51
      src/autofit/hbshim.c

@ -1,3 +1,15 @@
2014-01-03 Werner Lemberg <wl@gnu.org>
[autofit] Fix handling of default coverages.
With this commit, the implementation of coverage handling is
completed.
* src/autofit/hbshim.c (af_get_coverage): Exit early if nothing to
do.
Reject coverages which don't contain appropriate glyphs for blue
zones.
2014-01-03 Werner Lemberg <wl@gnu.org>
[autofit] Fix handling of default coverages.

@ -166,6 +166,10 @@
NULL,
coverage_tags,
gsub_lookups );
if ( hb_set_is_empty( gsub_lookups ) )
return FT_Err_Ok; /* nothing to do */
hb_ot_layout_collect_lookups( face,
HB_OT_TAG_GPOS,
script_tags,
@ -235,6 +239,53 @@
FT_TRACE4(( "\n\n" ));
#endif
/*
* We now check whether we can construct blue zones, using glyphs
* covered by the feature only. In case there is not a single zone
* (this is, not a single character is covered), we skip this coverage.
*
*/
{
AF_Blue_Stringset bss = style_class->blue_stringset;
const AF_Blue_StringRec* bs = &af_blue_stringsets[bss];
FT_Bool found = 0;
for ( ; bs->string != AF_BLUE_STRING_MAX; bs++ )
{
const char* p = &af_blue_strings[bs->string];
while ( *p )
{
hb_codepoint_t ch;
GET_UTF8_CHAR( ch, p );
for ( idx = -1; hb_set_next( gsub_lookups, &idx ); )
{
hb_codepoint_t gidx = FT_Get_Char_Index( globals->face, ch );
if ( hb_ot_layout_lookup_would_substitute( face, idx,
&gidx, 1, 1 ) )
{
found = 1;
break;
}
}
}
}
if ( !found )
{
FT_TRACE4(( " no blue characters found; style skipped\n" ));
return FT_Err_Ok;
}
}
/*
* Various OpenType features might use the same glyphs at different
* vertical positions; for example, superscript and subscript glyphs

Loading…
Cancel
Save