src/hb-buffer.cc | 16 +++---- src/hb-ot-shape-complex-indic-private.hh | 2 src/hb-ot-shape.cc | 2 test/shaping/fonts/sha1sum/3d0b77a2360aa6faa1385aaa510509ab70dfbeff.ttf |binary test/shaping/run-tests.sh | 4 - test/shaping/tests/indic-syllable.tests | 3 - util/options.hh | 21 +++++----- util/view-cairo.hh | 2 8 files changed, 28 insertions(+), 22 deletions(-)
New commits: commit 06cb162cd79cc922b572e5f532ca867223b6dc4c Author: Behdad Esfahbod <beh...@behdad.org> Date: Fri Sep 1 10:34:21 2017 -0700 [indic] Treat Consonant_With_Stacker as consonant Fixes https://github.com/behdad/harfbuzz/issues/528 "Kannada JIHVAMULIYA and UPADHMANIYA insert dotted circles" diff --git a/src/hb-ot-shape-complex-indic-private.hh b/src/hb-ot-shape-complex-indic-private.hh index 58be4222..c880311e 100644 --- a/src/hb-ot-shape-complex-indic-private.hh +++ b/src/hb-ot-shape-complex-indic-private.hh @@ -121,7 +121,7 @@ enum indic_syllabic_category_t { INDIC_SYLLABIC_CATEGORY_CONSONANT_PREFIXED = OT_X, /* Don't care. */ INDIC_SYLLABIC_CATEGORY_CONSONANT_SUBJOINED = OT_CM, INDIC_SYLLABIC_CATEGORY_CONSONANT_SUCCEEDING_REPHA = OT_N, - INDIC_SYLLABIC_CATEGORY_CONSONANT_WITH_STACKER = OT_Repha, /* TODO */ + INDIC_SYLLABIC_CATEGORY_CONSONANT_WITH_STACKER = OT_C, INDIC_SYLLABIC_CATEGORY_GEMINATION_MARK = OT_SM, INDIC_SYLLABIC_CATEGORY_INVISIBLE_STACKER = OT_Coeng, INDIC_SYLLABIC_CATEGORY_JOINER = OT_ZWJ, diff --git a/test/shaping/fonts/sha1sum/3d0b77a2360aa6faa1385aaa510509ab70dfbeff.ttf b/test/shaping/fonts/sha1sum/3d0b77a2360aa6faa1385aaa510509ab70dfbeff.ttf new file mode 100644 index 00000000..d7db1de2 Binary files /dev/null and b/test/shaping/fonts/sha1sum/3d0b77a2360aa6faa1385aaa510509ab70dfbeff.ttf differ diff --git a/test/shaping/tests/indic-syllable.tests b/test/shaping/tests/indic-syllable.tests index 26c38b35..37eaadcd 100644 --- a/test/shaping/tests/indic-syllable.tests +++ b/test/shaping/tests/indic-syllable.tests @@ -1 +1,2 @@ -fonts/sha1sum/54674a3111d209fb6be0ed31745314b7a8d2c244.ttf::U+0BA4,U+0BCD,U+00B3:[taprehalftamil=0+1509|uni00B3=2+674] +fonts/sha1sum/3d0b77a2360aa6faa1385aaa510509ab70dfbeff.ttf::U+0CF1:[gid1=0+1129] +fonts/sha1sum/3d0b77a2360aa6faa1385aaa510509ab70dfbeff.ttf::U+0CF2:[gid2=0+1539] commit c449d2d8c9e27502380faa0b568a374c838ac9a7 Author: Behdad Esfahbod <beh...@behdad.org> Date: Wed Aug 30 17:28:22 2017 -0700 [unsafe-to-break] Mark during fraction-slash formation Fixes tests/automatic-fractions.tests diff --git a/src/hb-ot-shape.cc b/src/hb-ot-shape.cc index bc536696..54c33a3e 100644 --- a/src/hb-ot-shape.cc +++ b/src/hb-ot-shape.cc @@ -394,6 +394,8 @@ hb_ot_shape_setup_masks_fraction (hb_ot_shape_context_t *c) HB_UNICODE_GENERAL_CATEGORY_DECIMAL_NUMBER) end++; + buffer->unsafe_to_break (start, end); + for (unsigned int j = start; j < i; j++) info[j].mask |= pre_mask; info[i].mask |= c->plan->frac_mask; commit b262ebcc9c9539076d17751e9bae06a8fd5001ff Author: Behdad Esfahbod <beh...@behdad.org> Date: Wed Aug 30 17:25:10 2017 -0700 [util] Fix cluster sweeping during --verify If *I* get this wrong in 2017, I have no idea how others get their head around cluster math... Fixes tests/arabic-fallback-shaping.tests diff --git a/util/options.hh b/util/options.hh index 42bb8c46..b24ab0c8 100644 --- a/util/options.hh +++ b/util/options.hh @@ -366,13 +366,18 @@ struct shape_options_t : option_group_t } else { - unsigned int cluster = info[end].cluster; if (forward) - while (text_end < num_chars && text[text_end].cluster != cluster) + { + unsigned int cluster = info[end].cluster; + while (text_end < num_chars && text[text_end].cluster < cluster) text_end++; + } else - while (text_start && text[text_start - 1].cluster != cluster) + { + unsigned int cluster = info[end - 1].cluster; + while (text_start && text[text_start - 1].cluster >= cluster) text_start--; + } } assert (text_start < text_end); commit 69d701b02e5ebc3597b0d0576dbab8e1ece51944 Author: Behdad Esfahbod <beh...@behdad.org> Date: Wed Aug 30 17:07:29 2017 -0700 [util] When --verify fails, return reconstructed shape results diff --git a/util/options.hh b/util/options.hh index 9ad2225d..42bb8c46 100644 --- a/util/options.hh +++ b/util/options.hh @@ -416,11 +416,9 @@ struct shape_options_t : option_group_t *error = "Safe-to-break test failed."; ret = false; - if (0) - { - hb_buffer_set_length (buffer, 0); - hb_buffer_append (buffer, reconstruction, 0, -1); - } + /* Return the reconstructed result instead so it can be inspected. */ + hb_buffer_set_length (buffer, 0); + hb_buffer_append (buffer, reconstruction, 0, -1); } hb_buffer_destroy (reconstruction); diff --git a/util/view-cairo.hh b/util/view-cairo.hh index d3e59afa..bf56da3c 100644 --- a/util/view-cairo.hh +++ b/util/view-cairo.hh @@ -59,7 +59,7 @@ struct view_cairo_t } void error (const char *message) { - fail (false, "%s", message); + g_printerr ("%s: %s\n", g_get_prgname (), message); } void consume_glyphs (hb_buffer_t *buffer, const char *text, commit 099472e08bf81d6dd8ca1647999592df6b7fdfb9 Author: Behdad Esfahbod <beh...@behdad.org> Date: Wed Aug 30 16:45:06 2017 -0700 hb_buffer_diff() tweak I like to have a mode where CONTAINS_NOTDEF and CONTAINS_DOTTEDCIRCLE are not returned. Abused a value of -1 for that. hb-shape now uses it. Fixes two of the six tests failing with --verify in test/shaping/run-tests.sh. diff --git a/src/hb-buffer.cc b/src/hb-buffer.cc index a45062aa..6b05d3a6 100644 --- a/src/hb-buffer.cc +++ b/src/hb-buffer.cc @@ -31,10 +31,6 @@ #include "hb-utf-private.hh" -#ifndef HB_DEBUG_BUFFER -#define HB_DEBUG_BUFFER (HB_DEBUG+0) -#endif - /** * SECTION: hb-buffer * @title: Buffers @@ -1885,6 +1881,9 @@ hb_buffer_t::sort (unsigned int start, unsigned int end, int(*compar)(const hb_g /** * hb_buffer_diff: * + * If dottedcircle_glyph is (hb_codepoint_t) -1 then %HB_BUFFER_DIFF_FLAG_DOTTED_CIRCLE_PRESENT + * and %HB_BUFFER_DIFF_FLAG_NOTDEF_PRESENT are never returned. This should be used by most + * callers if just comparing two buffers is needed. * * Since: 1.5.0 **/ @@ -1898,6 +1897,7 @@ hb_buffer_diff (hb_buffer_t *buffer, return HB_BUFFER_DIFF_FLAG_CONTENT_TYPE_MISMATCH; hb_buffer_diff_flags_t result = HB_BUFFER_DIFF_FLAG_EQUAL; + bool contains = dottedcircle_glyph != (hb_codepoint_t) -1; unsigned int count = reference->len; @@ -1911,9 +1911,9 @@ hb_buffer_diff (hb_buffer_t *buffer, unsigned int i; for (i = 0; i < count; i++) { - if (info[i].codepoint == dottedcircle_glyph) + if (contains && info[i].codepoint == dottedcircle_glyph) result |= HB_BUFFER_DIFF_FLAG_DOTTED_CIRCLE_PRESENT; - else if (info[i].codepoint == 0) + if (contains && info[i].codepoint == 0) result |= HB_BUFFER_DIFF_FLAG_NOTDEF_PRESENT; } result |= HB_BUFFER_DIFF_FLAG_LENGTH_MISMATCH; @@ -1933,9 +1933,9 @@ hb_buffer_diff (hb_buffer_t *buffer, result |= HB_BUFFER_DIFF_FLAG_CLUSTER_MISMATCH; if ((buf_info->mask & HB_GLYPH_FLAG_DEFINED) != (ref_info->mask & HB_GLYPH_FLAG_DEFINED)) result |= HB_BUFFER_DIFF_FLAG_GLYPH_FLAGS_MISMATCH; - if (ref_info->codepoint == dottedcircle_glyph) + if (contains && ref_info->codepoint == dottedcircle_glyph) result |= HB_BUFFER_DIFF_FLAG_DOTTED_CIRCLE_PRESENT; - else if (ref_info->codepoint == 0) + if (contains && ref_info->codepoint == 0) result |= HB_BUFFER_DIFF_FLAG_NOTDEF_PRESENT; buf_info++; ref_info++; diff --git a/test/shaping/run-tests.sh b/test/shaping/run-tests.sh index 9c496314..2b10e7c8 100755 --- a/test/shaping/run-tests.sh +++ b/test/shaping/run-tests.sh @@ -4,8 +4,8 @@ test "x$srcdir" = x && srcdir=. test "x$builddir" = x && builddir=. test "x$top_builddir" = x && top_builddir=../.. -#hb_shape="$top_builddir/util/hb-shape$EXEEXT --verify" -hb_shape="$top_builddir/util/hb-shape$EXEEXT" +hb_shape="$top_builddir/util/hb-shape$EXEEXT --verify" +#hb_shape="$top_builddir/util/hb-shape$EXEEXT" fails=0 diff --git a/util/options.hh b/util/options.hh index dbc4eaf9..9ad2225d 100644 --- a/util/options.hh +++ b/util/options.hh @@ -409,7 +409,7 @@ struct shape_options_t : option_group_t } bool ret = true; - hb_buffer_diff_flags_t diff = hb_buffer_diff (buffer, reconstruction, 0, 0); + hb_buffer_diff_flags_t diff = hb_buffer_diff (buffer, reconstruction, (hb_codepoint_t) -1, 0); if (diff) { if (error) _______________________________________________ HarfBuzz mailing list HarfBuzz@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/harfbuzz