From 7cb002cb58d4e3f17fcab174e400c0292880c059 Mon Sep 17 00:00:00 2001 From: Qunxin Liu Date: Mon, 14 Mar 2022 11:40:35 -0700 Subject: [PATCH] [subset] bug fix in prune_langsys we should not cache visited langsys cause 2 different Record could have different Tag while pointing to the same Langsys, a langsys is redundant in Record A does not mean it's redundant in Record B. Same thing for visited_script. Also adding the number of features in the LangSys's feature list to the visited langsys count so it's more accurate. Plus some improvement in langsys compare() --- src/hb-ot-layout-common.hh | 61 +++++++----------- ...fault.61,62,63,64,65,66,67,68,69,6A,6B.ttf | Bin 0 -> 4800 bytes ...hints.61,62,63,64,65,66,67,68,69,6A,6B.ttf | Bin 0 -> 2452 bytes ...fault.61,62,63,64,65,66,67,68,69,6A,6B.ttf | Bin 0 -> 9704 bytes ...hints.61,62,63,64,65,66,67,68,69,6A,6B.ttf | Bin 0 -> 9704 bytes test/subset/data/tests/full-font.tests | 1 + 6 files changed, 24 insertions(+), 38 deletions(-) create mode 100644 test/subset/data/expected/full-font/Roboto-Regular.default.61,62,63,64,65,66,67,68,69,6A,6B.ttf create mode 100644 test/subset/data/expected/full-font/Roboto-Regular.drop-hints.61,62,63,64,65,66,67,68,69,6A,6B.ttf create mode 100644 test/subset/data/expected/full-font/SourceSerifVariable-Roman.default.61,62,63,64,65,66,67,68,69,6A,6B.ttf create mode 100644 test/subset/data/expected/full-font/SourceSerifVariable-Roman.drop-hints.61,62,63,64,65,66,67,68,69,6A,6B.ttf diff --git a/src/hb-ot-layout-common.hh b/src/hb-ot-layout-common.hh index 60a190615..9f53e9d27 100644 --- a/src/hb-ot-layout-common.hh +++ b/src/hb-ot-layout-common.hh @@ -60,6 +60,10 @@ #define HB_MAX_LANGSYS 2000 #endif +#ifndef HB_MAX_LANGSYS_FEATURE_COUNT +#define HB_MAX_LANGSYS_FEATURE_COUNT 50000 +#endif + #ifndef HB_MAX_FEATURES #define HB_MAX_FEATURES 750 #endif @@ -105,34 +109,15 @@ struct hb_prune_langsys_context_t script_langsys_map (script_langsys_map_), duplicate_feature_map (duplicate_feature_map_), new_feature_indexes (new_collected_feature_indexes_), - script_count (0),langsys_count (0) {} + script_count (0),langsys_feature_count (0) {} - bool visitedScript (const void *s) + bool visitScript () + { return script_count++ < HB_MAX_SCRIPTS; } + + bool visitLangsys (unsigned feature_count) { - if (script_count++ > HB_MAX_SCRIPTS) - return true; - - return visited (s, visited_script); - } - - bool visitedLangsys (const void *l) - { - if (langsys_count++ > HB_MAX_LANGSYS) - return true; - - return visited (l, visited_langsys); - } - - private: - template - bool visited (const T *p, hb_set_t &visited_set) - { - hb_codepoint_t delta = (hb_codepoint_t) ((uintptr_t) p - (uintptr_t) table); - if (visited_set.in_error () || visited_set.has (delta)) - return true; - - visited_set.add (delta); - return false; + langsys_feature_count += feature_count; + return langsys_feature_count < HB_MAX_LANGSYS_FEATURE_COUNT; } public: @@ -142,10 +127,8 @@ struct hb_prune_langsys_context_t hb_set_t *new_feature_indexes; private: - hb_set_t visited_script; - hb_set_t visited_langsys; unsigned script_count; - unsigned langsys_count; + unsigned langsys_feature_count; }; struct hb_subset_layout_context_t : @@ -643,11 +626,14 @@ struct LangSys | hb_map (feature_index_map) ; - if (iter.len () != o_iter.len ()) - return false; + for (; iter && o_iter; iter++, o_iter++) + { + unsigned a = *iter; + unsigned b = *o_iter; + if (a != b) return false; + } - for (const auto _ : + hb_zip (iter, o_iter)) - if (_.first != _.second) return false; + if (iter || o_iter) return false; return true; } @@ -732,7 +718,7 @@ struct Script unsigned script_index) const { if (!has_default_lang_sys () && !get_lang_sys_count ()) return; - if (c->visitedScript (this)) return; + if (!c->visitScript ()) return; if (!c->script_langsys_map->has (script_index)) { @@ -749,15 +735,14 @@ struct Script { //only collect features from non-redundant langsys const LangSys& d = get_default_lang_sys (); - if (!c->visitedLangsys (&d)) { + if (c->visitLangsys (d.get_feature_count ())) { d.collect_features (c); } for (auto _ : + hb_zip (langSys, hb_range (langsys_count))) { - const LangSys& l = this+_.first.offset; - if (c->visitedLangsys (&l)) continue; + if (!c->visitLangsys (l.get_feature_count ())) continue; if (l.compare (d, c->duplicate_feature_map)) continue; l.collect_features (c); @@ -769,7 +754,7 @@ struct Script for (auto _ : + hb_zip (langSys, hb_range (langsys_count))) { const LangSys& l = this+_.first.offset; - if (c->visitedLangsys (&l)) continue; + if (!c->visitLangsys (l.get_feature_count ())) continue; l.collect_features (c); c->script_langsys_map->get (script_index)->add (_.second); } diff --git a/test/subset/data/expected/full-font/Roboto-Regular.default.61,62,63,64,65,66,67,68,69,6A,6B.ttf b/test/subset/data/expected/full-font/Roboto-Regular.default.61,62,63,64,65,66,67,68,69,6A,6B.ttf new file mode 100644 index 0000000000000000000000000000000000000000..b66269f07d6b377e0ecb0b896161cc12d905e07a GIT binary patch literal 4800 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 U59YYK7;(ymF6tC^Sa!^R0Y0p=ZvX%Q literal 0 HcmV?d00001 diff --git a/test/subset/data/expected/full-font/Roboto-Regular.drop-hints.61,62,63,64,65,66,67,68,69,6A,6B.ttf b/test/subset/data/expected/full-font/Roboto-Regular.drop-hints.61,62,63,64,65,66,67,68,69,6A,6B.ttf new file mode 100644 index 0000000000000000000000000000000000000000..4d506845d5b45f4f8c77b25f34508e71b1df5546 GIT binary patch literal 2452 zcmZuydr(wm6hGg+ckk{Zp%)iOD_K}uoJ^&CGKQ2d$R`M*Mk*{1VP#=gSf9mAWhp5P zTIPGy#{MvH)R`<>D7A-=p{%5G#wN{XYJ7xEYBr|s-G1NQtr+v}eBV9ieBb$<-#Op; z?h+%S1bUG~D$AQNF_+3IiHN-b>&U!<{36+QbuW=P2l~mpqT+EI&8;hlgagp`y0}X`SixFS#TfU%Zc=v81or6d!tEuu--d)%O zJaz%=t{NEPI(7S?^LRsR>VnI%9+OT3|3T3pxIM9{B5hYCMr~((Q-T$;QlkFnHBDpCK{dsD>&* zkJt7JSY^}?Bc2|B%pX4U$R^C3p@}5qg@p0rdM$Dz@L4 zl}RuE3zB`LRXteGC3mOmBq^s%!r7v@jHOoR$)akaN5p>}w*$_YMiwTDdFoB(5VJxZEs zRpvGW#>3iMz}d(c0xI_a*vWV^{CI~D#i2WMVmt?HJO^t$2gi8+6PNF0wN(xEK#s=b zv7+Ug3KW3`z)oaCx9GGQ@QxH9=`=2k^xAG7S;Nxa(LFo{@0A2COM!-=qq(n)&XP!s z^pb?3!_adXmP@c)g5?q{m*B0Z5{@7lAX^-pw=J;$KYO1K+40aA9f$2m}wFsQ~=*hV`1^(UHGq8qo!4X3For}b0u~PR2S(L zuSnBz9>a*ztQoQ;-Rg7of0SeZ9t)10oi)r2?a3}`KR z=KP7-<^1xrM0zE&%)cFj&?qLslAfWrD0anVPE;~@XuXnbx49(q&qq%MjP0QSTk})s z_16v+6d!zbgP`0}zggcTQ~1-h>KQex`{>Jd_3`#E(GPQxPcQO$gox9%CjglgXDkbg zRZ9vP2ssrS4EuFUj@6%2?*z|oc>kJVzoE_Bx^3&qWhL|WRI&_4sXP8`{(hf#_2)+| zUESbZ3hdv(xj$|u4Rj>hZ7E=E;WZPSDJJlBD;&SH_sC&?sNLv4{^8Zo=2Zt~6zy%^ zELi_yqh1yqw<*}n9Jllze7%ER+tR~pF%P&mz&VMt)}@m(N;gqSN=xQNaHq&DUDl^L ztyW>$4{Go8=U)2eO4uU3yQaL^zNlF}8`zvE3^6pDSladUx591e6*W9<*Rg_eb54uh zyWdD?-Nx@?HbQmFN&H_Cq@6fm9Bhg{S`d4ZMY-6~(b@j=Q*oo5CFK_{iXCnKeTS8e zMsImT+udT$vrL^OUI))X_%6lrciR;c(zj-~IZ>yRm%{yDCCaXReB5t*=dYf{7oIFz zx_9*^|Ix$0c5Ym~zp%J{HA)g@!&{c!xzKaHa<>1C&1>ep$ZR(bo!-fQ+tvfdEx7PM zqTUMVyX@wHibc`RPY=P)CO&_R%@#w<>n~}xhC(-G6^BA6-M*|WpIaKuQb*+Elw@b)AN7bjg*^+8czj)mDFf2d zGn`s#3S4m!G~X%eFJl~LN6y%RZl?OFT(nAF*cbDR5K_n7Ur+S>UzH)%9S!`aI=pk>hT`=O=%uNN#zn!@q> i_5@oO4b`yJd;WY#4M?w}>V3K-8g`+NhZQ?`=)VCNmLfI) literal 0 HcmV?d00001 diff --git a/test/subset/data/expected/full-font/SourceSerifVariable-Roman.default.61,62,63,64,65,66,67,68,69,6A,6B.ttf b/test/subset/data/expected/full-font/SourceSerifVariable-Roman.default.61,62,63,64,65,66,67,68,69,6A,6B.ttf new file mode 100644 index 0000000000000000000000000000000000000000..57ff1f9e2d613842460ef2321a29734786c4d625 GIT binary patch literal 9704 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 DbM)Pt literal 0 HcmV?d00001 diff --git a/test/subset/data/expected/full-font/SourceSerifVariable-Roman.drop-hints.61,62,63,64,65,66,67,68,69,6A,6B.ttf b/test/subset/data/expected/full-font/SourceSerifVariable-Roman.drop-hints.61,62,63,64,65,66,67,68,69,6A,6B.ttf new file mode 100644 index 0000000000000000000000000000000000000000..57ff1f9e2d613842460ef2321a29734786c4d625 GIT binary patch literal 9704 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 DbM)Pt literal 0 HcmV?d00001 diff --git a/test/subset/data/tests/full-font.tests b/test/subset/data/tests/full-font.tests index d9519b69f..d60c6eac7 100644 --- a/test/subset/data/tests/full-font.tests +++ b/test/subset/data/tests/full-font.tests @@ -9,4 +9,5 @@ drop-hints.txt SUBSETS: abc Ǽ!A bc +abcdefghijk ×ØÙÚÞ