summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/hb-ot-cmap-table.hh1
-rw-r--r--src/hb-ot-face.hh22
-rw-r--r--src/hb-ot-layout-gpos-table.hh2
-rw-r--r--src/hb-ot-layout-gsub-table.hh2
-rw-r--r--src/hb-ot-layout-gsubgpos.hh31
-rw-r--r--src/hb-ot-layout.hh18
6 files changed, 51 insertions, 25 deletions
diff --git a/src/hb-ot-cmap-table.hh b/src/hb-ot-cmap-table.hh
index cdf67f1e..c357714e 100644
--- a/src/hb-ot-cmap-table.hh
+++ b/src/hb-ot-cmap-table.hh
@@ -1018,7 +1018,6 @@ struct cmap
{
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);
const cmap *table = this->blob->as<cmap> ();
const CmapSubtableFormat14 *subtable_uvs = nullptr;
diff --git a/src/hb-ot-face.hh b/src/hb-ot-face.hh
index bbbc6e2c..1466f11b 100644
--- a/src/hb-ot-face.hh
+++ b/src/hb-ot-face.hh
@@ -32,7 +32,6 @@
#include "hb.hh"
#include "hb-machinery.hh"
-#include "hb-set-digest.hh"
#include "hb-ot-cmap-table.hh"
#include "hb-ot-glyf-table.hh"
@@ -46,27 +45,6 @@
* 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*.
* This is as good as any place. */
#define HB_OT_LAYOUT_TABLES \
diff --git a/src/hb-ot-layout-gpos-table.hh b/src/hb-ot-layout-gpos-table.hh
index 66767dfd..e1a40506 100644
--- a/src/hb-ot-layout-gpos-table.hh
+++ b/src/hb-ot-layout-gpos-table.hh
@@ -1522,6 +1522,8 @@ struct GPOS : GSUBGPOS
const OffsetTo<PosLookupList> &list = CastR<OffsetTo<PosLookupList> > (lookupList);
return_trace (list.sanitize (c, this));
}
+
+ typedef GSUBGPOS::accelerator_t<GPOS> accelerator_t;
};
diff --git a/src/hb-ot-layout-gsub-table.hh b/src/hb-ot-layout-gsub-table.hh
index d2c1fb9a..59e8a43f 100644
--- a/src/hb-ot-layout-gsub-table.hh
+++ b/src/hb-ot-layout-gsub-table.hh
@@ -1317,6 +1317,8 @@ struct GSUB : GSUBGPOS
const OffsetTo<SubstLookupList> &list = CastR<OffsetTo<SubstLookupList> > (lookupList);
return_trace (list.sanitize (c, this));
}
+
+ typedef GSUBGPOS::accelerator_t<GSUB> accelerator_t;
};
diff --git a/src/hb-ot-layout-gsubgpos.hh b/src/hb-ot-layout-gsubgpos.hh
index d21c3dea..44b595ae 100644
--- a/src/hb-ot-layout-gsubgpos.hh
+++ b/src/hb-ot-layout-gsubgpos.hh
@@ -988,7 +988,6 @@ struct LookupRecord
DEFINE_SIZE_STATIC (4);
};
-
template <typename context_t>
static inline void recurse_lookups (context_t *c,
unsigned int lookupCount,
@@ -2382,6 +2381,36 @@ struct GSUBGPOS
(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:
FixedVersion<>version; /* Version of the GSUB/GPOS table--initially set
* to 0x00010000u */
diff --git a/src/hb-ot-layout.hh b/src/hb-ot-layout.hh
index fcc0998f..02c8c7b2 100644
--- a/src/hb-ot-layout.hh
+++ b/src/hb-ot-layout.hh
@@ -34,6 +34,7 @@
#include "hb-font.hh"
#include "hb-buffer.hh"
#include "hb-open-type.hh"
+#include "hb-set-digest.hh"
/* 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);
-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 {
struct hb_ot_apply_context_t;