diff --git a/src/hb-ot-layout-gpos-table.hh b/src/hb-ot-layout-gpos-table.hh index 93755da6e..92aa94cb4 100644 --- a/src/hb-ot-layout-gpos-table.hh +++ b/src/hb-ot-layout-gpos-table.hh @@ -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); diff --git a/src/hb-ot-layout-gsub-table.hh b/src/hb-ot-layout-gsub-table.hh index 4feaa233c..890e9c886 100644 --- a/src/hb-ot-layout-gsub-table.hh +++ b/src/hb-ot-layout-gsub-table.hh @@ -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); diff --git a/src/hb-ot-layout-gsubgpos-private.hh b/src/hb-ot-layout-gsubgpos-private.hh index baf0cb3ec..da31bdfe1 100644 --- a/src/hb-ot-layout-gsubgpos-private.hh +++ b/src/hb-ot-layout-gsubgpos-private.hh @@ -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_; diff --git a/src/hb-ot-layout.cc b/src/hb-ot-layout.cc index 3ea63421c..e241e3326 100644 --- a/src/hb-ot-layout.cc +++ b/src/hb-ot-layout.cc @@ -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 diff --git a/src/hb-ot-shape-complex-arabic.cc b/src/hb-ot-shape-complex-arabic.cc index fed39c67f..ba9129bca 100644 --- a/src/hb-ot-shape-complex-arabic.cc +++ b/src/hb-ot-shape-complex-arabic.cc @@ -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 */