From 9909d11f6f7b3eeddc00a981e24f26559d9ef3b7 Mon Sep 17 00:00:00 2001 From: Behdad Esfahbod Date: Tue, 28 Jun 2022 15:59:40 -0600 Subject: [PATCH] [indic generator] Fix regression Fixes https://github.com/harfbuzz/harfbuzz/issues/3690 --- src/gen-indic-table.py | 2 +- src/hb-ot-shaper-indic-table.cc | 12 ++++++------ .../e716f6bd00a108d186b7e9f47b4515565f784f36.ttf | Bin 0 -> 6260 bytes .../in-house/tests/indic-special-cases.tests | 1 + 4 files changed, 8 insertions(+), 7 deletions(-) create mode 100644 test/shape/data/in-house/fonts/e716f6bd00a108d186b7e9f47b4515565f784f36.ttf diff --git a/src/gen-indic-table.py b/src/gen-indic-table.py index a2004e4fc..0ff3ef4ac 100755 --- a/src/gen-indic-table.py +++ b/src/gen-indic-table.py @@ -458,7 +458,7 @@ for k, (cat, pos, block) in indic_data.items(): if block.startswith('Khmer') or block.startswith('Myanmar'): cat = position_to_category(pos) else: - pos = indic_matra_position(u, pos, block) + pos = indic_matra_position(k, pos, block) elif cat in smvd_categories: pos = 'SMVD'; indic_data[k] = (cat, pos, block) diff --git a/src/hb-ot-shaper-indic-table.cc b/src/hb-ot-shaper-indic-table.cc index 3d3698d73..8994f3ca5 100644 --- a/src/hb-ot-shaper-indic-table.cc +++ b/src/hb-ot-shaper-indic-table.cc @@ -109,9 +109,9 @@ static_assert (OT_VPst == M_Cat(VPst), ""); #define _POS_T POS_ABOVE_C /* 22 chars; ABOVE_C */ #define _POS_A POS_AFTER_MAIN /* 3 chars; AFTER_MAIN */ #define _POS_AP POS_AFTER_POST /* 50 chars; AFTER_POST */ -#define _POS_AS POS_AFTER_SUB /* 45 chars; AFTER_SUB */ +#define _POS_AS POS_AFTER_SUB /* 51 chars; AFTER_SUB */ #define _POS_C POS_BASE_C /* 833 chars; BASE_C */ -#define _POS_BS POS_BEFORE_SUB /* 31 chars; BEFORE_SUB */ +#define _POS_BS POS_BEFORE_SUB /* 25 chars; BEFORE_SUB */ #define _POS_B POS_BELOW_C /* 13 chars; BELOW_C */ #define _POS_X POS_END /* 71 chars; END */ #define _POS_R POS_POST_C /* 13 chars; POST_C */ @@ -276,7 +276,7 @@ static const uint16_t indic_table[] = { /* 0C28 */ _(C,C), _(X,X), _(C,C), _(C,C), _(C,C), _(C,C), _(C,C), _(C,C), /* 0C30 */ _(R,C), _(C,C), _(C,C), _(C,C), _(C,C), _(C,C), _(C,C), _(C,C), /* 0C38 */ _(C,C), _(C,C), _(X,X), _(X,X), _(N,X), _(S,SM), _(M,BS), _(M,BS), - /* 0C40 */ _(M,BS), _(M,AS), _(M,AS), _(M,AS), _(M,AS), _(X,X), _(M,BS), _(M,BS), + /* 0C40 */ _(M,BS), _(M,BS), _(M,BS), _(M,AS), _(M,AS), _(X,X), _(M,BS), _(M,BS), /* 0C48 */ _(M,BS), _(X,X), _(M,BS), _(M,BS), _(M,BS), _(H,T), _(X,X), _(X,X), /* 0C50 */ _(X,X), _(X,X), _(X,X), _(X,X), _(X,X), _(M,BS), _(M,BS), _(X,X), /* 0C58 */ _(C,C), _(C,C), _(C,C), _(X,X), _(X,X), _(C,C), _(X,X), _(X,X), @@ -295,9 +295,9 @@ static const uint16_t indic_table[] = { /* 0CA8 */ _(C,C), _(X,X), _(C,C), _(C,C), _(C,C), _(C,C), _(C,C), _(C,C), /* 0CB0 */ _(R,C), _(C,C), _(C,C), _(C,C), _(X,X), _(C,C), _(C,C), _(C,C), /* 0CB8 */ _(C,C), _(C,C), _(X,X), _(X,X), _(N,X), _(S,SM), _(M,BS), _(M,BS), - /* 0CC0 */ _(M,BS), _(M,BS), _(M,BS), _(M,BS), _(M,BS), _(X,X), _(M,BS), _(M,BS), - /* 0CC8 */ _(M,BS), _(X,X), _(M,BS), _(M,BS), _(M,BS), _(H,T), _(X,X), _(X,X), - /* 0CD0 */ _(X,X), _(X,X), _(X,X), _(X,X), _(X,X), _(M,BS), _(M,BS), _(X,X), + /* 0CC0 */ _(M,BS), _(M,BS), _(M,BS), _(M,AS), _(M,AS), _(X,X), _(M,BS), _(M,AS), + /* 0CC8 */ _(M,AS), _(X,X), _(M,AS), _(M,AS), _(M,BS), _(H,T), _(X,X), _(X,X), + /* 0CD0 */ _(X,X), _(X,X), _(X,X), _(X,X), _(X,X), _(M,AS), _(M,AS), _(X,X), /* 0CD8 */ _(X,X), _(X,X), _(X,X), _(X,X), _(X,X), _(C,C), _(C,C), _(X,X), /* 0CE0 */ _(V,C), _(V,C), _(M,BS), _(M,BS), _(X,X), _(X,X), _(GB,C), _(GB,C), /* 0CE8 */ _(GB,C), _(GB,C), _(GB,C), _(GB,C), _(GB,C), _(GB,C), _(GB,C), _(GB,C), diff --git a/test/shape/data/in-house/fonts/e716f6bd00a108d186b7e9f47b4515565f784f36.ttf b/test/shape/data/in-house/fonts/e716f6bd00a108d186b7e9f47b4515565f784f36.ttf new file mode 100644 index 0000000000000000000000000000000000000000..6786f7c4c04038f9434a55ec73f9d32b92ce92b5 GIT binary patch literal 6260 zcmb7Id2pN8ao_g=_`m}sL4W{w;35D55HArR4idackQ6VGB4z5Z4nia)QUnk2lANlw zV!I>96FF|`0C@|C(6AA{>JFU-r)Ml`4=(%4#rPSFD6zzF9nwH4RdJbOkxf5NRRg> z-kdYZhfeQ(^T|OX-M~L7?elZtx}GJ#&le7eY7w3*)7~ z0e>;MJe_EGAo$Pt&e!c+Ok7x@AX^3veaN|#Se&g7#e0Y}A$U)zw9QqDv1qVUqPsK-J#%#()B>(z$?j1?KwrdQZ&DW6V(O2I7QNhWg z)^|y(y1`d?^~ax)dH-*Z-hBIZZptHHQ_X^vG4}4Cj#lU*{Vg^cWS7}zC0Q~^k4sNW zzg5Lm-%$NpU8SBYuCM*5qo6HFcVG&9j<+6#KfwQaY@u!pbsadMZX+ zLT0p*kf=dvK&fCQx0sJmk&#N#mQw{7=M+0|tNBhPX!+L?QqvfEJs!xhLbZlctb z^riGw^q<@PP4KDA*k6*Hy`H|#KA(=Uuk*Fve@!xyQ94V7Qa(_l_us=?jQ6F?+au;< zANFYat?e^Se~E%S3S|=xpdm38Q!@>dnU>|ST$ac3nT{2(LRQ4|te6>?k(DqLGcyY- zWo4|KRWK{FF*|d}3yJmFiCv2pPw$o(*VpHE%ZgX;lO%Ubau*Vbq%b6Rb(_-8 zC4@vdUo9Qw9<9y=JI5|$Xhu$UI73TR$ObdCin>`&hE`Jpy_%sl^cPf{p=D4+`)Qfh z@lH^JmS~L*(kvxugU;Zsqj7MYO5*D(O@dp+n0bs}!hH);J=SiZ0JVTy$8#FvHpF^! z7_|h-Nq*YIhcrFmJ>9mR?&trpVR$lgJLz#T>uxLkoXcuyPnaCe>)9+NoX)D zz9-P0gI4DRcNnb;&$eC89m|~e*yh}2TedCzG>WGmR&B5HanQLJtL>Q|wto*SSfPi2 z!8{P26G(CU1Jn!~ITgg?gci$q&Hy!T?J%AmVCkeTNH~(?JM-5BHwz^ADQ%*i!AK=W z=1~NgN%6kngJgxf2a$o*+_4Y=dBl`=OMnvj;;yVDP(7V9XPw!!t*x=oq|dj0P!A?cfPKi8vic z&v~AodEDl4j=G$^%yb`;{zd zNdE*9DSeYvSYMrfhjKyZqc1>Tgx-)oLM7?f$(())D;1}2i;SuTa$4Y}C4KsTkWEX- zfL8+dF2>vx)YcC54ya#1#&zYdUg)cW-cDG;&s2hD22cj<#M^f$hw)R(!Iz^zx|+P8 zc&_A#@u~!$g#;aF1q+TEe|Qz3j8OI~MXi$$iLxS>sRgg#OhBL-=dSo*;VvKK-o)2e z{BDhcr;_JSQ#I1a5_wkE*4KpJsRXV%F}47$1Y~jqmy7&aFF8@wsM&AXtL%sD2{y$_ z;e*e>v+S@&hxLI9YXDt~_)v<|;a2if;}w~jpHPO%-Jv)#T3D*s#1SmV2{6X%4Q{D| z0k5^V1>Co^@G==Fm!jwXW8Rr9Av)WE?NN*-+K2i4gtif6@HkBtx4ox?$~1x)>H#){ zb@}<-JsYlrMy#i-#=TuZlJoqe6lA$SL_lX-UWBoHM>UYxrV4f_UhDCdxqf_&ZGCuE z#dSbUjF$f?d!lv$GG<|uf)>Mh3opQZ<8stY7|Sa{j+S1mT`XqvJ(Q|g@gzBY2NDVE znZzDkD&YiGLc*<5VSX`IQpR)ZI^o-QxgbC5o!2AIXA0OcLMTI09ZI>D?g_2e)Yt3d;i7ZQwSg*r5 z(lBtu>X`XWYpC8IY*CMBdi>Uay}Ea@Mw?>`*Xk#VtmYE8)8T6Ftd-q+edU%C!@^R- zxXxeS=$`Dec31}c3tD|ubzR}M=8{Nb^kA$~&CG306;V%_-(MRl9gz&aN_)A%^TkBp zgLSaa4Lin#efYJ4Q?t`k=p`Y4mfgb5Le7DO+_*?%kShyAe0B+jg+sz1uD{B~Em34_ zX8tn+jg#S)f#I>TT7wjx8(X^6)$5-)(S7ATUnIBCSGH%5Q@8Ko@xe2ZcuU(zL0)Jw zd~7my%sS$^G&y*_m%SX`n^)+v+Z-gNrq~PVr&Su@zX!l$Zw13hI3Pghia{@~n6E@Z z*Xwn=cz1G*#jd;CfK0 zvC#wwvKepc%MDE>22)QjbEN*sWzV&k@+uvlx?*+Y==Hf)bCtJ$QnH5JRjn2N!eaf9 zT9aRH&DUs#w6e}zny*z4MKiY{tm@0$1}$kBe#>WW!)ws!;K#ZRfDV9#KbGph|9Z4f z1@--t_Z#PYJY$^ATz%>ChhLK3spkA>>ql7b`r6{%yV57DSMG|I{bc*DsOn+;06p-L zcjflnZQ^aDiFo;`sOlmaI+j4+x2Izb)u=wM_(6eI0va z#O`97!1wvzUH;L0~Wo$smB|w=;$7JYEBk zQl-0db8K{@i)p$eDqC|yz;E*Z@zKLaj`~L1+D5%M_pQ3T4Y7%qL@d8F&wU~`c&@#D znN5^BTK#*<9VXqK12faZjT3534F0R&92qo_gkM z+kv{qAg`|vZN?{hRq-wWdw8J#6Av~%|K1L+QGX=2ND1AS|EOastVHg8WAzKiPJO<* zu%M}@Dq7JVkIi41`1-R7uojcr`LjrUCX}O|yq9tnZSUpYQP-C&Jy2jSl+}>1MQ^X3sZF4NAo^L+V5ID4dc%-Ibw5DUv z{y|UuelXfp!$%tYrr<{IWdKuW7zq#*tt&Z{E_)ur0b|1>d60I7c<)0YNNv? zrr{qq_`OJ6+5x$)vZf_^@(+6b-IrJ5$5YSytZrvl%v@vW?aHq!w^;+O8vn?Ni7$R? z+1KaYeCFk|tNgbTOO3NXga+KZ$QTq3FKc}Y0z9eWK;cY0iAF^R`}3v)q0-5xkB6gY z4~5j4p5D%pgL0{>&>1r6LtclU-HIGtj$MB3#o@NP#mBGCm>NoJ_O&$)Jyu?kS8jCI zyAYY*e=T(-{V(aiL&ZrNWGj)wxrbn9UYKyF)w;!YK;NPjX)HBc8#S4twKXkHdz~fZ zu64RSemSnL@j5DN-62nVUz^Y6_Exof_H+e}fr^$YtFO-It@qignyf*`!M4a4B84%v zBpKOvP&4V9e*nG^{2B0CRC>Qib4gKZSjta70*O&-NdExZzL$D4olalFZ>_9MAGOGG z>h|$ZdWRgx+uDyi2HlUP-kdpWKiU&NVw*qBtt?LcDt#OC@LNKu5IBf@+U18|Zf{@u zhxso=+v0zf`qk`_$kp+Q$jOtK^HS;!G3WlhuAh0buGh0PG@SJG)?G=xaeBr(IW%~v z>hvsrUvJNoWSk`5y9evs`9Ph&y7`x}_QoqGPJTMn-gPzg#`NLv==kV(_{4F{t<8 literal 0 HcmV?d00001 diff --git a/test/shape/data/in-house/tests/indic-special-cases.tests b/test/shape/data/in-house/tests/indic-special-cases.tests index 86106589a..016f8947f 100644 --- a/test/shape/data/in-house/tests/indic-special-cases.tests +++ b/test/shape/data/in-house/tests/indic-special-cases.tests @@ -1,3 +1,4 @@ ../fonts/3cae6bfe5b57c07ba81ddbd54c02fe4f3a1e3bf6.ttf;;U+0CB0,U+0CCD,U+0C95;[gid1=0+1176|gid5=0+1161] ../fonts/3cae6bfe5b57c07ba81ddbd54c02fe4f3a1e3bf6.ttf;;U+0CB0,U+200D,U+0CCD,U+0C95;[gid2=0+1334|gid6=0+358] ../fonts/3cae6bfe5b57c07ba81ddbd54c02fe4f3a1e3bf6.ttf;;U+0CB0,U+0CCD,U+200D,U+0C95;[gid2=0+1334|gid6=0+358] +../fonts/e716f6bd00a108d186b7e9f47b4515565f784f36.ttf;;U+0C1A,U+0C3F,U+0C32,U+0C4D,U+0C15,U+0C42,U+0C30,U+0C4D;[civoweltelu=0+766|latelu=2+709|uuvowelsigntelu=2+661|kasubscripttelu=2+483|rahalanttelu=6+593]