From 08a4997fdec4f8df388d73dab7274b67ace8dc67 Mon Sep 17 00:00:00 2001 From: Garret Rieger Date: Tue, 6 Oct 2020 13:02:12 -0700 Subject: [PATCH] [subset] Add subset support for Extension lookups (GPOS 9, GSUB 7). --- src/hb-ot-layout-gsubgpos.hh | 30 ++++++++++++++++++ test/subset/data/Makefile.sources | 1 + ...s9_font2.keep-layout-retain-gids.41,42.otf | Bin 0 -> 1976 bytes ...gpos9_font2.keep-layout-retain-gids.41.otf | Bin 0 -> 1936 bytes ...gpos9_font2.keep-layout-retain-gids.42.otf | Bin 0 -> 1808 bytes .../gpos9_font2.keep-layout.41,42.otf | Bin 0 -> 1272 bytes .../gpos9_font2.keep-layout.41.otf | Bin 0 -> 1236 bytes .../gpos9_font2.keep-layout.42.otf | Bin 0 -> 1096 bytes test/subset/data/fonts/gpos9_font2.otf | Bin 0 -> 4588 bytes test/subset/data/tests/layout.gpos9.tests | 11 +++++++ test/subset/meson.build | 1 + 11 files changed, 43 insertions(+) create mode 100644 test/subset/data/expected/layout.gpos9/gpos9_font2.keep-layout-retain-gids.41,42.otf create mode 100644 test/subset/data/expected/layout.gpos9/gpos9_font2.keep-layout-retain-gids.41.otf create mode 100644 test/subset/data/expected/layout.gpos9/gpos9_font2.keep-layout-retain-gids.42.otf create mode 100644 test/subset/data/expected/layout.gpos9/gpos9_font2.keep-layout.41,42.otf create mode 100644 test/subset/data/expected/layout.gpos9/gpos9_font2.keep-layout.41.otf create mode 100644 test/subset/data/expected/layout.gpos9/gpos9_font2.keep-layout.42.otf create mode 100644 test/subset/data/fonts/gpos9_font2.otf create mode 100644 test/subset/data/tests/layout.gpos9.tests diff --git a/src/hb-ot-layout-gsubgpos.hh b/src/hb-ot-layout-gsubgpos.hh index fbfb07671..c8fe9441a 100644 --- a/src/hb-ot-layout-gsubgpos.hh +++ b/src/hb-ot-layout-gsubgpos.hh @@ -3178,6 +3178,24 @@ struct ExtensionFormat1 extensionLookupType != T::SubTable::Extension); } + bool subset (hb_subset_context_t *c) const + { + TRACE_SUBSET (this); + + auto *out = c->serializer->start_embed (this); + if (unlikely (!out || !c->serializer->extend_min (out))) return_trace (false); + + out->format = format; + out->extensionLookupType = extensionLookupType; + + const auto& src_offset = + reinterpret_cast &> (extensionOffset); + auto& dest_offset = + reinterpret_cast &> (out->extensionOffset); + + return_trace (dest_offset.serialize_subset (c, src_offset, this, get_type ())); + } + protected: HBUINT16 format; /* Format identifier. Set to 1. */ HBUINT16 extensionLookupType; /* Lookup type of subtable referenced @@ -3208,6 +3226,18 @@ struct Extension } } + // Specialization of dispatch for subset. dispatch() normally just + // dispatches to the sub table this points too, but for subset + // we need to run subset on this subtable too. + template + typename hb_subset_context_t::return_t dispatch (hb_subset_context_t *c, Ts&&... ds) const + { + switch (u.format) { + case 1: return u.format1.subset (c); + default: return c->default_return_value (); + } + } + template typename context_t::return_t dispatch (context_t *c, Ts&&... ds) const { diff --git a/test/subset/data/Makefile.sources b/test/subset/data/Makefile.sources index 46680a59d..21371fbc6 100644 --- a/test/subset/data/Makefile.sources +++ b/test/subset/data/Makefile.sources @@ -20,6 +20,7 @@ TESTS = \ tests/layout.gpos6.tests \ tests/layout.gpos8.tests \ tests/layout.gpos8.amiri.tests \ + tests/layout.gpos9.tests \ tests/layout.gsub3.tests \ tests/layout.gsub6.tests \ tests/layout.tests \ diff --git a/test/subset/data/expected/layout.gpos9/gpos9_font2.keep-layout-retain-gids.41,42.otf b/test/subset/data/expected/layout.gpos9/gpos9_font2.keep-layout-retain-gids.41,42.otf new file mode 100644 index 0000000000000000000000000000000000000000..968dd372936c9486d3f9931b6b28ae6188db1bc4 GIT binary patch literal 1976 zcmd^AZ){Ul6#u=h?YgdP{MjZ92Hjw~2}0k$w&Q=dF@lI&7?>HtptA0av94QNU^A$w zFy=a77(@X<&|-p2N01@Oj2Kvu7>x#q1|?=6G<-#ZX~#qBc`Z?5{N_jR%RA@%&bjxT zbI*P6-0D@Us$s=;q`_WMRb@Y1(QyXASs?Ak(wgepksofkf%F>IHCEToky^f5Jph>E zjMs1Qd)u%^I0BeQ7}qrUybVJo@>Rgt$Jp7#im`XipY#0djAu0Y!yUGt4Rvh40ti;W zx1$Xex@+|FYi{-WedhFnUs&Wh=xPgu!ijevaeN13JBI)&cqNPm2!dd4*zEUr>eAeJ zHsWiAc)cNBpBA5J)W+G;rXIuINF+sV=>@YFxp^{zk z=1oXP1~M@Q*%*fj$ipN|!88=17$umA*$|VkFB(8- zh97MRVGBC34KLvp>_j&r*n@r8k2i4$M{o@9;eDLsO%LD<25}xk_)Omqi6oIs3aR8I z7rCj7L}!~9_q4RwSL)M4_LaVnFSv!3sq^Fm-Q__A*CXAMVa>FS$;uu(Zv2Ft+`LC7 zPRgG=rC{nbdtuS^8O4u2R#N)-%vn#&p5qWDSy7!XciG%|^A{{!wAfQ#QMsgQc}ta+p5H-gJqW3RFuSK7XrvKAs`P-Ip$~uyH z%4QqsvyI^oF=IF}mPeKywo z#gJy%zjaTjd-IE0PF<5`+v)3B(bfK8>+$Bm;pQ`S-$gF({;BW#W1oI&i4H`D4h$Z> zw*H*={EBZhIk@P=)^nd++WGbEgTHp&={fy+WU%RgCiH5CJ`K-XdU_*~-uz&Heftrg zB|h_aH8(RpeY7N(b~nD!^r|*%Q>|9esO2|lc^9>cSfMxOSR0!h+qXQH-Ed=5_uPZ+ zee^=;W!e_#Y;Qk$`^#8f%zVUhs_%nWPdx}_(GF|(b1w|XO0N!ThJM#VZMA0VFFo0M zXYZ~3I}Y|7+;52&YZo|dcO*BHe{!xy^39(4?yhy&^M8Y2x~Z$T6`$U&^B+$vT!6g9 z9;0OVm|+?Wx|Tc4O<`6_`u|eB2FWUL4Ks$h4p)*@Ic}Pltm?ysDTg6rSm@)nXA|xU zcX1C=l7nTI0E5+>W;SIS3`Sn2pUGdtQ(3-*Tc8K!sTevPStKM92|X$!4?p@a<7qx0 z!I;78^BAXO1F{&Ur!6%BI8R(&(MnTY}aRueZcdW STOcIdN$g3XKdvVcXYwbYSg?!$ literal 0 HcmV?d00001 diff --git a/test/subset/data/expected/layout.gpos9/gpos9_font2.keep-layout-retain-gids.41.otf b/test/subset/data/expected/layout.gpos9/gpos9_font2.keep-layout-retain-gids.41.otf new file mode 100644 index 0000000000000000000000000000000000000000..842cf79d07219f8f0829fdefcdf497501a245d26 GIT binary patch literal 1936 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 ICCm~31S2?Q#Q*>R literal 0 HcmV?d00001 diff --git a/test/subset/data/expected/layout.gpos9/gpos9_font2.keep-layout.41,42.otf b/test/subset/data/expected/layout.gpos9/gpos9_font2.keep-layout.41,42.otf new file mode 100644 index 0000000000000000000000000000000000000000..46484863c4ccbf0b298b99172533bbb2360fef5b GIT binary patch literal 1272 zcmZuxeQZ-z6hHU9*Voq%wt;P9Hru>SmTZyWEHWk{*lmu8!7dw^X~IWc-&#h$+X*wM z7{-`w2i44lfqX1^{DGT}C`02+Ft8vo8qFXY<6`C?%D+fvUdKi2xvz~9* z4ET05VG@@Z@r4!9==>G^#}N<4qRCX@47l<97-AVypbLP2zyTpd^!J6s{mfdQFNeI7 zmOY`6+`+<= za)**s60aaxtO<)cLV(8_EfqE98gp5-S!SZzT$WImYE^nf)mo2VQR%2EYE$aHtLhDP zi)#F@Px{wqnlLX|Cal(loOKyq#x!fwrG5SZ;PGj|5EO`TamiuNzLiavEK*pq%XXanGTLplBHaZ!mCm`o5^G= z6O%jRrxYpw$e(NNmi)s@b@sq;&%41xbk*KY>g=JFLF%|dTeNDQ*04jX(%ybfEBF7n zcWC`sJQsK^`DWliv_Bp{efulTp^2xYiQM~#CQ7L!dXnC=U!K+K=cXw)xo#ufP7Raw z=OcHH-5MDfOOK66`C57z(+*|q7W`1~Y3S>hs&&y_oAw9 zFpIosuyCA!J6Jvc3{PwGGw?Kcpt+cX$%Rd%P$;mhh&(vi5aD^OjR+>(??7C%IVeL^ zwE6pZ;Xc~{HdtAT5p_NQF^EDEo`7A@gH{Am*jF8(Kmht61U^W>3y2aJvq$$o2CJb# zuY+SJp=CpDM*TPlAfpy=GQOEr4j#O~7p0rB?gn^Bm&Mz&8#Uv?o+z?~_gG*5&tNB- z!3FphLcUZ4B+P;Xb1)A{DajOa#Z&P|04B6K+_3`vETW>M9jGNBg(e*{AELi*>ImQW E-)D?d&j0`b literal 0 HcmV?d00001 diff --git a/test/subset/data/expected/layout.gpos9/gpos9_font2.keep-layout.41.otf b/test/subset/data/expected/layout.gpos9/gpos9_font2.keep-layout.41.otf new file mode 100644 index 0000000000000000000000000000000000000000..cd2c4c268877a031e0df9c01605b357965e09a4a GIT binary patch literal 1236 zcmZuweQXp}5TCcZx82)2TEV-EDO|HunzXUOdK3^;@N8|P2yI$07{kZe+ul*`d#^$b zDuz<(-4zZ~8w-LoS^m(Lk0?cxnqZ*8#%MGp@gp{*ni&2?QnObcW}UZJl^AF9X6E;s zc{B4i@3m~*+5$2h1Rj)zrY2?GkHR?sxCFp0X>M(4|E1#A4gjGSxh*a2kNP5CZ#xgb z*CO8C5e+0@DR~*=F2t>2H4vPrUNwz-rx33RBk{nT_$KB{h*yN8>HQ@V!M!{}5Tk+p z3E*0pKgMt@5LLwz?{65-A?{1WwY2#G_^^Huv4SnIGynmC144)x?2blzn76)A28Cs$ z;N=QlzVMJh7d!ciGjJ@MEox_p7vTKdq7f?Iy*}S;GwRD`jOHcA+Qq;VA~e4cTC=(# zp6E&K35C;2bw`cjtE=-V{$TtSRcY_h(rQ#wo{M$FQ;B#gkXC~$6@Mh6w6SzeX;U>d z^(vCZd2qlZz~Oj~O1V-lT`ntfX-c23(&-W1XngOgPKR{SxS-#=rr*$?*Gv8zlm3m_ zN99?^sM9%{cP_#c*e6|sj+fu=k!ZP z*OwDi8r*kO>+gPpy0(X@^RSxP+?PBT8|jLl?D}~7_u1%?S@5U5{p*L5`Oxdy zTcHE-o@Da$?XL`vA)b;(^B)}=U1%lIlk}eZ%A`>m z%t?#njV{{Ui}K?V*~T|CI_&u2G01s?OL;Nw0)$g_LI z#5O}}*^OlT?UQJy7y~1=C#;GrRt*(XUJY~UnwWDf3v&$56%dU!Qukr!7&AK2cJ6F{L}$47eBXEOJ?C8RoyOMIM#wk> z2bB7a8ATK2(V)fO^q$@OFvEl4wJNPjV+6U@t5200m60SyW11tH0H5g6z?P6 z6jQ^I#}!M)D87n#ZH$DOlhQ%ry~G#B5?XhGi&YWVh)aoZcN#(yK@4-A3@22nAn<|m zaqU<-mDO_B5G4MFxI!gpD|H4@0Aoyw>`NqiI9g%)V9sY|KrjOibB<^gc^#$Kak{@h zKYI%Tz}?9iH!NxT*;IqmSn3-$8fF>Gir`>OY}gvDt*uX`dorETn5I;;S1Q4pnxIk_ zN$pXUmY%GpCbG(=WP2);PG!QH8mU(5;&G*!FV8B?YF5qcCo$g-HFz8XwdX05%j7~u zR^-BrK2@$;$8}@<#V5LTL6?ks`nRY0D}A$G@NdlZC*~fKCp<%5@5F$22A#k?T5Qk$ z@!7mU_W^UkRE0l!vg3U0h*h<>#R_y-b7NM?6RX}R3mY{%jd{kIEru`hc5mN`!LEVm zf$ZUEZ>p!O>+0thMu{O^aSaXJIWlzO{@MOVu?sHilJ(6$GHO(gJ+g%1WoxYMmUFoB zcJj;VPv?#fo)|pmGRv(IzsKzB_j~9@Sbq2}sjY3kRbRoJC-`!lZ8YQ_? zVo-QM)WPqLn{%91@mIk2yGO}C=L&8(SK1l*l3&IkxJTIloba+qHi>BjZ4bhP=sC!e zLvnfqL8L9bpWjxuKC}Vr5JD(lgU=IdSuU63Rf*Nn$4$aE>WztR+FwFEj|CJG%VWo1 zy7(7%q8JN*u90j#iZoKlVmaE-K`050-fuHhM6nNXgpt7xVi{V~X~!3%8Z~ww0?$OK zn7mAWDMTpbMf$iN;+^w3H}dnOUgE%fd(NLeM3@goIc&>a=Ks%sjAxWliYl;pSWCi1 hRmi9Yk1$QmYNX|}(hmo>ja?Mwaqek+e{FM8egJ$(2nYZG literal 0 HcmV?d00001 diff --git a/test/subset/data/fonts/gpos9_font2.otf b/test/subset/data/fonts/gpos9_font2.otf new file mode 100644 index 0000000000000000000000000000000000000000..1378f81e84bbe46af0e0c12bd0aad25b52b6ba74 GIT binary patch literal 4588 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 literal 0 HcmV?d00001 diff --git a/test/subset/data/tests/layout.gpos9.tests b/test/subset/data/tests/layout.gpos9.tests new file mode 100644 index 000000000..c95069ff5 --- /dev/null +++ b/test/subset/data/tests/layout.gpos9.tests @@ -0,0 +1,11 @@ +FONTS: +gpos9_font2.otf + +PROFILES: +keep-layout.txt +keep-layout-retain-gids.txt + +SUBSETS: +A +B +AB diff --git a/test/subset/meson.build b/test/subset/meson.build index de28fda2c..892163a77 100644 --- a/test/subset/meson.build +++ b/test/subset/meson.build @@ -13,6 +13,7 @@ tests = [ 'layout.gpos6', 'layout.gpos8', 'layout.gpos8.amiri', + 'layout.gpos9', 'layout.gsub3', 'layout.gsub6', 'layout.gdef',