29 #ifndef HB_OT_LAYOUT_GSUB_TABLE_HH
30 #define HB_OT_LAYOUT_GSUB_TABLE_HH
36 using Layout::GSUB::SubstLookup;
37 using Layout::GSUB::ExtensionSubst;
42 #ifndef HB_NO_OT_LAYOUT
47 template <
typename context_t>
50 const SubstLookup &
l =
c->face->table.GSUB.get_relaxed ()->table->get_lookup (lookup_index);
51 return l.dispatch (
c);
56 const SubstLookup &
l =
c->face->table.GSUB.get_relaxed ()->table->get_lookup (lookup_index);
57 if (
l.may_have_non_1to1 ())
59 return l.dispatch (
c);
64 const SubstLookup &
l =
c->face->table.GSUB.get_relaxed ()->table->get_lookup (this_index);
65 return l.closure_lookups (
c, this_index);
70 const SubstLookup &
l =
c->face->table.GSUB.get_relaxed ()->table->get_lookup (lookup_index);
71 unsigned int saved_lookup_props =
c->lookup_props;
72 unsigned int saved_lookup_index =
c->lookup_index;
73 c->set_lookup_index (lookup_index);
74 c->set_lookup_props (
l.get_props ());
75 bool ret =
l.dispatch (
c);
76 c->set_lookup_index (saved_lookup_index);
77 c->set_lookup_props (saved_lookup_props);
void hb_set_add_range(hb_set_t *set, hb_codepoint_t first, hb_codepoint_t last)
unsigned int get_type() const
static hb_closure_context_t::return_t closure_glyphs_recurse_func(hb_closure_context_t *c, unsigned lookup_index, hb_set_t *covered_seq_indices, unsigned seq_index, unsigned end_index)
static context_t::return_t dispatch_recurse_func(context_t *c, unsigned int lookup_index)
static bool lookup_type_is_reverse(unsigned int lookup_type)
static HB_INTERNAL hb_closure_lookups_context_t::return_t dispatch_closure_lookups_recurse_func(hb_closure_lookups_context_t *c, unsigned lookup_index)
static bool apply_recurse_func(hb_ot_apply_context_t *c, unsigned int lookup_index)