From 22148b8c4af3ed296d96e969cdd47bac97b32307 Mon Sep 17 00:00:00 2001 From: Behdad Esfahbod Date: Thu, 2 Aug 2012 03:51:51 -0400 Subject: [PATCH] Use Coverage digests in would_apply --- src/hb-ot-layout-gsub-table.hh | 1 + src/hb-ot-layout-gsubgpos-private.hh | 6 +++++- src/hb-ot-layout.cc | 4 ++-- 3 files changed, 8 insertions(+), 3 deletions(-) diff --git a/src/hb-ot-layout-gsub-table.hh b/src/hb-ot-layout-gsub-table.hh index d91f92647..77ff3d982 100644 --- a/src/hb-ot-layout-gsub-table.hh +++ b/src/hb-ot-layout-gsub-table.hh @@ -1170,6 +1170,7 @@ struct SubstLookup : Lookup inline bool would_apply (hb_would_apply_context_t *c) const { + if (!c->digest.may_have (c->first)) return false; unsigned int lookup_type = get_type (); unsigned int count = get_subtable_count (); for (unsigned int i = 0; i < count; i++) diff --git a/src/hb-ot-layout-gsubgpos-private.hh b/src/hb-ot-layout-gsubgpos-private.hh index bb43ade95..15a0b0c22 100644 --- a/src/hb-ot-layout-gsubgpos-private.hh +++ b/src/hb-ot-layout-gsubgpos-private.hh @@ -77,14 +77,18 @@ struct hb_would_apply_context_t hb_face_t *face; hb_codepoint_t first; hb_codepoint_t second; + const hb_set_digest_t digest; unsigned int len; unsigned int debug_depth; hb_would_apply_context_t (hb_face_t *face_, hb_codepoint_t first_, - hb_codepoint_t second_ = -1) : + hb_codepoint_t second_, + const hb_set_digest_t *digest_ + ) : face (face_), first (first_), second (second_), len (second == (hb_codepoint_t) -1 ? 1 : 2), + digest (*digest_), debug_depth (0) {}; }; diff --git a/src/hb-ot-layout.cc b/src/hb-ot-layout.cc index b680d9cb4..c8f4d6993 100644 --- a/src/hb-ot-layout.cc +++ b/src/hb-ot-layout.cc @@ -406,7 +406,7 @@ hb_ot_layout_would_substitute_lookup (hb_face_t *face, unsigned int lookup_index) { if (unlikely (glyphs_length < 1 || glyphs_length > 2)) return false; - hb_would_apply_context_t c (face, glyphs[0], glyphs_length == 2 ? glyphs[1] : -1); + hb_would_apply_context_t c (face, glyphs[0], glyphs_length == 2 ? glyphs[1] : -1, NULL); return _get_gsub (face).would_substitute_lookup (&c, lookup_index); } @@ -417,7 +417,7 @@ hb_ot_layout_would_substitute_lookup_fast (hb_face_t *face, unsigned int lookup_index) { if (unlikely (glyphs_length < 1 || glyphs_length > 2)) return false; - hb_would_apply_context_t c (face, glyphs[0], glyphs_length == 2 ? glyphs[1] : -1); + hb_would_apply_context_t c (face, glyphs[0], glyphs_length == 2 ? glyphs[1] : -1, &hb_ot_layout_from_face (face)->gsub_digests[lookup_index]); return hb_ot_layout_from_face (face)->gsub->would_substitute_lookup (&c, lookup_index); }