80 lines
2.0 KiB
C++
80 lines
2.0 KiB
C++
#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 */
|