Refactor
authorBehdad Esfahbod <behdad@behdad.org>
Tue, 4 Sep 2012 19:15:19 +0000 (15:15 -0400)
committerBehdad Esfahbod <behdad@behdad.org>
Tue, 4 Sep 2012 19:15:19 +0000 (15:15 -0400)
src/hb-ot-layout-gpos-table.hh
src/hb-ot-layout-gsub-table.hh
src/hb-ot-layout-gsubgpos-private.hh
src/hb-ot-layout.cc
src/hb-ot-shape-complex-arabic.cc

index 93755da..92aa94c 100644 (file)
@@ -1531,7 +1531,7 @@ struct PosLookup : Lookup
     return false;
   }
 
-  inline bool apply_string (hb_apply_context_t *c) const
+  inline bool apply_string (hb_apply_context_t *c, const hb_set_digest_t *digest) const
   {
     bool ret = false;
 
@@ -1545,7 +1545,7 @@ struct PosLookup : Lookup
     while (c->buffer->idx < c->buffer->len)
     {
       if ((c->buffer->cur().mask & c->lookup_mask) &&
-         c->digest.may_have (c->buffer->cur().codepoint) &&
+         digest->may_have (c->buffer->cur().codepoint) &&
          apply_once (c))
        ret = true;
       else
@@ -1580,9 +1580,6 @@ struct GPOS : GSUBGPOS
   inline void add_coverage (set_t *glyphs, unsigned int lookup_index) const
   { get_lookup (lookup_index).add_coverage (glyphs); }
 
-  inline bool position_lookup (hb_apply_context_t *c, unsigned int lookup_index) const
-  { return get_lookup (lookup_index).apply_string (c); }
-
   static inline void position_start (hb_font_t *font, hb_buffer_t *buffer);
   static inline void position_finish (hb_font_t *font, hb_buffer_t *buffer, hb_bool_t zero_width_attahced_marks);
 
index 4feaa23..890e9c8 100644 (file)
@@ -1208,10 +1208,10 @@ struct SubstLookup : Lookup
     }
   }
 
-  inline bool would_apply (hb_would_apply_context_t *c) const
+  inline bool would_apply (hb_would_apply_context_t *c, const hb_set_digest_t *digest) const
   {
     if (unlikely (!c->len)) return false;
-    if (!c->digest.may_have (c->glyphs[0])) return false;
+    if (!digest->may_have (c->glyphs[0])) return false;
     unsigned int lookup_type = get_type ();
     unsigned int count = get_subtable_count ();
     for (unsigned int i = 0; i < count; i++)
@@ -1235,7 +1235,7 @@ struct SubstLookup : Lookup
     return false;
   }
 
-  inline bool apply_string (hb_apply_context_t *c) const
+  inline bool apply_string (hb_apply_context_t *c, const hb_set_digest_t *digest) const
   {
     bool ret = false;
 
@@ -1253,7 +1253,7 @@ struct SubstLookup : Lookup
        while (c->buffer->idx < c->buffer->len)
        {
          if ((c->buffer->cur().mask & c->lookup_mask) &&
-             c->digest.may_have (c->buffer->cur().codepoint) &&
+             digest->may_have (c->buffer->cur().codepoint) &&
              apply_once (c))
            ret = true;
          else
@@ -1269,7 +1269,7 @@ struct SubstLookup : Lookup
        do
        {
          if ((c->buffer->cur().mask & c->lookup_mask) &&
-             c->digest.may_have (c->buffer->cur().codepoint) &&
+             digest->may_have (c->buffer->cur().codepoint) &&
              apply_once (c))
            ret = true;
          else
@@ -1322,12 +1322,6 @@ struct GSUB : GSUBGPOS
   inline void add_coverage (set_t *glyphs, unsigned int lookup_index) const
   { get_lookup (lookup_index).add_coverage (glyphs); }
 
-  inline bool would_substitute_lookup (hb_would_apply_context_t *c, unsigned int lookup_index) const
-  { return get_lookup (lookup_index).would_apply (c); }
-
-  inline bool substitute_lookup (hb_apply_context_t *c, unsigned int lookup_index) const
-  { return get_lookup (lookup_index).apply_string (c); }
-
   static inline void substitute_start (hb_font_t *font, hb_buffer_t *buffer);
   static inline void substitute_finish (hb_font_t *font, hb_buffer_t *buffer);
 
index baf0cb3..da31bdf 100644 (file)
@@ -79,20 +79,16 @@ struct hb_would_apply_context_t
   const hb_codepoint_t *glyphs;
   unsigned int len;
   bool zero_context;
-  const hb_set_digest_t digest;
   unsigned int debug_depth;
 
   hb_would_apply_context_t (hb_face_t *face_,
                            const hb_codepoint_t *glyphs_,
                            unsigned int len_,
-                           bool zero_context_,
-                           const hb_set_digest_t &digest_
-                           ) :
+                           bool zero_context_) :
                              face (face_),
                              glyphs (glyphs_),
                              len (len_),
                              zero_context (zero_context_),
-                             digest (digest_),
                              debug_depth (0) {};
 };
 
@@ -118,21 +114,18 @@ struct hb_apply_context_t
   unsigned int debug_depth;
   const GDEF &gdef;
   bool has_glyph_classes;
-  const hb_set_digest_t digest;
 
 
   hb_apply_context_t (hb_font_t *font_,
                      hb_buffer_t *buffer_,
-                     hb_mask_t lookup_mask_,
-                     const hb_set_digest_t &digest_) :
+                     hb_mask_t lookup_mask_) :
                        font (font_), face (font->face), buffer (buffer_),
                        direction (buffer_->props.direction),
                        lookup_mask (lookup_mask_),
                        nesting_level_left (MAX_NESTING_LEVEL),
                        lookup_props (0), property (0), debug_depth (0),
                        gdef (*hb_ot_layout_from_face (face)->gdef),
