From c1432bce3cfc1156d19b21892d4083afa8838d94 Mon Sep 17 00:00:00 2001 From: Behdad Esfahbod Date: Fri, 14 Jul 2017 17:34:47 +0100 Subject: [PATCH] [arabic] Adjust feature order again Fixes https://github.com/behdad/harfbuzz/issues/505 --- src/hb-ot-shape-complex-arabic.cc | 7 ++++++- .../bf39b0e91ef9807f15a9e283a21a14a209fd2cfc.ttf | Bin 0 -> 7312 bytes test/shaping/tests/arabic-feature-order.tests | 1 + 3 files changed, 7 insertions(+), 1 deletion(-) create mode 100644 test/shaping/fonts/sha1sum/bf39b0e91ef9807f15a9e283a21a14a209fd2cfc.ttf diff --git a/src/hb-ot-shape-complex-arabic.cc b/src/hb-ot-shape-complex-arabic.cc index c6609c57..5dbbcd9a 100644 --- a/src/hb-ot-shape-complex-arabic.cc +++ b/src/hb-ot-shape-complex-arabic.cc @@ -199,6 +199,9 @@ collect_features_arabic (hb_ot_shape_planner_t *plan) * work. However, testing shows that rlig and calt are applied * together for Mongolian in Uniscribe. As such, we only add a * pause for Arabic, not other scripts. + * + * A pause after calt is required to make KFGQPC Uthmanic Script HAFS + * work correctly. See https://github.com/behdad/harfbuzz/issues/505 */ map->add_gsub_pause (nuke_joiners); @@ -222,7 +225,10 @@ collect_features_arabic (hb_ot_shape_planner_t *plan) if (plan->props.script == HB_SCRIPT_ARABIC) map->add_gsub_pause (arabic_fallback_shape); + /* No pause after rclt. See 98460779bae19e4d64d29461ff154b3527bf8420. */ + map->add_global_bool_feature (HB_TAG('r','c','l','t')); map->add_global_bool_feature (HB_TAG('c','a','l','t')); + map->add_gsub_pause (NULL); /* The spec includes 'cswh'. Earlier versions of Windows * used to enable this by default, but testing suggests @@ -232,7 +238,6 @@ collect_features_arabic (hb_ot_shape_planner_t *plan) * Note that IranNastaliq uses this feature extensively * to fixup broken glyph sequences. Oh well... * Test case: U+0643,U+0640,U+0631. */ - //map->add_gsub_pause (NULL); //map->add_global_bool_feature (HB_TAG('c','s','w','h')); map->add_global_bool_feature (HB_TAG('m','s','e','t')); } diff --git a/test/shaping/fonts/sha1sum/bf39b0e91ef9807f15a9e283a21a14a209fd2cfc.ttf b/test/shaping/fonts/sha1sum/bf39b0e91ef9807f15a9e283a21a14a209fd2cfc.ttf new file mode 100644 index 0000000000000000000000000000000000000000..ce017a35a364e5d1440051258955e0ac8e80a727 GIT binary patch literal 7312 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