WIP
This commit is contained in:
parent
e6cb938065
commit
963413fc54
|
@ -1018,7 +1018,6 @@ struct cmap
|
||||||
{
|
{
|
||||||
inline void init (hb_face_t *face)
|
inline void init (hb_face_t *face)
|
||||||
{
|
{
|
||||||
/* TODO Switch to using table from face->ot.table. */
|
|
||||||
this->blob = hb_sanitize_context_t().reference_table<cmap> (face);
|
this->blob = hb_sanitize_context_t().reference_table<cmap> (face);
|
||||||
const cmap *table = this->blob->as<cmap> ();
|
const cmap *table = this->blob->as<cmap> ();
|
||||||
const CmapSubtableFormat14 *subtable_uvs = nullptr;
|
const CmapSubtableFormat14 *subtable_uvs = nullptr;
|
||||||
|
|
|
@ -32,7 +32,6 @@
|
||||||
#include "hb.hh"
|
#include "hb.hh"
|
||||||
|
|
||||||
#include "hb-machinery.hh"
|
#include "hb-machinery.hh"
|
||||||
#include "hb-set-digest.hh"
|
|
||||||
|
|
||||||
#include "hb-ot-cmap-table.hh"
|
#include "hb-ot-cmap-table.hh"
|
||||||
#include "hb-ot-glyf-table.hh"
|
#include "hb-ot-glyf-table.hh"
|
||||||
|
@ -46,27 +45,6 @@
|
||||||
* hb_ot_face_data_t
|
* hb_ot_face_data_t
|
||||||
*/
|
*/
|
||||||
|
|
||||||
struct hb_ot_layout_lookup_accelerator_t
|
|
||||||
{
|
|
||||||
template <typename TLookup>
|
|
||||||
inline void init (const TLookup &lookup)
|
|
||||||
{
|
|
||||||
digest.init ();
|
|
||||||
lookup.add_coverage (&digest);
|
|
||||||
}
|
|
||||||
|
|
||||||
inline void fini (void)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
inline bool may_have (hb_codepoint_t g) const {
|
|
||||||
return digest.may_have (g);
|
|
||||||
}
|
|
||||||
|
|
||||||
private:
|
|
||||||
hb_set_digest_t digest;
|
|
||||||
};
|
|
||||||
|
|
||||||
/* Most of these tables are NOT needed for shaping. But we need to hook them *somewhere*.
|
/* Most of these tables are NOT needed for shaping. But we need to hook them *somewhere*.
|
||||||
* This is as good as any place. */
|
* This is as good as any place. */
|
||||||
#define HB_OT_LAYOUT_TABLES \
|
#define HB_OT_LAYOUT_TABLES \
|
||||||
|
|
|
@ -1522,6 +1522,8 @@ struct GPOS : GSUBGPOS
|
||||||
const OffsetTo<PosLookupList> &list = CastR<OffsetTo<PosLookupList> > (lookupList);
|
const OffsetTo<PosLookupList> &list = CastR<OffsetTo<PosLookupList> > (lookupList);
|
||||||
return_trace (list.sanitize (c, this));
|
return_trace (list.sanitize (c, this));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
typedef GSUBGPOS::accelerator_t<GPOS> accelerator_t;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1317,6 +1317,8 @@ struct GSUB : GSUBGPOS
|
||||||
const OffsetTo<SubstLookupList> &list = CastR<OffsetTo<SubstLookupList> > (lookupList);
|
const OffsetTo<SubstLookupList> &list = CastR<OffsetTo<SubstLookupList> > (lookupList);
|
||||||
return_trace (list.sanitize (c, this));
|
return_trace (list.sanitize (c, this));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
typedef GSUBGPOS::accelerator_t<GSUB> accelerator_t;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -988,7 +988,6 @@ struct LookupRecord
|
||||||
DEFINE_SIZE_STATIC (4);
|
DEFINE_SIZE_STATIC (4);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
template <typename context_t>
|
template <typename context_t>
|
||||||
static inline void recurse_lookups (context_t *c,
|
static inline void recurse_lookups (context_t *c,
|
||||||
unsigned int lookupCount,
|
unsigned int lookupCount,
|
||||||
|
@ -2382,6 +2381,36 @@ struct GSUBGPOS
|
||||||
(version.to_int () < 0x00010001u || featureVars.sanitize (c, this)));
|
(version.to_int () < 0x00010001u || featureVars.sanitize (c, this)));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template <typename T>
|
||||||
|
struct accelerator_t
|
||||||
|
{
|
||||||
|
inline void init (hb_face_t *face)
|
||||||
|
{
|
||||||
|
this->blob = hb_sanitize_context_t().reference_table<T> (face);
|
||||||
|
const T &table = *this->blob->as<T> ();
|
||||||
|
|
||||||
|
this->lookup_count = table.get_lookup_count ();
|
||||||
|
|
||||||
|
this->accels = (hb_ot_layout_lookup_accelerator_t *) calloc (this->lookup_count, sizeof (hb_ot_layout_lookup_accelerator_t));
|
||||||
|
if (unlikely (!this->accels))
|
||||||
|
this->lookup_count = 0;
|
||||||
|
|
||||||
|
for (unsigned int i = 0; i < this->lookup_count; i++)
|
||||||
|
this->accels[i].init (table.get_lookup (i));
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void fini (void)
|
||||||
|
{
|
||||||
|
hb_blob_destroy (this->blob);
|
||||||
|
free (accels);
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
hb_blob_t *blob;
|
||||||
|
unsigned int lookup_count;
|
||||||
|
hb_ot_layout_lookup_accelerator_t *accels;
|
||||||
|
};
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
FixedVersion<>version; /* Version of the GSUB/GPOS table--initially set
|
FixedVersion<>version; /* Version of the GSUB/GPOS table--initially set
|
||||||
* to 0x00010000u */
|
* to 0x00010000u */
|
||||||
|
|
|
@ -34,6 +34,7 @@
|
||||||
#include "hb-font.hh"
|
#include "hb-font.hh"
|
||||||
#include "hb-buffer.hh"
|
#include "hb-buffer.hh"
|
||||||
#include "hb-open-type.hh"
|
#include "hb-open-type.hh"
|
||||||
|
#include "hb-set-digest.hh"
|
||||||
|
|
||||||
|
|
||||||
/* Private API corresponding to hb-ot-layout.h: */
|
/* Private API corresponding to hb-ot-layout.h: */
|
||||||
|
@ -86,7 +87,22 @@ hb_ot_layout_substitute_start (hb_font_t *font,
|
||||||
hb_buffer_t *buffer);
|
hb_buffer_t *buffer);
|
||||||
|
|
||||||
|
|
||||||
struct hb_ot_layout_lookup_accelerator_t;
|
struct hb_ot_layout_lookup_accelerator_t
|
||||||
|
{
|
||||||
|
template <typename TLookup>
|
||||||
|
inline void init (const TLookup &lookup)
|
||||||
|
{
|
||||||
|
digest.init ();
|
||||||
|
lookup.add_coverage (&digest);
|
||||||
|
}
|
||||||
|
inline void fini (void) {}
|
||||||
|
|
||||||
|
inline bool may_have (hb_codepoint_t g) const
|
||||||
|
{ return digest.may_have (g); }
|
||||||
|
|
||||||
|
private:
|
||||||
|
hb_set_digest_t digest;
|
||||||
|
};
|
||||||
|
|
||||||
namespace OT {
|
namespace OT {
|
||||||
struct hb_ot_apply_context_t;
|
struct hb_ot_apply_context_t;
|
||||||
|
|
Loading…
Reference in New Issue