From 411225426ffca0b93f4e83f7a488a62a54b17880 Mon Sep 17 00:00:00 2001 From: Garret Rieger Date: Thu, 20 Feb 2020 13:43:06 -0800 Subject: [PATCH] Fix glyph closure for alternate substitution. It was not filtering on the glyphs to be retained. --- src/hb-ot-layout-gsub-table.hh | 1 + test/subset/data/Makefile.am | 1 + test/subset/data/Makefile.sources | 1 + ...itution.keep-layout-retain-gids.53A9,53F1.otf | Bin 0 -> 5108 bytes ...substitution.keep-layout-retain-gids.53A9.otf | Bin 0 -> 4676 bytes ...substitution.keep-layout-retain-gids.53F1.otf | Bin 0 -> 3012 bytes ...p-layout-retain-gids.retain-all-codepoint.otf | Bin 0 -> 6820 bytes ...ernate_substitution.keep-layout.53A9,53F1.otf | Bin 0 -> 4984 bytes ...b_alternate_substitution.keep-layout.53A9.otf | Bin 0 -> 4524 bytes ...b_alternate_substitution.keep-layout.53F1.otf | Bin 0 -> 2816 bytes ...titution.keep-layout.retain-all-codepoint.otf | Bin 0 -> 6728 bytes .../data/fonts/gsub_alternate_substitution.otf | Bin 0 -> 8448 bytes test/subset/data/tests/layout.gsub3.tests | 12 ++++++++++++ 13 files changed, 15 insertions(+) create mode 100644 test/subset/data/expected/layout.gsub3/gsub_alternate_substitution.keep-layout-retain-gids.53A9,53F1.otf create mode 100644 test/subset/data/expected/layout.gsub3/gsub_alternate_substitution.keep-layout-retain-gids.53A9.otf create mode 100644 test/subset/data/expected/layout.gsub3/gsub_alternate_substitution.keep-layout-retain-gids.53F1.otf create mode 100644 test/subset/data/expected/layout.gsub3/gsub_alternate_substitution.keep-layout-retain-gids.retain-all-codepoint.otf create mode 100644 test/subset/data/expected/layout.gsub3/gsub_alternate_substitution.keep-layout.53A9,53F1.otf create mode 100644 test/subset/data/expected/layout.gsub3/gsub_alternate_substitution.keep-layout.53A9.otf create mode 100644 test/subset/data/expected/layout.gsub3/gsub_alternate_substitution.keep-layout.53F1.otf create mode 100644 test/subset/data/expected/layout.gsub3/gsub_alternate_substitution.keep-layout.retain-all-codepoint.otf create mode 100644 test/subset/data/fonts/gsub_alternate_substitution.otf create mode 100644 test/subset/data/tests/layout.gsub3.tests diff --git a/src/hb-ot-layout-gsub-table.hh b/src/hb-ot-layout-gsub-table.hh index 90666d394..1526dd15a 100644 --- a/src/hb-ot-layout-gsub-table.hh +++ b/src/hb-ot-layout-gsub-table.hh @@ -605,6 +605,7 @@ struct AlternateSubstFormat1 void closure (hb_closure_context_t *c) const { + hb_zip (this+coverage, alternateSet) + | hb_filter(c->glyphs, hb_first) | hb_map (hb_second) | hb_map (hb_add (this)) | hb_apply ([c] (const AlternateSet &_) { _.closure (c); }) diff --git a/test/subset/data/Makefile.am b/test/subset/data/Makefile.am index 20705829a..15f0811dc 100644 --- a/test/subset/data/Makefile.am +++ b/test/subset/data/Makefile.am @@ -18,6 +18,7 @@ EXTRA_DIST += \ expected/layout.gpos3 \ expected/layout.gpos4 \ expected/layout.gpos6 \ + expected/layout.gsub3 \ expected/layout.gsub6 \ expected/cmap \ expected/cmap14 \ diff --git a/test/subset/data/Makefile.sources b/test/subset/data/Makefile.sources index 2b57ef02f..dd4fff84b 100644 --- a/test/subset/data/Makefile.sources +++ b/test/subset/data/Makefile.sources @@ -10,6 +10,7 @@ TESTS = \ tests/layout.gpos3.tests \ tests/layout.gpos4.tests \ tests/layout.gpos6.tests \ + tests/layout.gsub3.tests \ tests/layout.gsub6.tests \ tests/cmap.tests \ tests/cmap14.tests \ diff --git a/test/subset/data/expected/layout.gsub3/gsub_alternate_substitution.keep-layout-retain-gids.53A9,53F1.otf b/test/subset/data/expected/layout.gsub3/gsub_alternate_substitution.keep-layout-retain-gids.53A9,53F1.otf new file mode 100644 index 0000000000000000000000000000000000000000..1d67ee49575190233a88abac605469c63d230db4 GIT binary patch literal 5108 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 SU#K+$yv1iwgL(7QneK@=jt%MMNbkPeoor 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 Wbl{i&pjG5f08jB*!XsJ($>F~$f1#xS literal 0 HcmV?d00001 diff --git a/test/subset/data/expected/layout.gsub3/gsub_alternate_substitution.keep-layout-retain-gids.53F1.otf b/test/subset/data/expected/layout.gsub3/gsub_alternate_substitution.keep-layout-retain-gids.53F1.otf new file mode 100644 index 0000000000000000000000000000000000000000..2fd89a4ade6865bebc9bfcaf876ed15761d5faa9 GIT binary patch literal 3012 zcmbtWdvH|M8UN1SeX-eWAjx6~uzQJ-LL|F+kW>v51AzoW%0@O~C!;nu*=09mUv4gW zSjI_(I!-|wtWi*=VqYU|^&iUAj@2?&N5(p1mN@93wK|S%P|=35JsWQz{hhm;2q|r6 z%DHpC_xZl>ob#P?uCKk_M-Cb$i8>pbn&j5^Ht!{(FNvg~<~E;yV}I*zB5NyTa{eV4e6!nW&7=}^m3MV8PaYkU1ZeC?9#EDzv`SiYdY}Qa(Za*DTk|= ze0KM8qL~?c2|t&YHra2Odcj_rUbu)XjF}xn2cLfF{q=!(S8z)p7*l)Hp~iS(DA^MV zt8!IE<=Qm@*2ubr>>uh=gV8>DORPJdOvICl8Vty*!m66M#p@jy81N{#`v+E0OY1reP3H^~r`Y6OG}%WNeA0zGP+JD9KTNUu1z38p z5*cYf9iWHkVfrDB&_QNq7G`A&n2qHyJIiI?b2uDrZ}Iw6+B?SH8Rw;M@!Q_!KN>IG z!+$qb?ws~&rD?B)N5`DniHpVKpYo`gk7@PJ&b^~Ay7_SnH=g12@%x`P{=R5i{ml*4 zEmnT<*6AvXFW?K`mN>HKr}sSm-QPTQ;wLA5Zq>VcU|*nfDH0K_<1|;s(zz*iHpQz?^O`gK*)b$@YO2OLovT%+b1nSdlv6u7{dwv` zey^E7uPM$u?;m~1&Cgr-`45KP)ZVQ#@$m-jV~bW5IMT#dJZI9*T1uXYf8ydz=D!_1 z$vva){)4eYgNLkI@%Q)j+&vrGamQ)ih1g>vcJ25VXZT-I2>qw2Y7x3tguV~!@XGY1 z)CGQ@neWrOoVO1@{<51Nw(#rT=GUK}IM@C{(fWGLUai?SS<^Q*TpYG&>{rnXF5YFH zeEN^P@-cV+Nc7O)VXNlacYkQdQU@6rTd*iC+gBc&O68|l2>eC9_V9ibys2rw`MB+P z&hdBccJ$l>_C;UqDg3ANYwfGH*K=Nd!VN3>h&Vf3&Fg^_Ttg+v3ZlAG~x@_vE5w z(iUS~Ex2fLf1rjZ+r|LHjYP5B5Qd0?V|8V$=<7 z68;2KbX@?NRk~jl@>|G@Z$SS%u$cAc(MLw1TTLF?hVd%8h@rr%@ZLx*v=z7o*Ro98 z5j8}+DFS_R9#;tu75LUt9W`TreSmdyK4(2<{Ov+c<@3hZVU`;)Y6ESe9f*@e{2pWz zL)^=Kw;{VLC1E{pu?8{fpVN8hCah*1R!N~=_!D#6i5w&F+69e=YS3$`8W~pr&(8jT zXNocqHHZBq>=TLy9q*Pd3yWRW5i>Cue3d@Yng-dbUGLv`mNM*@I1{ z!;=HjN_2xm_|zSd12=T0tpZ}Yc^2mjxyTA_X0Ld2uhPV58{)Z$ZER|7C##-6UdODh zu4g+9Pmo2|ujw92Mrd6q8SJIjuo4T=oq#=bq*sY4G!aqM7%Q3cA)@Ed}JHqTd?o(tAa&t(A>(v3RJ#2!J$NdK1rcKz3p zHgbyU&_}qlSkB@VRIVryl`Xs$xGV9^o7m!OfsuH3ge}uyi4Ir&f09_FyO(*c1)^#) zRn2tF^eV6Gwi si#KMjfnGny%p;&%H&1j03w=4Ug~YzRgp&-ej8;l7!z44GS=)kt0gVU0vH$=8 literal 0 HcmV?d00001 diff --git a/test/subset/data/expected/layout.gsub3/gsub_alternate_substitution.keep-layout-retain-gids.retain-all-codepoint.otf b/test/subset/data/expected/layout.gsub3/gsub_alternate_substitution.keep-layout-retain-gids.retain-all-codepoint.otf new file mode 100644 index 0000000000000000000000000000000000000000..e737ed1ff83bcc313f2635e2c22106fa9b3d5fe3 GIT binary patch literal 6820 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 IJbSGE2Rn~?00000 literal 0 HcmV?d00001 diff --git a/test/subset/data/expected/layout.gsub3/gsub_alternate_substitution.keep-layout.53A9,53F1.otf b/test/subset/data/expected/layout.gsub3/gsub_alternate_substitution.keep-layout.53A9,53F1.otf new file mode 100644 index 0000000000000000000000000000000000000000..685c2c90cb16a6074f60e284082be25e668f8825 GIT binary patch literal 4984 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 S#2dnV@DZO8){51{!~8cU>|!SX literal 0 HcmV?d00001 diff --git a/test/subset/data/expected/layout.gsub3/gsub_alternate_substitution.keep-layout.53A9.otf b/test/subset/data/expected/layout.gsub3/gsub_alternate_substitution.keep-layout.53A9.otf new file mode 100644 index 0000000000000000000000000000000000000000..fc1f61bb94547c69bd57676bb2a301f9abb327f2 GIT binary patch literal 4524 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 HObi9mcVFlRNH0?#s(d zLM-E;qz)}s0gZw%qV{8CD*lsV>)1Ms)t0f&G$9Ul@S}D*wy}yDM%{~VApUmm5>tk8 z9NC?BpMAc5`|R$syRW~k%}-9+MGCbyH8-m(78jQg(dR_U4Zc=?U`_9a?L@Xykg2}F z?W?a2)OCO#BQm}34^&qFzPykTnIDC|eY1a)Pq`aC$`SVV&X|@gEBNFE*gL=es%dVfg&OGZ(L=EwbzQtOkxC{~njQ+OOCq|Syt%TnudmOm2_SE0B38N7 ztBTmwt{zoW^^_J2#k5qnn%JuP5{Ym$Brv?vLQGG^{M43KH9Nse<(FNB3STH5N_BN! zUWwTx!YM5o=@F}C;dRzrs;V11b^Z>8Ojv42vCv|b!TyXcvXry+P2Mn)t{i6n80BSe z^4s3xkBrXW$zPnPa7|VkW$8*Aj}5zw6Bmj`KjJYfA2u3X?Yjs6&$E_|JJNj2% zKj_)MFLtQ!u-zzsU?A9D?A&siYs2Zh5q5Tj*PQ0HXZZ19gmG%3)-{=D)THxl{GJh) zadPsLk$>@fto#p#=DPF#!IwS!oQsfX)~N>4)S;l^Etd7f(v5n-(f>NK`0h z3Ipya+ea3h@t>Q11o`?5Wp`0ETMKC}R5Qgs(GyeDMeirrU>a6?-;&ncrB+Dv}~qdi{2`%OM*Hmgnj^CJ+Kc^3{<6c6sJyTQ@|6g zCUrq*mPlM3@|&p=wNF+rET+-C(lZ9#Qu5M9`0Mz@7#dIodK0zKde9bJi7IWvsA1Yp zQRq{baLa*Eg}Q?3$tU;Fhu$>iG-3vC8)B-s#J?W1Tm!$=w3aqwoD|0ILNsxVI~%(d z(fz+9BI6co5U1W5otJLJYSv?wH0lPPnA=vw7zJtvG+wI3S4TC7xC->UM~XBMIfwlu z?2~*cuD5XjakS8<5N?a_PM#)e0D%fv{1G(>jUG$0z5-z5$2AR zbP7xfL{40pnX&|gWlS?v1SF#Znc6MhyUP^eorCe*#MU%#Xd^o!LlJSwBK2&m=?St) z{j$#fRFqbRQ=x9!5Yggcx)W^|9qHEM8jVFYJCZn-s}Qq`7Q+f?kAh(bYi(zUWLRxKa4izUbCsw^$Mtbaq+-$HZgx~#vI=F!zS z2?E)S(_BDB$n^|oryo!;m0yBYE@Q#k$ynyle7autnb;%97|C}W)cviVIph-AAw4`< zs%B{kRcKmNXLGNl-Il!JMz-Ke+GwIP$`;DDRJKdLpClgb>}K98X^}OVtY(tpW|tC? znM|HF@qb`NUX&rLGc{vjhrS%29eVMO2o%9F?AvV43dwXOB`IGO!i}>M_YgdA7(c&= SlZY3noE9suNE9?Pg?$Z?G_Sw_ literal 0 HcmV?d00001 diff --git a/test/subset/data/expected/layout.gsub3/gsub_alternate_substitution.keep-layout.retain-all-codepoint.otf b/test/subset/data/expected/layout.gsub3/gsub_alternate_substitution.keep-layout.retain-all-codepoint.otf new file mode 100644 index 0000000000000000000000000000000000000000..c55b233596460b2605385f86f5168e80bc331c93 GIT binary patch literal 6728 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 literal 0 HcmV?d00001 diff --git a/test/subset/data/fonts/gsub_alternate_substitution.otf b/test/subset/data/fonts/gsub_alternate_substitution.otf new file mode 100644 index 0000000000000000000000000000000000000000..188b8e8b5470607d03253dce91732d91df193a22 GIT binary patch literal 8448 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

BEg#kaVR>z-Y?RRG6?sJkEA?);UV7X z^Kg|q0=yD$`Rc=%252Z62|L(3ngn(>1sVmuqajE--*bryja}vDtwJ`d+pzMq|ML0bWg@P~hk3OD+D8k4HZreQ*kxpt0!vem*pM59VMT zc&6s`QyB0sD8Z*S1=;sgSa3F&g6GN#r1`Ck7CISc^z$A7JG2=x2mex^B;a4rNoL)j zPWvBwbKuQTp^4y^>gzSVKkegAp_$0Z&o4ZlD*I33u;`gKRP}!r+gMY(!lM6^*meqa zAT0XdkHez^!l|RW_=GM#_3u$4!voe+XaAEJtXy0tVl1Yj*FcO#9}}hX(@{F_E(Lxv zk)j8y%nb%7UGC~eMI!}>ro7V zBiB!pLSAeoYKNrJ5T1gMaxAQ$g`k5etSmFI>51TPT?9EZs2K~Zcr27B!D}Y=0|9>e zCwL*Dr#TucZS3O(@!N;edG!6zYFJs5V4Y6}e&+DbhIcjOg8&7shIq1$=R}158wl^E A!vFvP literal 0 HcmV?d00001 diff --git a/test/subset/data/tests/layout.gsub3.tests b/test/subset/data/tests/layout.gsub3.tests new file mode 100644 index 000000000..45b85f5b1 --- /dev/null +++ b/test/subset/data/tests/layout.gsub3.tests @@ -0,0 +1,12 @@ +FONTS: +gsub_alternate_substitution.otf + +PROFILES: +keep-layout.txt +keep-layout-retain-gids.txt + +SUBSETS: +厩 +叱 +厩叱 +*