[ot] More shuffling
Misc. table loading now properly automated.
This commit is contained in:
parent
52fbd23d86
commit
f73d2775cf
|
@ -121,25 +121,6 @@ hb_ot_layout_position_finish_offsets (hb_font_t *font,
|
|||
* hb_ot_layout_t
|
||||
*/
|
||||
|
||||
namespace OT {
|
||||
struct BASE;
|
||||
struct COLR;
|
||||
struct CPAL;
|
||||
struct GDEF;
|
||||
struct GSUB;
|
||||
struct GPOS;
|
||||
struct MATH;
|
||||
struct fvar;
|
||||
struct avar;
|
||||
}
|
||||
|
||||
namespace AAT {
|
||||
struct ankr;
|
||||
struct kerx;
|
||||
struct morx;
|
||||
struct trak;
|
||||
}
|
||||
|
||||
struct hb_ot_layout_lookup_accelerator_t
|
||||
{
|
||||
template <typename TLookup>
|
||||
|
@ -161,6 +142,32 @@ struct hb_ot_layout_lookup_accelerator_t
|
|||
hb_set_digest_t digest;
|
||||
};
|
||||
|
||||
namespace OT {
|
||||
struct BASE;
|
||||
struct COLR;
|
||||
struct CPAL;
|
||||
struct GDEF;
|
||||
struct GSUB;
|
||||
struct GPOS;
|
||||
}
|
||||
|
||||
namespace AAT {
|
||||
struct ankr;
|
||||
struct kerx;
|
||||
struct trak;
|
||||
}
|
||||
|
||||
#define HB_OT_LAYOUT_TABLES \
|
||||
HB_OT_LAYOUT_TABLE(OT, MATH) \
|
||||
HB_OT_LAYOUT_TABLE(OT, fvar) \
|
||||
HB_OT_LAYOUT_TABLE(OT, avar) \
|
||||
HB_OT_LAYOUT_TABLE(AAT, morx) \
|
||||
|
||||
/* Declare tables. */
|
||||
#define HB_OT_LAYOUT_TABLE(Namespace, Type) namespace Namespace { struct Type; }
|
||||
HB_OT_LAYOUT_TABLES
|
||||
#undef HB_OT_LAYOUT_TABLE
|
||||
|
||||
struct hb_ot_layout_t
|
||||
{
|
||||
hb_blob_t *gdef_blob;
|
||||
|
@ -180,11 +187,25 @@ struct hb_ot_layout_t
|
|||
/* Various non-shaping tables. */
|
||||
struct tables_t
|
||||
{
|
||||
HB_INTERNAL void init0 (hb_face_t *face);
|
||||
HB_INTERNAL void fini (void);
|
||||
|
||||
#define HB_OT_LAYOUT_TABLE_ORDER(Namespace, Type) \
|
||||
HB_PASTE (TABLE_ORDER_, HB_PASTE (Namespace, HB_PASTE (_, Type)))
|
||||
enum order_t
|
||||
{
|
||||
TABLE_ORDER_ZERO,
|
||||
#define HB_OT_LAYOUT_TABLE(Namespace, Type) \
|
||||
HB_OT_LAYOUT_TABLE_ORDER (Namespace, Type),
|
||||
HB_OT_LAYOUT_TABLES
|
||||
#undef HB_OT_LAYOUT_TABLE
|
||||
};
|
||||
|
||||
hb_face_t *face; /* MUST be JUST before the lazy loaders. */
|
||||
hb_table_lazy_loader_t<1, struct OT::MATH> math;
|
||||
hb_table_lazy_loader_t<2, struct OT::fvar> fvar;
|
||||
hb_table_lazy_loader_t<3, struct OT::avar> avar;
|
||||
hb_table_lazy_loader_t<4, struct AAT::morx> morx;
|
||||
#define HB_OT_LAYOUT_TABLE(Namespace, Type) \
|
||||
hb_table_lazy_loader_t<HB_OT_LAYOUT_TABLE_ORDER (Namespace, Type), struct Namespace::Type> Type;
|
||||
HB_OT_LAYOUT_TABLES
|
||||
#undef HB_OT_LAYOUT_TABLE
|
||||
} table;
|
||||
};
|
||||
|
||||
|
|
|
@ -149,6 +149,20 @@ _hb_ot_blacklist_gdef (unsigned int gdef_len,
|
|||
return false;
|
||||
}
|
||||
|
||||
void hb_ot_layout_t::tables_t::init0 (hb_face_t *face)
|
||||
{
|
||||
this->face = face;
|
||||
#define HB_OT_LAYOUT_TABLE(Namespace, Type) Type.init0 ();
|
||||
HB_OT_LAYOUT_TABLES
|
||||
#undef HB_OT_LAYOUT_TABLE
|
||||
}
|
||||
void hb_ot_layout_t::tables_t::fini (void)
|
||||
{
|
||||
#define HB_OT_LAYOUT_TABLE(Namespace, Type) Type.fini ();
|
||||
HB_OT_LAYOUT_TABLES
|
||||
#undef HB_OT_LAYOUT_TABLE
|
||||
}
|
||||
|
||||
hb_ot_layout_t *
|
||||
_hb_ot_layout_create (hb_face_t *face)
|
||||
{
|
||||
|
@ -165,11 +179,7 @@ _hb_ot_layout_create (hb_face_t *face)
|
|||
layout->gpos_blob = hb_sanitize_context_t ().reference_table<OT::GPOS> (face);
|
||||
layout->gpos = layout->gpos_blob->as<OT::GPOS> ();
|
||||
|
||||
layout->table.face = face;
|
||||
layout->table.math.init0 ();
|
||||
layout->table.fvar.init0 ();
|
||||
layout->table.avar.init0 ();
|
||||
layout->table.morx.init0 ();
|
||||
layout->table.init0 (face);
|
||||
|
||||
if (_hb_ot_blacklist_gdef (layout->gdef_blob->length,
|
||||
layout->gsub_blob->length,
|
||||
|
@ -214,10 +224,7 @@ _hb_ot_layout_destroy (hb_ot_layout_t *layout)
|
|||
hb_blob_destroy (layout->gsub_blob);
|
||||
hb_blob_destroy (layout->gpos_blob);
|
||||
|
||||
layout->table.math.fini ();
|
||||
layout->table.fvar.fini ();
|
||||
layout->table.avar.fini ();
|
||||
layout->table.morx.fini ();
|
||||
layout->table.fini ();
|
||||
|
||||
free (layout);
|
||||
}
|
||||
|
|
|
@ -34,7 +34,7 @@ _get_math (hb_face_t *face)
|
|||
{
|
||||
if (unlikely (!hb_ot_shaper_face_data_ensure (face))) return Null(OT::MATH);
|
||||
hb_ot_layout_t * layout = hb_ot_layout_from_face (face);
|
||||
return *(layout->table.math.get ());
|
||||
return *(layout->table.MATH.get ());
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
Loading…
Reference in New Issue