[HarfBuzz] harfbuzz: Branch 'master' - 2 commits
Behdad Esfahbod
behdad at kemper.freedesktop.org
Mon Nov 6 20:06:36 UTC 2017
src/hb-open-type-private.hh | 4
src/hb-ot-kern-table.hh | 69 +++++-----
src/hb-ot-shape-complex-arabic.cc | 1
test/shaping/Makefile.am | 1
test/shaping/fonts/sha1sum/d9b8bc10985f24796826c29f7ccba3d0ae11ec02.ttf |binary
test/shaping/tests/arabic-stch.tests | 1
6 files changed, 45 insertions(+), 31 deletions(-)
New commits:
commit 625ae08fcee747fbdc33a3a6865fb3aa425662ca
Author: Behdad Esfahbod <behdad at behdad.org>
Date: Sat Nov 4 12:01:11 2017 -0400
[kern] Towards implementing format-2
diff --git a/src/hb-open-type-private.hh b/src/hb-open-type-private.hh
index b3169c04..2687ba66 100644
--- a/src/hb-open-type-private.hh
+++ b/src/hb-open-type-private.hh
@@ -1078,9 +1078,7 @@ struct BinSearchHeader
};
template <typename Type>
-struct BinSearchArrayOf : SortedArrayOf<Type, BinSearchHeader>
-{
-};
+struct BinSearchArrayOf : SortedArrayOf<Type, BinSearchHeader> {};
/* Lazy struct and blob loaders. */
diff --git a/src/hb-ot-kern-table.hh b/src/hb-ot-kern-table.hh
index 2cab5cc9..2d355914 100644
--- a/src/hb-ot-kern-table.hh
+++ b/src/hb-ot-kern-table.hh
@@ -81,9 +81,6 @@ struct KernSubTableFormat0
return pairs[i].get_kerning ();
}
- inline unsigned int get_size (void) const
- { return pairs.get_size (); }
-
inline bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
@@ -96,46 +93,63 @@ struct KernSubTableFormat0
DEFINE_SIZE_ARRAY (8, pairs);
};
-struct KernSubTableFormat2
+struct KernClassTable
{
- inline int get_kerning (hb_codepoint_t left, hb_codepoint_t right) const
+ inline unsigned int get_class (hb_codepoint_t g) const { return classes[g - firstGlyph]; }
+
+ inline bool sanitize (hb_sanitize_context_t *c) const
{
- /* XXX */
- return 0;
+ TRACE_SANITIZE (this);
+ return_trace (firstGlyph.sanitize (c) && classes.sanitize (c));
}
- inline unsigned int get_size (void) const
+ protected:
+ USHORT firstGlyph; /* First glyph in class range. */
+ ArrayOf<USHORT> classes; /* Glyph classes. */
+ public:
+ DEFINE_SIZE_ARRAY (4, classes);
+};
+
+struct KernSubTableFormat2
+{
+ inline int get_kerning (hb_codepoint_t left, hb_codepoint_t right, unsigned int length) const
{
- /* XXX */
- return 0;
+ unsigned int l = (this+leftClassTable).get_class (left);
+ unsigned int r = (this+leftClassTable).get_class (left);
+ return 0;//(&(this+array))[0/*XXX*/];
}
inline bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
-
- /* XXX */
-
- return_trace (true);
+ return_trace (rowWidth.sanitize (c) &&
+ leftClassTable.sanitize (c, this) &&
+ rightClassTable.sanitize (c, this) &&
+ array.sanitize (c, this));
}
+
+ protected:
+ USHORT rowWidth; /* The width, in bytes, of a row in the table. */
+ OffsetTo<KernClassTable>
+ leftClassTable; /* Offset from beginning of this subtable to
+ * left-hand class table. */
+ OffsetTo<KernClassTable>
+ rightClassTable;/* Offset from beginning of this subtable to
+ * right-hand class table. */
+ OffsetTo<FWORD>
+ array; /* Offset from beginning of this subtable to
+ * the start of the kerning array. */
+ public:
+ DEFINE_SIZE_MIN (8);
};
struct KernSubTable
{
- inline int get_kerning (hb_codepoint_t left, hb_codepoint_t right, unsigned int format) const
+ inline int get_kerning (hb_codepoint_t left, hb_codepoint_t right, unsigned int length, unsigned int format) const
{
switch (format) {
case 0: return u.format0.get_kerning (left, right);
- case 2: return u.format2.get_kerning (left, right);
- default:return 0;
- }
- }
-
- inline unsigned int get_size (unsigned int format) const
- {
- switch (format) {
- case 0: return u.format0.get_size ();
- case 2: return u.format2.get_size ();
+ case 2: return u.format2.get_kerning (left, right, length);
default:return 0;
}
}
@@ -173,7 +187,7 @@ struct KernSubTableWrapper
{ return bool (thiz()->coverage & T::COVERAGE_OVERRIDE_FLAG); }
inline int get_kerning (hb_codepoint_t left, hb_codepoint_t right) const
- { return thiz()->subtable.get_kerning (left, right, thiz()->format); }
+ { return thiz()->subtable.get_kerning (left, right, thiz()->length - thiz()->min_size, thiz()->format); }
inline int get_h_kerning (hb_codepoint_t left, hb_codepoint_t right) const
{ return is_horizontal () ? get_kerning (left, right) : 0; }
@@ -186,8 +200,7 @@ struct KernSubTableWrapper
return_trace (c->check_struct (thiz()) &&
thiz()->length >= thiz()->min_size &&
c->check_array (thiz(), 1, thiz()->length) &&
- thiz()->subtable.sanitize (c, thiz()->format) &&
- thiz()->subtable.get_size (thiz()-> format) <= thiz()->length - thiz()->min_size);
+ thiz()->subtable.sanitize (c, thiz()->format));
}
};
commit 74e82adaea08ced18493e3341823dbd5b6cd493e
Author: David Corbett <corbett.dav at husky.neu.edu>
Date: Mon Nov 6 14:41:55 2017 -0500
Mark glyphs involved in 'stch' as unsafe to break
diff --git a/src/hb-ot-shape-complex-arabic.cc b/src/hb-ot-shape-complex-arabic.cc
index 283f325b..eda20ca1 100644
--- a/src/hb-ot-shape-complex-arabic.cc
+++ b/src/hb-ot-shape-complex-arabic.cc
@@ -560,6 +560,7 @@ apply_stch (const hb_ot_shape_plan_t *plan,
}
else
{
+ buffer->unsafe_to_break (context, end + 1);
hb_position_t x_offset = 0;
for (unsigned int k = end; k > start; k--)
{
diff --git a/test/shaping/Makefile.am b/test/shaping/Makefile.am
index 377c08d0..ca7c1c30 100644
--- a/test/shaping/Makefile.am
+++ b/test/shaping/Makefile.am
@@ -45,6 +45,7 @@ TESTS = \
tests/arabic-feature-order.tests \
tests/arabic-like-joining.tests \
tests/arabic-mark-order.tests \
+ tests/arabic-stch.tests \
tests/automatic-fractions.tests \
tests/cluster.tests \
tests/color-fonts.tests \
diff --git a/test/shaping/fonts/sha1sum/d9b8bc10985f24796826c29f7ccba3d0ae11ec02.ttf b/test/shaping/fonts/sha1sum/d9b8bc10985f24796826c29f7ccba3d0ae11ec02.ttf
new file mode 100644
index 00000000..112146eb
Binary files /dev/null and b/test/shaping/fonts/sha1sum/d9b8bc10985f24796826c29f7ccba3d0ae11ec02.ttf differ
diff --git a/test/shaping/tests/arabic-stch.tests b/test/shaping/tests/arabic-stch.tests
new file mode 100644
index 00000000..a268d8a7
--- /dev/null
+++ b/test/shaping/tests/arabic-stch.tests
@@ -0,0 +1 @@
+fonts/sha1sum/d9b8bc10985f24796826c29f7ccba3d0ae11ec02.ttf:--no-glyph-names --show-flags:U+0718,U+070F,U+0718,U+0718,U+002E:[1=4+168|3=3+502#1|3=2+502#1|4=1 at -1004,0+0#1|5=1 at -876,0+0#1|5=1 at -799,0+0#1|5=1 at -722,0+0#1|5=1 at -645,0+0#1|4=1 at -566,0+0#1|5=1 at -438,0+0#1|5=1 at -361,0+0#1|5=1 at -284,0+0#1|5=1 at -207,0+0#1|4=1 at -128,0+0#1|3=0+502]
More information about the HarfBuzz
mailing list