From ff3cac0ccd0633a7715945e4c9f1e7243f75d1cb Mon Sep 17 00:00:00 2001 From: Garret Rieger Date: Wed, 23 Nov 2022 23:50:49 +0000 Subject: [PATCH] [subset] Fix unecessary trailing 0 bytes left by ContextFormat2 pruning. Uneeded rules where beind removed from the count by the bytes for them was being left in the font. --- src/hb-ot-layout-gsubgpos.hh | 6 +++++- ...es_f1.layout-test-retain-gids.41,42,43.otf | Bin 2152 -> 2148 bytes ...rules_f1.layout-test-retain-gids.41,42.otf | Bin 2028 -> 2024 bytes ...-test-retain-gids.retain-all-codepoint.otf | Bin 4012 -> 4008 bytes ...tiple_subrules_f1.layout-test.41,42,43.otf | Bin 1440 -> 1436 bytes ...multiple_subrules_f1.layout-test.41,42.otf | Bin 1320 -> 1316 bytes ...es_f1.layout-test.retain-all-codepoint.otf | Bin 4012 -> 4008 bytes ...r-Regular.default.retain-all-codepoint.ttf | Bin 49248 -> 49244 bytes ...egular.drop-hints.retain-all-codepoint.ttf | Bin 29468 -> 29464 bytes ...Regular.keep-gdef.retain-all-codepoint.ttf | Bin 49248 -> 49244 bytes ...es_f2.layout-test-retain-gids.41,42,43.otf | Bin 2256 -> 2252 bytes ...rules_f2.layout-test-retain-gids.41,42.otf | Bin 2224 -> 2220 bytes ...-test-retain-gids.retain-all-codepoint.otf | Bin 4008 -> 4004 bytes ...tiple_subrules_f2.layout-test.41,42,43.otf | Bin 1460 -> 1456 bytes ...multiple_subrules_f2.layout-test.41,42.otf | Bin 1416 -> 1412 bytes ...es_f2.layout-test.retain-all-codepoint.otf | Bin 4008 -> 4004 bytes 16 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/hb-ot-layout-gsubgpos.hh b/src/hb-ot-layout-gsubgpos.hh index cd011b06e..ec7c13cfe 100644 --- a/src/hb-ot-layout-gsubgpos.hh +++ b/src/hb-ot-layout-gsubgpos.hh @@ -2411,6 +2411,7 @@ struct ContextFormat2_5 const hb_map_t *lookup_map = c->table_tag == HB_OT_TAG_GSUB ? c->plan->gsub_lookups : c->plan->gpos_lookups; bool ret = true; int non_zero_index = -1, index = 0; + auto snapshot = c->serializer->snapshot(); for (const auto& _ : + hb_enumerate (ruleSet) | hb_filter (klass_map, hb_first)) { @@ -2422,8 +2423,10 @@ struct ContextFormat2_5 } if (coverage_glyph_classes.has (_.first) && - o->serialize_subset (c, _.second, this, lookup_map, &klass_map)) + o->serialize_subset (c, _.second, this, lookup_map, &klass_map)) { non_zero_index = index; + snapshot = c->serializer->snapshot(); + } index++; } @@ -2437,6 +2440,7 @@ struct ContextFormat2_5 out->ruleSet.pop (); index--; } + c->serializer->revert (snapshot); return_trace (bool (out->ruleSet)); } diff --git a/test/subset/data/expected/layout.context/gpos_context2_multiple_subrules_f1.layout-test-retain-gids.41,42,43.otf b/test/subset/data/expected/layout.context/gpos_context2_multiple_subrules_f1.layout-test-retain-gids.41,42,43.otf index 70dd0fdc6eacfdfc8efa02aefb0af63c3ce7b685..5ae5d5b20cb8895fe37ca82194250206d23244fb 100644 GIT binary patch delta 78 zcmaDM@I+vOxTpvN1BUcA9OstS+44F7%F7w1k6DM0R g?iTl8U}InhN;5KWFfcKgFlYct1_qwZd`wYn08d&G(*OVf delta 82 zcmaDN@IqjMxTpjJ1BC=7<7On1A_n%Gi>H!iedu*lll?U diff --git a/test/subset/data/expected/layout.context/gpos_context2_multiple_subrules_f1.layout-test-retain-gids.41,42.otf b/test/subset/data/expected/layout.context/gpos_context2_multiple_subrules_f1.layout-test-retain-gids.41,42.otf index f9349f6f3e06a3b3cd43922304536409ebf7c6bd..cfe6648e200c28c96ba632c1cbfa1c9ee0e799f8 100644 GIT binary patch delta 84 zcmaFE|AK#lm>BaP1_tKW?g9S64;Q`+Wnf@Dz`(#zGf~Hz@x#Olc}AOwGiI=8#MIxM nY{Ix(+=79PfgLE%$iTtC#Gt|;1tb|5cqVf&S#EY_TFD9kQm_?+ delta 86 zcmaFC|Av2pm>3HK0|WDG_W=LkM=mdRF)%P501DJi)bVEgGO5hLG=L-n1J7n5rdhlI{6!X- delta 103 zcmZ1>zeaw7xatK42Cm!gF0O8jm5c=p42&EM3=A6X0sg^{cwPno`6qz C+!mPt diff --git a/test/subset/data/expected/layout.context/gpos_context2_multiple_subrules_f1.layout-test.41,42,43.otf b/test/subset/data/expected/layout.context/gpos_context2_multiple_subrules_f1.layout-test.41,42,43.otf index 070f9ec0d7cc0b121eb76759896e96a34958bf74..6530ab6ecf85e6e6fea7eca81f9b8530c8333b4c 100644 GIT binary patch delta 73 zcmZ3$J%@XOxF`<;1JeZe0RP~JZ7&WnFfg8AU|{H*sFTeYF>%I1=9Dc3-;*sEcZ*vv guraU$r5G7F7?>DT7^HwC0|U=w9wy7p?o1Dv07=*q9smFU delta 80 zcmZ3&wSsGcxabcC1}1&?0RP~JEibAV7#NQ*Ffi0j)X8RanK)w(3(uZX^~n~DyCtm{ i*cjM>Qj8273``7a3^G8Hfq{>KVKNt!5hLG=L-n1J7n5rdhlI{6!X- delta 103 zcmZ1>zeaw7xatK42Cm!gF0O8jm5c=p42&EM3=A6X0sg^{cwPno`6qz C+!mPt diff --git a/test/subset/data/expected/layout.gdef-attachlist/IndicTestJalandhar-Regular.default.retain-all-codepoint.ttf b/test/subset/data/expected/layout.gdef-attachlist/IndicTestJalandhar-Regular.default.retain-all-codepoint.ttf index ab0c1d1c66ece1372db4679fa0238baf3a99126e..c64ef972a7e769af022fac46bbcdff8ef4cb85f4 100644 GIT binary patch delta 116 zcmV-)0E_?NfCJos1CTKbo2zI503XNz01MoaJX-;zk(m7h$O|>Im;v)1DP{>O2>J!? z10gwSg0W<)90Av6x1@4oyAY%a>lNcex0a&x#ArArx WP5>GJ0ssI2472tlu?MrME4P&33nbbA delta 120 zcmV-;0EhqFfCJ!w1CTKb!>eQf03XNz01MucJX-;%k(m7hcndePm;v)1DQF2S2>b=` z1<(by1zH6(1dIem1L6bJ16Tt>0gwSg0W<)90Av6x1@M!!AY%a@lNcex0a~-%ArArz aPyieN0ssI24gdhN^dqqc0RXe4E4Y+lTO`*2 diff --git a/test/subset/data/expected/layout.gdef-attachlist/IndicTestJalandhar-Regular.drop-hints.retain-all-codepoint.ttf b/test/subset/data/expected/layout.gdef-attachlist/IndicTestJalandhar-Regular.drop-hints.retain-all-codepoint.ttf index 2306381eaac5dda0c87c7c21d6d2b598a53efeb4..b4a267702e55d246b54a6106b5016b1651b67149 100644 GIT binary patch delta 117 zcmV-*0E+*d<^h=I0gy2Zo2zI501}h{01MoaJUan!k$CI`_YZ`EvuFYD5h-Q~DhT=o z?gh>Tv;|lNG6aeQL<8Uh(gRonLIIEgLIE@YegI?uECue9fD>Z@9Fyb|!vR>cs1y$Z X2~GeS00IC201UIj7O@Ajbsncw1b8HZ delta 121 zcmV-<0EYjV<^i1M0gy2Z!>eQf01}h{01MucJUan&k$CI`_P>OLvuFYD5h-X1EC~Ds z@CDEXwgp-RGz5$UMg!sl)B{)pLIIEgLIE@YegI?uECukBfD>Z@9+Tt~!vR{es1y$Z b3s3+Y00IC201f~Ev%nUy2LS-Ha2}{s;q4`U diff --git a/test/subset/data/expected/layout.gdef-attachlist/IndicTestJalandhar-Regular.keep-gdef.retain-all-codepoint.ttf b/test/subset/data/expected/layout.gdef-attachlist/IndicTestJalandhar-Regular.keep-gdef.retain-all-codepoint.ttf index ab0c1d1c66ece1372db4679fa0238baf3a99126e..c64ef972a7e769af022fac46bbcdff8ef4cb85f4 100644 GIT binary patch delta 116 zcmV-)0E_?NfCJos1CTKbo2zI503XNz01MoaJX-;zk(m7h$O|>Im;v)1DP{>O2>J!? z10gwSg0W<)90Av6x1@4oyAY%a>lNcex0a&x#ArArx WP5>GJ0ssI2472tlu?MrME4P&33nbbA delta 120 zcmV-;0EhqFfCJ!w1CTKb!>eQf03XNz01MucJX-;%k(m7hcndePm;v)1DQF2S2>b=` z1<(by1zH6(1dIem1L6bJ16Tt>0gwSg0W<)90Av6x1@M!!AY%a@lNcex0a~-%ArArz aPyieN0ssI24gdhN^dqqc0RXe4E4Y+lTO`*2 diff --git a/test/subset/data/expected/layout.gsub5/gsub_context2_multiple_subrules_f2.layout-test-retain-gids.41,42,43.otf b/test/subset/data/expected/layout.gsub5/gsub_context2_multiple_subrules_f2.layout-test-retain-gids.41,42,43.otf index 1d3f3cd70030aa31e8780a8a111c755105406fa3..f6b78bc97d39c54548e49f30852ad7cb1b15ed29 100644 GIT binary patch delta 79 zcmca0ct&u7xTpmK1IrZm;83SWf-lt=7#NQ*FfepY)bVCynOGsu7%*|h9F|$^d-hMZ iVB9V4!NA7A3Y2GL;9y{4Fk#RDk_-$yoB5ayu>k;AX%Z;_ delta 83 zcmX>jctLQ2xTp;S1IrZm;83SWk}vfb7#NQ*FfjB@)bVEIm{=jt7&39j9G02i_spMc k!MI!6hk=cO6)4Zhz`?-8V8NgRBpDb4fS6%37tQwC;$Ke diff --git a/test/subset/data/expected/layout.gsub5/gsub_context2_multiple_subrules_f2.layout-test-retain-gids.41,42.otf b/test/subset/data/expected/layout.gsub5/gsub_context2_multiple_subrules_f2.layout-test-retain-gids.41,42.otf index 5a0d0c4aa1e2cf83e3726f562619c017ec9d81d4..6f2e7ef13de0c1a5b97234722507678aee37b255 100644 GIT binary patch delta 83 zcmdlWxJGb-xTpdH151y4aH!M6%$GI{42%aD7#J!h>UcB0nOGsuXfbid3>H7L)ajE= l7UcALm{=jtXftuf3>Ket>5P+2 n7zeIk5xatW82Cm!gF0O8jm5c=p42&EM3=A6X!J$r%Bwnfm`9OJwo{2Wnj8`T` z=reLm?2u;+nYdyivxvf{$u^9;#XT6<7+8U77#TPim>5hLG=L-n1J7n5rfIwY;Jg+1 delta 103 zcmZ1?ze0Y3xat`O2Cm!gF0O8jm5c=p42&EM3=A6X!J$r%6kh5B`6qz<2@`Fk8E;IC z&}ZbC*dfmtF>%F2W)_8WlWiDxOZzaeF|Y#FFfwp3Ffmv#=m1Fu1_2;u*v!W?jTZnl C-xc@( diff --git a/test/subset/data/expected/layout.gsub5/gsub_context2_multiple_subrules_f2.layout-test.41,42,43.otf b/test/subset/data/expected/layout.gsub5/gsub_context2_multiple_subrules_f2.layout-test.41,42,43.otf index 0a693c64161f1c4a312e0139ec1ffbb1752ad30d..8086051428af99c432f2f98622ff9003049c4fab 100644 GIT binary patch delta 73 zcmdnOy@7jzxF`<;1Je@s;83TBT`!g~Ffg8BU|{H)sFTeYF>%IHW(Pm#$qtOW#XT6< b7+8Taj0_wMObjLr8bFePfoHQA(>!JX;aCu7 delta 77 zcmdnMy@h*%xTpXF1Je@s;83TBlU}T2U|>AMz`)QqQ74-*X5x&c%m#kylN}g$OZzae eF|Yz<7#TPim>4V=bburS15hsm!)76-dCUMFix6i3 diff --git a/test/subset/data/expected/layout.gsub5/gsub_context2_multiple_subrules_f2.layout-test.41,42.otf b/test/subset/data/expected/layout.gsub5/gsub_context2_multiple_subrules_f2.layout-test.41,42.otf index 128c1d4138267777858f3782c641b75c66782bf5..0a26e0fd19023c401b89f2e429cfae6c97365f38 100644 GIT binary patch delta 75 zcmeC+ZsDFFF8YOmfoXz!aH!M6gcmgo42&lj7#J!h>SQxIOq{WhalvFO#=YVe3~UUn dKygL}4hAL$6$U9F$-uxfS%ArOvpbU`GXMjM5T*bC delta 77 zcmZqS?%SQyzOq{Whv2C&y<6cQC1~vv( fpg1D~2Lls>8iNdwWMJT9V3^FuWV+dr$(b1dA#M<& diff --git a/test/subset/data/expected/layout.gsub5/gsub_context2_multiple_subrules_f2.layout-test.retain-all-codepoint.otf b/test/subset/data/expected/layout.gsub5/gsub_context2_multiple_subrules_f2.layout-test.retain-all-codepoint.otf index b3d6ae9e4541b312739af3c80848ee34c6f3083e..ff0595a942f5b0678aa092bf7b5f802fe6da9d1c 100644 GIT binary patch delta 99 zcmZ1>zeIk5xatW82Cm!gF0O8jm5c=p42&EM3=A6X!J$r%Bwnfm`9OJwo{2Wnj8`T` z=reLm?2u;+nYdyivxvf{$u^9;#XT6<7+8U77#TPim>5hLG=L-n1J7n5rfIwY;Jg+1 delta 103 zcmZ1?ze0Y3xat`O2Cm!gF0O8jm5c=p42&EM3=A6X!J$r%6kh5B`6qz<2@`Fk8E;IC z&}ZbC*dfmtF>%F2W)_8WlWiDxOZzaeF|Y#FFfwp3Ffmv#=m1Fu1_2;u*v!W?jTZnl C-xc@(