[subset] Map glyphs during SingleSubst subsetting

Ha!
pull/1477/head
Behdad Esfahbod 6 years ago
parent 41d1a1c10f
commit 1aea869446
  1. 10
      src/hb-ot-layout-gsub-table.hh

@ -110,6 +110,7 @@ struct SingleSubstFormat1
inline bool subset (hb_subset_context_t *c) const inline bool subset (hb_subset_context_t *c) const
{ {
TRACE_SUBSET (this); TRACE_SUBSET (this);
const hb_map_t &glyph_map = *c->plan->glyph_map;
hb_vector_t<GlyphID> from; hb_vector_t<GlyphID> from;
hb_vector_t<GlyphID> to; hb_vector_t<GlyphID> to;
hb_codepoint_t delta = deltaGlyphID; hb_codepoint_t delta = deltaGlyphID;
@ -117,8 +118,8 @@ struct SingleSubstFormat1
{ {
if (!c->plan->glyphset->has (iter.get_glyph ())) if (!c->plan->glyphset->has (iter.get_glyph ()))
continue; continue;
from.push ()->set (iter.get_glyph ()); from.push ()->set (glyph_map[iter.get_glyph ()]);
to.push ()->set ((iter.get_glyph () + delta) & 0xFFFF); to.push ()->set (glyph_map[(iter.get_glyph () + delta) & 0xFFFF]);
} }
c->serializer->err (from.in_error () || to.in_error ()); c->serializer->err (from.in_error () || to.in_error ());
@ -216,14 +217,15 @@ struct SingleSubstFormat2
inline bool subset (hb_subset_context_t *c) const inline bool subset (hb_subset_context_t *c) const
{ {
TRACE_SUBSET (this); TRACE_SUBSET (this);
const hb_map_t &glyph_map = *c->plan->glyph_map;
hb_vector_t<GlyphID> from; hb_vector_t<GlyphID> from;
hb_vector_t<GlyphID> to; hb_vector_t<GlyphID> to;
for (Coverage::Iter iter (this+coverage); iter.more (); iter.next ()) for (Coverage::Iter iter (this+coverage); iter.more (); iter.next ())
{ {
if (!c->plan->glyphset->has (iter.get_glyph ())) if (!c->plan->glyphset->has (iter.get_glyph ()))
continue; continue;
from.push ()->set (iter.get_glyph ()); from.push ()->set (glyph_map[iter.get_glyph ()]);
to.push ()->set (substitute[iter.get_coverage ()]); to.push ()->set (glyph_map[substitute[iter.get_coverage ()]]);
} }
c->serializer->err (from.in_error () || to.in_error ()); c->serializer->err (from.in_error () || to.in_error ());

Loading…
Cancel
Save