From e359a4b8f57bbc778843f233c4f5d6fb07ff11d9 Mon Sep 17 00:00:00 2001 From: Behdad Esfahbod Date: Fri, 14 Jul 2017 14:14:35 +0100 Subject: [PATCH] [indic] Disable automatic ZWNJ handling for Indic features Fixes https://github.com/behdad/harfbuzz/issues/294 Also fixes a bunch of other Indic issues. Test results after: BENGALI: 353725 out of 354188 tests passed. 463 failed (0.130722%) DEVANAGARI: 707307 out of 707394 tests passed. 87 failed (0.0122987%) GUJARATI: 366355 out of 366457 tests passed. 102 failed (0.0278341%) GURMUKHI: 60732 out of 60747 tests passed. 15 failed (0.0246926%) KANNADA: 951201 out of 951913 tests passed. 712 failed (0.0747968%) KHMER: 299071 out of 299124 tests passed. 53 failed (0.0177184%) MALAYALAM: 1048136 out of 1048334 tests passed. 198 failed (0.0188871%) ORIYA: 42320 out of 42329 tests passed. 9 failed (0.021262%) SINHALA: 271662 out of 271847 tests passed. 185 failed (0.068053%) TAMIL: 1091754 out of 1091754 tests passed. 0 failed (0%) TELUGU: 970555 out of 970573 tests passed. 18 failed (0.00185457%) Before: BENGALI: 353725 out of 354188 tests passed. 463 failed (0.130722%) DEVANAGARI: 707307 out of 707394 tests passed. 87 failed (0.0122987%) GUJARATI: 366349 out of 366457 tests passed. 108 failed (0.0294714%) GURMUKHI: 60732 out of 60747 tests passed. 15 failed (0.0246926%) KANNADA: 951190 out of 951913 tests passed. 723 failed (0.0759523%) KHMER: 299070 out of 299124 tests passed. 54 failed (0.0180527%) MALAYALAM: 1048136 out of 1048334 tests passed. 198 failed (0.0188871%) ORIYA: 42320 out of 42329 tests passed. 9 failed (0.021262%) SINHALA: 271662 out of 271847 tests passed. 185 failed (0.068053%) TAMIL: 1091753 out of 1091754 tests passed. 1 failed (9.15957e-05%) TELUGU: 970555 out of 970573 tests passed. 18 failed (0.00185457%) --- src/hb-ot-shape-complex-indic.cc | 4 ++-- test/shaping/Makefile.am | 1 + .../f443753e8ffe8e8aae606cfba158e00334b6efb1.ttf | Bin 0 -> 3972 bytes test/shaping/tests/indic-joiners.tests | 2 ++ 4 files changed, 5 insertions(+), 2 deletions(-) create mode 100644 test/shaping/fonts/sha1sum/f443753e8ffe8e8aae606cfba158e00334b6efb1.ttf create mode 100644 test/shaping/tests/indic-joiners.tests diff --git a/src/hb-ot-shape-complex-indic.cc b/src/hb-ot-shape-complex-indic.cc index cbc46c8c6..8227a77d7 100644 --- a/src/hb-ot-shape-complex-indic.cc +++ b/src/hb-ot-shape-complex-indic.cc @@ -411,12 +411,12 @@ collect_features_indic (hb_ot_shape_planner_t *plan) unsigned int i = 0; map->add_gsub_pause (initial_reordering); for (; i < INDIC_BASIC_FEATURES; i++) { - map->add_feature (indic_features[i].tag, 1, indic_features[i].flags | F_MANUAL_ZWJ); + map->add_feature (indic_features[i].tag, 1, indic_features[i].flags | F_MANUAL_ZWJ | F_MANUAL_ZWNJ); map->add_gsub_pause (NULL); } map->add_gsub_pause (final_reordering); for (; i < INDIC_NUM_FEATURES; i++) { - map->add_feature (indic_features[i].tag, 1, indic_features[i].flags | F_MANUAL_ZWJ); + map->add_feature (indic_features[i].tag, 1, indic_features[i].flags | F_MANUAL_ZWJ | F_MANUAL_ZWNJ); } map->add_global_bool_feature (HB_TAG('c','a','l','t')); diff --git a/test/shaping/Makefile.am b/test/shaping/Makefile.am index 410a258d1..f84b46711 100644 --- a/test/shaping/Makefile.am +++ b/test/shaping/Makefile.am @@ -56,6 +56,7 @@ TESTS = \ tests/hangul-jamo.tests \ tests/hyphens.tests \ tests/indic-joiner-candrabindu.tests \ + tests/indic-joiners.tests \ tests/indic-old-spec.tests \ tests/indic-pref-blocking.tests \ tests/language-tags.tests \ diff --git a/test/shaping/fonts/sha1sum/f443753e8ffe8e8aae606cfba158e00334b6efb1.ttf b/test/shaping/fonts/sha1sum/f443753e8ffe8e8aae606cfba158e00334b6efb1.ttf new file mode 100644 index 0000000000000000000000000000000000000000..93c2f5822fa5b2405a760e30354f78c73c885613 GIT binary patch literal 3972 zcmcgvdrVa66+hp-^WZTs49qa1JZ2eYK$-Hm1IUOnXjN#&tSAb`u2!)@+Sj;o(`Hi0N|Z7QY;9xn)|QX{Ik^C6MxEh6cQtu5tB;EnxPiIT>^zpt}5*mwGANgGizWKhrk;6NYQDFyOA0-UkG z=hg1{W0NPapCK}QcAzU5dUUO*5$BfyS91Ue>(6r<0G|U~bfEY6P>yjHx{{g!H}o9s z3|cBPZxR{509?`=9O|PIdI0z?V8@YQZMKbIC!y!fEQNUhM;P=0>XE-O#q>S_(V*w;+IC4q%P(MU2 z=!dR#qROk}39HfIWNR$N)mirJIsvF$80{8VBpZLWZCfBPI5;~yI5_&xH`lFFT9nF~ zt-;wqAZl{E0uzcdG3>90a^3vV22t8tJW^Qs`pDcoDE7L7s8;wpzCr5XcdY0u>ygVvA!gDwJ4B3O6 zC~(wo;VP*=lTlvQ-d_W~dhYV{bRp8sQNv1y!F{+RbF1x zI{##RTyEc2QnL4aQC1cbPfg$1#nmqFVoQ*@H&v_5;@%@M zG7$>->xVjeSThkK1v#H504odqLWD*)O;fmPaC_%YvEjS@jYKc5W-`PO=ow6I#2XR-rQMQ zD)N1KdE(~AmhFZQ&NekxRO}U%k!W7-FLLvIzPwyGH1Y)9dop$i?<=l|rHn*fxDcD% zTwiT&ZX{FO;-;%M9<@g1X7p1rz0p86&V*v4-KlzY^^#-fA34X~-gEI=qOR)VJ5^Up zi>s=>;aU4j{nYzAw)=f!XU@E~Vx;6aiTTTsOVRpREv2#~o3q+k?XC9OywUoR&`kXesq?K3>Bz8%5qw~MNLi7S>rcBiHwJvqi5znAueAIrdC%rOXLae;C8QX2sh8+ z0wwwRT)l#BhnvMYjXx`q|Jm2EgC7d%Z~PX=!_e0~4fHDgLF9>6aZtP_o=N4>htl7r zu=*18?Z39)vH#g&ip4LR%$_K z>7xB~f_f+jT-?f7J5?kKT-;}|G$9FD=!9Mvgi$1kWRW6Lg-N7|bYT`5!Xh$LPaHW| zxw^KhY~VzPw)X`S_T9WUt2{n+Ul!~+9*0#vhP87Y9lSTGyxP9f7#FUszF>Uq*4B>N z_}ZbZopE|dVOXiC=+qQ-`u27PS$5?Mu%ca7#`{l(zXT$oMGTpyJ{-L)cvh%*UU|nn z3p)+cW~2la(iRej5A^m!rjBK(GC7kZl7k&5d&%0-GuTVHy@z`b^VJcgvDp+n9sqj&Mir}rT53JK{3 zeiaDWfu4XF+y;yV4cX9;ORE5Lo@(+{%Ynf!>G%*hV}iG8Sq2eizNsc-Hz*QiBjZ?x zW|xG0D>zz#Nyo=Z%RvW+fq%IR-4&kYX`Yj7F(+CCJ>W0GEJ1QQX7(} z8W`bG@hRk{BVUOF7q+Z=2}O=5bd#g6zpI-(mPGrOk?TX86^5Z41wcs{fx|t98cT(ls6X)Y-@U2f&cbLL*7jV|tTmoc>g#iimwhJ5v6~mdabgB@&V+mS#n`n7rP&oyq{|8n+^O*nu literal 0 HcmV?d00001 diff --git a/test/shaping/tests/indic-joiners.tests b/test/shaping/tests/indic-joiners.tests new file mode 100644 index 000000000..63f672905 --- /dev/null +++ b/test/shaping/tests/indic-joiners.tests @@ -0,0 +1,2 @@ +fonts/sha1sum/f443753e8ffe8e8aae606cfba158e00334b6efb1.ttf::U+179A,U+1784,U+17D2,U+179F,U+200C,U+17CA,U+17B8,U+0020:[uni179a=0+775|uni1784=1+1550|uni179f.sub=1+775|space=1+0|uni17ca=1+0|uni17b8=1@0,300+0|space=7+600] +fonts/sha1sum/f443753e8ffe8e8aae606cfba158e00334b6efb1.ttf::U+179A,U+1784,U+17D2,U+179F,U+17CA,U+17B8:[uni179a=0+775|uni1784=1+1550|uni179f.sub=1+775|uni17bb=1@-75,-700+0|uni17b8=1+0]