From fcd7f33bbb12d66b3a50caa448cb91ef7c0daa9e Mon Sep 17 00:00:00 2001 From: Qunxin Liu Date: Mon, 10 Feb 2020 10:36:50 -0800 Subject: [PATCH] [subset] GDEF glyphClassDef subsetting support glyphClassDef uses the same ClassDef format. However, glyphClassDef table uses predefined class values so we do not remap class values. --- src/hb-ot-layout-common.hh | 42 ++++++++++-------- ...1p-Regular.keep-gdef.1D715,1D7D8,41,42.ttf | Bin 0 -> 2148 bytes .../Mplus1p-Regular.keep-gdef.25771.ttf | Bin 0 -> 1860 bytes ...eep-gdef.3042,3044,3046,3048,304A,304B.ttf | Bin 0 -> 2572 bytes ...eep-gdef.3042,3044,3046,73E0,5EA6,8F38.ttf | Bin 0 -> 2816 bytes .../Mplus1p-Regular.keep-gdef.61,63,65,6B.ttf | Bin 0 -> 2116 bytes ...eep-gdef.660E,6975,73E0,5EA6,8F38,6E05.ttf | Bin 0 -> 3112 bytes .../Mplus1p-Regular.keep-gdef.660E.ttf | Bin 0 -> 1852 bytes test/subset/data/profiles/keep-gdef.txt | 1 + test/subset/data/tests/japanese.tests | 1 + 10 files changed, 26 insertions(+), 18 deletions(-) create mode 100644 test/subset/data/expected/japanese/Mplus1p-Regular.keep-gdef.1D715,1D7D8,41,42.ttf create mode 100644 test/subset/data/expected/japanese/Mplus1p-Regular.keep-gdef.25771.ttf create mode 100644 test/subset/data/expected/japanese/Mplus1p-Regular.keep-gdef.3042,3044,3046,3048,304A,304B.ttf create mode 100644 test/subset/data/expected/japanese/Mplus1p-Regular.keep-gdef.3042,3044,3046,73E0,5EA6,8F38.ttf create mode 100644 test/subset/data/expected/japanese/Mplus1p-Regular.keep-gdef.61,63,65,6B.ttf create mode 100644 test/subset/data/expected/japanese/Mplus1p-Regular.keep-gdef.660E,6975,73E0,5EA6,8F38,6E05.ttf create mode 100644 test/subset/data/expected/japanese/Mplus1p-Regular.keep-gdef.660E.ttf create mode 100644 test/subset/data/profiles/keep-gdef.txt diff --git a/src/hb-ot-layout-common.hh b/src/hb-ot-layout-common.hh index 8fc9e07b3..3660c2043 100644 --- a/src/hb-ot-layout-common.hh +++ b/src/hb-ot-layout-common.hh @@ -78,8 +78,8 @@ static inline void ClassDef_serialize (hb_serialize_context_t *c, static void ClassDef_remap_and_serialize (hb_serialize_context_t *c, const hb_set_t &glyphset, const hb_map_t &gid_klass_map, - hb_sorted_vector_t glyphs, - hb_sorted_vector_t klasses, + hb_sorted_vector_t &glyphs, + const hb_set_t &klasses, hb_map_t *klass_map /*INOUT*/); struct hb_subset_layout_context_t : @@ -1573,16 +1573,22 @@ Coverage_serialize (hb_serialize_context_t *c, static void ClassDef_remap_and_serialize (hb_serialize_context_t *c, const hb_set_t &glyphset, const hb_map_t &gid_klass_map, - hb_sorted_vector_t glyphs, - hb_sorted_vector_t klasses, + hb_sorted_vector_t &glyphs, + const hb_set_t &klasses, hb_map_t *klass_map /*INOUT*/) { - bool has_no_match = glyphset.get_population () > gid_klass_map.get_population (); + if (!klass_map) + { + ClassDef_serialize (c, hb_zip (glyphs.iter (), + glyphs.iter () + | hb_map (gid_klass_map))); + return; + } - hb_map_t m; - if (!klass_map) klass_map = &m; + /* any glyph not assigned a class value falls into Class zero (0), + * if any glyph assigned to class 0, remapping must start with 0->0*/ + if (glyphset.get_population () > gid_klass_map.get_population ()) + klass_map->set (0, 0); - if (has_no_match) klass_map->set (0, 0); unsigned idx = klass_map->has (0) ? 1 : 0; for (const unsigned k: klasses.iter ()) { @@ -1593,10 +1599,9 @@ static void ClassDef_remap_and_serialize (hb_serialize_context_t *c, auto it = + glyphs.iter () - | hb_map_retains_sorting ([&] (const HBGlyphID& gid) -> hb_pair_t + | hb_map_retains_sorting ([&] (const HBGlyphID& gid) -> hb_pair_t { - HBUINT16 new_klass; - new_klass = klass_map->get (gid_klass_map[gid]); + unsigned new_klass = klass_map->get (gid_klass_map[gid]); return hb_pair ((hb_codepoint_t)gid, new_klass); }) ; @@ -1644,11 +1649,11 @@ struct ClassDefFormat1 hb_map_t *klass_map = nullptr /*OUT*/) const { TRACE_SUBSET (this); - const hb_set_t &glyphset = *c->plan->glyphset (); + const hb_set_t &glyphset = klass_map ? *c->plan->glyphset () : *c->plan->_glyphset_gsub; const hb_map_t &glyph_map = *c->plan->glyph_map; hb_sorted_vector_t glyphs; - hb_sorted_vector_t orig_klasses; + hb_set_t orig_klasses; hb_map_t gid_org_klass_map; hb_codepoint_t start = startGlyph; @@ -1661,7 +1666,7 @@ struct ClassDefFormat1 glyphs.push (glyph_map[gid]); gid_org_klass_map.set (glyph_map[gid], klass); - orig_klasses.push (klass); + orig_klasses.add (klass); } ClassDef_remap_and_serialize (c->serializer, glyphset, gid_org_klass_map, @@ -1813,11 +1818,11 @@ struct ClassDefFormat2 hb_map_t *klass_map = nullptr /*OUT*/) const { TRACE_SUBSET (this); - const hb_set_t &glyphset = *c->plan->glyphset (); + const hb_set_t &glyphset = klass_map ? *c->plan->glyphset () : *c->plan->_glyphset_gsub; const hb_map_t &glyph_map = *c->plan->glyph_map; hb_sorted_vector_t glyphs; - hb_sorted_vector_t orig_klasses; + hb_set_t orig_klasses; hb_map_t gid_org_klass_map; unsigned count = rangeRecord.len; @@ -1832,7 +1837,7 @@ struct ClassDefFormat2 if (!glyphset.has (g)) continue; glyphs.push (glyph_map[g]); gid_org_klass_map.set (glyph_map[g], klass); - orig_klasses.push (klass); + orig_klasses.add (klass); } } @@ -1957,6 +1962,7 @@ struct ClassDef { hb_codepoint_t cur_gid = gid_klass_pair.first; unsigned cur_klass = gid_klass_pair.second; + if (cur_gid == glyph_min || !cur_klass) continue; if (cur_gid != prev_gid + 1 || cur_klass != prev_klass) num_ranges++; @@ -1965,7 +1971,7 @@ struct ClassDef prev_klass = cur_klass; } - if (1 + (glyph_max - glyph_min + 1) < num_ranges * 3) + if (1 + (glyph_max - glyph_min + 1) <= num_ranges * 3) format = 1; } u.format = format; diff --git a/test/subset/data/expected/japanese/Mplus1p-Regular.keep-gdef.1D715,1D7D8,41,42.ttf b/test/subset/data/expected/japanese/Mplus1p-Regular.keep-gdef.1D715,1D7D8,41,42.ttf new file mode 100644 index 0000000000000000000000000000000000000000..8b6ddd8f687220ff5fe7d9b4a49c1d4962c22fad GIT binary patch literal 2148 zcmaJ?TWnNC82)F@-bxGIw%fI`AanLW5%*HM+ZHcSw-*=Mf-b8i=hRAF%F;qwyP>54 z1%rZ$M+=#)61{6MEHnZg+vD*g@z| zLKipW#`D1=&4~9r3;a}JVsffBuDPtxqOeTN>*EdU$zFTT;{qJl^_X(A&~z7&XCUf_YkEU9$tP z7r)qiooO*|CT$K~x$8hz^QG_dM=QSF-@dxo^ogIp9tZD;^5%zeOx3wh`^?r{LZftFV7}OGTuKGZb{mNb4>z9o+S0!$ZoqFPt{J{rr zSu^y8HF0hG;7*I(#l%(pJtCA2EjwHM?&m$5Z@zD3@%Fv>i?fqMU7Ju{9Gn}$sZkv* zCt6kG@t=np+O?LrW`w=9;kee)t|cze0t@)ZHy>|UyriuozGO+fqixCJhRxY^y{)?5 z+Ph8(;c#p3rF>hexG>|cTG74t@x9$Es@&(&wTX>)p15;kqV^8~#o>*(={*Y4e&@|F zRF9hga~zZM5``#3Hofj>toor{AHC=ss$TsAk7#F=`-8+K>R!{C8tviI;o?*7n_Nk# zK4nu68zY@RM+V; zV-aRmqgv--U5)QmV0GcA?49_|Na2)D&gG}R7$S9#)uS*vFgh`CT4(B=q3rC;N6rA2 zq^P92K6z2bl)clIB;)c1>4}(YEXTIb5~n1qi#Nn1i;7uU6^Th6?aP{17?vKBT6BAZ zkg1HR%aj$9uBh6o8~Tmrr=hp45aP^pp|7lvp-Xqfl<8^9aab1c+|l`i12O4|&V<<^ zu!}>3gCR+P@kVEsI;Pa0CSSC+MqJVqlNC|1Pm#O^d?B@EJ%*63#$HJo)6UyDp@fS= zx^9JRN6VHqML4gVoj>H)K~fnN?>psGMMabJMg~nG)*9*D4q=L|TgnhBZoXm$wXnrn zJDoFZVH*yeAt`Ih6e3ZdqLrzFKFJ+_fknW%Eqtn%@z*HDYsP@@V^LhZi_K%z$4$nCiP@0F;n zbx{;y-=U7JcdKE0rO248Lnq-0M4zD)OLca#z8Cy7OwO!=`;ob@v!<~H*&Cf9EX?S{ z$)~dB3Eal6;m#9GFf39G%k%S#oJ@gOAC<7;TrkCO0bgLH+ax` zk$zmXKo-J&YcXEzplQiKgs8L>9mmIK`PcY9_W%G5od(q1byYxKk5QHx`Jt6%P77#o zPS&WKcFf86pZhb$jlTKxoZUkg(3{jn6I7r*w3D{e2#wMd>PpZ`YNj?w*T9m;x`85? zGl-f1ZXSoE;yP#-)=}7Y(j+>^1|W^WHVI!d|Yq05UsejJ3AE1ADI8YPjv%4r331}@joAie!`tjQtl(FWvMRf kbQ|p~e}HbK-Oi8sNxS3R{WPGREv+cEx}E_Z`v)fb9pewzV*mgE literal 0 HcmV?d00001 diff --git a/test/subset/data/expected/japanese/Mplus1p-Regular.keep-gdef.25771.ttf b/test/subset/data/expected/japanese/Mplus1p-Regular.keep-gdef.25771.ttf new file mode 100644 index 0000000000000000000000000000000000000000..cce2d366060de9044fd82a1956a5592949583807 GIT binary patch literal 1860 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 literal 0 HcmV?d00001 diff --git a/test/subset/data/expected/japanese/Mplus1p-Regular.keep-gdef.3042,3044,3046,73E0,5EA6,8F38.ttf b/test/subset/data/expected/japanese/Mplus1p-Regular.keep-gdef.3042,3044,3046,73E0,5EA6,8F38.ttf new file mode 100644 index 0000000000000000000000000000000000000000..178989adb79b0a39f6024f9c4cf60b98fac7c117 GIT binary patch literal 2816 zcmaJ@4Nz3q6+ZVqb{AA+7uW@}n!d+_-RSPh!moz65(?WAT}ecN;2(xgp0 zy>IT%IrrRizH{z*=RF_*V8S5*j8%ckAeg`au;_K&H8tx}{_wMYf z|5)w;Aj<)`cX}e>PUGZ>WvGwGeP0hUlBVG%(!EG$_w)_#&>M(|w2X9WZ+}Oa7IPbs zHX?283-1^pelm{WKS7$`9`1`+j^+Is@zkRYX`p{-ICdEF(f$_9)s*P`C-C-$L4m$iuPQ+yp0r04tfE9G}lyVAt!#EStB$SLhYJ z9TtLz+#@GMIcm6f&n`3P3;A4o1HW7Xg-j4`}bdO?z&(aX1ws&?9Id&0#1+gtUb=SN zMK5ITQLkUQNY)%UGk0Ka|2M5Kz4GAPjTzKC9{VlV#ZmOz0+5!iIh3HYGnd6IU0R{V zW6l~U^halps2{~3_2FmtXVt&&PI`Fn=j5%j!O+QD=Ah+l-()HA1#*I*18Yp-u5jfT zMFTtwSx}5<1+QQ>v%zR!icNwRKGEzki^#Tnydv7k@D(x4?a=hfQj>FIstwcCf+Km9A+(r{$=_cPx9&dGNzbNhSg`j%5YJ^R%A zKPhRuf1YG-+*sZs&CW_Ksx7;@==m2UXJ>E^lw|q9oFP?%p-@S|qN8UPNx9+hHe#bYAJxs} zyc}9rbg3<;|4Od*lZ~;aRyRTh%xYfP<-@d7->Y14%jP)Tgl~>n|ZpZfF$Z>O-L%n7Xq#qrv zGU~TiKe4!s&(p=3$tMHVHP3jKH_@^Ta}qh*seZQYG8tw9-2MI9evWH z+qGa%JE0AThkJ>fz_$lzl)j0)srXDDKpvrqdb(IgDdi}|Dvjo-c1jx>96S$_+kd=> zYmE)VrUVa>UQ8u7KX|+#gLN3Q1YkLi%uhBi!nqS`e>Kia5j_RH+wTszgKd|F9vm;i z>J9%%-@SSF$9HdBXq(Cz_|<=*XH^w|)oRxC>}|)4QaeRA^shOq^-_$Da6UYrz~-}6zZ&N zk}JiK;8Hl}mP}re8f8I|LM|o2$&L!5@Gbdw);l39%E?cye+pSeLD4y6B{&+=HbNoP zr*kH^ZgMGl=Uf(}R@0*!Js5)JcgQDhZ_kTt4NO>v4DTogxVv>F98ve?Pr)7)9&%OcA)q^QyCRFI2t!NG+I zd!57%DdZ^BDT$5p93jU-b3v9XiV+hny$Kg%p%r+st#U|7cL2n)V}GNG^ga492y`b) zd8{m(FsDgE60Ym9$JYeEsr3tMitkzL!kU8sY+YF6|JUa-I(P=IEb#UC?feB)KtBw? zP8ftO&<#B>jDF>V8*9A}S1rhi;M@QX92-%pAN58sNKCFAYtS%C^do-=t6T$W>P6lV z?&aaS2_?Ic?!{^~h@91^*N1aAd=9a!-jmJvtKmwPuymc-2eap literal 0 HcmV?d00001 diff --git a/test/subset/data/expected/japanese/Mplus1p-Regular.keep-gdef.61,63,65,6B.ttf b/test/subset/data/expected/japanese/Mplus1p-Regular.keep-gdef.61,63,65,6B.ttf new file mode 100644 index 0000000000000000000000000000000000000000..5fa32f37d243cfb47498e92a2afdc07e419a08b9 GIT binary patch literal 2116 zcmaJ?TWnNC82)GW)DHOAS@%zyp9 zf9A~05+kA#3|4Zsu55`=3E7AocVTrux2`_8@ZyIlA`4X7m>fuC$gs_Tu0fwjj*cky z3H~RM{Z;7Gw`I};#UIzd5C88(Je5uiXADCoJ8r^XknZ2T?OerJFA=LkZ|hAZdYp&G zfyc+;Z|sGk@Hl-A{U_)(y#ph=3UAWi&@VxE^$#W!^abP4C124%VpoQR8D!oAUD=r! zNV$*BzkzxtfFI5b4v!eGQxN=@r9U&2%80*wF8J3&uNwuQ<1^M|8uV&eP*oHBZfXrcRY7)YN^@7bH{t%6H~+iu_8waQM13MQK$diS3G}^lZ&R$hc{e8PtldwCa(Bsw=u`(y4-C zng}Bj>yxx1oRSK1rkhO5u2g!x9_5OTZ9q~xYTJ;n4fP?c*sm&A^5m+bMb~+}g2go* z3u;$&RngmZH6bgJ%aNn3$0L*d-tO&k*Q^VEJ8mhw{2CA zsyl?zp)K`XfXC%OOJNpnZf4Q*P8=F@l))QNxuVB3bt|e@n?0DA+KinK$Fwt~(28X9 z8Ky8yLP?4lsVcKlAeQ?Dtk@R}0UWmT%y><(F^Y@~j9a4w@?l;XwRp zeAq56E?hn$qsF++3-~oW6<)p@0C=#eQ{EbDA>`HQIhm0YT2AIPox1X}g;vt`yo~>` z2QfChd>`fQc6x>`(Fz)*4DF^N>Z3IE(g@ZSqKRC53qn`7m}MY7n?7Y?6$7 zmY&Dl3)>J4Qyro*)DPP*eDfj45SfPFk6SqeOC4|wIXW}Qa@rMkahxT81{!4 z5+U#e#zsU-u0AtEvfRh~|2%o?(TrE*f8T#LhS!FhZ%gh?k^dL+CALbNWs<+mR>>dg aWKOaiymx{+EtAF^qrrL>c!+tVv3~(lRmg7u literal 0 HcmV?d00001 diff --git a/test/subset/data/expected/japanese/Mplus1p-Regular.keep-gdef.660E,6975,73E0,5EA6,8F38,6E05.ttf b/test/subset/data/expected/japanese/Mplus1p-Regular.keep-gdef.660E,6975,73E0,5EA6,8F38,6E05.ttf new file mode 100644 index 0000000000000000000000000000000000000000..17d4d07ac8077c7ee94f589e96cc8083dc4f2b1c GIT binary patch literal 3112 zcmaJDYiv{3`8)Uek$3DkP67_}UT$m`Y?B0ICx(#Nj`K8uG!L*tl+?s|k!Q(6P>RUL zpx`BhskBSVx`NWex-xbHYz3)Ofo*D4m1(pHq!v^pHi`b&s-^9UrsR6xxpqt2O}kg; z@qOnz-}`*$0096kb_&o``6?HQYUrekuPfu73c)basbEhNDqnk>4#`Pw4L7+x5WJ{3igC zivs`M(-{hDjvQZx{Ht-@*@KA08F&Zb6A0(^42hi<`ta_~VR6BdiRAyr+14=MNMfN=FK^xSt5>|l=`SK24ucw_xZFV{xTHayT z^LjyV$HqI%c88!V%F1>YQ4*CpD_d14m!vN8|tjjRNH0Mh+fe0TB46b ztIXys`#Pt?!BZ8fG1^QOQ=?dX^yrb)>L;6}=oS2!X|A6QEaQ@;r4>guv{aE}268Vb zlw9`wYUz%fIl1&Y(cQf1y}raMeadvpZ{Ipl*!=FBq+`jt-He%)7JY-g&YIDS%h8KX z07ko3P|8jc(0Si?5_*l;5sU83%68bDMFL__Jv*aTsZ~Nu<05BKk)Ra>hsmrJw6c2z z($(HhsyFGac}XvSswvJdv23(jOY?n}jgp(Wuoxb!?rKrFPODR{F~5}h6bUb;q$jUP zUhb$P<>pLPTB54qb>I5zYGM7F7GwWil4CG5ZVwK4Jahe3g+&FMN(+kftHM%`*US82 zcGjCd_2c}VUN7&K`kpFHQYbyj)ZBZ&k)GW(S-NzGyuUYGAzs6S0DScK>=m|9&Y)C` z$1*5{a`XVEiV-t}pcm98oym-2wrqzHt#$AYbPV>f+~TP-bdO^t$1qbx&XH;98QP@R zY}@MA`fX3`v~_M>xv{G>R6^b*nM-5Dys#jBK~n39LR$Rnvwq_i(yGl%m7dwcSj_MF zd@dh3<@8iLE2Y0|sd4)K;-%@;N6+0aDe-LZl$Mv5dNwQ_QkE+dvIT~nKyGO=Z0ftmZn_q9IDQ)2aHq!W$r zlS=7|Z~k!E_&MoS(pvv>XPNu8M&FIlX5--tsV?)_SosY|0U?j>jX-#?O#WHdN0$WaC(Rm}D+^ zkZ7{5WQw$Qt83}+1cvJ$pZ%_C#z>?k5beFqV-h!#|QCyFgC3(vq%@s zzRaodDvfHedNIqU*}x>{q`u&*u32u+ZD7i>^@-#cVd+udSu)XB*4|#$C{1j0A3W&Z zc0U|;^^ty8eUr4Wqr=rko;%o8VKtged_hI{(Bg+_PgY-L3Z-&?9$QKnvXvZ{hRIpU zk80t8`>@FYV1%IudhB>j~)(>|YUPcQk3 zv9J#*$w%v4SnC1qXxUezQ_>sCeF{5*2^2>^(hodR8lVNzfQJ1Z1PO&gaP}_qV77YlfC{<=ezWE4QBt`6Ke@ zMAld%aH7IgD?)uB(isVHbW&{K`Jf>pLk%&A3QUS=r!i=F6q0P^K9tQ#v2yvM+R_@} zxGJGCw2KRH;hixSlrEJ@M$ue^tBO>Hga{WAWO0HB4FS=OlxQCnE4n)=fP2zpNtE1A}d;3jUb zm-sJhpabNd5;vpfT%;i&>_qJauK@=lc+vCjhQI~jpuEF-fp7!|k?Rnbb>_;NB1gSd zL@fFRJA6#QWfDCkk}2?u3H5<_LXHLJD`~EX8cejz2AoU;S72aU13@v<0uarM{)bEpXd{3N@<5l>w zcn@#ZAsB|eup4^u-Pi-8XxBO@z-sTrSrcM9ajXLi_Vq|LgnT>ENtDh5V>tF8Za0iz zm8(Ne{fHaEwL+XXAZ0hg{SZQmLZm1_u7!x(i1)}4{@u9N36(e-L{1}!f6Rk&u>F9? zHl(JqdgUEd$~Qd!|2|rw@QWU#Z`=R*5v)kGX5-T~zD^;6wFYtQL*`|yxQ%!NTCn8< a(E$7W(k!&F52LH24#h>>L-#)Z$bSG9SJtio literal 0 HcmV?d00001 diff --git a/test/subset/data/expected/japanese/Mplus1p-Regular.keep-gdef.660E.ttf b/test/subset/data/expected/japanese/Mplus1p-Regular.keep-gdef.660E.ttf new file mode 100644 index 0000000000000000000000000000000000000000..b715f26917cdfd681ba3bc8a661c3cab730877eb GIT binary patch literal 1852 zcmaJ>TWl0n82-=9URo&aw%yj^6my25HoCKvZPP}i#HGMCZ6P*Wz?sb^vTV04&6cjT zHXtFAc%d1k^3Vs+5TA@16Fdcz*2DxfCi-F`O2Cj1edNJQ#9JTOj^CMGsv*X+nREW{ z|G)os&e=nZh-xwUDAc=acYSOW3ot=6h*xJ?A z30pXz^!e^BFE6j82iTq!_hSs@4W3u6^?dD0al`DBsa`gxvD>!My|m-K;?217R`DHH zf9+b&XGPV&%U=`uaPh_1{x3dY*`oPOE6MXx=o&TBDXN0R@HL_)^n*!S$=f3-v6>5u z%R9QCt?B+liKus^>D%_La_{M8t@^fmX61eV310^w&bTyKo^&u%GLo-jt%)u#R2%{x8YIz@72FX3Vk^xvs(5jeE+m`tXB(q#F0jo6rANuCEGK$uA9$ zBN>3WB&MMH0rB{tCHiM-}A`r2*+n(;E&94hqzqu(Yn8|O6sz_8Q=0MWgZP3+YI**5u!K?Nph(O#~xpi}PM1ks0R}A3jtHA$jX$W~Am0 z?{yLx!{LtMr85L2EfEJ3{mHZ(i+=n?vocG4sj=r|pv!!$}`G>yL6X$!@u3(`Jla#;6L1oI$R zlZczcCQ057dLHW-bVq3lugzXW%0o8=TMTj%%u(PxWx$Amu?10M&~2k$cuhjegOh-C z1d*no|0jlw5PcxV0kCDR!=8uCazEz(`^nb>!+lA<{r@=_-VOP765i0#kZ&h`>K(lQ bLr}30si%wQDW%?VA9Fi>m!+=EEqnY85Db!> literal 0 HcmV?d00001 diff --git a/test/subset/data/profiles/keep-gdef.txt b/test/subset/data/profiles/keep-gdef.txt new file mode 100644 index 000000000..4252d6734 --- /dev/null +++ b/test/subset/data/profiles/keep-gdef.txt @@ -0,0 +1 @@ +--drop-tables-=GDEF diff --git a/test/subset/data/tests/japanese.tests b/test/subset/data/tests/japanese.tests index d923491be..28264ade1 100644 --- a/test/subset/data/tests/japanese.tests +++ b/test/subset/data/tests/japanese.tests @@ -4,6 +4,7 @@ Mplus1p-Regular.ttf PROFILES: default.txt drop-hints.txt +keep-gdef.txt SUBSETS: 明