diff --git a/src/hb-ot-layout-gsubgpos-private.hh b/src/hb-ot-layout-gsubgpos-private.hh index 98d4e0a49..06049ecac 100644 --- a/src/hb-ot-layout-gsubgpos-private.hh +++ b/src/hb-ot-layout-gsubgpos-private.hh @@ -110,6 +110,7 @@ struct hb_apply_context_t unsigned int lookup_props; unsigned int property; /* propety of first glyph */ unsigned int debug_depth; + bool has_glyph_classes; hb_apply_context_t (hb_font_t *font_, @@ -120,7 +121,8 @@ struct hb_apply_context_t direction (buffer_->props.direction), lookup_mask (lookup_mask_), nesting_level_left (MAX_NESTING_LEVEL), - lookup_props (0), property (0), debug_depth (0) {} + lookup_props (0), property (0), debug_depth (0), + has_glyph_classes (hb_ot_layout_has_glyph_classes (face_)) {} void set_lookup (const Lookup &l) { lookup_props = l.get_props (); @@ -229,25 +231,29 @@ struct hb_apply_context_t return _hb_ot_layout_skip_mark (face, &buffer->cur(), lookup_props, &property); } + inline void set_klass_guess (unsigned int klass_guess) const + { + buffer->cur().props_cache() = has_glyph_classes ? 0 : klass_guess; + } inline void output_glyph (hb_codepoint_t glyph_index, - unsigned int klass = 0) const + unsigned int klass_guess = 0) const { - buffer->cur().props_cache() = klass; /*XXX if has gdef? */ + set_klass_guess (klass_guess); buffer->output_glyph (glyph_index); } inline void replace_glyph (hb_codepoint_t glyph_index, - unsigned int klass = 0) const + unsigned int klass_guess = 0) const { - buffer->cur().props_cache() = klass; /*XXX if has gdef? */ + set_klass_guess (klass_guess); buffer->replace_glyph (glyph_index); } inline void replace_glyphs (unsigned int num_in, unsigned int num_out, hb_codepoint_t *glyph_data, - unsigned int klass = 0) const + unsigned int klass_guess = 0) const { - buffer->cur().props_cache() = klass; /* XXX if has gdef? */ + set_klass_guess (klass_guess); buffer->replace_glyphs (num_in, num_out, glyph_data); } };