-                       has_glyph_classes (gdef.has_glyph_classes ()),
-                       digest (digest_) {}
+                       has_glyph_classes (gdef.has_glyph_classes ()) {}
 
   void set_lookup_props (unsigned int lookup_props_) {
     lookup_props = lookup_props_;
index 3ea6342..e241e33 100644 (file)
@@ -417,8 +417,11 @@ hb_ot_layout_would_substitute_lookup_fast (hb_face_t            *face,
                                           hb_bool_t             zero_context)
 {
   if (unlikely (lookup_index >= hb_ot_layout_from_face (face)->gsub_lookup_count)) return false;
-  OT::hb_would_apply_context_t c (face, glyphs, glyphs_length, zero_context, hb_ot_layout_from_face (face)->gsub_digests[lookup_index]);
-  return hb_ot_layout_from_face (face)->gsub->would_substitute_lookup (&c, lookup_index);
+  OT::hb_would_apply_context_t c (face, glyphs, glyphs_length, zero_context);
+
+  const OT::SubstLookup& l = hb_ot_layout_from_face (face)->gsub->get_lookup (lookup_index);
+
+  return l.would_apply (&c, &hb_ot_layout_from_face (face)->gsub_digests[lookup_index]);
 }
 
 void
@@ -434,8 +437,12 @@ hb_ot_layout_substitute_lookup (hb_font_t    *font,
                                hb_mask_t     mask)
 {
   if (unlikely (lookup_index >= hb_ot_layout_from_face (font->face)->gsub_lookup_count)) return false;
-  OT::hb_apply_context_t c (font, buffer, mask, hb_ot_layout_from_face (font->face)->gsub_digests[lookup_index]);
-  return hb_ot_layout_from_face (font->face)->gsub->substitute_lookup (&c, lookup_index);
+
+  OT::hb_apply_context_t c (font, buffer, mask);
+
+  const OT::SubstLookup& l = hb_ot_layout_from_face (font->face)->gsub->get_lookup (lookup_index);
+
+  return l.apply_string (&c, &hb_ot_layout_from_face (font->face)->gsub_digests[lookup_index]);
 }
 
 void
@@ -476,8 +483,12 @@ hb_ot_layout_position_lookup (hb_font_t    *font,
                              hb_mask_t     mask)
 {
   if (unlikely (lookup_index >= hb_ot_layout_from_face (font->face)->gpos_lookup_count)) return false;
-  OT::hb_apply_context_t c (font, buffer, mask, hb_ot_layout_from_face (font->face)->gpos_digests[lookup_index]);
-  return hb_ot_layout_from_face (font->face)->gpos->position_lookup (&c, lookup_index);
+
+  OT::hb_apply_context_t c (font, buffer, mask);
+
+  const OT::PosLookup& l = hb_ot_layout_from_face (font->face)->gpos->get_lookup (lookup_index);
+
+  return l.apply_string (&c, &hb_ot_layout_from_face (font->face)->gpos_digests[lookup_index]);
 }
 
 void
index fed39c6..ba9129b 100644 (file)
@@ -246,9 +246,7 @@ arabic_fallback_shape (hb_font_t *font, hb_buffer_t *buffer)
       buffer->info[i].codepoint = shaped;
   }
 
-  hb_set_digest_t digest;
-  digest.init ();
-  OT::hb_apply_context_t c (font, buffer, 1/*global mask*/, digest);
+  OT::hb_apply_context_t c (font, buffer, 1/*global mask*/);
   c.set_lookup_props (OT::LookupFlag::IgnoreMarks);
 
   /* Mandatory ligatures */