From eb7849a806699c1c5efc435cf39ee3a0eb9b9e1c Mon Sep 17 00:00:00 2001 From: Qunxin Liu Date: Wed, 5 Feb 2020 15:29:03 -0800 Subject: [PATCH] [subset] GPOS6 MarkToMark subsetting support --- src/hb-ot-layout-gpos-table.hh | 66 +++++++++++++++++- test/subset/data/Makefile.am | 1 + test/subset/data/Makefile.sources | 1 + ...t1.keep-layout-retain-gids.41,42,43,44.otf | Bin 0 -> 2320 bytes ...t1.keep-layout-retain-gids.41,42,43,45.otf | Bin 0 -> 2328 bytes ...font1.keep-layout-retain-gids.41,42,43.otf | Bin 0 -> 2080 bytes ...s6_font1.keep-layout-retain-gids.41,42.otf | Bin 0 -> 1888 bytes ...keep-layout-retain-gids.41,43,44,45,46.otf | Bin 0 -> 2688 bytes ...font1.keep-layout-retain-gids.41,43,44.otf | Bin 0 -> 2324 bytes ...font1.keep-layout-retain-gids.41,43,45.otf | Bin 0 -> 2336 bytes ...s6_font1.keep-layout-retain-gids.41,43.otf | Bin 0 -> 2092 bytes ...gpos6_font1.keep-layout-retain-gids.41.otf | Bin 0 -> 1872 bytes ...ayout-retain-gids.retain-all-codepoint.otf | Bin 0 -> 3748 bytes .../gpos6_font1.keep-layout.41,42,43,44.otf | Bin 0 -> 1616 bytes .../gpos6_font1.keep-layout.41,42,43,45.otf | Bin 0 -> 1608 bytes .../gpos6_font1.keep-layout.41,42,43.otf | Bin 0 -> 1380 bytes .../gpos6_font1.keep-layout.41,42.otf | Bin 0 -> 1184 bytes ...gpos6_font1.keep-layout.41,43,44,45,46.otf | Bin 0 -> 1968 bytes .../gpos6_font1.keep-layout.41,43,44.otf | Bin 0 -> 1608 bytes .../gpos6_font1.keep-layout.41,43,45.otf | Bin 0 -> 1608 bytes .../gpos6_font1.keep-layout.41,43.otf | Bin 0 -> 1376 bytes .../gpos6_font1.keep-layout.41.otf | Bin 0 -> 1172 bytes ...font1.keep-layout.retain-all-codepoint.otf | Bin 0 -> 3748 bytes test/subset/data/fonts/gpos6_font1.otf | Bin 0 -> 4688 bytes test/subset/data/tests/layout.gpos6.tests | 18 +++++ 25 files changed, 84 insertions(+), 2 deletions(-) create mode 100644 test/subset/data/expected/layout.gpos6/gpos6_font1.keep-layout-retain-gids.41,42,43,44.otf create mode 100644 test/subset/data/expected/layout.gpos6/gpos6_font1.keep-layout-retain-gids.41,42,43,45.otf create mode 100644 test/subset/data/expected/layout.gpos6/gpos6_font1.keep-layout-retain-gids.41,42,43.otf create mode 100644 test/subset/data/expected/layout.gpos6/gpos6_font1.keep-layout-retain-gids.41,42.otf create mode 100644 test/subset/data/expected/layout.gpos6/gpos6_font1.keep-layout-retain-gids.41,43,44,45,46.otf create mode 100644 test/subset/data/expected/layout.gpos6/gpos6_font1.keep-layout-retain-gids.41,43,44.otf create mode 100644 test/subset/data/expected/layout.gpos6/gpos6_font1.keep-layout-retain-gids.41,43,45.otf create mode 100644 test/subset/data/expected/layout.gpos6/gpos6_font1.keep-layout-retain-gids.41,43.otf create mode 100644 test/subset/data/expected/layout.gpos6/gpos6_font1.keep-layout-retain-gids.41.otf create mode 100644 test/subset/data/expected/layout.gpos6/gpos6_font1.keep-layout-retain-gids.retain-all-codepoint.otf create mode 100644 test/subset/data/expected/layout.gpos6/gpos6_font1.keep-layout.41,42,43,44.otf create mode 100644 test/subset/data/expected/layout.gpos6/gpos6_font1.keep-layout.41,42,43,45.otf create mode 100644 test/subset/data/expected/layout.gpos6/gpos6_font1.keep-layout.41,42,43.otf create mode 100644 test/subset/data/expected/layout.gpos6/gpos6_font1.keep-layout.41,42.otf create mode 100644 test/subset/data/expected/layout.gpos6/gpos6_font1.keep-layout.41,43,44,45,46.otf create mode 100644 test/subset/data/expected/layout.gpos6/gpos6_font1.keep-layout.41,43,44.otf create mode 100644 test/subset/data/expected/layout.gpos6/gpos6_font1.keep-layout.41,43,45.otf create mode 100644 test/subset/data/expected/layout.gpos6/gpos6_font1.keep-layout.41,43.otf create mode 100644 test/subset/data/expected/layout.gpos6/gpos6_font1.keep-layout.41.otf create mode 100644 test/subset/data/expected/layout.gpos6/gpos6_font1.keep-layout.retain-all-codepoint.otf create mode 100644 test/subset/data/fonts/gpos6_font1.otf create mode 100644 test/subset/data/tests/layout.gpos6.tests diff --git a/src/hb-ot-layout-gpos-table.hh b/src/hb-ot-layout-gpos-table.hh index e0459c263..3e02931a5 100644 --- a/src/hb-ot-layout-gpos-table.hh +++ b/src/hb-ot-layout-gpos-table.hh @@ -1961,8 +1961,70 @@ struct MarkMarkPosFormat1 bool subset (hb_subset_context_t *c) const { TRACE_SUBSET (this); - // TODO(subset) - return_trace (false); + const hb_set_t &glyphset = *c->plan->glyphset (); + const hb_map_t &glyph_map = *c->plan->glyph_map; + + auto *out = c->serializer->start_embed (*this); + if (unlikely (!c->serializer->extend_min (out))) return_trace (false); + out->format = format; + + hb_map_t klass_mapping; + Markclass_closure_and_remap_indexes (this+mark1Coverage, this+mark1Array, glyphset, &klass_mapping); + + if (!klass_mapping.get_population ()) return_trace (false); + out->classCount = klass_mapping.get_population (); + + auto mark1_iter = + + hb_zip (this+mark1Coverage, this+mark1Array) + | hb_filter (glyphset, hb_first) + ; + + hb_sorted_vector_t new_coverage; + + mark1_iter + | hb_map (hb_first) + | hb_map (glyph_map) + | hb_sink (new_coverage) + ; + + if (!out->mark1Coverage.serialize (c->serializer, out) + .serialize (c->serializer, new_coverage.iter ())) + return_trace (false); + + out->mark1Array.serialize (c->serializer, out) + .serialize (c->serializer, &klass_mapping, &(this+mark1Array), + mark1_iter + | hb_map (hb_second)); +////// + unsigned mark2count = (this+mark2Array).rows; + auto mark2_iter = + + hb_zip (this+mark2Coverage, hb_range (mark2count)) + | hb_filter (glyphset, hb_first) + ; + + new_coverage.reset (); + + mark2_iter + | hb_map (hb_first) + | hb_map (glyph_map) + | hb_sink (new_coverage) + ; + + if (!out->mark2Coverage.serialize (c->serializer, out) + .serialize (c->serializer, new_coverage.iter ())) + return_trace (false); + + hb_sorted_vector_t mark2_indexes; + for (const unsigned row : + mark2_iter + | hb_map (hb_second)) + { + + hb_range ((unsigned) classCount) + | hb_filter (klass_mapping) + | hb_map ([&] (const unsigned col) { return row * (unsigned) classCount + col; }) + | hb_sink (mark2_indexes) + ; + } + out->mark2Array.serialize (c->serializer, out) + .serialize (c->serializer, mark2_iter.len (), &(this+mark2Array), mark2_indexes.iter ()); + + return_trace (true); } bool sanitize (hb_sanitize_context_t *c) const diff --git a/test/subset/data/Makefile.am b/test/subset/data/Makefile.am index 81aee9579..20705829a 100644 --- a/test/subset/data/Makefile.am +++ b/test/subset/data/Makefile.am @@ -17,6 +17,7 @@ EXTRA_DIST += \ expected/layout.gpos2 \ expected/layout.gpos3 \ expected/layout.gpos4 \ + expected/layout.gpos6 \ expected/layout.gsub6 \ expected/cmap \ expected/cmap14 \ diff --git a/test/subset/data/Makefile.sources b/test/subset/data/Makefile.sources index b5b4a1f37..2b57ef02f 100644 --- a/test/subset/data/Makefile.sources +++ b/test/subset/data/Makefile.sources @@ -9,6 +9,7 @@ TESTS = \ tests/layout.gpos2.tests \ tests/layout.gpos3.tests \ tests/layout.gpos4.tests \ + tests/layout.gpos6.tests \ tests/layout.gsub6.tests \ tests/cmap.tests \ tests/cmap14.tests \ diff --git a/test/subset/data/expected/layout.gpos6/gpos6_font1.keep-layout-retain-gids.41,42,43,44.otf b/test/subset/data/expected/layout.gpos6/gpos6_font1.keep-layout-retain-gids.41,42,43,44.otf new file mode 100644 index 0000000000000000000000000000000000000000..92d1e28f9798737625e94efe04b7f63afb5ef022 GIT binary patch literal 2320 zcmd^AeNbH06+drbm&dY!#IP8XKo$ZfG%?xtxl7c<4GU`hAOlHr zl1TVwKVX4v62OqGtj;75V^c_VVzo7>@uSnKRY%Rl_>nr(b{uQdzQq?y&s&@^)A2w5 z^xnDWoZq?ko^$WHZ{DwD`}PvhLK`H2p|H5v@b|*stpR{(0JZM!Z6#$_|MrhB0O(Hi z1xm^`vW_=){2Cx>J>tsUPFp=xP!XI@N4%}ZZmW9s(|>)6dw-8utU<@(YZ|nZXvDcS zPH%JS;slJPjsZ}qPFr(56m7#Pn8Kl{vpMaWq|A?TeE@NHz02dBKMpL$uR?6V6aYoI z6B1QGQIw{t(dleatWB{ri0z_cm8w`}LTp*0yhN9fbpi(b{spN^$^>}o+MigN z1%*%y_rm>90;RA6%Ao>wf(@#GKrJ|-9z4(lEzk;&LOXOpFZiJ!1|bYbU=)tQ37CK< z;Ur%A44j1-cm~eH^Y90lrIIKeVF*h&!V`gr#6--bfG|eFFoa{?L}KHE2__ zwb_cuQN(I(syjND7nOUWlJ)3|QTcFGBb|v}zYu*p`qOCA|Ig9i%_UE2ucS=sbXP*U zMfiCp&!)$v{?bxVD<5Sq%v0M{%T$@ua~b+TU%=;E-Wlu+b!UwhTXQb%eCy{@?JMVH zI=rvn)7yAZPA{*KbzOGf1Kka$>ms$TvD&lc@A_X3UJku?;<-Q5(KG(@hiAs$t~_UZ z=7B%SoO{a?`_BFLLf0R^9QkMWSH7o*{4+I&Whx-6LNe^9eF48eu-rYhv*DPXj;;Gf z(5J*!&#l#yVD+zRI^^|x%jC>zd3lYT@uFNPW!oggr#dFTO-0LN@^$?Svr_(BGqP&Rv{~LEtEci$)_pbbdAM`L zHxi~}dGZVTlrLic(Z4qGYU}HLbmZ|sFtW;1+iY*Ni*o*EIlo!93{;=%IdXbjDtJfA zyDa6Lo{e6-aOT9sfs=dt=&pw!>Zn*@4c;?aw14-3vGVC*IwpRzQJ*5s%$fDvk(@Q1 zg3o)XA>0^l8ulLDH`p=U8Sb{VIvScv9p-5{>$5%4_K9CU8Mqqk>VETC`jxZYlDgxi zzKMg8_DIL^meJO+&Y|{!_Wu45_Q7)>HGR^1wd?r);RC&g!fnF`1N5WUK_Bc3`ucrG zdXDbz`eXw@QW&FQ1x<^vw*7_l);HHbhTK<@#Vndqr)vbC39X z$8_6;zep?J^bYq9cMWv~9RrS_la|V^hwwdm{rVLAPLv-a*iCKE?@GJl-$1D^p$A&? zo^Dh02bKSQ5HjZb6Is=75GH_1@!}u&5~cjZf7DH>!9vF}U=5RJQD2N#CZfJQUfCP# zvlUdyvs4JFLPuSruEE#9#x6eS3U;KaMsOfux#4Gs+_+{>e4as?Gse%MQX-+1j#`VFheR--PQyVBqXogcL H+hO{D(dtko literal 0 HcmV?d00001 diff --git a/test/subset/data/expected/layout.gpos6/gpos6_font1.keep-layout-retain-gids.41,42,43,45.otf b/test/subset/data/expected/layout.gpos6/gpos6_font1.keep-layout-retain-gids.41,42,43,45.otf new file mode 100644 index 0000000000000000000000000000000000000000..28d5cb4955433aedeeaa403e83d43dee5cecb39d GIT binary patch literal 2328 zcmd^BeNa@_6+drbm&dZQ5?Nw2=z`EnrMmCEeQ#OgN01MziNQg!T3h25*0Um?y9+J| ztyN)Rmyab96jpG-ZD$k>)~Gc#qti%@G0C)(OxtP8BxaIHGSf~bO=x$?Go|M(HgP)r zuYdOL-1B|!Ip^Lt_qQe6x0iqx4nrIm3yO=4eHZ`y2>@IMP$z8MTC(kf7ydF1z@8#o zOUbrXeAOFemjDt>r0*@Sw$;H|)f?nrNP30CZmW3d{m}lX>{}$4X02EtH zD z&QjA8a0#x!HMkBp;8!pSuQFOjj~wzSpczG!(1LkrMb3mAha8WbfSegQ5jhDt3vzkL zS&=s(PiuJO1?0`hi^xmJTaeE~-im?=1r7z;Qb56sf{22If(3;<6s%}Ap_xN7k7mkf zMze@!3C$KX=b_n(q6tL~MIJ=~MJh-{Q9{vzVjhZCluRgbDDfx>D49{BdL@)BDCMDK zEvT()a_&cm+qk?u$H<#ZyfMF`_J?-kwkDU`UhOh&swuB^*3~*~ZhOT_V}4bYu~Z3n z8B6UhyR(subJt7v>n((0y6yxvQJbWjm#m+k^2mZzL)xPYA6vBe@$@B2jTxECva-MN z&E+}YT9Nzhm8(n~FPKHil4o80#G1A1)<2oQp`fs+_^GXBJ9cMjv$V&Va=waFRU z425LUb{X1b+GJ;VCOa&9!;!+1uY~1+uqHAQzJDwHc6f6*;Xi%s*S^GY?Y*RNo$g*h zH;=y3#L3hcHB2o4weoFtz$~*}rBkI`o=G!wb$0oDi;i_43$!m8DlW{tv*)c{k;+%E z%WVI_9#==hkL1*y4q4Y`_ibsfzfdz;SsSdpwDb4=+uiR3{t$Zkw`_RAe|_M}$lH6b z+OBQ+jVw6V|McM1U)*YY^V7ky$ftKBX%WpZJ03W9bo@aoRu0Pd4L2tvId5H&Rp%}1uLVTo{R1 ze;3JqCz5$#GJNOOMCeTG*#n(y+xNeBbob)I?(Ym0HJ7&rcV0fuMx`%TQ7`%#yDhJB^HTG*=4*$}9lmg4y!-P$f27p=8ta>Ar(fro_e{sw$s5h5M{Wdy-jhd;4-NRo z4hGo*i=lgeuOr~-@OTfk9rH9a9BgcC?P~S6bnW={{@cUv20}xpo*xc97YdGcTyFol z=fzgm*V*awb+-1j9Pu`?k+S>OsqPNHAxU`%V^hAl&i<@^&EJ7h-d1|3vo9W2_@DOv z^BG8+?TP1AFOnJuD#c2#?-Y|eC;k6Y4bj&m}4PO8s<3KV=04l8}PNPmzsp4swaz9^<{K5@I1ReQMG?zo6_trDBv$IN8 z((>u23=KR(cg4gf()u*g=VTQmlQt*EJ!Fr6NLE8CWIc${#Oz35R7-Fq!LzWBq#AG& zkd=a+psE3?2(+BAgES|_?2q|5f;t7=sTE}>;;F>7#MeMPL7`G#JlRzQf<;R0N=GsN zb-xPQLo8O|%2%g!R`7rq5uclJB+-~XrC|Jj8A^67EP-5Ls%-8WU@0>V%BFZ2x83C? z+gx7yQ$Up|GD}lORWk(OJkeOCF`f?_V$~?!%qPno_>kyb_?WC3TEh^84-oahxqkuC CpimAAV*{LZ=eo^$WH zH|Lhlom&bU)*u1SqLLEl_pY)O04D(RxT&*B=iIpPT|JO=jBT~0bH+%OAI@WJDPw){ zk}7X476^NJd@}2^{625_n>T*G!E0}_uKC%}`bSOJcPsCE!EyCpCxJVR}4?HzP`3580y{&iT$^+?&J_aF|UN#1VIoi<@HrnjRqPU zOG9j-5L;x5ElP;>H|u@u2}AZ_OE}!a?MZ`y*KYOd&@I1R=$e`sYfQV^HK1>7bstP& zSA6(HBq13o=!G=&K|f?*00vcBOB~oQlc|$6x z8mVql^GPir%|)6>nnapRnnD`yS0l|`R8!j+c#`}fXYP_br{r=;PEUEw6F%ph#$d=- z6?9IkUQ!dNtqFKTzVgvdPi3WZwlO{Eob3zx0?XOhbE$l*8wyd(mz-oxwx!s6rKa`n z)3;x`BjcX_12P8=8a!mEGb?-8@SG9%=H}fua@75!$GAjER#eTMUodvu_z4pyP4*NP z6;COdK5O1E+b~<|f2Ay&)0UcL%Q9HDEj1A7%8BS3BGKX(&qeg@5li%FFH&D-M-G(JY#*`k?M|$nq3vg%RUQVXua0< z`M$S4u||%D&ul-r=gQ(!-qSNa*5$yYS5};Qh98qK*D%|6l@xp@BQzWu8YEZbyV_t>Lr7YrOucsZsfpdM*fmJIS&`(S?Nd|7tiY5i7A9Bxl?H4vT7G@3AgYY zq__lQMu5p?Nw6fQm`r9~X57hNaVKO{1N@rzu7J?tY+ z-7gvc-oKFH!GphB~AJNU6wbtKwrtAGwOUPE&Bhwdw*FP4-HWe9=e@Xct^fM7^X@(8{Lb?{=RD^; z?|Yt-b?ZuC#~zsA^cEL8k9%9s0yqblZmujXDaSN8fVfh&O)4p0DAs+segLpU8E@WF zU)6{WhF-ur!nm}?S5^J-tzT~e<`84Gh7FTOt)KDyZyC?6sc&g@{A{e?@oRv=USHMP z2(RuM{rp-Rs_K2#xS2n(%5%`(=x=Tre+weVcQJNy2*ArLVK%~GFj%X1)YrG^T0t}! z(T#>^r7>D*icU3aDGt-DlQ{mS{`z@L1C1Xln|J*cB&l zK^)?dfJ7uC1yhjDiO;}nWFZ?ln1=-rAj6FUEWvW#L@`$3DU_fL>rsIXs6-X2L8wJN z8qtiMXv1#2h?lV+9SGtOj-VT_;~08z5^v*OoaUqla2A8OfQ$H4&xZsONg|mPQprtu zluv?-1c3yR1c?Nh1cd~Z1UCtJB;=FmB9YgKBuXU8Bq}7TB)Un=BQc*O7fAw1>{230 zCP^VlCCN=v9!dEmyGRyD7D?uaGRX?bD#>n=^GMDo#YKuhib#q?3U5duMJ2^eN**cs zq`F8INEJzyNR>(D{iCMhEU$ZZ;lZ_MS$p?DC125Mj&K7S^a3m%rPfD3QB{ePmk*U)% zrq7r;Yqm2pYtG#4M<2_{eSF^hCl)Mp38Ew`syi>gVA0|wOP4M86ncwR6t6DLvS-PCl zRTtKLtx17p@9aAN(UtvQ-R`;5ez)_?tHHsVqne>hGln!gXY1?=2D>r>{gq9u)|+dB$+nnLt^ z^Gmeb-`3Q0;`SGj^oX_B))#tjZ{LGZHto1}Kkd>`B=`EDX6$z_)z)j4{@l|IcMt#4 zy|1UUr`s0I)-G|_j$m2>|Kwba*n7i$XZoh(#lOK|8P?6av(N0&}wOR@H|KQwU@HkRilv&tVufjN%@| zm;~#r0Yh^pUGe3DJopSEzpC)i5NN`S!Ng?AJ?NY^6;aR6>Ir?4CZ)V zpU!wfHzJAAgl>AsZhlC&AQf{T%(2Go#7))DZB@l4Y-OzhE!>dH;NzCN19jYd19+NI zfah$BjSJke^;?5e(LJ$DWoc(A!we@&Ge5e$P~SN`F|K3iHy+cB7@x@A!+IgV9`+HV T@i+B*>0e0qU}q0W6Jvh@RIH|x literal 0 HcmV?d00001 diff --git a/test/subset/data/expected/layout.gpos6/gpos6_font1.keep-layout-retain-gids.41,43,44,45,46.otf b/test/subset/data/expected/layout.gpos6/gpos6_font1.keep-layout-retain-gids.41,43,44,45,46.otf new file mode 100644 index 0000000000000000000000000000000000000000..d944ebf9281785cfc2a72d8be86c095bcb1005df GIT binary patch literal 2688 zcmd@WX;f6_^}Ydy$AI8A)VSb?V5FkX`Ucz)#3eBr3`Rq%j4*x!GOPo#Dgwjo%&-Ip zMsScxP86(GfoRP!r;2-XVwSe2jmOxmZI9`(#`X<)r1ZWao_KotuRr^J=ezs6_kPPe z_ilUTm2Dt`dI$nZYI?fF|4C;H01N>LU)#8S+m5gF-{=6s9-+*&ZO3wX!EZ9p1JF&# zXXofO#qgHk8tMy>&(&!)xfehG_H%&HsmL=r6ij_0yn^=G$j9mQhRPWagU_OV695&h z*Hjk6#_gzrL0rN@jb1AZo%biS{{s2u;-WIc#Bq?L|GUUb0MK?LehI+>peRb1Tdvnv z@ze@`6!nagPWavRv5g^qbJV>tX1d=# z4K|@G+)AOj_+VFj#)b&v|_uo+&2ZIA(( zunV$a4`?742;_qvilGcDpbBc?Ff@P>%wU5SXoU_q3f<5HUg(E6;UsSQ44i{uxB!>n zGW;4w;Rf8Mrcl#~jL3nnUk`tAJs4yWFQ87fNCaNT&N+yhyFfzi(38Ns4k}#Mr zLl`w-k_eMb)Y8#V>k(al%iRBraXHTq=_*lqyD@l)Pf)s?}@Ou1i^;nzkYRg%@AmnU%dr zv`7^Bzm8bZ0(259S|~yg$AfrLe{R?BY}Xz4UBCCfbC>p=v0dsM?)@lxL~~*5`<$Y5?HdP2-o9#l z?@`y^n;%=xw%LYtog8K71TGG$X{+64v(GLa+*8t{rTt63SBb;@3&$3ViDUokx<)SX zzz%NSer~poi@w68vI{h<^ylmxw)F)zD)$cu%qzM|T%@k-2&pZqDkr~^w520wz!;OpI9c2?f9OeXr>NQ*@7c!V|vhcC<>yD-_YgY&DkLTVMhyTt0Px0-p zTeWvAbl(ZPqi=p$exKSi;-N^$M z+W52A8nfo4IW~1~sLrYL>>6sP{ml2v#o_GmSdv(AH1_!>mDO;hq@%o}qTS#=*xK0M z)X}V|EhwqTC`cOOV!p`pHT2iKY5&q;Z2sUPedAm+8`5~q(toJ0p|A0HRd=nYsjb1; z(9+_<**fxR#b@R(jmN9o>&!e~<5>BHk7c32$N7VA-y+uG6iMwMIJTGStxy_Ada zEbLy-N>N7Pu9c(*6Z_i8J*`osaQ{a)gGYipbjEp%%K|0uoQUXSNk`xfUG<5p9C zLuO9hX2a@VWggFQSMEMrd9nIJ^@W;K^{0;xIKFMQu^FaYwDn9gPRj{Xzxjmwa`o}v z%Px<}-O%3MX*+SyL#L|6jy$K%r88HWYK%>l<>dz}D(dWYwp#nnYkAjuK6QD!kGDAmkpEI7$8g!l!4zn{_NC5~$!XRNtxIhp*>F>vnQ_|LNz;c`d>60;d z_+TwHF)_hMMJ@#=KZNiS-W3%bhS8&upQHs4iQFU|^o%_C89D@JLfj8F!hoD$fiJ=m z&%j>Tk5nNTusO&8EtdasD8NRb6m}w4iZ*!xy$st2X&?^)?+K}yh((B3K`^!#e15?w z7w|jbb4Q#Sz?1J01rWi5fGv;tSI6({=}JX99ak#)4UCCneBbn61|MAnF^~vUfyPh> zG)BgO(RdAI(3Tlc_Vhmp#>{w{#ub6P7hqGAj*tqpK)i;+9C#1Yk(z}#25}s&oA4FF bTkti)+wfrI> zK45{3@=%npamIilv0#%i)1*QZleE(&>0{bjYn!C`(V0$~(%vQ4l%BgJjnnDB{Oq~& zo%i>h^PTUT@7$t2dx}5@#~}`k*1|&L?=z-o0GI~QFb_OlRPtf)FD?LP5OqyOCEGa1 zPxih9kgx^ivV%@r4Vle`{{ZK{in3IRiWT$PtLV?5oK@-cHmrI* zt_|(;0Msg{t)T`A9!C>Q;?P#xoOW$O`XA9hfO1ET%i~=<3mmTBfU*$)eG70V#M3}g zl(xLi>1kGzJ(Uz4^h)dz-HIM*_kOa#h8CJq-NQFCK9ju2;$c9a@8MXoo0+?Yt+z0oA6$;@& zcm#@|81_Ob?1TMagK{8H1x}~|57a{=G{e)-0`1TRe&~Td2*W8DhBI&u#^F3%z)erV zC76Mi;R^f^egtz=0;MM`;RsIzA`*$1iG}16)kt|kM zO{4n|sq`8*9n3LuCKG4OD|da@ZY*i^cL|)*CluZp_NQ^R7)f zcW>Tu&(>`wmg5CcGFx)D-@D_!oxASO+ilG+D17*lC!WmGW$BiGUD%*A;vyS#nL0!p zb<5q6h3tsZ8Ikh`uSS%U5v@EGxiuSkKk`r{;lFLnSGL3n-OZ#4z5ZrMzYMQt;#^7$ z8?LVgjd~%wV3FEGuc6bY7g7y@?tssi))s6Fbz}?|=4W2p|K7LcsyDAFO!!ETr>pLm zl2Tf!=-chSM>}dSR*zM=Myf8A{>uMG@J8s@=U)9e6PfZ~IXN@>e%WQ)%a8s{;oZBQ zJ97C4v+Y0qWaw`lpZZ?x_s>+GRH%SLhZJaHd;z~dkmjD;Uwg*RL^ppf8j_+L7d9D4 zu;Q7@R%OfK5+%JtNvl*+uPRn~gH1L)C9jqH9+s2Ke{;BN`%rC&9QB+a&927U+R;zm zmQ!Wz8D=8%eCxy)p%`UExn+25PR@C6MxiIoJC(hPW-{kO^{2fbhuemHLt!SGt-NMP z`fK!`hPQ{_YJR7i8GAMm99!?HYOvSYB_(I4lGC8%^;TT&JautY&i$pFeM8Q?I2XA# zJ9TdS=!L`GO#64f-MVjWe(;;a1x*K!j+9OhFj49AZH6RyX2D|MPi5ZKCi=W5YQuHm z`T_6Yk-pY}ws427*-=|x?66EL86O^sw2Xi6eBh&Cd&j%4FmGP!kTtD8?jAoj)-u+5 zwsE+5q^-ZDx22~igkRs~Kh*!J>!bFwO#?@}PK1vS91Ac{-vUFhJLv22o$4I)g7lhj+`y-`#kAa;$r%f3$P7=X5_aA(tA0`&#x@RX7hx@3c-IpZ$fr z?p^Od*FbxJd(hGA2s#mJqswnd!h51VhR{@S=JbK&9sdAIa~(C%oc-c)mHxKu zUyniRVoy9re;>s-P+xWg&2>tBzyGh{%NnRORt>CU;vAObTFf%0xi?nb+iR2$bmANp z!d9WD=Bau347eBta5@;uCRxD#}Yd4a-ql;^S`9$KS?lAO*6%@X^Nf1RIeHTag3@paQvS@M04y z20ON?I&fgaa>J7-xzXoP%+6w)GsW_t)s>J-L8?Q#1LCm_s`q6F=8n`FqhIY; zk6MWNs#Lvk>dw9#R^;<>SaIDLES^^T`~Ltnx(+g63s4T5w;C9XjDXQp3+1(Yyr^4> zi$4UInaVRb^q4gbX}A+LQ!B=!@XL$kqC;*4j%)B|#BagJh_yI_!sdMvaWyt)_%~Ro BPbB~V literal 0 HcmV?d00001 diff --git a/test/subset/data/expected/layout.gpos6/gpos6_font1.keep-layout-retain-gids.41,43,45.otf b/test/subset/data/expected/layout.gpos6/gpos6_font1.keep-layout-retain-gids.41,43,45.otf new file mode 100644 index 0000000000000000000000000000000000000000..f7727d4fd8205b2fafd02b2c5ce2ce116b8af18b GIT binary patch literal 2336 zcmd^BeQ*=k5#Q67&$2)`SPn4(gs~GGT+p3PCyNA#;|~f6abj=+Atk7`SYiAr$woGI zLov2&Nw($S7;Ir98?`gU5K{uw2^}&G4k5HmJIS=2c04Jabec}5)1e8iWRBF`lS4y0 z{jYy^Z{FMe?e5#R``+nRCEK=@fEEsd5{w1K#m2V4jrRfIJb+rc@wt+%zhC&L8vyKS z(z!~uuHmbGT6PW~DVOl>@@jh>e5SlZ_B6s?r^8C|)VHizCLv?kNEUk^}A-->Uo;NCK?p&SO zsE)Vkr)M60Anr?rjTDNCS3?pcLki3TJ*2`yNQZ~uVOR#4kPRzg6|4ph1hB$dSO-r+ z0j04Co`Di5g)-OKY3BQGFtL0&}OihLgOHZ+^i%%Pb=n$awv*@9*f%~mw$q1lFl2?Y)X9tGM_ zK*557h=LV`JQQqbF`s&o@3-qCf=A|QTuI&ach&?iyq2Y{P2>c%Z$r2S7c>B z^61K($5!QjWAz#n$D0L&ef)`a>o+`^|5QO?QSsByJYV`^mNrW}|9_?BS|bHn zuFXu$E41@n(V6V1BNB zLzAb{60>1?A*ki|vJ+;RZ3>+t_54h_A=nl4`!f!A9}aaa9V#x&yteD39kI#}E=g?v z{vLN{!*`^#?M_M8?(lEvs6SIPT3H*eJh%Oqfver0gnkwI(a+iFMBviEg^`bUU$jqd z`I%&PZTQ~)i$A>5e&g2QUpqecpM5QG!8sr?K}ivkpqcdt1A$-4VrVFw#u^`*s- z5??X1(tzE2UU#-hx%;+COZG?^PAUC8sUWu89y5I_wm8=JbWC6I>wTST2kS%F>i#aa z)Hc=EkKDQ*OOI)W+40aDZR1~U#Y$o6uHoIOSk6ZmB*kg#dZ|oOpUyc|^Lg)Q{f7tr zgZ*qgTYA@!@|XDE4c7-hZ23tSJ31EZ9$n_H^g0?GqLi~<%JEA1y?ZYDj-DBb*?tkr z{v?)pW-5B^%0%R3>#2QRZ2QYEwe4J7*!|6+qUQ3}@b>dZ*tq!R8mdJuuQTNA^!g68ANDph>~Cyr4Ymeaf-k(k_v-L(Ly@85uMbCFi-boz&v*R5`&KLK z@9OgVyIOl%4*43{SlQi6ly_&qkRpEs6C>-u%l23FPy7uS^)zXqCHw3_ng3?@Kc0p3 z*&Y?Ic#EJC6tb4Sywi;Q?f$=}duQ-(oX#_uIu%??Xh+qLCrRm@CgnilLVm9YLpsvibA2HW%B*}i}DMfDx$WL4@Gl($n(t&%Q`Y+*bOw}*6d xSK;Gf|+O(p;U literal 0 HcmV?d00001 diff --git a/test/subset/data/expected/layout.gpos6/gpos6_font1.keep-layout-retain-gids.41,43.otf b/test/subset/data/expected/layout.gpos6/gpos6_font1.keep-layout-retain-gids.41,43.otf new file mode 100644 index 0000000000000000000000000000000000000000..7e564d5d0702b63e2fb21c5d6df37bde5e7a45af GIT binary patch literal 2092 zcmd^Adr*{B6hGgxEX%ThC`*ch%c~$s_j@kj6In3xfq^!d1#Yk$M4r2gf&*mo8%>ebnxgRS5P#*C~i;}4-Lt^&Yu0JV9^s_fjW*MGSL5HLi#;_TcxT-g_Ejsj@% zNM2u9ZmohtsxxF?L~>Dy&06%~wcoGN+Uq1sC8U@%sv)~ZAUVFI+*upe>DLJ09}mDx zD!0~Ffn^n$pr3}O!dh7O1=he%`5SIZW>t-2=N^t_i9Shyr+TG`LsR+&VY5#NS&NIx=RM>}?2x zOxlW)_lE!ogdhlpPzZx55CPL*2F!$5NPt9`1+#$#0nCsF^I;KWKo%^8<&X_IumTReC6vq=l~r~24OrqdCKe_cIg^PqrWaMd zU^C{{Ih?j~hjD2|VWqvQ(r$Iyie?+r%gT&7%5;Y@$L6rvH<5DUQt4K=F9r);a)35a z7o-mk37r%+c}ln;;*qJ-BB#%Yik@kViH(a-c=WNvq{n9^KQVibiRE}fl*}oqX>;ez zU$Agd`r-^rX4bOhPsi!vbRqw>#psN*NsKO57h-phCAj77Zja@SGj6%dt?>-FZ=ZEv zbU)<|_@_<#z!uo2yAsr=*I((-2h)2D918bQ!^jlhgQj;f&a7tE9v_P^wC!kXZH;Vf zZ|rD}-kW8K9nQb7)>HcFDOuaOd8ebL=0!O?uSC{2*;-dLS0Ab9Ev?*FdMxjf>sx+5Bbym4cR25c{Wy=0r5yfIgfDwZQlJDshyo~jgb=B1eZk+c-cr^R9eI4&^>$~epEANwU8%_^-k}eF& zs($kVd5!GfpLDq5=B}SR8@pS(JGI^f`LrSESMQ&O^WC4-f4)Q8`*vG?3q*^(BSMiDMdyX9Nq<-T`xa^5NGUOgUJJ55m;qb;C+NS58-L`JJrTxjhnOh1Q z_T?RaP3x8J%%NObT!tW}aQH^Os&scj=)6CG@gE@#)F&L>s_^gE|Fse##&@bY)%zs+ zflAR*wHjfPC(!?w-a7*yr*jM(qO%zGNxlAaeJA_y;aETwIK*^NS=BS6%qZLf&c}f; zApn(5lS*tlWK8%_=#_=c`1rWum85j)O4Gnfx+6v%Nb4g= zp1>*yA!!2pJ)~DZg#95L;_uGU`1D9cyOPSb1O-q`r~;f+@N>XMCA|j9sJPqV8ItTY zXM@kq(wAWJ#i3GmA{0(sM|>Wr>B~^!Q2UtR?ZwnGnFd1a+--^2k2fHQ#p>xIjzYA^v-AgPpfW2$OqOATMHH~|=c zX1;cv&)tNT!a=}vmH9HS$6fd7t>10|hBoF7FDu3jn?7UzLFUuFzLu>i=XAAfKMx3I zpL=T)%9gPSecVlrZlA}LlzWrmQ_S0&{K1ydcOh|n8*}dLTgEeC&_NIcQ{5(?uQi5B zqUne}FGN@AqO0`L@dho!s-JuWdqbgwv?k>OCx%mxYNorFM;02R{`8>{{n%(Q1LeFF zAKr*0BqIf>NJj?7A)60A2~&`Vd=y{?W_i7b*n@rO!CN?hLpXx>@BxnTp-Sozo4Gp&Hn0wGx?Fo7Un^~DiCFgQiDatstN#g>#E+uhdPKKVdpMc$Rw*Pe^ie?Fj@d$#Ne zc5HfC%dGWk)}5ZtCGE{0H6E?^AFMxJ`)%m*?jO6qJ97T2IeaoSu)qKC^|fc+=azh< z$$|OrZ#nzPrJY~h?)|m>PUopNLjB(Tn$V@`x;4CL?(7PMx^e=2tD6sb%+VQts97n| zX(I($w0r%V-W}S^jWt^CdM(GRWna|FBU9ZG`>M#q$iBsq^t$gic9irschgJ3S81ES zwYmB5?JpwP5z`^_@$L_I9DfkXtR2+uWnCDI6khAsbbZbzwH2DNukcvooxMNxwDorO z_L!sj+64~V5z0#8FI!0TUv4%WUXwoecL>HI)?i!ysqL}xhqd>YB71a?LDGH9R1aND z%T;Aan3+KTUm3pxzQ5#Hg}oAIM~!phH~R3UltGs~D0Fj~vkJq)Fz!N%k6_FQ&{<4+ zlQBi7Gw`%nKK^R1in0Y<@?3BwV#MT)`NHVvXe=r-w#1!HSjxE(49Pq{n>7inLmIOL z)<2{-JcNzN#PkO~rnsKCi2AvVI(+LAr7?pnKA9j#UCjFLip$i53m5JN&15|RKS z5KvIsQw7CQv@WAPE_HWm>rAUt#@f|(x=d?rKj??!+z0JU&z$)S=Dm~q-hJ==-g^1C zchL(kEP@EAf?yEOTd+X<{-vEt0O$jVxb)=WMN4nB{Nq7@G1vs#7cG5EndM$~1t97* z)KgNkjd>7D)&Pw5p}siXWK28!@%JACL{_1$O~;0@cfvN}cq{4&>Dfi4vx}xRWB(!4 zFJv1_^B`?8R-p%fVL8TZQ`o47Kg9Vs)NAr`3ybb;1KiK(o2ZL%34k;J0wF;_2nkCo z&dx4lwHX7^Fi=SbHU(_jY7hIz06 zo`&aO5iEgaumV=WYB1vNC}co3z<8T5_!&$fhm*EOrg?HgP^uq`65qt`t!ZqO?s3Msv6jY(43KdnTsX{{)TB^`dg`O%5 zRGCbb$SA2&MU`r*)KI0CDs@z;r%D4=B~z7xs&GmbRjH{;LseR;(ovP3sti<}Ow|gi zR#G*tsHSQSRconQN7Z_&Hc(A6)hMV&Ni`~}!3}AsMoTq1s?k%8fohYfRzbB&s#Q^~ znrd;sTB_Ait)6NPRF_P33aV35or>zzRHvajJdTd)^i*e{`edqCP`#4sRaCF0dJWZU zsUARD z*(6?CR#;@pE)+kVlbTzQms?;gGNnB#o|Ba&Uc!bKikFxQO$8;`IAV8bc=neejTuiE zn$1`c!FV*61dyYts6dZqG8dji6ZtK?h~|+3CNzy)C_=NSglaSi57eVMv_U7DLO1M1 zGdKcopb4CZKjHIVgTLX^--563*?$B9pFEUA;B${758+eC6B(IGltf3SlR0Dod6q0D z%g9S)4Ko3fLkdYLF%t{16F2dbCK4bWegk$T@PEyhGk2{p3UP8TpcY zOMaLfF*#z4I3kV-2@~;5BrqXmB9VzCCS**=BgVuq8LdFOgBjk*bGeXV?IV0qZkTXKg2stC;i~rTuiqEzZ>aNnCtW$aZTkS zwZ~X%UCZ&;@5*sx{6LTBOy{|M7wfM3>LzEdnk9q_9WPjf>CUXCY+sgdldooT&9RC% z8;-dzxi8mUa__CLJ&@kS#W@AAioMSE>UK|CfRE$1oV>z^U**R<#Y=?b)aB+?`726O z&4Cqt4IDo>)FX<#HE>PT>~F4b@tz3q&$%0?xhox&4zp#oFxG6W=A2HqE7mzGyTX^c z$9}fvy!}YZjoAVS;|=R)mnVK^G#6J}%QlyIoF1p!xp`BQW3z|zcwFw-fVCBKkGaRZ z$9lW0|BIv7kKcIq>zTcFx5H!iwABY1Ten<0m-*xL{mDm!QI_OXF0ZhCZErm{FlFc( z-oPh=qeOG3&UoyJ$(gIu(ws{@8+_Il>w9T@OyIlC&Na?8u9T4*bRY6y=KTIzw{KEk zgYAUT!8si+XRMcxb?^_p#6RGybKw4L{%Wtq#o25QyM2<=#S$l!4^0s@w)k5bn*%%c z9&hVBdhyu#W9MI!xP>6QK-3oDHDTv24-V2sF(*Wns(^;ms16I&O|mz-Pu z&PqPx>`{ShTwhn{D6SO7twsxP8;}Zbh$6ok_)&DB<$T3OC)c^%?dhCUm{DpfHfaU;2UY*2WrRMOJ>vk}Q3nF!7UhU6vgiUUh%!vDLhNm^-_#h7YZN)48Lv z)6!YJt*o^oV6C@!Ep>H1%>IKPlzim))V8g>!R*-7Sk+MJ<~9z22yMVs=h|X#b~RSN zQr2wp=k7>InJPpD;#=qP;`eXt>gjYIsNZVeTGv+3b@MAko>i7r8EdoGX)jjyRh{}X zKjH1721kRf-sZ{jW_hwXe(8`8-y?c3TC_5-s%yDln6W)mXy~7EdDaH+S5D5~$i68Z z9a{r|wuWcC&)62)Gc3ze%}*E2II?V8YIEtzy`_iC50xL(-A2x6`1y7rSP{~s9-gXa%F zjpaFZD(DP-eE3$_F@H$}g2GP|ANuG~#xevmYfoi62Rs0i_`~pOSWXz0BW=UuP-k(?aJtvV;;8?T*vJT& z2vdM$8H;j&!&NZh?5u|rnF@=r?Uz|Y@RnGe!(SAhGziJ3P?F(zi1h^FZO$E@<9^gI zcEk|`Z->A+_zdNFbZH63IG>}u2w&j%2y~reFw!CzJvE`s!RUxUDeOXNVUg&+0K9Q; Ap#T5? literal 0 HcmV?d00001 diff --git a/test/subset/data/expected/layout.gpos6/gpos6_font1.keep-layout.41,42,43,44.otf b/test/subset/data/expected/layout.gpos6/gpos6_font1.keep-layout.41,42,43,44.otf new file mode 100644 index 0000000000000000000000000000000000000000..106c55abc738fe07439482046b1904e5dd6fdd35 GIT binary patch literal 1616 zcmZuxdrVVT82|3=gG*aQH%bf&UJ)|MoMP4LoKeyG*cOEVE^KZ}2bUJ?1KNV%K#|f? z`hY?^oZmEGhxuy|HNlPW79L@MiF(VAOwo)W5#yUde4~uS|B^E1QNJj2?~+qkQyf5a9`d z115#G8;?ucbxh{BadB5)d_;V_F(sj0VpzCJdp!%b&*SMvowMX|1emG?N?0)-i z_6N>WEv^A=D@V9F(#yeK%IS8w-0`Nqou!8vD)j8*<#K6g{`dm9##8vV*2*p1oy{c_ za`9R&?mV}Fou_8g-e705%`dYt1>fv;tZFayYO2i#G*!mR($cQ`m)SU0e39=G;R zrJ}e_ZbE);m`%Mgz>$3`)^OW7QD5pY!-J-K{ZbIrvSOc|r(QrB>)6l zn62_`>Dah8zq&KG-$#X%j~C0O?7;X+`OPV`?#^CdpP??EwzDGZrwu*(0<{6_k;;y$&bpS`rrO3vFZSla z@5_I5+_fFq>#KGg@YneExvBjVAonzQoQ=+d^=(eS^=M@q(`@WX&U=oNbCcJoqWyBaU29H1yo&jyN07!{gAQnkUl7Bt;n*M3& zs`VRT9i)RQl7q+FYl+FpNj@vGbnJW+!#1ps5JuzoamXV!3Dc29Y{3({@CjQ4v5-8q zMjX~PPy$9UgA#T@AzB8oz!Jy;1~gCxI#7cNUO{HUHAP|n5?BOj;W|h@5?Zl1OK@HW zLZERLV&`=gUpb`X20oeEsSG*5oG?aq&+kZugTNT!HhGAD3;(C_5haia3xUw7Ee4=4 z3pUKbdk70-wxAY?ijOCr5^qyDWLP1ISrusWHS^W+F9(U8k4eA`93${E;w89;ssxod V{DOc2Xhk$YH(~`GN34bZzX0Lc^Hl%< literal 0 HcmV?d00001 diff --git a/test/subset/data/expected/layout.gpos6/gpos6_font1.keep-layout.41,42,43,45.otf b/test/subset/data/expected/layout.gpos6/gpos6_font1.keep-layout.41,42,43,45.otf new file mode 100644 index 0000000000000000000000000000000000000000..ba37625a1bf85359bccae5a4ffd4607cad333e98 GIT binary patch literal 1608 zcmZuxeN0nV6hH5^eLPAP-6&ab>JuT6jVQ8Nqw@>-@MBR7h|{?#9W5;%rO*~ANH?cI zziAOfpn?VK9|{bo=yWb>lsR;oEt+lFLY#}swq(oVl=iGD8 zxi9x-Z{C~@QrHb5;L@|QxcFPnBLFZ2AX>d1v3zG#CxR z*;J6DgPbV%f>@X?6V392$LXAqvWS@gAB;`u5txTp#@9&rRnen-;d6Y(bYLh-93h>u zDNmzVq){j|ip3hml5~A}jiE@RHF5I_lDO2AlvFNFrGH1w<<=NYYMqf=S5}}mlW6ERmh)esm@ z3<%Z$pV59PAhZP-elYOpa^O~AeIVk$KK5TZ zV?$%bKv_?*-dB8L>(|aJ?%UpP{GWWu1_qty+D>)f%0I0TZO6@LYtPi4*>!C9z=1yZgJvh6W4+2c z1{?9S_gW9zdfU&}9_l{t^;z5Zv~;#Pd#inH`eM1e$fNaYZD#APhI(^lWp!1R#bt5U zxwd>-bfxQiufOx){x1JMzpuwO)cB$Kq=j|Z?GA_C(p0y{TE+5tkIrG;Hm5uaZxb~! zB}X6M+Zny=PoN~D$Ut4<@!dp!m;d)hhz&J~Q|XfkML-i4uiq$@{Ny7!B8QP2AuRMr zUJGXp$4v?f=*VHpi?>!rjZtIp5K_Y$&_)Y@mNFtn5=GNuTtRAjI?^&$XTmB-gUpFN zh`h6s3WY*sS43&}k-@-5td9~$;`&&`6E+P~5lz^lXL#{5wgh4zVKRmZ^BO1zJs3d& zJE0J*GBCkH$N@EIpb|Oxd8irGcn**b znWT2o5jJr#bm3{gGGrkfOEfuY(pfrAk}q>|iZO3^gbtE7@qY%1mclGZ2C7tPDgzdG z#(}#M4`ostO~^g@_hPJ!*ep&NR!zZ+n3q&4nyi@Eq#DxAH1v$XPbja!FUT^uh5{9| Jp)|v>e*p5J?o|K) literal 0 HcmV?d00001 diff --git a/test/subset/data/expected/layout.gpos6/gpos6_font1.keep-layout.41,42,43.otf b/test/subset/data/expected/layout.gpos6/gpos6_font1.keep-layout.41,42,43.otf new file mode 100644 index 0000000000000000000000000000000000000000..8a6aa87e93b049e281d7c8f33f11bbd50bbaa8c8 GIT binary patch literal 1380 zcmZuxeN0eyUcoCi*Xw7%{}M$JLkUh zaoc-KD=SMu0jEF$oW8i2yK#W@0l*Xhb8>%KX~k0U&xHWeWwbd;E4FDYUmThQkeo$c zQ)@LiAeB_3za4p*nKu|eTKa7X{RPOiW;Co{mcNMHgM5?O>h`b&Ocinqa)s64ae%Z8 zA&lXY+YDA-9+&nb`d5*6I_xfY*c4@&6gG)_@cZqgQ- zv|5vPhu-dJb{;dC-Q4EdTuzgpuiP~3lg>_5KvQN^NiRHa%BsMcXy@pDO0sa|*>dM?ln5mHGGPpu@Y{XKrK zH>JI|Je!1VC-ni<1~C124;oO|9mKJ&qB$CtMUf9<^EoqWYNZ62V+PniIP z6Rg+o^Z8SpV@Dg$@oad@y+XAzoV~JHZR)Li&D=)w8Y*a79ZfOQ*JGQ;WU1v2pnJRUuiBpJPV@7urVGQn7T1uBtE13Axv%DKoZX zH$6mUW4Y&Tclv(nZy)py_Osy}dP%MPCH#l_>fmQBpZBoAxBR`q3|GB}Z{oEycQ?)T zP+ec$OxNq^DOreqkr6aW5N zSM>Nk*b6$)$8v~raSw?^B4So#I-KH=!$GW%NaOMQWaKf-KmxKDmfUBT-iKw71e@0O z$fI@>IKU1r&_XrTA+muRwnI7aV1g#FfB~HFG%_ddITrPAhpmtwt%DIGAxc86KwW_M zoI@?eDcbd7<)Fg`K3VHjg&g3asElL z0GLDc5I65~qb(K{9~(R+5wo~dun}bnJd9GzgTK+*63>#rJlsNy9QP40!T?GST=)xW CtcIrm literal 0 HcmV?d00001 diff --git a/test/subset/data/expected/layout.gpos6/gpos6_font1.keep-layout.41,42.otf b/test/subset/data/expected/layout.gpos6/gpos6_font1.keep-layout.41,42.otf new file mode 100644 index 0000000000000000000000000000000000000000..1b8a1cab122f03d590ed97d8e1646615e7578a9d GIT binary patch literal 1184 zcmZuxeQZ-z6hHU9*VotAvJGt;9d>z}EMbx0s8SasVz)UW2D)rOrU|gRzO{_?>$MYR zP%-;pwjC5R7si(?dB*4lBgpUr6AUa!j79@Sqgl)hfABBj% z-1G6$Ti=!~K9FHQ@Srp_H7RwsK6?oO&I53+4b8q*co=K|LKe9)U+d%U?yt8_0q}K* z+dIPk7%U^((XSwG4ypdYr#FAUiFdz8>Ety}R1qA#mTYi}Z{h7-#3k&dVqi)#L)8d#-xyStSZ7M@UA z)P$Nd9 z|Mf}#`YaRjoOQxxo6Fjk;4qdMdqFy89|Ru11`I)-2e`O$FB)B6UZm2@p4X|pEktbtYHHJ9{B&fzD|)Q!T-y)ntHZx!e?0a1calDp zzBoF4@<#gw|0kQirB7(<-`jKH<0}K-+#dUF@J{ON+v(}hC?y%nWhuNWr84Psrd*rc z5kH|yxySxoZ2=nw^COpEe}!WW!hj=`iVT2F6WK7cv%N76k#$GDEUp0vnkp^Kcj31r2DUg)cxB zdC_F$I00|4e*RhB#`@>rS@1%Au?CZK>q$PJXH^k-akC}DX6%g!7QF97T(mhTK~%K) z`*`6#+XQx4z8E7G_#ng}3JLJQPUu7{0!dg6EucaWdY~Kppusjo8piA@_*cU!s4eut zu}o;$QOl^G1OXJ(0&d3Fv(CYb1AMVKDSO=jj}&BadNxr#9()r;Hh-MG>;G9Sqm2JK HB}L!gfVfH3 literal 0 HcmV?d00001 diff --git a/test/subset/data/expected/layout.gpos6/gpos6_font1.keep-layout.41,43,44,45,46.otf b/test/subset/data/expected/layout.gpos6/gpos6_font1.keep-layout.41,43,44,45,46.otf new file mode 100644 index 0000000000000000000000000000000000000000..09e27e695b1392be4bda060b6e3a7889fe671d9d GIT binary patch literal 1968 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 literal 0 HcmV?d00001 diff --git a/test/subset/data/expected/layout.gpos6/gpos6_font1.keep-layout.41.otf b/test/subset/data/expected/layout.gpos6/gpos6_font1.keep-layout.41.otf new file mode 100644 index 0000000000000000000000000000000000000000..c151b9d8a8f5132b982b60fe28e71163831c7d46 GIT binary patch literal 1172 zcmZuxeQXnD7=PZo>+O0yHa^-$2PMa335yGi3L~Ns>gEIYz9TYPcCxXnJiMsI-WvGD!0t+riqk%*|vX~kE@LxVguH!}P^IoSC<8!&^d49j= z^KITz*iz} zX$|{hFrU1NaVO%&kme73d-Lv1tQ|*O9YSLEl(-A?CB%zE;pC1YiC`^{5X7*5M+~?| z=8rHO@rO0B$nzV#2^;T7RRbL?bx~4XFC6Zb=p*|mJjq0(e?oVogrK+!^Lv3Q|3AIT}X!;vS z7WTmf_W_6NIm+ZRxpiac&_2}83CF4Z;%)sc8D=nw} z->mzIKB2Gqbo=SAFYf*E*5K`)JE@cJrAI>plw>HErSPVd%B0hoQhj7|{IDkF9{*#d z%aMC*dWkF8*Y7|#aZO1u-? z8SRS4kKFp+berN~X*m1Ep5d8M5@jhF%1cupF8|gCKN52lzpUml5fhv(<_(how+u?ZL55=sD5KXjgy$ vDp~;_#{1ajOy|$foK!&!u)xxV)3Xz?mtYS|@*lDP^8X0yDC2jgxDfjbV$w(0 literal 0 HcmV?d00001 diff --git a/test/subset/data/expected/layout.gpos6/gpos6_font1.keep-layout.retain-all-codepoint.otf b/test/subset/data/expected/layout.gpos6/gpos6_font1.keep-layout.retain-all-codepoint.otf new file mode 100644 index 0000000000000000000000000000000000000000..f63634252cf6c7c2086f994ef8c357a67215ebb4 GIT binary patch literal 3748 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 Ap#T5? literal 0 HcmV?d00001 diff --git a/test/subset/data/fonts/gpos6_font1.otf b/test/subset/data/fonts/gpos6_font1.otf new file mode 100644 index 0000000000000000000000000000000000000000..fd640acb2bddf30b5046f45c5b9cb057b920687a GIT binary patch literal 4688 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 literal 0 HcmV?d00001 diff --git a/test/subset/data/tests/layout.gpos6.tests b/test/subset/data/tests/layout.gpos6.tests new file mode 100644 index 000000000..d31e0d474 --- /dev/null +++ b/test/subset/data/tests/layout.gpos6.tests @@ -0,0 +1,18 @@ +FONTS: +gpos6_font1.otf + +PROFILES: +keep-layout.txt +keep-layout-retain-gids.txt + +SUBSETS: +A +AB +AC +ABC +ACE +ABCE +ACD +ACDEF +ABCD +*