diff --git a/src/hb-ot-map-private.hh b/src/hb-ot-map-private.hh index 710cc0af4..5675d37a7 100644 --- a/src/hb-ot-map-private.hh +++ b/src/hb-ot-map-private.hh @@ -125,6 +125,9 @@ struct hb_ot_map_t void *face_or_font, hb_buffer_t *buffer) const; + HB_INTERNAL void substitute_closure (hb_face_t *face, + hb_glyph_map_t *glyphs) const; + hb_mask_t global_mask; hb_tag_t chosen_script[2]; diff --git a/src/hb-ot-map.cc b/src/hb-ot-map.cc index a54e306e8..a0efe900b 100644 --- a/src/hb-ot-map.cc +++ b/src/hb-ot-map.cc @@ -95,6 +95,21 @@ void hb_ot_map_t::apply (unsigned int table_index, apply_lookup_func (face_or_font, buffer, lookups[table_index][i].index, lookups[table_index][i].mask); } +void hb_ot_map_t::substitute_closure (hb_face_t *face, + hb_glyph_map_t *glyphs) const +{ + unsigned int table_index = 0; + unsigned int i = 0; + + for (unsigned int pause_index = 0; pause_index < pauses[table_index].len; pause_index++) { + const pause_map_t *pause = &pauses[table_index][pause_index]; + for (; i < pause->num_lookups; i++) + hb_ot_layout_substitute_closure_lookup (face, glyphs, lookups[table_index][i].index); + } + + for (; i < lookups[table_index].len; i++) + hb_ot_layout_substitute_closure_lookup (face, glyphs, lookups[table_index][i].index); +} void hb_ot_map_builder_t::add_pause (unsigned int table_index, hb_ot_map_t::pause_func_t pause_func, void *user_data) {