80 lines
2.5 KiB
C++
80 lines
2.5 KiB
C++
#ifndef OT_LAYOUT_GPOS_POSLOOKUPSUBTABLE_HH
|
|
#define OT_LAYOUT_GPOS_POSLOOKUPSUBTABLE_HH
|
|
|
|
#include "SinglePos.hh"
|
|
#include "PairPos.hh"
|
|
#include "CursivePos.hh"
|
|
#include "MarkBasePos.hh"
|
|
#include "MarkLigPos.hh"
|
|
#include "MarkMarkPos.hh"
|
|
#include "ContextPos.hh"
|
|
#include "ChainContextPos.hh"
|
|
#include "ExtensionPos.hh"
|
|
|
|
namespace OT {
|
|
namespace Layout {
|
|
namespace GPOS_impl {
|
|
|
|
struct PosLookupSubTable
|
|
{
|
|
friend struct ::OT::Lookup;
|
|
friend struct PosLookup;
|
|
|
|
enum Type {
|
|
Single = 1,
|
|
Pair = 2,
|
|
Cursive = 3,
|
|
MarkBase = 4,
|
|
MarkLig = 5,
|
|
MarkMark = 6,
|
|
Context = 7,
|
|
ChainContext = 8,
|
|
Extension = 9
|
|
};
|
|
|
|
template <typename context_t, typename ...Ts>
|
|
typename context_t::return_t dispatch (context_t *c, unsigned int lookup_type, Ts&&... ds) const
|
|
{
|
|
TRACE_DISPATCH (this, lookup_type);
|
|
switch (lookup_type) {
|
|
case Single: return_trace (u.single.dispatch (c, std::forward<Ts> (ds)...));
|
|
case Pair: return_trace (u.pair.dispatch (c, std::forward<Ts> (ds)...));
|
|
case Cursive: return_trace (u.cursive.dispatch (c, std::forward<Ts> (ds)...));
|
|
case MarkBase: return_trace (u.markBase.dispatch (c, std::forward<Ts> (ds)...));
|
|
case MarkLig: return_trace (u.markLig.dispatch (c, std::forward<Ts> (ds)...));
|
|
case MarkMark: return_trace (u.markMark.dispatch (c, std::forward<Ts> (ds)...));
|
|
case Context: return_trace (u.context.dispatch (c, std::forward<Ts> (ds)...));
|
|
case ChainContext: return_trace (u.chainContext.dispatch (c, std::forward<Ts> (ds)...));
|
|
case Extension: return_trace (u.extension.dispatch (c, std::forward<Ts> (ds)...));
|
|
default: return_trace (c->default_return_value ());
|
|
}
|
|
}
|
|
|
|
bool intersects (const hb_set_t *glyphs, unsigned int lookup_type) const
|
|
{
|
|
hb_intersects_context_t c (glyphs);
|
|
return dispatch (&c, lookup_type);
|
|
}
|
|
|
|
protected:
|
|
union {
|
|
SinglePos single;
|
|
PairPos pair;
|
|
CursivePos cursive;
|
|
MarkBasePos markBase;
|
|
MarkLigPos markLig;
|
|
MarkMarkPos markMark;
|
|
ContextPos context;
|
|
ChainContextPos chainContext;
|
|
ExtensionPos extension;
|
|
} u;
|
|
public:
|
|
DEFINE_SIZE_MIN (0);
|
|
};
|
|
|
|
}
|
|
}
|
|
}
|
|
|
|
#endif /* HB_OT_LAYOUT_GPOS_POSLOOKUPSUBTABLE_HH */
|