Use Coverage digests in would_apply
authorBehdad Esfahbod <behdad@behdad.org>
Thu, 2 Aug 2012 07:51:51 +0000 (03:51 -0400)
committerBehdad Esfahbod <behdad@behdad.org>
Thu, 2 Aug 2012 07:51:51 +0000 (03:51 -0400)
src/hb-ot-layout-gsub-table.hh
src/hb-ot-layout-gsubgpos-private.hh
src/hb-ot-layout.cc

index d91f926..77ff3d9 100644 (file)
@@ -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++)
index bb43ade..15a0b0c 100644 (file)
@@ -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) {};
 };
 
index b680d9c..c8f4d69 100644 (file)
@@ -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);
 }