Refactor
diff --git a/src/hb-ot-layout-gpos-table.hh b/src/hb-ot-layout-gpos-table.hh
index 93755da..92aa94c 100644
--- a/src/hb-ot-layout-gpos-table.hh
+++ b/src/hb-ot-layout-gpos-table.hh
@@ -1531,7 +1531,7 @@
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 @@
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 @@
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);
diff --git a/src/hb-ot-layout-gsub-table.hh b/src/hb-ot-layout-gsub-table.hh
index 4feaa23..890e9c8 100644
--- a/src/hb-ot-layout-gsub-table.hh
+++ b/src/hb-ot-layout-gsub-table.hh
@@ -1208,10 +1208,10 @@
}
}
- 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 @@
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 @@
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 @@
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 @@
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);
diff --git a/src/hb-ot-layout-gsubgpos-private.hh b/src/hb-ot-layout-gsubgpos-private.hh
index baf0cb3..da31bdf 100644
--- a/src/hb-ot-layout-gsubgpos-private.hh
+++ b/src/hb-ot-layout-gsubgpos-private.hh
@@ -79,20 +79,16 @@
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 @@
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_;
diff --git a/src/hb-ot-layout.cc b/src/hb-ot-layout.cc
index 3ea6342..e241e33 100644
--- a/src/hb-ot-layout.cc
+++ b/src/hb-ot-layout.cc
@@ -417,8 +417,11 @@
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_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_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
diff --git a/src/hb-ot-shape-complex-arabic.cc b/src/hb-ot-shape-complex-arabic.cc
index fed39c6..ba9129b 100644
--- a/src/hb-ot-shape-complex-arabic.cc
+++ b/src/hb-ot-shape-complex-arabic.cc
@@ -246,9 +246,7 @@
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 */