| #ifndef OT_LAYOUT_GPOS_POSLOOKUP_HH |
| #define OT_LAYOUT_GPOS_POSLOOKUP_HH |
| |
| #include "PosLookupSubTable.hh" |
| #include "../../../hb-ot-layout-common.hh" |
| |
| namespace OT { |
| namespace Layout { |
| namespace GPOS_impl { |
| |
| struct PosLookup : Lookup |
| { |
| using SubTable = PosLookupSubTable; |
| |
| const SubTable& get_subtable (unsigned int i) const |
| { return Lookup::get_subtable<SubTable> (i); } |
| |
| bool is_reverse () const |
| { |
| return false; |
| } |
| |
| bool apply (hb_ot_apply_context_t *c) const |
| { |
| TRACE_APPLY (this); |
| return_trace (dispatch (c)); |
| } |
| |
| bool intersects (const hb_set_t *glyphs) const |
| { |
| hb_intersects_context_t c (glyphs); |
| return dispatch (&c); |
| } |
| |
| hb_collect_glyphs_context_t::return_t collect_glyphs (hb_collect_glyphs_context_t *c) const |
| { return dispatch (c); } |
| |
| hb_closure_lookups_context_t::return_t closure_lookups (hb_closure_lookups_context_t *c, unsigned this_index) const |
| { |
| if (c->is_lookup_visited (this_index)) |
| return hb_closure_lookups_context_t::default_return_value (); |
| |
| c->set_lookup_visited (this_index); |
| if (!intersects (c->glyphs)) |
| { |
| c->set_lookup_inactive (this_index); |
| return hb_closure_lookups_context_t::default_return_value (); |
| } |
| |
| hb_closure_lookups_context_t::return_t ret = dispatch (c); |
| return ret; |
| } |
| |
| template <typename set_t> |
| void collect_coverage (set_t *glyphs) const |
| { |
| hb_collect_coverage_context_t<set_t> c (glyphs); |
| dispatch (&c); |
| } |
| |
| template <typename context_t> |
| static typename context_t::return_t dispatch_recurse_func (context_t *c, unsigned int lookup_index); |
| |
| template <typename context_t, typename ...Ts> |
| typename context_t::return_t dispatch (context_t *c, Ts&&... ds) const |
| { return Lookup::dispatch<SubTable> (c, std::forward<Ts> (ds)...); } |
| |
| bool subset (hb_subset_context_t *c) const |
| { return Lookup::subset<SubTable> (c); } |
| |
| bool sanitize (hb_sanitize_context_t *c) const |
| { return Lookup::sanitize<SubTable> (c); } |
| }; |
| |
| } |
| } |
| } |
| |
| #endif /* OT_LAYOUT_GPOS_POSLOOKUP_HH */ |