From 92ba9905caa060466230f63b428ccee767696464 Mon Sep 17 00:00:00 2001 From: Behdad Esfahbod Date: Tue, 31 Jul 2018 15:19:32 -0700 Subject: [PATCH] [indic] Allow double-halant in old-spec Devanagari Fixes https://github.com/harfbuzz/harfbuzz/issues/1071 --- src/hb-ot-shape-complex-indic.cc | 18 ++++++++++++------ ...22a7d09e60421f3efbc706ad348ab47b88567b.ttf | Bin 0 -> 4672 bytes .../data/in-house/tests/indic-old-spec.tests | 2 ++ 3 files changed, 14 insertions(+), 6 deletions(-) create mode 100644 test/shaping/data/in-house/fonts/b722a7d09e60421f3efbc706ad348ab47b88567b.ttf diff --git a/src/hb-ot-shape-complex-indic.cc b/src/hb-ot-shape-complex-indic.cc index b8d9a3acf..4cb69fc71 100644 --- a/src/hb-ot-shape-complex-indic.cc +++ b/src/hb-ot-shape-complex-indic.cc @@ -667,10 +667,10 @@ initial_reordering_consonant_syllable (const hb_ot_shape_plan_t *plan, * last consonant. * * Reports suggest that in some scripts Uniscribe does this only if there - * is *not* a Halant after last consonant already (eg. Kannada), while it - * does it unconditionally in other scripts (eg. Malayalam, Bengali). We - * don't currently know about other scripts, so we whitelist Malayalam and - * Bengali for now. + * is *not* a Halant after last consonant already. We know that is the + * case for Kannada, while it reorders unconditionally in other scripts, + * eg. Malayalam, Bengali, and Devanagari. We don't currently know about + * other scripts, so we whitelist Malayalam, Bengali, and Devanagari. * * Kannada test case: * U+0C9A,U+0CCD,U+0C9A,U+0CCD @@ -681,15 +681,21 @@ initial_reordering_consonant_syllable (const hb_ot_shape_plan_t *plan, * U+0D38,U+0D4D,U+0D31,U+0D4D,U+0D31,U+0D4D * With lohit-ttf-20121122/Lohit-Malayalam.ttf * - * Bengali test case + * Bengali test case: * U+0998,U+09CD,U+09AF,U+09CD * With Windows XP vrinda.ttf * https://github.com/harfbuzz/harfbuzz/issues/1073 + * + * Devanagari test case: + * U+091F,U+094D,U+0930,U+094D + * With chandas.ttf + * https://github.com/harfbuzz/harfbuzz/issues/1071 */ if (indic_plan->is_old_spec) { bool disallow_double_halants = buffer->props.script != HB_SCRIPT_MALAYALAM && - buffer->props.script != HB_SCRIPT_BENGALI; + buffer->props.script != HB_SCRIPT_BENGALI && + buffer->props.script != HB_SCRIPT_DEVANAGARI; for (unsigned int i = base + 1; i < end; i++) if (info[i].indic_category() == OT_H) { diff --git a/test/shaping/data/in-house/fonts/b722a7d09e60421f3efbc706ad348ab47b88567b.ttf b/test/shaping/data/in-house/fonts/b722a7d09e60421f3efbc706ad348ab47b88567b.ttf new file mode 100644 index 0000000000000000000000000000000000000000..ca23ef83db38025412dc80e8ecbcdc415e97fb87 GIT binary patch literal 4672 zcmb7HYit}>6+U-ncgO3;zUmlIW5;pQyqq+ImUI%^v0LwE zwRT=VP*afl1BI%MgQyTlB#}@N|3I{~Y6Vp#ictCkeiW)Cw3UEHf*(LhDu}bockZn1 zwQ-_kMl<)EbI(1G@7{av3<)A~(Rotonc>v-A&O86f?JTTAKts?z}EJCw~5@fL}G0C zz`?Em+VqJ+t*T(9Hod+-mQUL}!t z6`m{{M!pUrtxap&ECTOj<_&%R%8xS{L(g16TKUWQPw6Y9QxrPUxYB0~D!s|D(jc_9 zxY`ueYy7=Q40MSP0!C-h7jF0a8WY2hP5F)f9X*YnRLB+f>qc$o-|9PzdVhP^=Zc|M zH~NQTo>XPHy<=XAc2(&?(-~{dKL$(Lvn^L?cZBeL#12?H=?S z{-(Mrj_9bUufbSdYwL@vRYO9UgZ*Ox58DEx5lM(ihw5KqR-gS zoAd|5LiaYc^*08D5my)tareVYZ%vu)*LwbUwa!pw&ALio=!T(-1tWjeu4ziSGMfJ+ z9C0h}>mm_s_V{#frMFEJ!qAQU&+0-h)l&^L*z*y1Zezc?Ces4Yg9<|p*sY29lIUw> z@5=UX>qifK?TJ({*;cRWhBMr~Io5Mzs3S74uV-ie6+>6H8_MVv|Iz*1$Eti@n{HG_ z!Zn@4PbYi!4MZ^42C0Q>g|8R0ZKm$~beGtoKtpeJzxS4+B zZEgxztga*0hEf&`Js)%T1g$EIIy$mkWdmLL&*e6|;i_%$m8~u_#f_$44g}rpI~I%Z zwwi!PM-lEXZab^)sb197!(?L4i&fPhXbe0cdag-pC*Fq&*;`VKmx{(tS(V${#2+4* z)4H|c2r8&AcT21JPh{>^P47sx8}~_cO>COW3M=dXy{n6Opc)t4vNCQ58YMMngFN@N zyC|$_3+DFSltBrQ8JF9cepIMh^u6g8Cs)BW11qM)=_gA*|Yz(cD6B5A}jF0|8eL*`Hbg0>^Bx_snI_8#lphR?N7JxJfniUq}}< z(Vk~qmagOGb2)mPBF^1KA2-xn5fb0s0}Vw}K0*_b$^zfJJhGB((C4-cW^EYR;9T$A z>fBu@Kw82TKD~46&WCs2z4L|~ht8!-qa$q1hVNWu3{s00AU%!uxYXPxZDzok=!?)KBFIR;(~{3Ya|RFh@|XynLjO4E z9Oz+sf)2`d0#cTl((hhq9RoFu*dw${wyeQ6IKCnDTM=41i+vGzo}jZO{!PSc{Tv-AM!(EYW1NYTnn$dh;r;M+LZZ)W zXJuc6R`wo}8O|a;UK0`OfxRSFdvP-^H1L1S8kY|;RVYFgHenYI)TJ`v6y>5qREjF$ z5^muUUi)ctZtj$FaLjRfI=3Zl+H(`xDO1Ur%9yFwqN{-!iY`&*pWq;aRDx zNZn?s%l@E?KTs8qjazVOaA|OOq-`te8jK5~s<00gJ=|)=lc5|Oo&y zwL-M874c5tS&qGM5xR`2K`)UaF?G$Da~b?;E+VT*uUv;!;Ddj3TpDnmq%OQ?DLG}% zOwz_|Zeo@Ov$J!vG?dFuP0}tbpHo<`jEBSv@mbh#RF);ijAeXTc{qV_9Qz_e->2Ww zpRqohWh4?^!7G6Cw_!X-w2a8Dr5;AKv?m3=99DT$x$I-AVwG07M2k-y_GFWIGR5<# zf#+D+f2nrml6F;*Vt*AS+B{2E)E;P*+Tpcl_27JkH%6*-