[HarfBuzz] harfbuzz: Branch 'master' - 3 commits
Behdad Esfahbod
behdad at kemper.freedesktop.org
Wed Nov 28 20:06:28 UTC 2018
src/hb-aat-layout-common.hh | 44 ++++++++++++++++++++--------------------
src/hb-aat-layout-kerx-table.hh | 18 +++++++---------
2 files changed, 31 insertions(+), 31 deletions(-)
New commits:
commit a3267cf803082af157a7f2b0026af2633b14f8e3
Author: Behdad Esfahbod <behdad at behdad.org>
Date: Wed Nov 28 15:06:01 2018 -0500
[kern] Fix kern table Format2 offsetToIndex
Fixes https://github.com/harfbuzz/harfbuzz/issues/1421
diff --git a/src/hb-aat-layout-kerx-table.hh b/src/hb-aat-layout-kerx-table.hh
index 48526edf..abd577b9 100644
--- a/src/hb-aat-layout-kerx-table.hh
+++ b/src/hb-aat-layout-kerx-table.hh
@@ -392,9 +392,13 @@ struct KerxSubTableFormat2
unsigned int num_glyphs = c->sanitizer.get_num_glyphs ();
unsigned int l = (this+leftClassTable).get_class (left, num_glyphs, 0);
unsigned int r = (this+rightClassTable).get_class (right, num_glyphs, 0);
- unsigned int offset = l + r;
- const FWORD *v = &StructAtOffset<FWORD> (&(this+array), offset);
+
+ const UnsizedArrayOf<FWORD> &arrayZ = this+array;
+ unsigned int kern_idx = l + r;
+ kern_idx = Types::offsetToIndex (kern_idx, this, &arrayZ);
+ const FWORD *v = &arrayZ[kern_idx];
if (unlikely (!v->sanitize (&c->sanitizer))) return 0;
+
return kerxTupleKern (*v, header.tuple_count (), this, c);
}
commit f9a9c0fd1e561715d696c7bd840bab552d0718ee
Author: Behdad Esfahbod <behdad at behdad.org>
Date: Wed Nov 28 14:51:56 2018 -0500
[kerx] Fix ClassTable implementation for 'kern' table Format 2
diff --git a/src/hb-aat-layout-common.hh b/src/hb-aat-layout-common.hh
index 94885216..253b56fe 100644
--- a/src/hb-aat-layout-common.hh
+++ b/src/hb-aat-layout-common.hh
@@ -488,7 +488,7 @@ struct StateTable
{
typedef typename Types::HBUINT HBUINT;
typedef typename Types::HBUSHORT HBUSHORT;
- typedef typename Types::ClassType ClassType;
+ typedef typename Types::ClassTypeNarrow ClassType;
enum State
{
@@ -678,7 +678,8 @@ struct ObsoleteTypes
static const bool extended = false;
typedef HBUINT16 HBUINT;
typedef HBUINT8 HBUSHORT;
- typedef ClassTable<HBUINT8> ClassType;
+ typedef ClassTable<HBUINT8> ClassTypeNarrow;
+ typedef ClassTable<HBUINT16> ClassTypeWide;
template <typename T>
static inline unsigned int offsetToIndex (unsigned int offset,
@@ -700,7 +701,8 @@ struct ExtendedTypes
static const bool extended = true;
typedef HBUINT32 HBUINT;
typedef HBUINT16 HBUSHORT;
- typedef Lookup<HBUINT16> ClassType;
+ typedef Lookup<HBUINT16> ClassTypeNarrow;
+ typedef Lookup<HBUINT16> ClassTypeWide;
template <typename T>
static inline unsigned int offsetToIndex (unsigned int offset,
diff --git a/src/hb-aat-layout-kerx-table.hh b/src/hb-aat-layout-kerx-table.hh
index 8dc74991..48526edf 100644
--- a/src/hb-aat-layout-kerx-table.hh
+++ b/src/hb-aat-layout-kerx-table.hh
@@ -437,19 +437,13 @@ struct KerxSubTableFormat2
c->check_range (this, array)));
}
- /* Note:
- * OT kern table specifies ClassTable as having 16-bit entries, whereas
- * AAT kern table specifies them as having 8bit entries.
- * I've not seen any fonts with this format in kern table.
- * We follow AAT. */
-
protected:
KernSubTableHeader header;
HBUINT rowWidth; /* The width, in bytes, of a row in the table. */
- OffsetTo<typename Types::ClassType, HBUINT, false>
+ OffsetTo<typename Types::ClassTypeWide, HBUINT, false>
leftClassTable; /* Offset from beginning of this subtable to
* left-hand class table. */
- OffsetTo<typename Types::ClassType, HBUINT, false>
+ OffsetTo<typename Types::ClassTypeWide, HBUINT, false>
rightClassTable;/* Offset from beginning of this subtable to
* right-hand class table. */
OffsetTo<UnsizedArrayOf<FWORD>, HBUINT, false>
commit 5b4a789ca857664668ff69936574dcd09bee6065
Author: Behdad Esfahbod <behdad at behdad.org>
Date: Wed Nov 28 14:46:26 2018 -0500
[aat] Towards adding two ClassTable's
diff --git a/src/hb-aat-layout-common.hh b/src/hb-aat-layout-common.hh
index 3ee96bc9..94885216 100644
--- a/src/hb-aat-layout-common.hh
+++ b/src/hb-aat-layout-common.hh
@@ -363,6 +363,14 @@ struct Lookup
}
}
+ inline typename T::type get_class (hb_codepoint_t glyph_id,
+ unsigned int num_glyphs,
+ unsigned int outOfRange) const
+ {
+ const T *v = get_value (glyph_id, num_glyphs);
+ return v ? *v : outOfRange;
+ }
+
inline bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
@@ -638,6 +646,7 @@ struct StateTable
DEFINE_SIZE_STATIC (4 * sizeof (HBUINT));
};
+template <typename HBUCHAR>
struct ClassTable
{
inline unsigned int get_class (hb_codepoint_t glyph_id, unsigned int outOfRange) const
@@ -645,6 +654,12 @@ struct ClassTable
unsigned int i = glyph_id - firstGlyph;
return i >= classArray.len ? outOfRange : classArray.arrayZ[i];
}
+ inline unsigned int get_class (hb_codepoint_t glyph_id,
+ unsigned int num_glyphs HB_UNUSED,
+ unsigned int outOfRange) const
+ {
+ return get_class (glyph_id, outOfRange);
+ }
inline bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
@@ -652,7 +667,7 @@ struct ClassTable
}
protected:
GlyphID firstGlyph; /* First glyph index included in the trimmed array. */
- ArrayOf<HBUINT8> classArray; /* The class codes (indexed by glyph index minus
+ ArrayOf<HBUCHAR> classArray; /* The class codes (indexed by glyph index minus
* firstGlyph). */
public:
DEFINE_SIZE_ARRAY (4, classArray);
@@ -663,15 +678,8 @@ struct ObsoleteTypes
static const bool extended = false;
typedef HBUINT16 HBUINT;
typedef HBUINT8 HBUSHORT;
- struct ClassType : ClassTable
- {
- inline unsigned int get_class (hb_codepoint_t glyph_id,
- unsigned int num_glyphs HB_UNUSED,
- unsigned int outOfRange) const
- {
- return ClassTable::get_class (glyph_id, outOfRange);
- }
- };
+ typedef ClassTable<HBUINT8> ClassType;
+
template <typename T>
static inline unsigned int offsetToIndex (unsigned int offset,
const void *base,
@@ -692,16 +700,8 @@ struct ExtendedTypes
static const bool extended = true;
typedef HBUINT32 HBUINT;
typedef HBUINT16 HBUSHORT;
- struct ClassType : Lookup<HBUINT16>
- {
- inline unsigned int get_class (hb_codepoint_t glyph_id,
- unsigned int num_glyphs,
- unsigned int outOfRange) const
- {
- const HBUINT16 *v = get_value (glyph_id, num_glyphs);
- return v ? *v : outOfRange;
- }
- };
+ typedef Lookup<HBUINT16> ClassType;
+
template <typename T>
static inline unsigned int offsetToIndex (unsigned int offset,
const void *base,
More information about the HarfBuzz
mailing list