From 0eef8113d8a7940b4529a340790976a577fe829e Mon Sep 17 00:00:00 2001 From: blueshade7 Date: Tue, 9 Jul 2019 11:43:59 -0700 Subject: [PATCH 01/78] retain gids in HVAR so in sync with fontTools regenerate Comfortaa subset test results --- src/hb-bimap.hh | 6 + src/hb-ot-var-hvar-table.hh | 123 +++++++++++------- ...Comfortaa-Regular-new.default.61,62,63.ttf | Bin 6492 -> 7460 bytes .../Comfortaa-Regular-new.default.61,63.ttf | Bin 6316 -> 7104 bytes .../Comfortaa-Regular-new.default.61.ttf | Bin 6148 -> 6752 bytes .../Comfortaa-Regular-new.default.62.ttf | Bin 6088 -> 6696 bytes .../Comfortaa-Regular-new.default.63.ttf | Bin 6068 -> 6676 bytes ...ar-new.drop-hints-retain-gids.61,62,63.ttf | Bin 3284 -> 4912 bytes ...gular-new.drop-hints-retain-gids.61,63.ttf | Bin 3164 -> 4620 bytes ...-Regular-new.drop-hints-retain-gids.61.ttf | Bin 2868 -> 4056 bytes ...-Regular-new.drop-hints-retain-gids.62.ttf | Bin 3020 -> 4296 bytes ...-Regular-new.drop-hints-retain-gids.63.ttf | Bin 3024 -> 4304 bytes ...fortaa-Regular-new.drop-hints.61,62,63.ttf | Bin 1952 -> 2920 bytes ...Comfortaa-Regular-new.drop-hints.61,63.ttf | Bin 1832 -> 2620 bytes .../Comfortaa-Regular-new.drop-hints.61.ttf | Bin 1704 -> 2308 bytes .../Comfortaa-Regular-new.drop-hints.62.ttf | Bin 1688 -> 2296 bytes .../Comfortaa-Regular-new.drop-hints.63.ttf | Bin 1688 -> 2296 bytes ...omfortaa-Regular-new.name-ids.61,62,63.ttf | Bin 6236 -> 7204 bytes .../Comfortaa-Regular-new.name-ids.61,63.ttf | Bin 6060 -> 6848 bytes .../Comfortaa-Regular-new.name-ids.61.ttf | Bin 5892 -> 6496 bytes .../Comfortaa-Regular-new.name-ids.62.ttf | Bin 5832 -> 6440 bytes .../Comfortaa-Regular-new.name-ids.63.ttf | Bin 5812 -> 6420 bytes ...ortaa-Regular-new.retain-gids.61,62,63.ttf | Bin 7824 -> 9452 bytes ...omfortaa-Regular-new.retain-gids.61,63.ttf | Bin 7648 -> 9104 bytes .../Comfortaa-Regular-new.retain-gids.61.ttf | Bin 7312 -> 8500 bytes .../Comfortaa-Regular-new.retain-gids.62.ttf | Bin 7420 -> 8696 bytes .../Comfortaa-Regular-new.retain-gids.63.ttf | Bin 7404 -> 8684 bytes test/subset/run-tests.py | 2 +- 28 files changed, 85 insertions(+), 46 deletions(-) diff --git a/src/hb-bimap.hh b/src/hb-bimap.hh index c08eec9d6..cdea03b9a 100644 --- a/src/hb-bimap.hh +++ b/src/hb-bimap.hh @@ -108,6 +108,12 @@ struct hb_inc_bimap_t : hb_bimap_t return rhs; } + void add_set (const hb_set_t *set) + { + hb_codepoint_t i = HB_SET_VALUE_INVALID; + while (hb_set_next (set, &i)) add (i); + } + /* Create an identity map. */ bool identity (unsigned int size) { diff --git a/src/hb-ot-var-hvar-table.hh b/src/hb-ot-var-hvar-table.hh index 9693f13a3..0fb1523c0 100644 --- a/src/hb-ot-var-hvar-table.hh +++ b/src/hb-ot-var-hvar-table.hh @@ -128,10 +128,9 @@ struct index_map_subset_plan_t VORG_INDEX }; - void init (const DeltaSetIndexMap &index_map, - unsigned int im_index, - hb_inc_bimap_t &outer_map, - hb_vector_t &inner_maps, + void init (const DeltaSetIndexMap &index_map, + hb_inc_bimap_t &outer_map, + hb_vector_t &inner_sets, const hb_subset_plan_t *plan) { map_count = 0; @@ -140,36 +139,27 @@ struct index_map_subset_plan_t max_inners.init (); output_map.init (); - if (&index_map == &Null(DeltaSetIndexMap)) - { - /* Advance width index map is required. If its offset is missing, - * treat it as an indentity map. */ - if (im_index == ADV_INDEX) - { - outer_map.add (0); - for (hb_codepoint_t gid = 0; gid < plan->num_output_glyphs (); gid++) - { - hb_codepoint_t old_gid = gid; - (void)plan->old_gid_for_new_gid (gid, &old_gid); - inner_maps[0].add (old_gid); - } - } - return; - } + if (&index_map == &Null(DeltaSetIndexMap)) return; unsigned int last_val = (unsigned int)-1; hb_codepoint_t last_gid = (hb_codepoint_t)-1; hb_codepoint_t gid = (hb_codepoint_t) hb_min (index_map.get_map_count (), plan->num_output_glyphs ()); outer_bit_count = (index_map.get_width () * 8) - index_map.get_inner_bit_count (); - max_inners.resize (inner_maps.length); - for (unsigned i = 0; i < inner_maps.length; i++) max_inners[i] = 0; + max_inners.resize (inner_sets.length); + for (unsigned i = 0; i < inner_sets.length; i++) max_inners[i] = 0; /* Search backwards for a map value different from the last map value */ for (; gid > 0; gid--) { - hb_codepoint_t old_gid = gid - 1; - (void)plan->old_gid_for_new_gid (gid - 1, &old_gid); + hb_codepoint_t old_gid; + if (!plan->old_gid_for_new_gid (gid - 1, &old_gid)) + { + if (last_gid == (hb_codepoint_t)-1) + continue; + else + break; + } unsigned int v = index_map.map (old_gid); if (last_gid == (hb_codepoint_t)-1) @@ -187,14 +177,16 @@ struct index_map_subset_plan_t map_count = last_gid; for (gid = 0; gid < map_count; gid++) { - hb_codepoint_t old_gid = gid; - (void)plan->old_gid_for_new_gid (gid, &old_gid); - unsigned int v = index_map.map (old_gid); - unsigned int outer = v >> 16; - unsigned int inner = v & 0xFFFF; - outer_map.add (outer); - if (inner > max_inners[outer]) max_inners[outer] = inner; - inner_maps[outer].add (inner); + hb_codepoint_t old_gid; + if (plan->old_gid_for_new_gid (gid, &old_gid)) + { + unsigned int v = index_map.map (old_gid); + unsigned int outer = v >> 16; + unsigned int inner = v & 0xFFFF; + outer_map.add (outer); + if (inner > max_inners[outer]) max_inners[outer] = inner; + hb_set_add (inner_sets[outer], inner); + } } } @@ -209,10 +201,7 @@ struct index_map_subset_plan_t const hb_vector_t &inner_maps, const hb_subset_plan_t *plan) { - /* Leave output_map empty for an identity map */ - /* TODO: if retain_gids, convert identity to a customized map, or not subset varstore? */ - if (input_map == &Null(DeltaSetIndexMap)) - return; + if (input_map == &Null(DeltaSetIndexMap)) return; for (unsigned int i = 0; i < max_inners.length; i++) { @@ -224,11 +213,15 @@ struct index_map_subset_plan_t output_map.resize (map_count); for (hb_codepoint_t gid = 0; gid < output_map.length; gid++) { - hb_codepoint_t old_gid = gid; - (void)plan->old_gid_for_new_gid (gid, &old_gid); - unsigned int v = input_map->map (old_gid); - unsigned int outer = v >> 16; - output_map[gid] = (outer_map[outer] << 16) | (inner_maps[outer][v & 0xFFFF]); + hb_codepoint_t old_gid; + if (plan->old_gid_for_new_gid (gid, &old_gid)) + { + unsigned int v = input_map->map (old_gid); + unsigned int outer = v >> 16; + output_map[gid] = (outer_map[outer] << 16) | (inner_maps[outer][v & 0xFFFF]); + } + else + output_map[gid] = 0; /* Map unused glyph to outer/inner=0/0 */ } } @@ -264,17 +257,50 @@ struct hvarvvar_subset_plan_t index_map_plans.resize (index_maps.length); var_store = &_var_store; + inner_sets.resize (var_store->get_sub_table_count ()); + for (unsigned int i = 0; i < inner_sets.length; i++) + inner_sets[i] = hb_set_create (); + adv_set = hb_set_create (); + inner_maps.resize (var_store->get_sub_table_count ()); for (unsigned int i = 0; i < inner_maps.length; i++) inner_maps[i].init (); - for (unsigned int i = 0; i < index_maps.length; i++) - index_map_plans[i].init (*index_maps[i], i, outer_map, inner_maps, plan); + bool retain_adv_map = false; + index_map_plans[0].init (*index_maps[0], outer_map, inner_sets, plan); + if (index_maps[0] == &Null(DeltaSetIndexMap)) + { + retain_adv_map = plan->retain_gids; + outer_map.add (0); + for (hb_codepoint_t gid = 0; gid < plan->num_output_glyphs (); gid++) + { + hb_codepoint_t old_gid; + if (plan->old_gid_for_new_gid (gid, &old_gid)) + hb_set_add (inner_sets[0], old_gid); + } + hb_set_union (adv_set, inner_sets[0]); + } + + for (unsigned int i = 1; i < index_maps.length; i++) + index_map_plans[i].init (*index_maps[i], outer_map, inner_sets, plan); outer_map.sort (); - for (unsigned int i = 0; i < inner_maps.length; i++) - if (inner_maps[i].get_population () > 0) inner_maps[i].sort (); + + if (retain_adv_map) + { + for (hb_codepoint_t gid = 0; gid < plan->num_output_glyphs (); gid++) + inner_maps[0].add (hb_set_has (inner_sets[0], gid)? gid: HB_MAP_VALUE_INVALID); + } + else + { + inner_maps[0].add_set (adv_set); + hb_set_subtract (inner_sets[0], adv_set); + inner_maps[0].add_set (inner_sets[0]); + } + + for (unsigned int i = 1; i < inner_maps.length; i++) + inner_maps[i].add_set (inner_sets[i]); for (unsigned int i = 0; i < index_maps.length; i++) index_map_plans[i].remap (index_maps[i], outer_map, inner_maps, plan); @@ -282,6 +308,9 @@ struct hvarvvar_subset_plan_t void fini () { + for (unsigned int i = 0; i < inner_sets.length; i++) + hb_set_destroy (inner_sets[i]); + hb_set_destroy (adv_set); inner_maps.fini_deep (); index_map_plans.fini_deep (); } @@ -291,6 +320,10 @@ struct hvarvvar_subset_plan_t hb_vector_t index_map_plans; const VariationStore *var_store; + + protected: + hb_vector_t inner_sets; + hb_set_t *adv_set; }; /* diff --git a/test/subset/data/expected/basics/Comfortaa-Regular-new.default.61,62,63.ttf b/test/subset/data/expected/basics/Comfortaa-Regular-new.default.61,62,63.ttf index efe5bcb4c2d6263c061bd1c66ea8b2008ed36b0c..bb287436e660558315482db4218a0b82009212d1 100644 GIT binary patch delta 1280 zcmXX^OK4nG82-<>=e{O0cP5#+amIp7H5w3#8cLB;FqI-ju%$^W;>sb-quAIX38CFM zPDXU2pw&edqApyyvIdGSgxRa$!i8X$NkOKu^SCo}pXd19#Q$>6J>UQQ&i|hWbKjk9 z5F?@@HbF05eDnN*Ue)dqmFJ;dxV-qn-15rCM@0I|!0#+xJ%9DiXE%O^{Y&8Im)2`_ z%F=zy?JNl`(N+9LB!4xY1da#;N^Ppx}7;i5wJ+}-n_L`A2i1?rNTbo5a%!({EZ1MU`2OE$+5TRceWi)F4*xRteiH8%ufR@e z)z{O*k)*9H5XWA{dX5Bnw&OUqsgvtIdZg=iE|+sAOpQWhie#8_l^;$p z&N(R#Gp>RjX6aIu=t`AU%EY;*p_I-vjpG75Z5zivZ8JsCS%x#kyhhi{mr5nhE#4GL z5o66J{`iFic5=#k$<+>;eV;Qnd0|33f-Dm*b@EJdpuN-ZO|g7S}CXWu#Q=xRC>nJQ$@2BkG;o_|MddQ!6_CU zKJ0cmX-Z0a$FavTe5f}hJ(JJqO=4V1)jDZqrz(}oiAh^m=}SrExN~rD&>2g;Fg-n8 z&?#;jj5W9>ykN%+ysQbbsyT&ZuA4V0>UKJvZbW9@-63`K2ruCgUIX1(nYt>xnOLb< zGR?|}VASt+yIvs4%3w}1mXeYtQ|jXrDpA6;41tMe1SO+hujh@2!;zmT_4W?2S&l>w}6}2%iuu1?$6M{n=LnIO_zmO(#TW!~@{<#p_A>qe@)rR4T)BxA1&nU| z7C?Rjkgt%Jn47Aexa}DOgQyAv1Jjj)e5vA+|MMA)7#PHXniv!cic$*zx^X+ww;9@q2IH*YDjrb^Jn$ z7!j3l2zq|)t<^W=1(2KY^d!Xar5V zOh3b(;gyZUV9$S|{ykCk4DcTthX*x3zW`hYq?=pKdgH6*@~=eZNg}_pbr`hvIQN6L%2_KF00Tcdl;T{;si1#8!y-4|OCs`^(cQ(L4h1Z?`vtcTVhowvGa- z_`kdjh5aS{1$+^BVY_i~#eSE*0e%hG+u7X+SdQHXMhSmWEu&YLP#hQLXeV4lB7e|9V!NF5VIV|;b}4&jiN+eFKCrY zsg#n_G>PLl?X->Q#5FsH*>We-&XaN)hhdmZB@G6?FJ%&ilQ2#-3B)m&VcWJ~tdrAP zD`GlL5ViBNXCb7ryjWWh9rLUx;=*-Zvosi#xJFr$WHcNOmE{zRMb9x&J{Oj0Ky1^p zTKMc*sK?0p_isp=rm8*92y{`kQcU{Y zzE#w=msH5Jp?x^ia~SHI+58t3K5C62q*|wn8P1G|!$Ggt8^wy888og^rAW4!)*n5l zr53hh2~ad6NQV7>e>547!$@jA0V`ex+KimRv!j{uu5iH^^*f kq&(BEF+>H6ESZcaaktwYq+}HAuq-Xnf5p*SBLDyZ delta 307 zcmX?LzQ(YgfsuiMK@do=FbMbu>l>w}6}1652|&?=;1I`<$_be}85qP1fPAgw+{6Ng za)v!X`2#?{O>$Xc5ubAUCZPNUApcHsS&0H4uL_Va`~b+Glva?QJI_o6D97@Lfq_pn z4XD1^C36x`{T!gYNqS;&J;-1Ipg;zY=19+}Ogq0U*NlOIQHFtmX-h_GVv11lM1KYb z<{v%1G zRr{7r1VM{gwhU@l3#pJw1@#T%oA=xItaEwip6~pA_q@&C-GL2aM3jIMsdwz|$Q>a? zuZhyX;2ocsywX22TiPTNc7dlSr$(mMp3J`|>Kp*RoGTbbiqcyY4+9V6R*aHgfD73Z}ybd81s!9S4D3+-iPd zZFW8X`92XFBI4;h2K=dYnnW4ov7@;e<9!NqK>pwy9Lfv&4*UVQXRffkDy0ea z0!Wg&u#_`cgm!>IfaHR4ZMDco+pfYf1xI$#D9l_k-tB?$0S104E|r&qSJV$e^)Oy6 z%@q5_*1r;UY}GPsoQr)sKNf3qLN0L=aZ2L55gKO_t~O2_I*acjR?X{Fhe5{LOsgtbW=yU2h>E7`x~52! zN*x?Xk`{}_^oSymjZThlhg|*52;-bnz!An%u(>GR$`akqvaSqqE(jPUF+t#X01wy3 zq0<@*2tHNTJ6PkW(UvSHlbox(A_f65R*4-QH^sJy+ayaoCaZ$F?k-f|{b9HN2LOTz tohD0*R+Q6?3)kN1z|c%Ve>6h#$y=`ZR03F0Nh-(1(caqCW6!>^mfP7&KAb(O?L3-{yGm#5G^&t!l ze4=SU_02AslYr)Z0qIXqEUqsAG6aAE2Y@t3dQN3pUHat|1_nkM1_mavjMT&wq2h`D zKnKMD<;^mH0_-yw9s&7tfP9sV+>#1bF$SP|<|!ckIr+(njNA-UfqbBa3~afH6$Okg z{6NPrn*jL=d5O8H>WSN)0UdY-X#SOge5vA+|MMA)fDTvyQczHoT43l=cbkDhC}*<; XqYo3yo-c1yHg_;53vV_Tw`2qWttd#~ diff --git a/test/subset/data/expected/basics/Comfortaa-Regular-new.default.62.ttf b/test/subset/data/expected/basics/Comfortaa-Regular-new.default.62.ttf index 9fbebb5d4f92b4a617fafc734cd25c5a60569090..ff9379c17047d41ee54e4b0153fc859d19b0c683 100644 GIT binary patch delta 917 zcmX9*OK1~O6utB2`)o3aO%qcUsaO?6P)iUI!4`^C5i7QcONZE|g~o=q)Vi^zqq_=z z5M1fTg@_BWD7fp=r3+W;N~oZzZB5c7^Lyi&cxT?7d+ztleV>lK$}N&aL@6kRjt^ZO zxFV`GedBmv;=Uim8C0cEg7<3QLA(Du#(ke`% zemuaDL^{fmnBTV8%5vt6^#5W|0pISnCfW!43H@G0?Ole&F9Sb7eXiw65U-_>2O&k^ zLKG5#>$-l8^O}%=Ws)?*FqrSw>-Cl!EG0tW2Z0bG@O;;C9N#X>UX!b~tn%ifXCDka zr_pG*UO?5VX$FDYYBU>;ACiJTvLx%eu1J#I5r&~4DfC@*wa>;hv=my*2{lOQu!s~f zg>$Z^s?`(=K`Wr3Rjbv6W+aozn4y9`Q#4hE=&Gi1zR0--K1RIOvgKASZrHtw&P~(g zx=QKv`nsy}csy=)=rXzJ~i zU+(go_07$Vx`RJ6Z>3Tu+uqt@B!@!qC6hOOB+=h(Qg%ckkKB z)i7FqAexo6wY5r9sL4zwlT^tsYwclmXGwSJF&*0q%bnl>w}7qv1lFt-3j6M{n=LnjCn$l5-Oa z76?J^Z-D$e$z>%9e7q_^zR({ae^OdOdhR?kkqbb>B^Vg^ zMALxkn_V&|0oCsS=}%8At}g&G1b_k{3pvtrD$_!~GkP&FFvIdbxo6B*tzOa=0R7BaBqCRP+My6{^t zFfjc9@)hzDb5qq5w>@KE5S{=OyHb!ZRb29aK7$d^0VyB_1x2X^h8}gdfj%(UY{4kN U#KM1Nir8i!=49c`zr`#W0rq}Ln*aa+ diff --git a/test/subset/data/expected/basics/Comfortaa-Regular-new.default.63.ttf b/test/subset/data/expected/basics/Comfortaa-Regular-new.default.63.ttf index 73917418a33d7055de3c7fd6d90e788234192b7f..7658bc3504cc584f54b8a02f3eec7d27f519edb9 100644 GIT binary patch delta 917 zcmX9*O=wg}5U%dm@28WQm(g+Ju)D~B*$s%`4?#o%Dg<#s6joQSKE`AsWOPVEj2GiL zq8Eku2OdQ49*qdza#;|)>|rmv?n%^3JY@do{dBkAi}k4L`l`CBzOMIr-{XlDVnmdO z5w!p0`Qv}6U+5*#=u<>bojJSj;PmYL9U^NL_~O}f$Io3~z5EvW&%k@i)u2WhdV~BX z@I-kjnD=*AUJ>n_0{*|ev{>@9W59V2_~A^gQhk1C$KMz>M&uV}mV%Y}#?oL*(_`pk#i1)GRXLf=&|;QfVnS)yVIxHCH)T-v_y;0y@t#r;FG2)Iw_ z6Yw1H*lcxiS^PzpfT85gT`dRnnVtZH06Ep*$a0NMjT}ZmAW*szRHw&-H($Z{84>@d zc6DLVyr6?1loBh|=BH~1PTu%Pw0&}|$Py;L{9FHTt!S0=zavjOpeIsiOVZWmh{Kkk zzY!z8PU~=qj^P7NCAH}trtnU9d~JDjlKuEGs6gzeElacu{v+C0N9|3H#oq(IkNSy0 z%pmbVPz)iVNeDq&MNyQrrEF^kY!P!j&*Mqd>2wB>x;0{SqLkKJ#Yq%~VbZ8uabMaE z%a;9>xbdrs!(Oi!#fn-j-&ZOc^!mLpF(lB(VwUT=g0aT1F-8+JNrbMAqZtP+wUY^r z12G{_Nf8%PN;}_b<+%YZMQYG)x3%Nta=DCWgFY9IZ9!byaim<4(g7bY+a5HmK|AX; z#)K<<-ABC)DH(p_NXwCRJzVnz{S4QAW6)BQSMHkm@y?%}&4D?G2PMw}_1k zD_y(gN|$rnGD)`?Nxx7m7V}b2r`bih%`LL)9M|e4#xR`QEb4dr;l{>BDl>wJ6tyuhFc$zt6M{n=Ln6?J^H-P**$z>%9e7q_^zR(LGe^OdOdhR?k5ujQY76t}B z(KMj?W|z!KK=n&N`qLAO>p>O?00lraM|w_W+G&AsRt5$}86ZB9k(!tyR6NliXdw?! z-Yf$sz&?ZF5s>c#$ZWP?{KLqi S(*H_hvjuaq@aE@YmW%)i3`r^g diff --git a/test/subset/data/expected/basics/Comfortaa-Regular-new.drop-hints-retain-gids.61,62,63.ttf b/test/subset/data/expected/basics/Comfortaa-Regular-new.drop-hints-retain-gids.61,62,63.ttf index 05d83d8f956fdd85cc75a4643cc9eea1ad2aed35..edc9c66613958e820ae81c2ca3d8412666ddd3b8 100644 GIT binary patch delta 1671 zcmcgr&1+m$6hHUAd*8?8&6`OkFU}an2r&UcT1pY=#s*weg%(W|7lIvXz92Cn38h_4 zCsTBzpvFbSg@1q>MG)Lb#Qq6cbRj~)6w9=BKHhx1uY3Ky#BC8=(#BsYpY-4z6JUGa&>zX-y-~dim$!Ac5`Xzuhp-?!ymt} ze7#!R+A6GGBJ!q*q`R_M{cvpii!0!tfzit=P+0rySG>Iod3t4i=SJ=&igCX{WZYic zxK=&;`q>BI-vi(~>(v{Z)TTqoufTrlqw4zNZ1t!60Jx8UhnpMQJNjEX2S97tJ&7Ow zm=WTG=bruLM_X=KZ$e4q*l%RaF=gc`6301(J%e)b13CapbP)@3Mh13f!&1o;uAsfQ zHz$8%CeBGi3fkLoub$Kz4q$he?q%=T?>P2OY1K|E&=ca+PAShPgs1<^{{j84#V)e_ z1I)rLPA+AG{u%mzei$=QJQNgzNGPfaAxNcB6eV59=_&@y6@I)k|JLK=ttem{y+>U2CWO`~Cd&<_($0&WauSe7LiYm8{E zF@`#c;I#3oYrYE@ zs}+Qb>>L`U5~V1uGp#?F)TtJhZ3?tBCn)W=+wEY`>-C4J*1N=JMb;3H0A>Uk AJOBUy delta 240 zcmdm>c15zDfsuiMftR6yftew|KUm)=HLa+Pfq~-=P&6Sp#4)6DLgr2e2A&ciUn@B` zv4BaKaW(@3rwx#Al~$Hm)a;Tu2`Ik+$Tvw(EG_`j0ziHakmg9wsZ2|IkvS8{2AaoY zm64j5B2+xlpMinp4^Yf3BO^63k$nc^L7>_lKmnDE+>#0|U54Kb46G&$49qP#`N@d} zo(3<0Yzqbk#v{3j6$K0*8Lj~N5WSN)0UcBUwBSlXesRhF`3y!t2l#CK Vp~J%RRpfZ}W)0SS_Q}V2V*&ZTJ^cUx diff --git a/test/subset/data/expected/basics/Comfortaa-Regular-new.drop-hints-retain-gids.61,63.ttf b/test/subset/data/expected/basics/Comfortaa-Regular-new.drop-hints-retain-gids.61,63.ttf index f47887e941b2ac2b0c441da55e814ff4ef8b37e8..3137fc44141cd875359d251571eaca669596240b 100644 GIT binary patch delta 1496 zcmcgr%WGU!82`@WzA~?yCZm(u#Vn!$L0U=?7lIAAh#)Q6>Pj?2%%jqnAt@zYO{Wud z(?T^HaU+6DDTp8xH!1ojbm5|ig<6nlVeZVGJNI$!IsR_jZ4q4LJDkV&`hBl^?=`N^ zcZd;DjjocQ_R@!o@0+9Y22uGK5qs_Ix#K5S*S5bPa`#}heD3_>`71Xs+$O5L3;xxW z%~qSe!M=t50r)r9F1NOOZ(sNt`d#p+)>}Jm+&=JTal7jmudJ=yUiuYp1^nOFFSk0| z`+oaxIQ&Q?Ki*hveR^c)tFw6j0HfD8AaK56ci_7Wetu)~(ysFveGmOTBC&UIYo&Ff zdg2xl|EmDpZ0)uwpu6A?VBh?_wYj>``sE>!*M#hDdu!*C`HoH!mBK<#@~1y<33;4- z^3l&X<(BgfgjA%uR6L$g(H@^T&L;LNXcwRl@FY5o1-_s{Uu>3JT;smKe@Fht1kPi! zkngL~^3ztsA7+2heMpI+3fe!U)j6y{&xzAHq&lAyp8m7`f9QWMws=6N=_;o(UB^Ig z;G;MdXAG3Zk}?oUO&uvE={!wSHS)ZXX5a-e+jU*8(l89;G{06eTIIRcI?q&^B#G*E zMKJOET`eHTFvt`jwVr}3`xKUCLG6+jP**!7){Km6rjDg$~F)? z+Ab%?2APBxSrM0>=UFqu;S4uOE2lgjjYisbecvy;7V_uPwgkwrY#X+ojda|~DDH`P zRB?Or(($U*s^?f#uRnTZSze`5sg@i;DS$Ga7P;!Z662gx$8hLT3jTmHooN!i*JN`I z;#>%XvX~GY74V{O9OnxjGX$AySC6o85Y}dAXE}FyR~kc%bt{7)lC_eGD3$@mUAP^c zg9GX>z@9BIAOv`^Gh!^yRTw{h_}HFqO!psvlv27o#|ZtRM%_KRP+159;6!_F8CK^dbo6Yi8uqTygL2op{26bjc$Ys$OKm@i*4xsi@*OSEW8(ncNy zK@d*H<0#IJxkhY37KLMIp2N8%j2Z{2SFJZ1jTui;7>wa>aY0tMXiB%qfQlxvbTXbK X{eFL_$oA{?`gFygu9Y#bA}rCr_SN9X delta 240 zcmeBCxg$}}z{tSBz{}9Uz|0WfAFOYbnpV`tz`&6L6io;YaSW-PkhznAf%^}Tua%se zSioq(I14C$1jx5ZD@!bDcFCN?z`&ycEG{$#8feQ98Ffg~|Q@ z@ENRQU|>1`G9WjxqJZHe!xbQZ0Z_d{USe*ldg8Wc3=Et=F4L8Q{Nj@T^BIhQ4!E-M W#};N5W>tam%^O(q*(dw+#sUCPaXuIT diff --git a/test/subset/data/expected/basics/Comfortaa-Regular-new.drop-hints-retain-gids.61.ttf b/test/subset/data/expected/basics/Comfortaa-Regular-new.drop-hints-retain-gids.61.ttf index bfa9267b9783d46559cddb592ee9ab7c9be03a5b..619b4276bc72e35dbec3057d794f682b878ff17a 100644 GIT binary patch delta 1249 zcmcgqOGs2<6h8mszMO}n&X~4wA~R`Ih_s6|qFRKKN^38^L32;+Dbdm;hz6LukSqmyWaf0El-Sy>S=`pW z9S}e04N+Z%h$Z_6&v%WD&#e+^qlg+F9O@lfemwPwC@!I&8<{b4^p)1(--O;hzG%)B zuTDLM|3aisnDaTDDd3fG>J!t;*5={o@BF_usE1ZK#pwZ_Qq* zY{$P>9|oT92SMPwo>QyUykbGPhj~LO3dJ~di)VbdR;^YY*Qathne=_ft{zrvUPux+ zf(cF2BxA)`7={6{&~t!Vyc|~n8L07EsDi>8kD4Mb4Z~2H%H<{=qAj0%+p?@c)l;cd zTvyOOm#QL!$O}zTRRkL<`q2}XT@<#J(2MO-Gm^=qp(&KfluC+XBoc{aOcUe)$qk&S z*I+fqIOh~{xG@QS<2dzYiEd?CYYTBM1WGAP2#x`Gv^EaeY_O1E)79kNMpoIc)Th&F z&UIdpVMvS>68i^LSs(MNWXl7x3&=a!iVVyjq5WehAXGSEG3NVT#opW5QyW?ucDF&E c=LLmUMpzfMWKzz-?tz*LwYZa^xCSfz2IrD=1^@s6 delta 240 zcmca1zeTK`fsuiMftR6yftew|KUm)=HLa+Hfq~rxD4Gx);uumnA#*1K1J@NGUn@B` zv4G(m!xo_Y5+L6stt_#q*(Gxl0|PgZ%V3h8SX=<41%T?$0BMf&oXWI|8vXJ>_8kTW zM!$^I#1x_8iT(@>%r}5yW*Hf&k%{ax7=ebdD*y#lGIC2QSj8Ap7#LW9hA<1{Sp zy-{1mz`*1KG@vUtv7&(C3J@|d=>XL$Olk%MGr#p)Uwl(Z1Pv^S<}qzQ5ghx9#oDA`}2= zEI>u!#JT(#wT4GP;ufIvo*vxSKQcCT9nb^vx;S_?e|G-PrB^`mCE?zoNxOhmJO_*m zga<}v?J4KzrF&%m9^)~4x*#@1ebi#>JMgOd@cE7U7s;9{VVa8pF4xJpZZ^UYbZ;{5N5GjjSK>jm%I! z6IFfq|B<5cw?*p9oxn^CE`~JW(v38t$YpU=VB9oK(Ye0f z$s#H%MA)j;YEm;YnM~3UR6paIP>FP*Y2<5aRF09VwH&ooOBv2CuA7!+nYutW`}3y| zW-67k61obH0{PO5Yn6)$g)xSR70FJmvP-MMzSN9%k9`|iYOj_D4Ug) xm6b~KpcI+z?(U30P}17T>TX$g>q(u)6_q+DST>v1;a4k_O4Wy+&Xy4Ye*q)0kx2jm delta 240 zcmX@1ct*UQfsuiMftR6yftew|KUm)=HNB{nfr0%FP&6Sp#4)6DLgr2e2JRdnUn@B` zv4G(f!&U|c4jUlfB&{s5sM#fR5>S2yh@YNVTmYm6fcz97&5@o{nYP!roE69hn#bsn zk(!tyR6Nn2fq?}m#9)?@ks6uEK7;W9(83)+0hNs0k_uK6hDM+Q3kC+}hMfH5M4fCM z0|o{rpoNTwauX{G7(Osu0rF*l>J{=5b5qq5w><;e1+T#+Gv4fW_sA7rYW8|Nh znDeG9=kC0s_03e^+j4ognu?a=ar|O_vt|(wGS{p7RJ5X zyJlWq21JgMP8Mjxe#5>3_D}K$3&q)c;yZ3r{08Menw+}j4Idp|0r*V<{8setl~BVf z`KKvAch@V94|z*}sP=2xTP;n^%<8u|MuZA+9OA>TLxwp1E}UFUioAV+HnE$Y^YLQK zVtF#)H0S6!NOJLIEYlJ=ON0E_;yKP?(xiE9VMP4q91Eqy*gt{k6a{}^jiO+2FAF;~ z$~#qPn>ytk>T{d&_>cWpm+1mL;7H;bebDE02~KoFMizDjLNW-2vJe7F20;)tT(_YZ z`39KfI1Z13X0zE1P>_oK?Z5q4a&Vwi3xtQ?S`-)^^qP@-N>r=<+K z?M~Z|Gz7sI%&=`+Fjh%utreJ#0s^g^Nm_(hR#wv27Mb>W%nDq%u50$!>-}64EeY9e zG#bisGMP-$F^NAHmT8dLre#sCYY`nM)#z4?ZX@MX28HdW(`nZ>kJkZcjf5IfL{)3*E7Cer%y4>y->z?NZZ>@dr-!gq zq!i>l)B4F?Ew!*6OHkDw0oktAYRyio)$U5IAA$`DBbME;U7K^$&{3-vxasV`z(Buy uN}yS5(Rq^_Fy}et&F2`Q5-%2XS{=Vyt=1!0nQS)Om&)|@CP{+0Ebtc_0;Meg delta 240 zcmcbhctO0LfsuiMftR6yftew|KUm)=HKVAFfr0%2P&6Sp#4)6DLgr2e2JQkNUn@B` zv4G(S2)h@YNV3{ocm#&TT;PtlpzJEz=DB+xg{q*IZ?+z z=K=!*lMT>-Be{tc1q>ex==JNOVC6N(dqzbQ2WCLt=KLNKQK>`+{t;?1qq> zCcPtiQBZS*je9jVI$c(D6K!;0NGAuPvrUB{B-`%j-r=~OBecg8X(L8eqC1y}X? z4C9=W<}l+b=wX@8HHj`XS))#z8wN^AW*8h7;6>Xw_63J&g3dPGITp5iVYODPac=WK zXiba-m0o`=sx#S`BGIQPK-`NBMBx5Kw*Nl>2r9fVWGv6KFnad*nK@gZ?LLBJS*C&p zBeaX^zL)g7ebducIq|7%L3=b*kZscnrrM|%^stUtqEvCll7%9uWs~sv^MAt_b8zS9 zT|VmdI2l?gXWw-u8GNWeB3Y`IWI&87r8~#%@?4|QI5z7@UA&ZBO}dANhuw*i-onCy zCn*a|#@gHvVZ3j}Vc7y%9n2w_?^i8Kd);ogmy%WW_eoD5;W<3QPe6B36|Nd@Ceu1o z%&&quFYOas6vd!$ zH^<^!8af;G6UX)I_4>RcDD00AFS$W7n0BMdkQGB`$z(K%L2{6h>G{4tTk&SAWxTJV GEYW|=BZpuB delta 240 zcmaDMwt&B$fsuiMftR6yftew|KUm)=HLa+Pfq{7gP&6Sp#4)6DLgr2e26hJ^Un@B` zv4DYxVH*PjivW;sl2(>j)a;Tu2`HZf;-@DT7XWFX9J>XO=19+}OiO!_ITOgf!@$5~ zm64j5B2+xlA85V{P|PeNBQ-LSeFno5pg<2$KqVu$q=HMA;Wv<91LORG9$|C` z@<9f2Tu0gkTmUxbO$eS^`Q?dIJ5ZuCCX;*RK*!aqHgioO`}|&Ud~K?lro^ zh^S6CNl<6){OY^vS?dQP`yY7M*U!Fua&v3%Vg9Hr8{*D(V9qiQd2mTv-*b7E>12*aZnrcmA+1Jk}RUa6SWfWo@iG z^eYy2 zR7z{DiZai#tnBwhG4rgxu)5x?=$}wUmLy4DC>oE0K&d=UW=U2WlHd_cIF2J3>(3iw zG%-`=VC}!|+o068pBWowGF}x$TzZ~oEsn>F+@LH)DxFLw+IGV*^j!<(b7@-w=2*7f z#bwV%J#KB1_C-3Wx&3A7ctH?&jz!Jp(UE0&wOTEhcLe2NDs*1esy~`%oO3c9VYC7T zeL4f_-f6R?7I7{Fp0bz_91ZYFHje)j9y0`=YX`?zJdC^bMx(*G%X`uoVyssijuKg) zFB3}Th|(VNo?1c%`mfmj{{Uck;mHYON|kZ?@WDfSp|vph8&;O3?kzEbT-0iY`Die* zL*w{)lY9r>$3s1Xp}tqme?{Y>F&IK=OsSc0=VX?Qhr?l#Y#xGuFO)nmqd^0ZM# zI<74t(VQfej7Fn)Hk~G^GUgVs6sD%r49|NnNCHfDv)KEkK delta 240 zcmdlZvVyOkfsuiMftR6yftew|KUm)=HLa+Pfq~foD4Gx);uumnA#*1K1KSB8Un@B` zv4EkRVGmG#0+4T$R+d=Q?2H%U({E&$R3K>h(B&5@o{nU=iMV>gg}hk=3d zNJeU6ics-He+C97ka=bq8L5$p>@yf10}bQ>3aDh{mQ=83F)Re~fm{Zjoc!cOhUJXz zKn(|ge2(12iUI~p zTq@#5DuTO$zd-21m54||+d`8Y(wqDAyVdV<=gc>AX68HdHnE+l6CN-d=u* z{Evt)nbiu;GU(8@&4VSK$ z5YS%HPw;5qg;Ke;p$yOh`1`2g%IdsHZ>R{q0-pP~1h3poH#3&KaWhq>01k@n0fFe2@0v5{=^n zj}Y1D4&%X@$9E>x!oS_30HKjHOLPwY4*lLk=@!TCo`63^`Izl8z_lg00Lg%)loa@m z<9L=~SOH{8K}^+koqJBF)3F`@aViWv-w%SocRi=q>v_$Fa8C`TDHP+h?lv#_Zm-+z zI<8Ocb~5Svj@>=&_PmfJ`Uoa8O_Pi@V__Hu#6r(O*XFIbik5*I?}aK5_IM2J6Dc?elP`L<A0>yK9{N@08LRAjE3O#zlvYW!T5_kx@Mg`sTESb-z{tSBz{}9Uz|0WfAFOYbnpV`pz`(QvD4Gx);uumnA#*1K1Dgksua%se zSir!;u!VtvSpvv6Nh?b%YIez-1e7lU@zWEF3xKo$knaGbInr|~(=KZC%LCbW7#JA+ zGEx&$go-En1I-TsikW3(q(&yP&tP~26qo`OP|3(GsbCdjNCEPDKnCRGCnqv2XGjI| zeSmzn+{B6k1|fzkK)w!;uaK9Ro2s6;?HSNPKzXJs1^LA#|K~Fp0hKCj{L#Y5(tlau P;^qdX*UXc*v&8}cggiMc diff --git a/test/subset/data/expected/basics/Comfortaa-Regular-new.drop-hints.62.ttf b/test/subset/data/expected/basics/Comfortaa-Regular-new.drop-hints.62.ttf index ada1649afcc05f411e016013c26ca1a5144434e6..467f0fb2f900b30d6741337276d40e49111a3b52 100644 GIT binary patch delta 856 zcmXAmO=uHQ5P)aj?%UnhCYx>26r&&&>JMI&QpAH`3nB_?OIyT)hc0cJ2AVdsr9Y=M zS;b2QwU-_QJ$UjaqToU3u}2R*dk|{Dlr|=5vcK;+8)x^;&Nnk}-n`kJxYJVt2>=qX z2{IJ#JsugCQ}7W$eS+QxqZ8K#v$>_`0Avq&YGQI^a^qG08^%8%U!5*kMTo%{0Qm~? z(Cn(UWZ%iZ!T67ebJlVZzb5h+e)Zh^#_acpYZUDOKpM`iTBW6})rl6xfm$hb+ z%dbcAz!^-sF^3Lq2Yw+(2M){?R@Uhdl#$;?1?Ly1EqD)E zh3sYP>u+oj<7B_MxV$3X!62qykK&+w`nez}hcEUHKaY{Bd>@_Ai|cM=bR-&&2?TXN zu1g>R*@ay+0fzBGjwI4ijzofvMYeCMQ~zg+8_;#OqXEvNy$yeMaqA|**=-@e#O*_l zFQNF30zL{T927+X9(tY^G#G1e30Ve7)peZ&UbESBys(lGJP1S1dFTh8>$-tmmi;!P zwoF;O0^GKYG03*s{}z z>-K=6F~cyJMj@R(I--=t<8h-~lflDEKKG(t`Lk|`5CVc=7_ZWq)1!WX37k{r42jO^ zyr^WQV0{hoYratWWhPB7_1#&68t>{+Lh>{W&B;73;Ti| zOJ*{eb3KfTX!s#-R}T&js%=iqzP>(_LQqyahc(@b<~Cy*PD_-NSSy`QXyDhX)oRTL KEs?H(0Qd({I|!Em delta 240 zcmew%ID@yIfsuiMftR6yftew|KUm)=HNB{nfq`iSP&6Sp#4)6DLgr2e1~v;IUn@B` zv4DYxVJiazGY61wl2(>j)a;Tu2`HZe;-@DT7XWDiAm0E;bEM}~rtS4DX9cqFFfcGW zWTYmh2o+EC2b%8!6f?`nNR3QnpTY15D9{2FP|3(GsbDo>Xaw?WKnCRGCnqv2U`Pe> zZGe2X+{B6k1|fzkK)wu+uaK9Ro2s6;?HSNPKzXJs1^LA#|K~Fp0hJ1D{87TlvOO|z P>gEEb*UXcbv&8}cf)Y4N diff --git a/test/subset/data/expected/basics/Comfortaa-Regular-new.drop-hints.63.ttf b/test/subset/data/expected/basics/Comfortaa-Regular-new.drop-hints.63.ttf index 6b0dc6c3d69cd7a74828cc50fa5433d274c503fc..c26575461fc2a01afd5284699c1e11324a3557d2 100644 GIT binary patch delta 856 zcmX9)OGs2v82-<>=RS_k9Y<|ID#C@Ov?)ZQMUX;7LZqZU7A?H!=m?Guj+m~-@kVV5 zDmN~KTC{2xg3u=11k$R7>lQ5{7#Gg#&V8M8`mg<$d(Qv;&+mM@w%=U_0svjG1sW9Z zJsx`~F2ZL3<0(e(PfT4K&gEBM0?;GGGgH%J)0=M>zheFq;;XX-rwA!H0MLdIkIb(- ztL~k}_n7~g;032t#5;p{5^rl^X>-2x?e9MNF#s7|Sa-^+Kb{=f04BpgGoN$jdP?sm zaN!&l-N<9W+=btWlZ6BM!rBJ=4w$2R$-t$RSqDBs4)HU@M#0%ALJu4xzJ<7d*(u}( zor6C}5cBl7xKdhEA7B_uuP1q6Uw$nUmf9N{-=CyaZ5)Ge4*$D}b7qM=8K8Lf<9`JR z&_g&x7hn`W#EB(mQbUA(=Fy#-#>{_hu>nKp&rX0#=q>YWEuP8*Cr(BZ3zB z3?ejO5*TA3MHq&0gY$+Yh&3RFWmz;1o6V*litR2XVT(F(?W#4*Y<)~0mC^O(M;21gt(nbDG5ZyAx?E~rwkk^jZ~lvG!@W< z6i~)F*L&;rUaF9m0O2{(vb#B{sy3^Dk#7U716Rz?_C!v&rqL{{~oayucb$Wz44N7FH6h13fDwagE zI#}SxK#^zI@{OR*UK3+Yb|WosRnw5Vp*l15L`}m61H3IpjxfgV=yw=Y_{9Zba$mt I0$i*90go~o%m4rY delta 240 zcmew%ID@yIfsuiMftR6yftew|KUm)=HKVAFfq`iSP&6Sp#4)6DLgr2e1~v;IUn@B` zv4DYxVH*PjGY61wl2(>j)a;Tu2`HZe;-@DT7XWDiAm0E;bEM}~rWNmdu^Gs|!@$7k zkdd00B2+xlA85V{P|PeNBQ-LSeFnoLpg;>yKqVu$q=Mxr1JE$08jt}w`N@e43m8&? zd>bI2EjO{EfI*1i3Xm@Y%vdd)m}Ia@3MR988Q diff --git a/test/subset/data/expected/basics/Comfortaa-Regular-new.name-ids.61,62,63.ttf b/test/subset/data/expected/basics/Comfortaa-Regular-new.name-ids.61,62,63.ttf index 90e49bef6b67ebb086e89914bd70e964feba8a45..ea9bb95f62a67b674f1f3b1898494a1ce3a754ce 100644 GIT binary patch delta 1280 zcmXX^OK4nG82-<>=e{O0cV;qklNk##)zpGetfiD91ydA!M(DxV5-S1ew;(8x{^op> z7!j4Q2|9iGt&4MdO?yZ*JqzvJ)%lmsEH15oM5LbwerNvr#p`!JUHu96&w*cDSgSWE zOFzKA1AKO2tG@0$zx+My9`K`ut<9Q~n*lC=2Yi32vAp)>x$^Ju|CPvbm$vH7_4cLJ z`v}-e6D-#^8u%B0(}LFWt-DL#{_^lmB6fjDySa=4$A3HZ8c_vFw7HeV`pwCW&#rOV6W#qLL|NAd3DHP|Vw z`bK&i0`rfmT9^KNt+8VHFC6tfhlK z7ly7uOucCsaJCKbv2p{yt@(qT)t(Wi?KqBY>g2kQAM3iE%jKL2Q=<@>A{nM!<%biD zb54rGjH{rBS-Mgqx>jS=3URJ!D5Wz^QLxPO}M{|^9y3ey9|k|g&0Cx1UNij`t#9}>s0Y*iVd zT~u)kVXxCO3d+oeE@e$Qc}`lN_~7xB}$lg~Ag?z>yv{Y!TZi4KF=WNiSvVe!1CZ>;WE5Q2E#?Zvd=~F3 HElczt5U-gl delta 307 zcmZ2tamS#ZfsuiMK@do=FbMbu>l>w}6}2%iuu1?$6M{n=LnIO_zmO(#TW!~@{<#p_A>qe@)rR4T)BxA1&nU| z7C?Rjkgt%Jn48L*Ir$?4gQyD7j!OmkQpF|z=Q9{FFo*#)F(?!ir4|@^)ZJ!a5I(Zm Yf^iNrOILeh&*mE}*+QGAi(4`R0B1H#1^@s6 diff --git a/test/subset/data/expected/basics/Comfortaa-Regular-new.name-ids.61,63.ttf b/test/subset/data/expected/basics/Comfortaa-Regular-new.name-ids.61,63.ttf index 5277d1508c02f5436656c2a0d611e862c4c4f1f0..fb2371353b3af90b2d36f6c0e9c8e6025bee5dbc 100644 GIT binary patch delta 1099 zcmXX@OK%%h6h8McuXsFm5<7LENR|i`*c7S|Ary&50x6p|KntrbYMI0ds)?0Eq21uR zM!*83(z0L$f(5It2pc38=`R4Wg#{7_f!wMdKgKiTnS1%BCJ z5zXU}^!)nUYj37c7s|T=_;q0S%5J^Ja_j*xa**Auy?nLBUMsvrB>GTP->Wq@ z^Eqk=V&Ygq(VV~>S zb5$ z#B>rPYWEe_L`Y@2kv1VZ;#pC|rQ;N4&Jq+O(p1G+t?I)ZW|umQmMqb%{x+SVyu(z`++Rv zl7K?#Q`mvuV~g-W|5>#E7XSnqP7E1K(_|Fh|NFi{n+u!l}csaku>tha5uOhqmz;H jY^TZ)6)duNGM+@eUT=_)SuB^!v-#p|!NtI`v_$^_8kSi{ delta 307 zcmX?Lx<l>w}6}1652|&?=;1I`<$_be}85qP0fPAgw+{6Ng za)v!X`2#?{O>$Xc5ubAUCZPNUApcHsS&0H4uL_Va`~b+Glva?QJI_o6D97@Lfq_pn z4XD1^C36x`{T!gYNqS;&J;-1Ipg;zY=19+}Ogq0U*NlOIQHFtmX-h_GVv11lM1KYb z<{vfXe{7! diff --git a/test/subset/data/expected/basics/Comfortaa-Regular-new.name-ids.61.ttf b/test/subset/data/expected/basics/Comfortaa-Regular-new.name-ids.61.ttf index de06660d073e7489213056216607f00006ed4393..72e086001f54cd22737471fcde0d684bf40d0c4b 100644 GIT binary patch delta 913 zcmXX@OK1~O6us}wpCpqsP5N6%!0N(<+ER*0!4`^CC>CuIan+EfX`!(p38e*TjVZ1w zXsh5#_b!ba!9|uXMVGoLBBHj1CKJ-hd_7aWkGb!j`#tZ@_Qn0-En-B}4JFd$sXG(5 zg(STpO8$a(dS>?0aCWh{O(g6C&(F?H%xyefeoxdh0(>EpPZuam?@&ArJd#;U7xlBb zw}?Ln{+3xQr}W4maQ9u{-NiyK|7tYx3HfCrJ-N7+-YQlnmv>PxA2i6NO9k995ZK49 z=2kWqH*;SWh}akr@5y1npIWa$)QdcJyp&BZ#7oa+K=1+bN0;DGUeb5q55R*<`SQBd zL#P)(lGK&eOqzx01uzJZoKIg}FR;nz6*%VLNZn88vytV!1{fb=z~{nhsqDX|VGybZ z@j@|M7@FGrN)+Fz^|5I#W*-mTt1Stc_zlDPJkQL2Oeb8$zN-q9~H* zT9)M)nr3(mSRf{=s>&U!)oPiR`zY#rj_Z1!=h}|d>2#cGMX*masVYd?$(CI`=h~fi zyKUJnHJiHbx|Z2KX?Gl-MD!7upeTySST*GPzDLY=EOf123(IKf$>EMKL;Ma8ND&t` zO_REt&2H|4mP@W_7=|aSu~;muN}$h0SrQAJ2d z5+##|hmxd4A`v~L2xOs??O6d=Z#%>|=j3yQ@f2(>OgB?Rw^FRXk2n_ujFOlja6Etq zYva&88uJN0Ro3IIb=-<3N{IyLDzAvXPmEO}$Bnia4LNNx#Ri!b)D85b0`CvH{XYN@ vOz1Tjb6uxp9{oI$yZX8gen1?@@hbg{urBIL#;nFcLyq}M*h*4ZftUUQ;@}G` delta 307 zcmaE0)S_3F0Nh-m=%caqCW6!>^mfP7&KAb(O?L3-{yGm#5G^&t!l ze4=SU_02AslYr)Z0qIXqEUqsAG6aAE2Y@t3dQN3pUHat|1_nkM1_mavjMT&wq2h`D zKnKMD<;^mH0_-yw9s&7tfP9sV+>#1bF$SP|<|!ckIr+(njNA-UfqbBa3~afH6$Okg z{6NPrn*jL=d5O8HyqS|f0v&h;Xvd|3e5vA+|MMA)fDTvyQczHoT43l=cbkDhC}*<; XqYo3yho=?-n>(13g*KauSuz3ulQT#K diff --git a/test/subset/data/expected/basics/Comfortaa-Regular-new.name-ids.62.ttf b/test/subset/data/expected/basics/Comfortaa-Regular-new.name-ids.62.ttf index effad7b68552031f1a66fb93f25119cd0fd81ede..15b4d193d4a1cbef4fd89be8c81b2d77bc1fb272 100644 GIT binary patch delta 917 zcmX9*OH30{6utB2`=FiHmLjMz7}15%sDz*~Btk+A8Y2dXacNVbkWguWAZ&y(xWhyt zCa!ej!Wb7u;=&zEm&T>KGGSwpPg~l~?~P~boq2cex!*JQeZBCmYl$QxNMTETslt?`ix=)xH~hSo-t2n zKM}Rw2mY0rpX)HAoxsTx!0Y4rZ0>bW%Qxg-B{Eav^Xa7-YhZF61)X7oYc8uNg}pITQG_G z@BoJr>M%!QUc+LWYpGu8|HYsJzGDqdbQ1Ok{nS+}~#;2SV@_lh-^X(ZM09O|d4mfcp|6uud6~M0l>w}7qv1lFt-3j6M{n=Ln6?J^Z-D$e$z>%9e7q_^zR({ae^OdOdhR?kkqbb>B^Vg^ zMALxkn_V&|0oCsS=}%8At}g&G1b_k{3pvtrD$_!~GkP&FFvIdbxo6B*tzOa=0R7BaBqCRP+My6{^t zFfjc9@)hzDb5nUUCx2vM5S{=u|58D|RB_4w`3y!t2c&=$6cnWv7<$y*2KvBYvjw97 V6N~ea2TYrNn3IJz{}#1m1OVuKNxuL9 diff --git a/test/subset/data/expected/basics/Comfortaa-Regular-new.name-ids.63.ttf b/test/subset/data/expected/basics/Comfortaa-Regular-new.name-ids.63.ttf index 21c8205cb6b397547e4c8d71b6f0774e01b7b3f9..fdc0413d0b68c81f620d7cee1179f827d40be116 100644 GIT binary patch delta 917 zcmX9*O=whC6h8O9`+jaR?`4w7v(qXvU~E8IT0;<#Kr4h|p(xb9t;3j10-0t=LYi!h zaYQ!?Q7gERcHd=F3f*PXV%vqKTV08}xXAp^`?>e_d+|KZx#v6Qo^!r?-mjnjFttUD zhzc-*KEH77{I}{D{Y(@-L-dS-;sX{e5z6_*C|K8 zA%6foU0E-$1ShJ$5FMEXeqC8#D+T@paKQt9JYTQYempb&FNRGJ1>yX9d26LHyZ9Id z`K&>;yjsTzKit9TRhKsB|H)ssiP#MEMHK`7zW%}|`k(~dS(q!|99w;K2?RdD{WA*) zxX!sX@c={ z4EV3Uyt-z7qA3u{h?VLqbM?~~ZoMKJo7pY0l!*`jdim#W(W;DnjXaG*zsj6L$yS>u z4qJkLOpN#*?ZGAb5+86Tna%Dng?GZ^yBpyQd;eolf!IffmgqSAC$ztZ+S?q9e*pXt z_0xldL6U)>1VTcS5Q4Od<2Y?g+13o$BIbCW$J4me=?r3ZXT<1KDXq0i(m0Buw6Sd^ zeQ7r=TlTk-#z~b#yl>wJ6tyuhFc$zt6M{n=Ln6?J^H-P**$z>%9e7q_^zR(LGe^OdOdhR?k5ujQY76t}B z(KMj?W|z!KK=n&N`qLAO>p>O?00lraM|w_W+G&AsRt5$}86ZB9k(!tyR6NliXdw?! z-Yf$sz&?ZF5s>c#TUylAhX$m@ed=e{O0cP5#cIMYy#G#U^jT1t^pF$EW?j}}er#*IVXkfg&TgmmLL znV=hm+HMMh4{)U`4G4mZh~2qy;X<$r3r$5Pwez_1xOeV7$L}U?i{K*v;hcN^_xGRw zzt>+pxL77eL}?s?o}0RI;Y}vYuZd1>5V48N(-WuX7fSCF#pYo3&h*TMnQPaVzbAV9 zOYqOkt`>?s%|3ztHu!V1n}w2dYVlj5Cj|IAvzr^EPGSsv{vP-n3&q9NPtRt4AsPVd zWEVCIHMPo&K)B0(v+JcR^*5b5!y z`NG`L`p1`vj2+mYU4p>8#eM{!N$_J!s~cOfXQ>bU5AfevxjI{zDqXySYWEQH_G;nW zR*|1dz5v1Ja2Q=Htj>=YzPnF!VvC6XTD-cxp+2M20Q6dZ_fdB7#4cW-`S z{KO2LBbqK~cjn}IcGM_DfZ=a+H*#cmaNInmRX(mnkH}L#raB*yp8m7`zvzE0Hpy=7 zVHn=y6sHf-(2ph}coK_n!Vg%Bh|-}i%-ZMP%?uMsmW%i@9Wx^B-8x06Z+ zVJM{x`+@IyUQn%Q{jRN7HQny^t51b}uhZ%H{g9eX#|cBf*Xee=K#@QgjcKN73dX7f zN-4~t3VZ~uz7#hQu`G?arwowtc!Y|$ux(pUH=Aj$04t=h*J`z-VWm>3xTOO>7ly8Z zOx-YGYa4)LC0f0z)@voK>X7%K-cX=BH;{}8uN;N(YtY+!!}a{nPoUb%&oi0OeVv*#VbN7Vyu#= zH##CY5Ok;~8q}-6?L;09s6Pt!?*aotg2&1&#=U}bk*=JXL2jcBcb#jbR}Noelp!d3&irn>>(y$*wPrv@Dx1v?CQ^gRIOZ!# F`wtX+D2)IB delta 307 zcmaFkIl;D`fsuiMK@do=FbMbu>l>w}6}2%iaJc|Q6M{n=Ln6?J^TY&sK$z>%9e7q_^zT^=ge^OdOdhR?kkqbce4;UEu zMALxkn_V&|0o6AETWYI cNc`Ar!5G5Iax}#zW%C5K=VF_e%ULo40E9+Nwg3PC diff --git a/test/subset/data/expected/basics/Comfortaa-Regular-new.retain-gids.61,63.ttf b/test/subset/data/expected/basics/Comfortaa-Regular-new.retain-gids.61,63.ttf index a5ce9e05d9061fe5afb4a739079549dbebb2e7dd..32d959e2e06c4e64bcabb63ee7951d96d50ced1d 100644 GIT binary patch delta 1557 zcmcgrPiP!f82{dzH~*5|*-5ioH!Ac^dPhc3tEwFVQ2r$&dkod=WndnB6!I6nD5Q^|Mz|0 z%x^F3yxbs0M3Z2GjxN8s^tzfBmx*R>5V2=YoqqP%+WN+aMD}%fy?uIRY30JsneT`m z>qCBewN|dP$SZ?A4|m7MG>FP*u9fD#<$E9K2PZWjQ)$8A;4UReM6>)HaqEE4hS6%^QY>wgeEaTJK( zs;-saIkfr7DI)zQ{1>WFn4hvA0C)%TY_+y^-h7w7A~G^W+NHDSR?ExN%M!7u!EV&b z&!4aJBe~-+b`Vf{uUuQ3D}Q?zh<`%CoAq;>Tk1|4PU#qy)0clJ9j!|oyoBc|jGFJ$K3<7V;6P3(wWkkDbPi;6XV=qz zWE%L4NcDSHXBOFmJs|=7ex*B56T1zzdqAggP=y{+r*S}iKBPSTXa9fE|2%AIpH9#R zoHFz=7J3<9#e6Vgpiv-b1R^1+A%q~AL{Sv?Y`Z5JWQ~|%Sr(6@e!m|?$;F(KagsAIcGW}R_UqX>ycGD@+^OXG}lP7TFjM=SUP zGIX*;^je8c6^V0ALn)nU8b=2_of`)~Y%@jBS%!0n^*jAsKA-2@;!U9xG1km>JYVF- zW1j-yQP4!#^b`Wnf12#y0|A5rk2HFWB}v>5?%%y{OcW>Dzk}j9mdzkkJ5KS-3iNNi4|jbmxH$+@nnc;H30Qz#aTleVC~H$c43HPV~u jP?{x%tQaDThJ#_)ZnwKJ8E&Can8>;lxeWG|mL>WdBrfoT delta 307 zcmbQ>{=mAPfsuiMK@do=FbMbu>l>w}6}2%ia83b=CIp8#hEz_-+{wTovjoW3O3qCz zV6nn(g7n;ZW+E3D7`O}= z82Ciffa;rFGA9Ae1Bx-2q$d{F7XTRoK!G_xnj<}@GVT1bTr&m+Mi~YMrY#w%i77(G z6a5(&ShoP>%`$)j>@ye-0v!O-r;?FdQo)|Zun;K!hJk^(B_}^Q(L>7PACUb4XvUG; z#EJqYWqu1F{{m3GLSABSs(RwKXFvz80GfZLAYZDuTWYI cNO)|vU|hn&(md{ey?V`Whgd6Q{QA92=jy4p@_nI&*5|z{sWB=bi%_Xv5agid)5NJf;5? z@vhMscgopZenS6y;{QfxY9%K-NW3=1cgCyb%KhE>H-Js(6vk)V`c(7KxjRgFoE9j% z(^YW<+n|8k<@Tv5DH+R^Qg!np@^~9==I>wK+)Y z68EpXYB`U29)bN_#Hpk@jS(`YetCD3{z4JYjjZ1%zCRE1=)RAa^h5kbb$5kUeWi$g z!c$+NIe$Wr|DFHiJoe+NLkfLE|;-%wl6h9S4!2DsT&4^ZG-(-*_PK-UMp)g2Q|}n9LF|w6bcIqx^8E)S*OQT z@L4H{{j}HkdXJD&B9U}+68^>+94`TXl*B+0QYu9%T_`0vfK0DVQuo^;0d1DyTwWvE zU)sI-d|paRHnb#x5RL4Y#g5k76L#Qfi|`uETQ|TA&YxEMu?Q$+SlbdJio&+{`NL;p ib#e8l_mnUUl>w}6}2!haQFa46M{n=LnDR-fnp4IlFLdI_;^)-eDNbd{-m^m^xS!7A{T(_A22ZR ziKYS7H@jp`0;+ES%A2Go7S|U583I57kcAxSIhAR3>6cR&7#L+37?{K|QWH~ziYNL5 zUH1SeZyhya>@r66Cbxa9wQ1|y&YbU+FUic$*lJdyaaE;8}gEkkkus#K`*YG zQB+Xy=i*7P9>jxD(c9u#!GnnCgO|gLh$|Yi>+a59kKe3kkEVLM=&!4~>Z|IWU{`a0 zkrX1zKylhKbbRnHwMzGhdKQS3O-F|}ZyU=^T_iHz!t3whk-?F(*H1npTAKjgG@7>y z^obr5nLB|8MrZ9Q>yO++*e8Mi9i5%&wUYh7UB`fLju&$IJKH;6!5?-jJ3ea{r2R z2jfLc;?|~#LHA;AK&x4q%2*QZ!vKyY*0GPm;u;oitr!2P!1LvvJ<8AP!8w@U&;sn} z0@SS)8pV}L^ou;j6{_FKxC|EY`zaGp_uuHrhc;SmfpeFfq-Ir$Lck~lANlA-5$ zLDe*?QsJDdq-cg=u)wR;YE3VkOGPpWLn&qG2cGM?fm2fbhAA9Xm<`|gGxXhhz3%xT zEiYSE7<$cmqwWR~afDG7Ro8W{C{9}xMUs>#@DSA5o6rzZYQ=;bX^_ZeF)L!+G)<9N zUe2%xv_cA-)oN90Mmn8N7y|qm*Mthug{HyR)Ii5bR-2C6tR@YopX;V&S*9*1oBjM* z2s4>XT5Y;Y9s>E&i@C}RZ3<(IB36VQrL-D#q?c$Ijq2`Vah}!(rSjGqSj79Kj-XNd z`t?iAMQK(hW3lf`ON`V=N^{OK8v%Ui+jkPHQmaG>Kb@43v))LwcXxO9tTsgyH$Rk( z%HrZ;rLjYbbZ2L0T2N5ZTFGkeobJ{VI@%SL+7T?9P3hz>RVtMwpY&9Ajv}HTIpm@U delta 307 zcmez2{KvAMfsuiMK@do=FbMbu>l>w}7qv1laO?nzCIp8#hEz_-+{wToeE`VUO3qCz zV0gu_m4Sg%0?0Q>E=w%pQ%>K+z#yXlar?RfrMM5R{-JXTO^~FJrz&H1Zb_J9O^C;bYUYb9afH=ZLy`;o{`QrJt|=LG*C~ z`?IN1P^KC^A#xAG9-mqa=DdBy$3&l8f&FS~aiQR4M`7nr!@fULE|wlm3>+AQCumeyG=F14ofk0Z&Dc)F`d6Bzpg3L+m=S387*1S=oPd_Iz9?wn(*Y?cc zI|ugvA%0>OAMA(hDN=uhJvv)jxGkR1H6pWs_|+S?rh>^MUk>984EAR!IB~no_YI_A z0ttniL1}s{c=8sEH;MRW`PTe`{)LW#&|2y*&rO$)p1t#u=%a=8Jp0`cZ)SXdeN+6i z_YC|5WcnsO>_|G=9C7FZ_5qBVZ_oygM5nP}r;_S4hDr2EuOAGW|8h?2zm1$^?`{Wa z@cvD&;U@M9>cK9p%5D{UPo2sx_4%Ii^a1;?ZQuob&nZJc;zEDID;V#^3=;PQ#SjvT zDnbZSGK!+4>AFqDU>n3N$8mTPwOXxSBv%HsN~Bau$vBC^Fifh;M%;DHs$sg_xVm4) zVW-oHVo8mL=Sdm$I^9l~XcB-im|@$tV657&wN}J*5&^V&Dq{h$qO44)Erhukj&wd!r;o7^CCnImqwz<>%~Eb6wqVXancBxL1$-yh881_v@2L0XpR Ee@;`f`~Uy| delta 307 zcmaFk{Km4LfsuiMK@do=FbMbu>l>wJ6tyuhaI64|CIp8#hEz_-+{wToy#dJAO3qCz zV0g{2je&ua1IRZ?E=w%pQ%>K+z#t<4}KnF-cK~ZXfp-0_q1_tqv Z%@&M1m{}H7%Smni!g611^M4sjMgTplOa1@= diff --git a/test/subset/run-tests.py b/test/subset/run-tests.py index 7bea7948c..4bf57140f 100755 --- a/test/subset/run-tests.py +++ b/test/subset/run-tests.py @@ -67,7 +67,7 @@ def run_test (test, should_check_ots): "--font-file=" + test.font_path, "--output-file=" + out_file, "--unicodes=%s" % test.unicodes (), - "--drop-tables+=DSIG,GPOS,GSUB,GDEF,HVAR,VVAR,gvar"] + "--drop-tables+=DSIG,GPOS,GSUB,GDEF"] cli_args.extend (test.get_profile_flags ()) print (' '.join (cli_args)) _, return_code = cmd (cli_args) From c85f624b519df1db141bf55d9452bc2837ef35c4 Mon Sep 17 00:00:00 2001 From: Ebrahim Byagowi Date: Wed, 10 Jul 2019 14:28:06 +0430 Subject: [PATCH 02/78] Force blob generation and memory check in hb-subset-fuzzer --- test/fuzzing/hb-subset-fuzzer.cc | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/test/fuzzing/hb-subset-fuzzer.cc b/test/fuzzing/hb-subset-fuzzer.cc index 73c95b2a6..38e7ec6e3 100644 --- a/test/fuzzing/hb-subset-fuzzer.cc +++ b/test/fuzzing/hb-subset-fuzzer.cc @@ -3,6 +3,7 @@ #include #include #include +#include #include "hb-subset.h" @@ -32,6 +33,19 @@ trySubset (hb_face_t *face, } hb_face_t *result = hb_subset (face, input); + { + hb_blob_t *blob = hb_face_reference_blob (result); + unsigned int length; + const char *data = hb_blob_get_data (blob, &length); + + // Something not optimizable just to access all the blob data + unsigned int bytes_count = 0; + for (unsigned int i = 0; i < length; ++i) + if (data[i]) ++bytes_count; + assert (bytes_count); + + hb_blob_destroy (blob); + } hb_face_destroy (result); hb_subset_input_destroy (input); From a6065d05cf38620c06b6dd10b8a841ed236f76c2 Mon Sep 17 00:00:00 2001 From: Ebrahim Byagowi Date: Wed, 10 Jul 2019 16:41:40 +0430 Subject: [PATCH 03/78] Don't call memcpy when a table is empty --- src/hb-open-file.hh | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/hb-open-file.hh b/src/hb-open-file.hh index 5318c7fca..f3f4dc07f 100644 --- a/src/hb-open-file.hh +++ b/src/hb-open-file.hh @@ -141,14 +141,15 @@ typedef struct OffsetTable TableRecord &rec = tables.arrayZ[i]; hb_blob_t *blob = items[i].blob; rec.tag = items[i].tag; - rec.length = hb_blob_get_length (blob); + rec.length = blob->length; rec.offset.serialize (c, this); /* Allocate room for the table and copy it. */ char *start = (char *) c->allocate_size (rec.length); - if (unlikely (!start)) {return false;} + if (unlikely (!start)) return false; - memcpy (start, hb_blob_get_data (blob, nullptr), rec.length); + if (likely (rec.length)) + memcpy (start, blob->data, rec.length); /* 4-byte alignment. */ c->align (4); From 7a9d643c297990f9889a2f7b4a470ef933bac131 Mon Sep 17 00:00:00 2001 From: Ebrahim Byagowi Date: Thu, 11 Jul 2019 01:35:06 +0430 Subject: [PATCH 04/78] Fix unintialized memory read in cmap subset (#1826) --- src/hb-ot-cmap-table.hh | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/hb-ot-cmap-table.hh b/src/hb-ot-cmap-table.hh index ac75bd96a..d79b549e6 100644 --- a/src/hb-ot-cmap-table.hh +++ b/src/hb-ot-cmap-table.hh @@ -878,7 +878,7 @@ struct cmap cmap_plan->has_ms_bmp = find_subtable (3, 1); cmap_plan->has_ms_ucs4 = find_subtable (3, 10); cmap_plan->num_enc_records = cmap_plan->has_unicode_bmp + cmap_plan->has_unicode_ucs4 + cmap_plan->has_ms_bmp + cmap_plan->has_ms_ucs4; - + if (unlikely (!CmapSubtableFormat4::create_sub_table_plan (plan, &cmap_plan->format4_segments))) return false; @@ -979,6 +979,14 @@ struct cmap if (unlikely (!format12.serialize (&c, cmap_subset_plan.format12_groups))) return false; } + else + { + // FIXME: Merge this with above or, remove and tweak #final_size + // and rebase all the tests expectations + HBUINT32 empty; + empty = 0; + for (unsigned int i = 0; i < 4; ++i) c.copy (empty); + } c.end_serialize (); From b65bad18aa527684af999b5808a9087404c0759a Mon Sep 17 00:00:00 2001 From: Ebrahim Byagowi Date: Thu, 11 Jul 2019 14:31:55 +0430 Subject: [PATCH 05/78] [fuzz] Don't fail when blob is empty And enable more tests able to trig the issue. --- ...ase-minimized-hb-subset-fuzzer-5738978499624960 | Bin 0 -> 28 bytes test/fuzzing/hb-subset-fuzzer.cc | 2 +- test/fuzzing/run-subset-fuzzer-tests.py | 9 +++++---- 3 files changed, 6 insertions(+), 5 deletions(-) create mode 100644 test/fuzzing/fonts/clusterfuzz-testcase-minimized-hb-subset-fuzzer-5738978499624960 diff --git a/test/fuzzing/fonts/clusterfuzz-testcase-minimized-hb-subset-fuzzer-5738978499624960 b/test/fuzzing/fonts/clusterfuzz-testcase-minimized-hb-subset-fuzzer-5738978499624960 new file mode 100644 index 0000000000000000000000000000000000000000..0264a15fba26548d93bfdda5f5adfad82d0a3fb1 GIT binary patch literal 28 XcmZQzWME)mQ~(2a7gsk33qk?_C~gB; literal 0 HcmV?d00001 diff --git a/test/fuzzing/hb-subset-fuzzer.cc b/test/fuzzing/hb-subset-fuzzer.cc index 38e7ec6e3..428765ea3 100644 --- a/test/fuzzing/hb-subset-fuzzer.cc +++ b/test/fuzzing/hb-subset-fuzzer.cc @@ -42,7 +42,7 @@ trySubset (hb_face_t *face, unsigned int bytes_count = 0; for (unsigned int i = 0; i < length; ++i) if (data[i]) ++bytes_count; - assert (bytes_count); + assert (bytes_count || !length); hb_blob_destroy (blob); } diff --git a/test/fuzzing/run-subset-fuzzer-tests.py b/test/fuzzing/run-subset-fuzzer-tests.py index 3ac22889e..aa6301b02 100755 --- a/test/fuzzing/run-subset-fuzzer-tests.py +++ b/test/fuzzing/run-subset-fuzzer-tests.py @@ -33,7 +33,7 @@ def cmd(command): def timeout(p, is_killed): is_killed['value'] = True p.kill() - timer = threading.Timer (2, timeout, [p, is_killed]) + timer = threading.Timer (5, timeout, [p, is_killed]) try: timer.start() @@ -82,6 +82,8 @@ def run_dir (parent_path): global fails for file in os.listdir (parent_path): path = os.path.join(parent_path, file) + # TODO: Run on all the fonts not just subset related ones + if "subset" not in path: continue print ("running subset fuzzer against %s" % path) if valgrind: @@ -91,7 +93,7 @@ def run_dir (parent_path): if 'error' in text: returncode = 1 - if not valgrind and text.strip (): + if (not valgrind or returncode) and text.strip (): print (text) if returncode != 0: @@ -100,8 +102,7 @@ def run_dir (parent_path): run_dir (os.path.join (srcdir, "..", "subset", "data", "fonts")) -# TODO running these tests very slow tests. Fix and re-enable -#run_dir (os.path.join (srcdir, "fonts")) +run_dir (os.path.join (srcdir, "fonts")) if fails: print ("%i subset fuzzer related tests failed." % fails) From f8242b61ab01002e9f7374daa8755e92c6a92eb4 Mon Sep 17 00:00:00 2001 From: Ebrahim Byagowi Date: Thu, 11 Jul 2019 15:10:36 +0430 Subject: [PATCH 06/78] [fuzz] Increase subset runner timeout for tsan bot Now is flaky let's just increase and maybe investigate later --- test/fuzzing/run-subset-fuzzer-tests.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/fuzzing/run-subset-fuzzer-tests.py b/test/fuzzing/run-subset-fuzzer-tests.py index aa6301b02..d431e10a3 100755 --- a/test/fuzzing/run-subset-fuzzer-tests.py +++ b/test/fuzzing/run-subset-fuzzer-tests.py @@ -33,7 +33,7 @@ def cmd(command): def timeout(p, is_killed): is_killed['value'] = True p.kill() - timer = threading.Timer (5, timeout, [p, is_killed]) + timer = threading.Timer (6, timeout, [p, is_killed]) try: timer.start() From 4730b350b7ee90338caf3e962343af42412ce3df Mon Sep 17 00:00:00 2001 From: Behdad Esfahbod Date: Fri, 12 Jul 2019 15:38:35 -0700 Subject: [PATCH 07/78] Revert "Update Graphite API to latest (#1215)" This reverts commit e4e74c2751ac24178086cce2811d34d8019b6f85. See https://github.com/harfbuzz/harfbuzz/issues/1829 --- src/hb-graphite2.cc | 28 +--------------------------- 1 file changed, 1 insertion(+), 27 deletions(-) diff --git a/src/hb-graphite2.cc b/src/hb-graphite2.cc index 9588fa4d6..40ac9061f 100644 --- a/src/hb-graphite2.cc +++ b/src/hb-graphite2.cc @@ -106,32 +106,6 @@ retry: return d; } -static void hb_graphite2_release_table(const void *data, const void *table_buffer) -{ - hb_graphite2_face_data_t *face_data = (hb_graphite2_face_data_t *) data; - hb_graphite2_tablelist_t *tlist = face_data->tlist; - - hb_graphite2_tablelist_t *prev = nullptr; - hb_graphite2_tablelist_t *curr = tlist; - while (curr) - { - if (hb_blob_get_data(curr->blob, nullptr) == table_buffer) - { - if (prev == nullptr) - face_data->tlist.cmpexch(tlist, curr->next); - else - prev->next = curr->next; - hb_blob_destroy(curr->blob); - free(curr); - break; - } - prev = curr; - curr = curr->next; - } -} - -static gr_face_ops hb_graphite2_face_ops = { sizeof(gr_face_ops), hb_graphite2_get_table, hb_graphite2_release_table }; - hb_graphite2_face_data_t * _hb_graphite2_shaper_face_data_create (hb_face_t *face) { @@ -150,7 +124,7 @@ _hb_graphite2_shaper_face_data_create (hb_face_t *face) return nullptr; data->face = face; - data->grface = gr_make_face_with_ops (data, &hb_graphite2_face_ops, gr_face_preloadAll); + data->grface = gr_make_face (data, &hb_graphite2_get_table, gr_face_preloadAll); if (unlikely (!data->grface)) { free (data); From 670768e5b9f24958f60a74f3d194b24333def446 Mon Sep 17 00:00:00 2001 From: blueshade7 Date: Fri, 12 Jul 2019 16:14:23 -0700 Subject: [PATCH 08/78] fix inc-bimap for subsetting VarStore with retain-gids --- src/hb-bimap.hh | 19 +++++++- src/hb-ot-layout-common.hh | 43 ++++++++---------- src/hb-ot-var-hvar-table.hh | 5 +- .../fonts/AdobeVFPrototype.ac.retaingids.otf | Bin 6416 -> 6412 bytes ...urceHanSans-Regular.41,4C2E.retaingids.otf | Bin 2656 -> 2736 bytes ...SourceSansVariable-Roman.ac.retaingids.ttf | Bin 2616 -> 2616 bytes ...SerifVariable-Roman-VVAR.ac.retaingids.ttf | Bin 5296 -> 5288 bytes 7 files changed, 42 insertions(+), 25 deletions(-) diff --git a/src/hb-bimap.hh b/src/hb-bimap.hh index cdea03b9a..e9f3a6a52 100644 --- a/src/hb-bimap.hh +++ b/src/hb-bimap.hh @@ -94,6 +94,14 @@ struct hb_bimap_t /* Inremental bimap: only lhs is given, rhs is incrementally assigned */ struct hb_inc_bimap_t : hb_bimap_t { + hb_inc_bimap_t () { init (); } + + void init () + { + hb_bimap_t::init (); + next_value = 0; + } + /* Add a mapping from lhs to rhs with a unique value if lhs is unknown. * Return the rhs value as the result. */ @@ -102,12 +110,18 @@ struct hb_inc_bimap_t : hb_bimap_t hb_codepoint_t rhs = forw_map[lhs]; if (rhs == HB_MAP_VALUE_INVALID) { - rhs = get_population (); + rhs = next_value++; set (lhs, rhs); } return rhs; } + hb_codepoint_t skip () + { return next_value++; } + + hb_codepoint_t get_next_value () const + { return next_value; } + void add_set (const hb_set_t *set) { hb_codepoint_t i = HB_SET_VALUE_INVALID; @@ -144,6 +158,9 @@ struct hb_inc_bimap_t : hb_bimap_t for (hb_codepoint_t rhs = 0; rhs < count; rhs++) set (work[rhs], rhs); } + + protected: + unsigned int next_value; }; #endif /* HB_BIMAP_HH */ diff --git a/src/hb-ot-layout-common.hh b/src/hb-ot-layout-common.hh index 8cc64336e..52bf4f8ce 100644 --- a/src/hb-ot-layout-common.hh +++ b/src/hb-ot-layout-common.hh @@ -1723,6 +1723,9 @@ struct VarData unsigned int get_region_index_count () const { return regionIndices.len; } + unsigned int get_row_size () const + { return shortCount + regionIndices.len; } + unsigned int get_size () const { return itemCount * get_row_size (); } @@ -1783,13 +1786,13 @@ struct VarData bool serialize (hb_serialize_context_t *c, const VarData *src, - const hb_bimap_t &inner_map, + const hb_inc_bimap_t &inner_map, const hb_bimap_t ®ion_map) { TRACE_SERIALIZE (this); if (unlikely (!c->extend_min (*this))) return_trace (false); - itemCount = inner_map.get_population (); - + itemCount = inner_map.get_next_value (); + /* Optimize short count */ unsigned short ri_count = src->regionIndices.len; enum delta_size_t { kZero=0, kByte, kShort }; @@ -1802,7 +1805,7 @@ struct VarData for (r = 0; r < ri_count; r++) { delta_sz[r] = kZero; - for (unsigned int i = 0; i < inner_map.get_population (); i++) + for (unsigned int i = 0; i < inner_map.get_next_value (); i++) { unsigned int old = inner_map.backward (i); int16_t delta = src->get_item_delta (old, r); @@ -1838,8 +1841,7 @@ struct VarData for (unsigned int i = 0; i < itemCount; i++) { - hb_codepoint_t old = inner_map.backward (i); - if (unlikely (old >= src->itemCount)) return_trace (false); + unsigned int old = inner_map.backward (i); for (unsigned int r = 0; r < ri_count; r++) if (delta_sz[r]) set_item_delta (i, ri_map[r], src->get_item_delta (old, r)); } @@ -1847,13 +1849,13 @@ struct VarData return_trace (true); } - void collect_region_refs (hb_inc_bimap_t ®ion_map, const hb_bimap_t &inner_map) const + void collect_region_refs (hb_inc_bimap_t ®ion_map, const hb_inc_bimap_t &inner_map) const { for (unsigned int r = 0; r < regionIndices.len; r++) { unsigned int region = regionIndices[r]; if (region_map.has (region)) continue; - for (unsigned int i = 0; i < inner_map.get_population (); i++) + for (unsigned int i = 0; i < inner_map.get_next_value (); i++) if (get_item_delta (inner_map.backward (i), r) != 0) { region_map.add (region); @@ -1863,9 +1865,6 @@ struct VarData } protected: - unsigned int get_row_size () const - { return shortCount + regionIndices.len; } - const HBUINT8 *get_delta_bytes () const { return &StructAfter (regionIndices); } @@ -1874,7 +1873,7 @@ struct VarData int16_t get_item_delta (unsigned int item, unsigned int region) const { - if (unlikely (item >= itemCount || region >= regionIndices.len)) return 0; + if ( item >= itemCount || unlikely (region >= regionIndices.len)) return 0; const HBINT8 *p = (const HBINT8 *)get_delta_bytes () + item * get_row_size (); if (region < shortCount) return ((const HBINT16 *)p)[region]; @@ -1940,20 +1939,20 @@ struct VariationStore bool serialize (hb_serialize_context_t *c, const VariationStore *src, - const hb_array_t &inner_remaps) + const hb_array_t &inner_maps) { TRACE_SERIALIZE (this); unsigned int set_count = 0; - for (unsigned int i = 0; i < inner_remaps.length; i++) - if (inner_remaps[i].get_population () > 0) set_count++; + for (unsigned int i = 0; i < inner_maps.length; i++) + if (inner_maps[i].get_population () > 0) set_count++; unsigned int size = min_size + HBUINT32::static_size * set_count; if (unlikely (!c->allocate_size (size))) return_trace (false); format = 1; hb_inc_bimap_t region_map; - for (unsigned int i = 0; i < inner_remaps.length; i++) - (src+src->dataSets[i]).collect_region_refs (region_map, inner_remaps[i]); + for (unsigned int i = 0; i < inner_maps.length; i++) + (src+src->dataSets[i]).collect_region_refs (region_map, inner_maps[i]); region_map.sort (); if (unlikely (!regions.serialize (c, this) @@ -1964,14 +1963,14 @@ struct VariationStore */ dataSets.len = set_count; unsigned int set_index = 0; - for (unsigned int i = 0; i < inner_remaps.length; i++) + for (unsigned int i = 0; i < inner_maps.length; i++) { - if (inner_remaps[i].get_population () == 0) continue; + if (inner_maps[i].get_population () == 0) continue; if (unlikely (!dataSets[set_index++].serialize (c, this) - .serialize (c, &(src+src->dataSets[i]), inner_remaps[i], region_map))) + .serialize (c, &(src+src->dataSets[i]), inner_maps[i], region_map))) return_trace (false); } - + return_trace (true); } @@ -1993,8 +1992,6 @@ struct VariationStore &scalars[0], num_scalars); } - const VarRegionList &get_regions () const { return this+regions; } - unsigned int get_sub_table_count () const { return dataSets.len; } protected: diff --git a/src/hb-ot-var-hvar-table.hh b/src/hb-ot-var-hvar-table.hh index 0fb1523c0..c1935f7d0 100644 --- a/src/hb-ot-var-hvar-table.hh +++ b/src/hb-ot-var-hvar-table.hh @@ -290,7 +290,10 @@ struct hvarvvar_subset_plan_t if (retain_adv_map) { for (hb_codepoint_t gid = 0; gid < plan->num_output_glyphs (); gid++) - inner_maps[0].add (hb_set_has (inner_sets[0], gid)? gid: HB_MAP_VALUE_INVALID); + if (hb_set_has (inner_sets[0], gid)) + inner_maps[0].add (gid); + else + inner_maps[0].skip (); } else { diff --git a/test/api/fonts/AdobeVFPrototype.ac.retaingids.otf b/test/api/fonts/AdobeVFPrototype.ac.retaingids.otf index d9048ee6ec462a04b6cbac603da193da01cf5400..15419b04dc81a32dbcdf9456a60833710346c853 100644 GIT binary patch delta 250 zcmbPW)MGS3p`KCPZ6X5$`xgcVh7jK{$Dq}JS7b0SaCiXuP5#09M$zjk<^cI;fc%8u z5XX=ca!;l(FmUPs`L7bo5{r~_RjL^nxFmpljpW?K0){rGOF+H@ke`zVl)t2-l?UXn z0rFR5q$Z~D`IWc>?b`$7n`LCAPMpu-7y@LgWaO4quq839WMJT~0P+QL6DtZBSOS1d z?hYWqmY0~D`s;ba3m|_20|ReNL4I+`|BDPp3=9%)HomyS#v+|CLvr#7c5_CbNgRga c%s@R%42%p63V#_GR6#5jActwQ562M!09C|4TL1t6 delta 254 zcmeA%nqV|Rq25@@y^n!`{R;yFLzr)vW64`uIDCNoCjVf4qv&-NbAbE{Kz>4S zh-1hJxhGQ?7&r}p{8x!(iA74eD%A`OTrxnuMsjXq0Ye+pB_Q7g$j?aw%3spa$^-H@ z0QoC2QWI17{7T$`_U!@k%`!4lC(h?^i~zD#GIC2Q*pe7lGB9x00QmyBi4_G5ECE0! zcMp(Y%S+5n{q?-z1&|N4pEsr;zqsW8MFt}V28j{#=2mk=yvq4$_ diff --git a/test/api/fonts/SourceHanSans-Regular.41,4C2E.retaingids.otf b/test/api/fonts/SourceHanSans-Regular.41,4C2E.retaingids.otf index fa2a0e4469e99944f90be57b6e70da09eee8e138..906bdbefd595a64a682884a2ffd18b7592f7d530 100644 GIT binary patch delta 648 zcmYk3O=uHQ6ot=ylQ(~v7*eKolWK{hXoUu=7K#z1g;cRM+J;cNX$Kn;p=qPWHi8&M z5TrFKvvJ`Ecp*Zm7p6}c@ch1cF;681wWwO}} z99)5hBmL=g$M(7B-vBHD@=InU*`2#)?+5f%_9k+f;Q{R|D;R@(Gf$WN^4-*lcIGVe zR59;QTA%Z4ynm6or^tpAv)*w3HM3VNRjPIpH<&*$yCuImRE9js+W5scecCVO_w6~x z!%RjoTAn#yS-*~Mz#e6zW0nV6m)kt%Dzi7s1H;eog83e^duOSbJP_qP;;^$*l~azV z%KaE@0phRvi0}A`b&6Apa#W?D;nN%i<6>(qcif-$K}3fBu;;;{Fp!Xsy;pzg8YB+~ zX%GS$ArxXm5=Gnh_722p!PynZHhzt4Yl+j%O*+U_SLCYR2-7V^DwixU-QMgiw?GPq z^9eqQh$xCPjiXvY1W)A4#P9mNdLTWoFWc|J3r=k9lB>d~MfzgjkE@NUzJqE~`-(|1 z&d10X>x8NR|J#4zVPK4V6tdWS&uc>yx|lY!z!uV*TEif@O&$7gk3@wgn!b)sT0uW% wP{zd|WxWjyt1B{$JPNpgDfl=SJTixZUb7NJ&CVcV_qD2&DqWzmaow%zU&gX^bpQYW delta 605 zcmYk3%WD%+6vn@E=aJ5Inlz=-P1?pZ7O9Vc6bfn=QlYwNjWi`xUDzQVI*W`GYpemm z2!f#aKxX4Yve52SsHBTR!0M)}`~h7Sf*@UX6LC||l_@wd_kO=~?ws?Txtk~U2kZI8 z#XKxLfr86dW@po%c4jO9Z9r?}3wEyf)SLwL4UR1r^9xs%d#n&sdFd(nPUYS7^c=3~F#_Sfl-_mBh@Z)Rq zg|Z~Vj@F9HmhvUN5gho<@A??kRpl2}#2vmLepqJ!p7ozS#Bht_q#B&sqwz=+&f|Ba z1>!h}w1PP_BCY;+Mne@7QCw#Q6cFG6)=+{QUNlF;mQf7@W3F!jE><~HhJ&>*XV~HG Sp1ts$dwFfe$8IR-gw6x3&AWZ3M;=+DgfZSzEy<*WdW5eQZQ delta 40 ucmdlXvO`3WfsuiMK>$dwFfe$8IR<5I6x3&A)Y|OG=+Df!X!Ast<*WdZSqN4D diff --git a/test/api/fonts/SourceSerifVariable-Roman-VVAR.ac.retaingids.ttf b/test/api/fonts/SourceSerifVariable-Roman-VVAR.ac.retaingids.ttf index e0999884a0adb7264fe211c2c417a6d16da31a15..734f6e82a6488c5f7c85ecf12f3972ea28aac5a0 100644 GIT binary patch delta 472 zcmXw#%}WAN6vgiwM=>R}l3EoKqaa0wi)vw%3u_1@NU=f!C-Z}t$w5UlB3o2gOM__9 zrd>ru=*Fe%kic@^##O8Sfv7VB&12r2-??Y*eY_X%y|+q?h(@sSG%Ln}8*Fr?Lc{`a z#W1*VsW!l;;J|vs=idoeP-AUyA`%ToPx|$7BF+VF#E^IS1P{0ePD&*yKdA_ZM1}>h zC#gs(opbNt1Xxa&q-wr)_Vxv%10#`fjdgb6FUsO}0p67QsSRDV9yU^Z=H@4mp>USco2xe*#++sjSifg-|~NyAGr^C3W|D z{Q={a$l6kKh2n3Q{6x;E7ARqWdEbr`JBwhUgaOtTzY4wqJM`NFKrdg3%spm+;xyOw zL*&*J58#?L7H3-#6#t*N{;LCFWbsacxi+;S(F=>TR*cvX*>tG|nT1)oK_0f=Rr~Tr TGBuYB7aVUHmbaT7W8d}%dO%sv delta 480 zcmXw$JuE{}9L3MQeXUa3if&RVDTzdo5?zpzG(Hj`NDV&Hr&=X_G&D~uf}y00BxVu= z1`#!M>|hXs#K&N>bTSz&!f6xl<-K=)=YQ`1e{nUh+FRqU!2egXZ1@ z3_fyGNK@n3moMZfITq2?owdx~(5JtF6s?~2keO^F`BJVtg$wM5c1k4tibY>%ymRN==J^LOM5O-;s84nON@vTH>h z*1~6xC$BWl0ZT5vx}Nxbh6ixW6azX3n3rwbv15zu);YkEQwGSVWP9oK2-N+@gQBrk zp^`<{^#e4@b|bYSV30sIEvCgxfPw#OuC(0F1 Date: Fri, 12 Jul 2019 17:05:34 -0700 Subject: [PATCH 09/78] regenerate subset api test result SourceHanSans-Regular.41,4C2E.retaingids.otf --- ...urceHanSans-Regular.41,4C2E.retaingids.otf | Bin 2736 -> 2664 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/test/api/fonts/SourceHanSans-Regular.41,4C2E.retaingids.otf b/test/api/fonts/SourceHanSans-Regular.41,4C2E.retaingids.otf index 906bdbefd595a64a682884a2ffd18b7592f7d530..1e5cc967fddff645a34991d693672de2e50131c8 100644 GIT binary patch delta 642 zcmYk2%WD%+6vn?Z&(3t3HYL(c+NN1+@#QP+e3bO$n)8=#UQ1qH$t7)_`CN zLP7C?+=Z^PP#xi>qr4uB4zw~8gNP`+#k{FIzs7#IRD&3(bh{!ZvO}{+b59IZ??v4t%AV`IxKqV%PXmIrS=`1~RCbJmh zs#GJ>-+78YDE!U zy`7RR f0dBBo6+YHP!Scj%->z7)XVY>@Ii28aX^;K|>RE6e delta 693 zcmYk3PiPZC6vn?do7rSHTSLm$BBWYl6s^!`tOc=x+L9`^M%xgImv*rs5t=sI*hUbe z6a;CF${h6ILG-K$%|TSqn+JQb2zvJq6+G!dsbGB5mg2z7`+o1uy!~cp$$i>XNu|>% zIJgP}hr5%>)-BV|zX4bP`W{YA)Ato^@vF~_|^cJHp^ z+$_K-hKduDrTTRw0DFiNtyA34y3!nDE;GlbxMA=aUNGNhcJD0Y;~gRPBMv#+bvW(B zba)VkEkJy$Pxygfs8fWxC_`mZ^Bzr;8WtNXnG@c)2O{#Dk2)V73<6R4IQHsq)qv#Y zAOk|cAozTokVK)D-3NLjH0SJyU^9P4HaAA-<~r?Xs%mm|ZIJ1fChbe+m~OAv78@aj z!~O)nM1#nSbMwcHoKR2X%jlo#tUi#OH5csy== XNT{v0t2*p$P1?0~t8|6qP96UN#g=<9 From 1da1b4dc94c500e4c9c833ab74fced07364d13fb Mon Sep 17 00:00:00 2001 From: Qunxin Liu Date: Wed, 26 Jun 2019 13:23:24 -0700 Subject: [PATCH 10/78] [subset] For option "--unicodes", add support for "*" to retain all code points --- ...gular-new.default.retain-all-codepoint.ttf | Bin 0 -> 97204 bytes ...hints-retain-gids.retain-all-codepoint.ttf | Bin 0 -> 65976 bytes ...ar-new.drop-hints.retain-all-codepoint.ttf | Bin 0 -> 65936 bytes ...ular-new.name-ids.retain-all-codepoint.ttf | Bin 0 -> 96948 bytes ...r-new.retain-gids.retain-all-codepoint.ttf | Bin 0 -> 97244 bytes ...gular.abc.default.retain-all-codepoint.ttf | Bin 0 -> 2168 bytes ...hints-retain-gids.retain-all-codepoint.ttf | Bin 0 -> 924 bytes ...ar.abc.drop-hints.retain-all-codepoint.ttf | Bin 0 -> 924 bytes ...ular.abc.name-ids.retain-all-codepoint.ttf | Bin 0 -> 2168 bytes ...r.abc.retain-gids.retain-all-codepoint.ttf | Bin 0 -> 2168 bytes test/subset/data/tests/basics.tests | 1 + test/subset/subset_test_suite.py | 20 +++++--- util/hb-subset.cc | 7 +++ util/options.cc | 44 +++++++++++------- 14 files changed, 48 insertions(+), 24 deletions(-) create mode 100644 test/subset/data/expected/basics/Comfortaa-Regular-new.default.retain-all-codepoint.ttf create mode 100644 test/subset/data/expected/basics/Comfortaa-Regular-new.drop-hints-retain-gids.retain-all-codepoint.ttf create mode 100644 test/subset/data/expected/basics/Comfortaa-Regular-new.drop-hints.retain-all-codepoint.ttf create mode 100644 test/subset/data/expected/basics/Comfortaa-Regular-new.name-ids.retain-all-codepoint.ttf create mode 100644 test/subset/data/expected/basics/Comfortaa-Regular-new.retain-gids.retain-all-codepoint.ttf create mode 100644 test/subset/data/expected/basics/Roboto-Regular.abc.default.retain-all-codepoint.ttf create mode 100644 test/subset/data/expected/basics/Roboto-Regular.abc.drop-hints-retain-gids.retain-all-codepoint.ttf create mode 100644 test/subset/data/expected/basics/Roboto-Regular.abc.drop-hints.retain-all-codepoint.ttf create mode 100644 test/subset/data/expected/basics/Roboto-Regular.abc.name-ids.retain-all-codepoint.ttf create mode 100644 test/subset/data/expected/basics/Roboto-Regular.abc.retain-gids.retain-all-codepoint.ttf diff --git a/test/subset/data/expected/basics/Comfortaa-Regular-new.default.retain-all-codepoint.ttf b/test/subset/data/expected/basics/Comfortaa-Regular-new.default.retain-all-codepoint.ttf new file mode 100644 index 0000000000000000000000000000000000000000..5de8d898119a25f52c9d9ba39b16ce6b84779025 GIT binary patch literal 97204 zcmcG%2Yh5#bw7UZd((R_8jYlxk!IA}Xf)~?Nh@i0wc6gjO}k!iu@}~B;|9Ad#Mm?& zY-%VrC6oXL8!$M81RR1P1gBtZOmUJQ{*izowi5ydV~u{_bMJd^M#c7$|L5JK`;X)OpB%gH+6Iri5wEZNIbPp+#n}^Q?&=Ty6XPdM zjCsOW0RB(bow^h7e}?z_PApt=7QcOXO}}j?uDbDxzxc(^-pUxSWqkdClgAe>4_tG{ z7RI+;h4=eUV!--d(|UaWI=pT?dFI+1n$F&H1K!8;+#kB?mB$vg|5bSp;~U<~nB{wC z7H&9e`jmG7uW9}buUI&9Jh$+re`oyq*D$7h|LiNTxpwJp){F1oO7EXNcl>P6`U^kC z{A=<0?}3vX;5Mpm=4A<1&t}(&5%%*1R>yow6urJ|H*e%SvB#f?gwm0|=C;0o+Z|}0?QEaU)wIUF-hkhwJVGB>>~Q&CFFt~g zZBjm5ZVI@QBjG@*xvr_ZuifqUyE|rbO_QxneXUVV57^Wynpey%k`D1 zsih@3CsR_%VviWNs@>ego?^E96n^hh_ZHf82zAkb=wo-S1!4N80kMzWAt4mw8B1MQ zIXy!K)mYV0_8epSvrXSMKDmGOCkbb!XAFqTUIgNu2E+k&`^s+@cz?lw=w)}Wxq^ob zh=c6TmCq0>pl8_ESi!@_Cl9Uuq*%eT2E<|Zu9eRg5brS{j~ zAUfEUD#|OnnD9w}o}EjiuR+c12bACJ?j9rkYML8?%~i))P!o_+i1s z%xq>07Q5tR&e~dY*-S%iO*|U(`#cUSYvC;p$;(+VvlL|zQz^fcVwsGegd2@OauqUG zOEK?{4*MYA_($#WAV2SmM118BK25)#=EuaV>->?$Bd&LSKN_fUDPQ(_!+vk1{Huu1 z7b*WD;`N6k{&##Nw#eV6fbYb51lQMST>txJD^}U%z~e=%IKon_l?|1OUWh6z*~C;x z?h{y`zEnkFhb<5ukXf9yHaDhI_3*?bz}Dv-yPY!dE~p{fbuneB)@m4e`h3cY}2}v z!*ki0?vAOZxpku>V~}5COTShAR*kYww)y@RPCGPrZ|~N{n9TucKnWxWQi%f`f)7 zM4m0Kf`}4!Bn0@s!~v;4TP5C=pX^=ZlZ4lw8W5elrTW?652BWDf?5K2MsukN=&Ys= z!ndG~WFi~{WdyjNu&V3vd~Y4_=uxU^;w}D2#Q(+JZ#y|Sc=Bz#Z@cZlZCkhEN5oGg zFnH?r-Mim*YH()99S0BIv0dmC`TcIzz}nbgsh@F>B)*pjRXvRP6y{-ND2J_FQTmn5 zUJsbEC6kJVJPqD@o0++}iQ`wYZRWeov;Ok ztZk^K4;@12e+kjY{&Fn{fe8tbXJ1_lLeQy%=v^DaL|R-z9AuxB&oJze%b^2r70+ms zS{#%~JV5(!tBJI@{N$n4pA-(DOglG_u$a^>O1V{hH0GJq3J_#Y{GU z4-%}S)JlB7mhpiZixwisV1NWqSgM51Y6b{d=6x`>`J;m74cd=HeI#?L$o`wYD89T( z+l;Wwzueu`qLPA?8mErIpjXY3GpjTY=}Dn^;Jh)#OqxdrBn_m!y{{DHY^a#;sc0eM z-9JJL6?27*@OdD+BH>HZNhWLl!dEwafL8yYKXR$s>74KHLSAn$><1S~{YzH!z) z?6-nCD!xQTOG$`4{D9@&hI|HTBMH&F21G#9V}JmCkMnSq9wW|>pX}tB>St@R^XH(M zde&ZQ!48_S1t(NaUYAMpx;U#%#3FvL%W1Q)`sFf{+|3l}1NuWcm3SSp2$AWJ@SjKg zggk$w9K$an8pzIX^8xz3I6*)8L>Z&NR0Q_qh~R-qfvM@Gr+ByI0p4B313wqMCSiKn z&#HM%u7`ad>v6N1QdByRI@x3PZthmA2wqNFo2xNDniuJBSWXE%DGBWfTaR&*0$F^~ z%1tJ9!OVsFgq^1oXnh?Ru(7VKzAYN|y765}o+R~YPG=2QJQ5KWUIkwkRa2*OCVX`4 z=pbRMX*}0FnWevmk3TCB7;&`k7^Xk7y|K3S9g0Pu@cGHpW4s+${2;w79}}272>iu` z?wOXlhjmqBX=!QcX^iKD?vW6EOMkZl;u!%!G$$c?m%g(cf-DRkFp=bz5Q9tqCLwgq zvh*uJv&7&|>lRMN4bbvXf%wx?NKFE|T(0(+&G*Q}T)>7S#R zX9H^~Ws|ibrwQz}NfDw#HR*0$P0Z&3@i*{>YIByzn|!)nI0_s=8boPw+)8qSj3{4} zpRsxDfdF@vpXOn^8uCP(iP@-ERlLo`RVd4?qtZ%&+cDhz9{B>IXq;{ z3i#a(ntPHW4X{+HPP#edl&QKfaFZ~D(QR5G4m2I8&+As*$fMtjmxq16 zFkuTErW_F*wpU=QdnJcy-|xe`0D*b!;Dget!hA6=V|<)_+OW20z8bvp8BU+$%!O~d z8sj-OS{kYkyG;m>k(aG-(8)y-O5Ah-wyv<{*%3p>ryFWw0Uy?w<5@$;TV>R*Skxs@ zQS3=LWVPzHE_7Ya;rGUzhY(|nUSo0FeNoq^xP}LA$~iIaI>_gRyji;1Y>oN6u1}O7 zi~1ln1>RMfZzDT=cM&77J0flRVFkptFffbDu<$~afI>E)9d|R5&xnRFX zeEz7v{6l9n?kxWxBq+`w2`wH~?h28HqHS09^Tm$^W6E~(;>Tg;NZNW7Ypi9tQe)hq zti=amOb%14<+aQBAj);r3uT$(x~>ek_`eXwqduF@Tu#C0B4z1We5-Pq5cJSV7OQgY z;>U%ACtiG1(BEN6e|(~vTZu0O1bI;sBF}!Z5(1QnRY(Y7Gk`aQ-g{2DMeJZNJ9>W& z$F^Y)6WGHz=*&=koU;Y1$pS4PjJIUfd!!=!=YbVNIqoY(vrQ0nZB4z|-n!aI$m7y? zjr3zKOVI*^5h&^*0w8IGqYHvKBVojRnwG1{Pqb_(I81J@J8E@~r{`xn_LheBbf=D$ zw!C`g+VYKrFksSN)06f^RMqQ^)x7zwH_x0LYM$-7wX<*2t^416&*$yBIU>}(jxk|h zON{lizploZv~JY{h@}L9@iXKkk5AV72%HiQF@7%Nd&Z~xpuex*h^mTi>yZ2l-JtKcR zMy?X?jo|n0J$GI;vax61^)u7g@9V+u=^6aS3Smd82L#m|*Qn-dvBG7xC{{?;s)Xp{ z&NU%OYf6Y-?pg~%c$^aAAd{L`i!zFNbm3d*8I&&~Zw%CG%Wp|N7(agLXh1eAqIJREeK(^NQe&h_*xLA*UM+HoGKuoHH+*o`KMMy zR6nKJt`hsFjn8!Q0rr&knLFt-(p$YxMHKc<<1>UQiceuCt1w0OkDOuGi|hi~KN4a< zlMpNS`hWp3qP&THOJ+H~g|9dEBMFFCEu$CJ@T#F zc(?G)DF!cmb6CO!aMlq`G7PiZ=kAR|T-H!PctI*U8$=@Hr9$!&K6pY(kF+#Q5RO|A z1|Rvl{qqE?EKpQ#L_t8d0nazXaXux0*8thKuaszMCb5$5X&!DFt`;tKY2J)0yjUca z=vBDYYI!+vvoGRtA8g>itKDXE2SdJXHD$H-kd2>s86lK)AB^$eg}2($zHPy>8aiZq zd9g%%FR&-%(raIo&S;k?_91skr-c>NY&t3-z>xw%aMw5an^$nxn~A%mJU8vct~Ia; z-Zgh`1bgQ2aJ!o1CWo>qAzs*$+=&c0pq`@CMH^ zjTOmDJOS85kl#;lPU&jR+fjd*iuM>DNJ^glG%J=@1z^QQ>dO8f8+6csMBBlo*dy$Eji1hQZ1rZJ(h@6<18k zANlZ$Oe^9)I&^B?)QO=xkr->;(9yZE4c{#^6ZpW5yjFqTDXF)CVRi__U8HP*6i;N= z@dXPJeLvS_SmSCqETn&)fE5HsG%1!gz#z?-lx8b{KziX!+Ux0POBXVQc+`{frXpdR zJ=WHg%k~xfd!x}v$ZAQyob*zD{kY5JtaJU)>2%eV|KVkXmg@(uI+xS=xGU*$8T9p{ zRur&Bmi1+VqL9~NBc;KbxPr(Kr2!RY0%;j(K&z^WdxRTVbGD%_oQx!O607!DD!U1H z0O`$~S`0=ke8sl@<%V+;6X!O(Gs5q1do5qz`~`2YeEOaFEuEcP^6!*nH+p7v-RY6? zZxE|=@ZM1Qr?EzUzGZ!9&s;0yteClwv$sk)%l>_ZMwJlcHAsj&d)-P1cnw&+gdneh zeZufxFB7_0esYk#M}E?<%p~5(>XQ&d?3(IlLs$(V2C)ZpIKXE0B&Dh<3(~tKZ$gWO zP?8c{3=f!eqA@Izlx;1^gxAdm_<$ZI(VPpBlcby~vXm%|A!P`U19{7Au2acTNesOP zQ+X7=vvg)_*yas*5?1ff*6zaguKh<|b@Rlzjm7;_VTaX&^q9A!)UoAA!9?9e zBxJXe|ErlG_}&d&557`L0<&M%}t z7Twm_JJ%NZbyEqHUKjQzlHsno*5-}9t=@3h+r94e==hnihc9h9)t~OK3)i{7R(K$p zY2G|k_IN`kzsutF1%g(K!`wR8)4jfh;yS~pXQr!|jldO$L{a&X7$m-x7 zGGa`bbre8^Q$>pwGA50a2C=3EH3N^*PvjrlcJtwUGOAp$cxxNqaB;`>3+uPP{ZRk0 zW>?bbR2^Nf*|h6zr-uqhUhfz>b=%HJVmh$zw(UFbJb2_?yBg~3PFK>F>m0f2oqKoR zd3qQ;w064;C6SHv}X-X={@aM6UTyC1K zyX7T?Tkw(|cgjF;Ns{rUX< zVg1$C*UXSCra1`Sf1g-YHy>NU*>aZTi%W<;%?qta2MIwuE+Klg%AXYwLMls$L8eKV zic}W3pc*L&(ZN0@=TQaGMc9%M!pB2w-B120 z1i8i@Ze4{xqPEH|4WUAGStdfGN6ItEXB62RS3$H@_CWZcM-hb**^Hp%5=jeG1tyLK=yPD@k`N z3NQHyilsV(vAC0mA_#B=yiuRM{Fo&WSH4`EiZ5QJ-05{?B8$@=C%)B(yx)89tvPmP z?%pVTunaa)QLV~FFgrS49I$N zN!|^-`w^>eDy5<3fMit8s6x&o8N&jNfyQLQVMC#}U-O7inpX@G&VVCeN!Y4{MWTTq zmET%+`h$vtn;V~U27N)r_SCaN-An>d4hj~mmi;Wd&t zQ6~uU6kALw0Xc6DkBP7IMa$1R%ptGKYvG<&?zZ|}o}g+kKLa=OdHy+XZNOnK&-447 zj$o~)yzO}e{;_vrE@JP#B=>GrrHPy^?VW_^Wq-0_?<556orLIMTUKzYii#YpSVE9Q zL+rlt?X;)zlU-{+TSznsF~I&}&2J}JBO!_`za|992?^29uBe8`1W4sR)%(Me? z{Kv-lK6bM<-ld#U3I3Z>69cCe_@5f^`we*D*km@wFRLC`KV^&`V6U%w4*5EAo_W-j zSDqg*#(S5I|HK$S$lg#jPlEsM8uNV8fInow(>yK4_+jYh%J<%5j2~eatHuY7@j>>< z%DD0yZQP=EAi+V{1lE*h1A25B)`pDnu4St_Xp9daYG0X61q(yf*i?w032PR$I3b`> zarOiKTZKjOkces{`(RX@$$btR-&7!c8Tx z4s~%TMF%go@>VZ|7Ff*)6@cF|sY1#s9WlX)2+tsYj+g;ToFUl^(3fFbwQutc(-T*3 z+;sI=$XDLO?`v(}HZZumt8ieXWnIKs>pWammzbtdlUf8z%{QBveHv595`k@1T z{f9?K5B0}`cE#?hb<{Rp0`qITX=)JM|AgR%ZvF^rBp*4nnp}&))M}`UW@A}_#0Zbb3O(d^^`y5{!NBDzvBqDy8DcCP@P|`pro_^> z4jm{I4nUsu^&K#;Kfjqj9tej6dUoA)^P?wnPK(Exa18Ao*wxj$e<(K* zchxvus&j)TXuG>zFqh1($^Jv5BZvCK5r<;OhSHfLF*||ff0I~-<)HIYjfmgK@jP_8 z9FNj!z&Ucf#6D03Ph2j?$-Xe2qx{Yo@1!^oc2RI(Wfz@t7qxm35yiRWUDTpxQGGK# z%1YhDcWk+^VfLo^sjE`t4=WqaZ>~~GK+;ycKiI{yVket7pI^Ux6QyiWcBvbL-p#WK zimzgCsmcXmCmV-2FrR?g52~X~81^(JRcStzm#Wn5lFF1!{ACQBUxVtJ3Y{uqPqfo@ zDo&T-Pi@!1(|mUG4eKUfH8*p5v}O9HErWY|d-o0w(2)i1OVsN# zo6}p5zhTdIzRetT-RHs)ypZEQr&ZF5+Nk=#cc>nN{kKCogWu97`3Clqs%!e#Txorr zn=LSg;RnGPLNeWCf}3Qqs1&Xro5$%wv$9}=aWbxK&Nfkfe`kABU$(Cf#|J%)-bPvD zPls++1a2zA?4>sQCMxvj8GktJFMsK!HeNXs^mzS#uP3;8`^(dSh{) z(4%5jEar0=u0Y%;ff0L_MEyh=xRJs`N*TRp>Io-myZ#zFbb=|xn zo7=b{oEtY7!rADaHW5P9$g;|pP5iI2#q(vCnMx?K)BB8btxhKtSIt(@% zm?!m3H3=wKFkx7vA~p4ifPj1x!Rly)v${ki6HVjrjFp9#9c3ebg?LK~>8pmLM}v2H zBi)DAQ7p7$I2pdd7YzEinSO=?{0}pyhfypaYT3|L=7BK(E<{Bz2vH&AU9;wcH6tf< zUCGgyNy7(21in&KhzbiK24sPS&L==%idqU)IZlbWRlwwqC0bj^9qa9G z8E74-tMxYrn%CAL!m_hcx&oG81eTx3&`EF1qONe%_}rG8rq^HCiXGz}V`oOT+>mps zZg+z{dD+Oo{z9^A{cE-lU)I-m*)X;dCJxDz3$wEqw#PPJGx5l9-i6GG#nsr}e{}M_ zL-y}(d)*w57Y>b%9xfEf&?`s^2Zl(NV3&w9D;^q+Lz-yg6;FxA!9Ch|#Z#j3w;SWb zhOELk@v;WriJCb2-u)o3T@<0hTY$V>%$3)XT;}rm-F>toxCcBbFiE2`YTr-U;QLDSj!C>jIFs-6KB>Qh zQ_no6LN01g8icx5aXy#vtmCvU!|>CxvL=-X=sSV8uZ_b zM_1rsKPu}bp6T>9D(jnRfBrytCTXm#sq3Ez2Su#Or$QQQqXXs&&MKH0dQ8X6{-p?i zQu!Ura&a=8$9PK64Ph)wa$3V>@qU)i3oO^7lHOwMdRE1*Q$77}sGi=aw8H#;g(tMB ziZPR&|3I_;$Wny;jreq2tfdo2>A4vF0%#`8s0Lh724qbtOeHo%&VbhqbVH6&4LG=( zLQ}-U73^AyB(yqbTEehqM@~Nla*8z1bn+JjIhl}Zm){L4AS}>#lsBCr68+Q0NX z3P5Ext)AfwXl;Vy%fS=E{$^}!o}%lhrEu7haEdr0L6be&R?Kk{E~u1Ww$)9@RExTR zKkeeX;deMuEq@0YU--ut+_jE>?f*Xx<;!_qz&r3m%Av4dd5{1W$Ngb5WDgH?mw)L> zU_bXGGlrRA&Iy69@z;`lDdwxRitJxK+ctM^ZtLDJ>vK-XzYu(dGQk@qH!+~Gf<(!W zCqW$&nzdE!E4lvvS{VNUEv($KY+=}QHiI7y;qO$}{V&j-3t@rWrIn6hYjyusyc7}V z!l17Hsd+p@Sj{Bj-atImzB#W92{b;`)=%Tmtz+U_?i0Q-ojEnBrZ+%!a`g?!LGU*K z3DPUZS5~}Y{j0TFp0&PO=uKIvM@9LT6;rvvAF*HUM8&%6tOL{Hj|n8S%4sS8gELyr ztDTfhzS=?jNw~Oy{0Lr$y@4OW9u!O7tE-#IN|U?IN)<0SUK;+*%9X{?d$>Q7esta zX~C{EBC_;aNv2H{H&Peu2rj`VB5%lefvAwlfgqAFesK8B#*j6_0WSd$`v}x*vzZr! z#IAxxgW^$38r#CB`M}Y!;mh*j#k?lh`DXFf)}n&Y2)%=IH4U>nc1%xQF)(n& zbot+iB0v`qTjf^qH{RVgQ97o-3-v3tH}Dk0o-Rl%)x(IArTv11^*?2SzrasYKnTYY zd#+){cprJTnz-2YY)zIb1;J$~TO;#V!-I^hRIPG3CX_CJq-$HgXG>>MDV?5}Jv$L8 zPil*f__%3oYjbw8b^O@i@VV{f7kt1ae@sYWtdgi#S|p^^$s&=l$jUfbLULTUgh&GJ zf|ak2kFzfeYTv(9q;YijIdp$c>z6>%E-p^bbJU-r*b5OaGMs^oepQ6~xdmb!?} zmgYOR_2oBrgi&umc251lp$%upi%0%$u-6k-RF5Z?xNys-QM=SM*;amB(gi^_H+M{2 zyYbUk-MP`g4|zbECD(r~QHY2d!2|N@Rg?0N!x-EFy-)(~Hnk;+M}77FdhE8Bdx_7h zLoU%ZA})N#)(h)l6>mMio^Lph7#~dEAra{_ldVkeZ3Dzi|DlnQ!~Ok-M-WG&dCE8z z?XNtgzA8tdjaMvS#O#Gumhcrzm&V~cYw)Xb0vvf!(9iNHJiKQOepOCD8()ZFVmNEsfm5XeGeI2&4iQoJ6ivM~_y{N(ERAHZMke`%R^(S>m zEz6*N|MK;by(jUsD$AgaS7#Z{C>JC=zG;O2tjgJ-}6Eoa{3>zA7&w#*MtlQmxF! z&?we7fjSBlI??G26D?0=#ijpLsA44~qHvI(VTgxHt-mzx5t0(M{-O{YC*QS$0P;=g zoQ@-UE-JO*fM%PhL{yK?g&QM{sI*2MGC2Y$k2A{mL$ZD!_0^SZ!x~I>0HqEa8~DcX zu-)VJ+Df7F{qcGGA6|^}f=%9y5xyZhu2;@--m0f?u;&fDWjl95hmJ zMR4PF2-P6EkK{6i`_H7pPgG@V;3x6N5!}~fz2zSPx~)3WKHILe*6N@mKoAa$lh zP)}Sb0H7_%>X|Ym&&tiKwm{f{{65$^Ui3J)Oxl5TR9Y57R_l71A`-R^nsfjF3@zU` zEeM;3h)bF}ejj59fF}J(Jk}e|SW&(o6y$`A3Ib;+Vjw4{;$z>W4j&%s?6sJJ3ID*J zd^QjY1@Mn=8#_8s6ZblBXgIa5tNgi8fd7ErE4KuwY83V!zfb6xc}#}vy^jfLFUQH= zqj8HWqYG|$JXonQI{q`w_Q5kqV@TM+-IY<&7jkr{7hlDOm;S(?1$X7ij~4+(L7oP> zMD`)uSQCSVm*;scyI5`E6{}0n^>iay#iH_@>Uk0WjSpYj=!A(^=ZJ0T-Z;tEZ9aae ze}DhfLY>3pan(EHlWoPx_-Ju%Pg8Nh+}!M{b2?1U+PZvWW0%{vwU}R*?##JsQKIKc zCOXp5bdBBBHQv-U+YFqEH3*#T&~Ww@fipQyIHPgkY!~5ScqvLNHbzS~%2D7!*i{m? zSAz{KgB`z#aMp)7x}sX(Ef-3?IP*b$ndmr)U;{8Y9L5E`wIgSP#pY}#Ra*m5G{(oO z4!jUci@JO?7E=jJkV!IFQ%8Nqa86dGMr7134afwq?Ds|b4~-Rf_a+(>bsZh`J$nZl zr#t*!pFh}`E{xQ*x7XEXYA1^W8*%(wsV(m7Yv0<}n9pTnk!*A4aJGBCGoFihgPx$L zx4W*pwY9rG)!NvaDik*iEz`E$CQh@Z*V@ukaj5vcHBd_W&AVd=x_p~l04HUztw?!ZyJ?TzXzlj(= ziTwIn_^O%eU<5p|DvmVbARK%Od8&Elyt}ZYTg1V-624F@Q2uXkDCAwDAH919_%DRZ z8O={1@w+^Vudji!mc8s6nTY@kStwY7#0hfqsPHhGEr*f16k!CJv_wm?1ZqJAoCN^f zLft^M4+yzR&OD&@m69^M+0lyQ}GJ;Lh$P4S6ifY{hD$VmKR+%uhnxE z<^TIqC;%@J4z5?P054sJzbF#(b@ZzcR^@KkI|Ko4!%j;G@L)+)>4YG+sz=8si7K`t zt~iIdCi(Bjq})!C2_!sHc2qj$;}nX687hwGLpq@<&44i-)sE;B1X-bYf0+kQwX)zt z&4U*vkRh?PtViCXzznStGuh61%0oC zm*dsn`=IcVJ}7)7IllaR$w#7bSl`#`-#RBWo}6V5RY)2*uHa1fktA*?UQh74 zkF*uFWAD*%BYdP=mY;|=o`~8p4Ic$my&K;oyaM?|iZ^g%b(m5sd@9kkiSaimph^+2 zbvnoqqOMISHb9?(dTOkXwtUZ$^mrVWAG>P!58O3YtHWK+ z^M^fli#6dYH`mZNQH}c#um?GIN=l-7hU_2;$VIieC?H4I2C$M|L7srR2e)vm2~CMn zhN7U`iYzo=4)+q3=6Nb5zl2Kj$J`;)2P~ejJ7j)Kq5%JkRU<$h3 zVfBLRf+^&2^6$r!9xsZ=KIulqTKOoyJDCcX+npY~^^x)+mm51ERw^j$dh8u2j6-o5 z~F3KH(+IN_egkuu(Ej0y=PM>{f=(M}DPx@3TWjc3q~Na(K0GlU$F-#9?$ z{&Z-Oag)$RYh{$AgBf&!%8MLGGI<@TXGKP$(IU=yl#+ zkJ%LRd!pWm!)kJyU9`Q(UqyMk(1$wja41vx>(+68ZD0A?Oom^R$&}wDf7hh>58KPp z4F2O!&`-=+%tK)B77cq}7i*E@B=Kn+cIsuc7CGzRX`@!ez;4C6Dr_bOBJ|m;|g;T#@Lmsl@iCAt}EwGNGls8IJrYINlBZEdU=C`_gJ<3l6h^lr+Qf4b@5q)+_M9 zMir2OjiDlnD#lyKBtFpS)=Gyns<9Cj?Srvy6vAlcyM_+k?p)hk175n1ZV30(L}QRG z-Qjf`C0-T_M)UxRAcf}%*3iKM_vo=9j{f`b4?Gr|ZT+T29Fnfa(CRcF@YKxT z%I{SpkfjM&uUCK31v7MR?%q~J{7{`NDQH@jpxK0>HG_hGGODy!WOmguGYcbsn3s!jOWcb z6r(p@T|6%P-{ISK(Pg1& zmyjeP>17Ik+%?4;T=9gHH%yeDjg;R-6H)$_eg?veZw|*AH0d_n{(+@Lw#*c6p;>JlfNkxcM=X@ zjc}C;lp|5jE$JrG4QLLpJ7f892HVnvW8o+xfe~Y|syq^Db#a`)`?-Uo3xn+Yez1IxJAr-eN8g4Lq-2S`MxKpogSm-YPR^lfSFxN0 zR#0rB;9?V#nUd+XvJA%t+DnpDX|F)57MRyB2`bs5$y$&>B|eZ}*c!7aE?3f#x_qR#vuEGT7!Ij>2L|W% z&lYwkoJo({>S(%p>&%s-_4)Dorj4Ub>#ldiyHf6?!)|hCTC(eVH*ODleZh^B6BEsi zUYp&PboY$s_YXEt_0}peC0Us3nL0V5ONFPvC9;R06E219r5T+Uy)*?=QiDSjw^0wl zDyBqy8@)71J7VjJ75q4J`&M5p=0o7+*UlgXV$g5bZPuETqmAMFl-GLne!I%?#n)M= z%ABbEDfRcD<@X6{Kh9(&Ue)Pwf)M;5A-dRqER!wNBX>!;Q&4+~^^`hYXlElkp`dY$ zS+o(3&VvSokn#I)Zw(d4;yRj;pE#TXF;5{SKPaUnDuJo$P&?@j8YUg{0QMuq z=~UXond#~Sd@o+>6EYhtJIN$<OzgO9q_IlHc z_s`CMTq&di!PMfzsNs_{Ctmo3#tYXkqYv~*!cL`u`5?=%LAI&1p)cRoiVCRyLQ69m z|DZVv^c%$7Y1nzNJU}yOV{V3!hhq^lZEk9${%qZyje|{t$wVj<&dBDEB)6K3n>6(1 zkJ>FD+KEp}Y!!+e5y>y~YAJYFmwf8(}Yw`|^g%dQqQfYvAn0^B_Wpj_TZUYSLbtt8%#ot``XVW&C=|H~hcLuaD|J9sQA8{gN?dAj z5F@2LM6D&Fh|B#Qe&zm)>uBa3hh|5Q4z{VY*M5cQ6!s6d&%gchyZoWB@2>f?BguS2 z|BkNmb2_(+HlDDyV12Y>o(*(b92>#eE$9rOL}AKmRu2>|X9;wVC3d!$SOae$n~;Q0 z0ig&(0vT=1Nz}sFP|YwZ?vXshAEGIa!=U(dIB>Hug=30n!@YP+*cte4aFF_UVm7U% z9L_Egu4p>)b{HX4YGOuXf(G2p`FeA8ba+PVBYAxon z(ihTB<*)4vxgDT;%@-0RPZ-itJyeOgYF<1WjDL$d_WWlc^5pDQV`Ep%R!{D3(ay)1 z-dxK@F+I^MP3_Y$MG+;;Sm27H3=&xjHZ!%40=iNSqDxvws-qfhBq6IgV$JDQv2DmA z95;XD!I?9oqi1Fwd{83sLFE8#Gm;Q1v8heBeAXaGVj0X7Hi7!jn0=VFk|mD|trRl? z#drrkFsDXuSOQ>htCh)SQq`EcIf@VFkj4Zhwnkg=$xtera#-VSsj6MhQ3C|f9*Rle z!>_uyPPyH8w0o|#b*}qowVX?AFYbRa!$PBlX-OGtm>GgzO_yUGS=J-gfqEv3$p(L! zSx}{3Xzk*1D!-dDgLFD-4-r?1|tsvM`#2bg%SDM6Bhn$!)w} zF6T!SHYq|kPfs2kJK59+btkJe$L2F5&8VVU@ z_|zhf3KtNaTH|V~)BILXIPB@X)C;co$(b-Zkd<%0)QheZHjWj36D#b*3h5RnGi4*> zH7fer$h@L(2i&RdF8E`8UB&KVwlNlgbA;=?3n4lfa^m(t}T0I4kwX%)B> z(*97TFi3^@#Ps<-D$H=T9~~&k%eqQq2Xc1XMrijX;1fHE`6$n!hC$tAne8X&ZAa+S=BPBITDMAS5ZvTV$^1XXR9p)*aRA?pzENQm8S#Y_Px{n z`wFefZ454fDqxB&NOC`yiqTgX~5b z!$ts>p{X1KUg(&!K>3#1d0Hb|uq(7W;Z(O8K&lEUMUc=>wFvAgN=yUSJa9y7b6GM^ zd%CiNxj`9+2sMS9q=`z{SlM#33F}@FgD^-+a*6WDj@#&>vfFm-y#3VB(5c%OFPB>O z(MKanaq8TzuC86@rY5i6(bcu%>Q#L=wT7;ASB&uCN-MjW12;2Ze~PPxSsiO(uNS!a zQlbX+LVQz#{=i*AbXJ89J|QUK50x1Jm@DT12H9?g;8+cX zGJ}SCIs})usJaiKA!6^Dj1@nGEOfY?w zPJiS(6R(&=N6DW7E9F8W=zU=GH!Z%u`|H2%+tSg2ZgS{4Jal{l(o*{EjWOO3E>h_LrVfeheJcA%az4J4@T>v~&O~Q8o#x$K7s1NhyjD6(|BF8+}>) zrKP!{9-c`@bD^cLF;kyw$k9b3I2cvO>%`VuglQn^YXmn~^}hV*lqu+dI{z(a1paU^ z91INX&7%|`yP=e5yL@==+R3)Lqvc;yOTh07UNF;79}fisVP)v(C@SuPsmNS?Zsw+~ zW2d%sxmPy})VN*w9#-r|bg_dZK7@p*A;IZ)hRv{0iUtG^aetWVLt^q`I~>zME&%rq zq`fIw7(#XhxgM3o3$G?>T|-x??LKkd{cH5I{8R|nGQv=+*g|b>8@r!W<`8HO1khY^ z@&1)&hHkVetafQpeLdDtL@E*zJ;PNx#jk<_5qKa16$f*p^9o&zA?(PZ!M=R5CKPl! zKyGNkMG{?*8>ACLZSar#i@4mkC_;sz!IFpt)+uP2OYKRJ*MzjEeF~=dcTu9Tu^9Xl zTO-;PSg)v^-re_@O|@A9b|vZXBl~6haen7)?NwHj%Nh-tZwU`=?1*^&xqO7;f$nU! zyy$kiV!j`YjKx*nMu2Sgz4)4&B-i5rxRb7h(B0w(s$q%fEC4qPXbS zT=$*$R7b2f5=dkNKePl~ZrOG2pwc+K*=qLraIvIyxO?&IUMKX;e@Q6<&!6Jw=sx)c z>OP4Wm^iRX5w2%&FAhcTyGge+q2od$dVs>;HzN6qe3{==^ zYF~S@c0;^ga#bhrUbnQ%6hO>wl+Bkm77~hrvTB?{g`;dokpowpR^^1lrdTZCB7}z* zgp(-TtAT!;cWQ6RHD*!`5imIQ0t7vd@=-TdB^>Asks1-2umm#*SrcjMA#8|1%?-sI-1c{-Of)?S&&A${iHb_jTCoTQKb$U|Zs|V~M zb9wPv64dnXYVOm+$iHsY$;WKd$wvc&|LK z;6>hN7^}2FV7Ic#(s>daU}f5Dj_Ijh7q5J=J*nr`VNu#d^c@i8TGnGY@ZmLE}&dIuJJx(fba)*8U7$; z-;i%3#x_v}iy%7f6a<)8G_#k?OH5ep5ptUm5|qq$>31C?{kS3-xELdY$DDOAWSe#T|5P9vt{vv6G+Hb`mv#_@oxo#SUW}zSar$-zbX`SrMnK zN~K8Gr*LrG%Rj9=r@Ft+aK=aENr>o)FYvr7?@h~oQXKug;)%zh`m4G-VD2;*iX&4r zqK|DZ%`tc~XexdYJD`wEa3Du&R!>pf96|x6>`^Er!7a@>YGKsX0hg^0p$UZ6JXvp6 zbXr0G2bZpbD2^4T&>n2kO9(hC$Q6eJ=jI|0ylCJVn*{l{0TP9O@nu8Mz>2I_AS~Q2 zvA}Mq&L$WTlt-2jt8b?F!`KC$;N{AyFWQM)MYayP7VOn=_D=E4N}hiV*_SeW#V+<1 z+}efI1j;!m`%(w2(_s{DtJS+fEG) zU-^!`xb|TPn3nl?!nCBw4(^r|Y4o?2*=vIMQ-Rsl{a6Y2PthGgTBfwfw0kU#o+T23 zo*^@(9jKBdy4UIgFb`?{62wQeZ&`My6!u87kMUO&H;&@AKM}>kC5z&|ZW+a@Tn&UU zRy+pd3*Km~E#BsJo1$hE?l9GFm!YgMH=kW0z%&j`3w`)TuX=^^p#u&p-C)yhLl(x?4}hE zlqo<|01&X}No(QW15HvP5>1~({VK(k*uRQTs`|I<_y@<`B0hnGOw^YeukRJFwKLIp z{S7=>WfSN(xDOq7e5?WI8mLblV%w;XLbHGBQ^%|O)KPR>_NnVl^~yeV=o4t7rmvb^ zlP% zx}mNXF-Tk+gerzG50Qu#zK6r!!kwWjbz;hC6Gi^jgA_k&?@{$-?om9 zZGDeC(lIpD@yOX@nf9*6|M{QJ*_J(1+DU@IUwg7sZJjgCvz=`nUD3AA#)giWrc&!f z30uy3aDwXzoZ#vebx=?&3lNByysF9rZ^F@T&Z6muo6hJ{iXSeGh~*$SDr?u^Zwg^X z~sPSf~v;nZHfbSkJuveLDMO!79$_jW(6DJz?~7Z&Crc56b=!021TOL zJcW43$;^vQLR%HNQ@NbT|Gmi{-v0@E3Y8?byKl3(9Ch}0T}Fpi_PyI)=Wy9>yW6I? z94Xr;_QTrz&d=bII%`}%`o0@QtlahFw+S=fe$vJ5&Kmdke}t|)D7yODchHi8v$mz@ z_zx9Ga`vkG3se*UecTI8+k}-Xs^uJ*ZCP0qND)g$oLY+pKl&rrz9CORAVrosHwUE?hnZYLaJ6GCP0G$;xAc&gfk@~6cHh^2vH0}3sFEi5q&7CBjtGJX9zpE6vtN| za+J^dLm?!xZn`P#0L@sq1;+@S3D@_3tiYE_q$;>lF@!s%uLN4dCJY6I2}UZ510FJe9Id5@E_njpqRy%Ak))SEn8m~k0FXkSu)55ZekY^ z7>5v7sVGq}SS|XLcw7+KX^tyrD&Z=0_!q7Jjk+^LwShjmRac0O8s8I7_-bhVfl&N0 zU#s`AnvfJAvGUh>DTb0!bYR2CM{VW5M>$8Yt$YLmMe3X#n4cT5z>_wU00U=W67uZp@HIv){E{`daEc3cqVA`Q7d3YVm?j*PlN=et|9h?`q#)5gb*Z( zfQSQUgFbdg+QL3N3ZQ(>h$l4~|GfnyVYfctu<+i>nU$YdEziJ5a@2d=@NF%8WKbFR zI<1yk-{Rk_-^*F`5tcr0EmkLItAY=SG$D(QcazmKiZ$O4|ILp&s2+y?tjumljUV<& zS)el_G6(5iGY&4aj#);)e^>h6%>=AXq+F2&-(`#s-kXK+h&72XZZdcYi34=kNpF~-gI8Q5j zKLrDN(`%Bw$ct3Fo+N!y=|q(=Rf}+MIEHf>{_yk^Pg#C4oI88jW#jUEwmrB6DaFBYNo4Dz&uoF z`yxQ*qljt7GSo)V^!u^6FX`U_EyLK3tj{XDjaX7R%?-=KsabYS0Zkr{VTs9yA~$1vig$&A;)pCNEw$ixWy!L* zjj#csv~oBHLI8Of_<@SKjv9FZ3#pOZ*wz-McUSpL)yNj!!h3e{CkX=(VOF&H;tfO| z<$vp%ZrV1^$B$BTud1=_>n4v6T9*+GI2Tl-enrFCEPJQKS&r}^2*<skS$tH-U`}FivNSr}-`73cGrJZRy=xQI zOJMQENbQpFsm%IAHMvHe_%0Qzf3^lWLc`{kF6Vy$ZdcT&31PvHAhGwquTR6CqbZ)K z^c#$N>8}q&J`nL;htTMw^s2m_e^&f%^GB|u-UQSM=C?`{W)s4EBzt+$xxIZik<95Z8>mLG`ATcbrKF#5|OM8qx761SxY7($-SIv z*sRzc_+cw3N$E(WLblI-%^H^$Yz%ho>?ely<%@^6Y?+%WywQf1FK;LxH7r?|=lxwf ziiPc+v;6}DL_OFQ^<9`H)wMwnQlUp9(h)XpL2(-bXUJxrpt9dM>RqfjpNK$)=36zd z4TgXK)y5Dk!qHSngB@zlQD?4PPjgR$@Hx?e(rz&`)Wc~BIw(9kj8vuc!YNrJQMsqL zihY!a#ts+DUxef#fga|YaL&dbdfU+ceBt2e(1z*$w{4=0>OzwteOn&-me@3`9)X_O z@j)=v&>UHyT2~raF4T=h5uMlQ4h%QEX{r^2e}ZZjX4Ju9-}E{-tuUgsIo*IjdfuCt zWf5e(6gAEPV_{k7j4O>XI;knV5gEUgT2A=XC^2|7v65(*(eSdjWjyEic>MJ51$mRl zi(Q*RE5ZtuC|1;@t!QQS8&*VKGle2RiMcHHsx6z(_2Lrr08S9#q7Uf{Q%FGfgtZv7 zbwx0Ta;!pP$aQnene{H!?MS#{6S?7iyQ!r#RwySrr%tQYhZOP^5mUAAzPA<7B_-Yudc4q<0^yq`w(j>Z-q z!zeTV%;71S005<16Lvaey6F zZV0lR6fsKDzHvArR3PW5-~+AvbSNRutX4B6M@Wu?lmxs9xqWe@0Y+d4$|%VBEacmV zJBFJwwQb2Z96n3H#S$*45!*Ce(B)hNNv(4can-6ebHanhVr_(rJH#PoF1umkdav~t zwhU2QGIV^!6<^h@PoE8xs3EIMCTdn!$KhIU9Sx+l z(dMj)B6Vo}kS*rnHIT2zzu^miD8IG6XYb(WDe_ys5z)1`9{Zvz^Of6f%dcA(4!qle z^7p=Nov?t>{FUNypI4sn@}(z+dkW%gT?jtvP2iPLSrH6-brb5~kUK%O$|+{Yp?W>sRUOnD8x$hUa4Kd42``&Y8_WIfEy0&sz zQ2i*;`WTV^7*YI}nmhNt=fM7Vy`m(osoyHSSfjK^&{e4el#k=R(&E69P-OsvLo`*= zZ4)E3m|@gV3HPa>KUCERD#q6`+oTD$N&8FNCdQ$GDm}NH|M{`8BmJ-${b8Z$4vh?M zBu)2>sHrQ`dP(UiP53KNe&cdY$M2){6E;XAWYAIPtDxm>XasoY$&iQ`BT@v%mqQey z;~w2d2pZO{lYDPSdrcH^;%?rpSto@8D#xGz5Mn_)YE;faKhSY-t5wv@;hK58h44!b zys8#c{1yJl*rwo=ITCl8&4a<=xz-Q3e187PklXd)mW?B!5tG>wkC>-}o5v!)x0Ig_ z`@Y8;+wQhm%rPHj7X3bwlGv2`i5g^T3wtY=6b~9^mr4NZ)I<+ zDRso^Y?h!i));)fIm~PL;Axz{E;F?a} zkSBrKT2dpzo}eOH@+XWM%VZ)N@-%oGq#;3`geC$t6#zp*7^~V#N;eFO?N@30KPSwc z4Dm=g^lZTA3(&u3r3r-dCBZUkm}vj^FO4g4%&8W>zqp@VQPCQlPT;|0g+qb-8wj1c zF{A98T6z%q3o%ajlT(pZva7C(&eo#XhVCa9XcU@Xk3%8sX%x9aRIi>l@1tf`9qV%0 zna=iY>Eva7P*hd-UlCD;M^^w+t^^0kadzH%PAeE&QGf@8Pyrq? zMX~@72gwOqy?80$P*+s-QyMQ8+FF{@b*Ngf&p2lE@+%QsSgY{vk4>Za!yAMCKR%a2 z_^d^+>mz@BP6f2T9}&Vn&{Qkc5y+Z5z1oghfgLM5PE~h^`s<;I>Vi8Q4qH}mhss-n zhBR+eOQuoQL?;-Cb`J_TKYs;+m?A}T;z7!qaQg!vu19!}7G$O`jp znF(mpvpMY5U(ybg%R&~>hYQ328^nwQ5a(b4(lH1vNnk_3id+D)bhUn68X)O}wIFd1 zYbNdYwKb=EGTqf@(;eb$`pad8NVw_l0{KZw9GRl0|F5Iop=FBpOElbZM|c5!qa0?t z*K2>7oY6(M{r3)+%kg`=8`2EYS9vwCaS1hrWa?jXO<^82g)h5062$lOKUuM+tEmO6 zKXTJe5&mz~{cx(>dI?!DP~+!Bzqmg@vsu;4m3E=wkWW!JL6WasNeBggsg;EAw_$cy z=@lXE$SJ=_;s{RmAi`yuZh=%Tf2-nJKLp{WX_xT-dGDD|dr&B_Q!gSi{g5~dd&$(KhI3(@=`+xk1EL~mQd+s^!dH45uecy!9 zO)_Q_BPKiAhN>%InD7ijc1i{zxKBBQ5Gkv~OR$HcKF!|g=p-(3N(Ny?{eJ@^nr$R* z5jd*>U1koCp2dEKR^eJ~lWmCMSmew2oVP$XPGQblDb5!3pfH4<3l0Pl?0bL_~$1`BCdQ_y747Y3iv^8}xH)&WJg*njaW zUn)Isn9H-Xd_(PZ(Q^And35?$r>2YvJT;K4Hl zi$DsH5)+i0c-|YvjquE(hXOq_dXG{>k4M&p-buKB;%K=mG4IifSmwX*`J%JN_$M1)3*Ldjk<$7-HW3wNrU)PgheitlNhj!)N5Npb{u)@Ftu}H28dKwiZH=YyH}}r)-@F`tA*X z(ii;1ACbBRni25>ngJCvK-q`48@q~Q#)B)(@XsDh4A4pO8EBjMoya7n97N1MK3{_G zYq7=B_`CvM0G~wp1W<+v)~lHpP^HN)U#>bb*{W$AhM1&0`}G`K>{~p1v;#esPQex< zbNhti!-`oJ%XhEE%R)kc{FgjKQlQAv=ql(npwMzgt4m6tI+54v!A}b#y^_(I<))dS z^LBYQl_VEiM>YvZQ6%I}RBH7wd?TD=jJ{f;y?k;jYo~`|6C`Rrc(x?hU4&Xp&;X_P zoi)|fn1>}<@ATXk@p-rat1GaC9^t;3rC37E>p4&lUzr*#A+a{6;{X&w0UN6amXL$R zY&kkdPi;*j+){s~{m^g@-Vg_u=jd zLYYB`2_DAk?jt$J@lp9g6ZW8Lml7;)7UKZo14~1YVYa}mQwhJwBvqQlTwVk(H2pPGWVo*vsmo)dJ>7uqCF5J;essGm+YeT>LqHoz zloz4cBxN5ZOSIc&Q9VG8$E1X&^T*!!%wiiq2|rY9w=X#r^RVr7&Jj@xNMPZa~>*_h~=bErYrOUYl=#BFui@&asH-lM@ha+ln4-^ z;g!YfH_zO(dgc6mJ9pl@MV7bRyL0FJx364%)6C}Ui!0}J??Amg=AR>Oa=vfj??b5P z$NYC<{;OC@0u?0<>hZ%DpOc1)d3e?AicJBVm#?s*S_v$i%D2;&+18dItibM0RA=YX zP0#=`!3=)q%OspO0I1=y;hiSqM|f?Zc$0&@asVY4eO7w-njrCa9SxH^2E&BLF@D#f z6^HH~Cr4Fy@WRQM!%ZW{zi&@Bjc#ZILaOfl_1tai*WWfL-nVTSZJPdexd@9xE@3wi zHdY3eC!^$#4cmAHJ{XBi3D#NeV!(c|z&z(0qPsKM7>#&6@V zg5~7Kgs`-QBVI%a5Q^k(s?rb8c@AKE|j4ca6B4tvA1YDd@cJKuS{ zYsV@NIt8NGJeUq&bldDz51e=216R%7c2PJT)F{vSV!O}mn>$cE`WJt3w0K|+AM5}? zBd$}HziD|TSfoYSqJ7cmb@fG20kwD#YfCaQEt7>|RkkdyT%>at``lvfIV2a;^6ED_ zhs%_-j9kJqT<0^0ckiICzA`0FV>Gv&I+}K4r>Euf#Z^kB(?)YbtQM}aO{myUzzS%U77sX>$bkHV+s7&hG!#Rw^MK?wcz#GLJ%(Rc zkYrMNrSyPDv$}Nuo@6VOAfd584SxV(4iuz`VsQW&5nY*dLrir7PFhrh@1aOzr(x!B zG+@wsQwn`hdQ%-u9T7CQ!Q z=wVrL_2J3l;ko^{M0z9Rb6xpOojvCb^i1_NYb}AU(ao%--f?l^pzOP>4@KT?#1M!MARbANG76<_7tGav` ztJf$^NNbDJ9#p*7ql664iL_i4R8sVe?cus61&#PlPjkOPo4|1zF7$P`x5g(D6HwNz z5?VCb@z4e*DjRW#wcw$UIMFGK9#ckv5_xZkAC$Q}0q1aoHaXPl@ z&}7f*p13{uv+l`kpdq)WeUidzqdjA>uIc9X6)k=?wi|tronFJfs7HT&Z0;QbqtUw6A*Zk~09nno3e$D7>aUa1LoeQ%bOeplPE_ z7N$BqO4-sNUX6$-VuMEJg-GgU8%8c!+mf2NXzW>w8Or)?8cdMV_y2o(uzmf-`N8>t zf$ezB<>t-VnTrSecFwdvVb*M3AiVjszaP1NjD9_p-%%L3Fo!V9;DvdxEolw>6rI?q z6I5G@s4u~h%4k(9n~)@7wwSFJ?hUpQd=3BsX$r7qDK~)P{#-x}7y5fUvl*nlhC`?Y znqU(|yG8&%U-9E{5d;N}11lN21_ym1_ZJUk69HHEF8Ea61($cU^tQJ2T()6&+lqkA z8gyGd)`qRc{#A*I?prmuR^Kr(FgMq*YRvC+TQr}|;hmf}cTA@Mz< z{VSQV?q+kFc^2<`rQVMIOp|W4MMdD7#!k@=@x=K&rFT?TmH000NmO;x9%ko-Q0d*$ zmCfCD7r-g*Ed3j))a*LH-=RJ>bY2JR-CiuLPPI(EB;z4{vWya*cE;YaZ|dd)oksy6 z4m1g;=Da_*_sYS-+9rU96kFORk#;Y55p`sx%op_Rpk}NoteR+1i?t(H0cCl0a!O7k zA}Jy60ZLBrv#`qiBr|1q2x_mKv!v%uP1jnn+)$d*BGsv;Yi%&fqHf{RUJ9fY4(%fX>=6(BaF0g%jZyp-DnJ9|1j%oOgb?$8--hs)N_E7Z# z-#F!-Qsiv_vD8eIUfvkYn%mq(DG(!FQBN@Jr@l$U#I#CZ6Ro32>oWR~!wUkOS>nU= z0zZTgvGCSnx-J3$K2jxEcD)Hz2K?^SXT%>1#6*`7GPN)Q0LE~Vg^XpSEN}`IXiV&% z-I}HJ6zXg`*IHMBn6 zGMi^GD`8a<2!=1w)RxYaenT=t^x;9Y01~e@=YTJ+(T9gmY$fL)RVhkYUSL%PRWtk1 zl0H16i$OUA?leW2z<$A}%dlouUS((*oL5=Fp{>?7EAgr+X{xz@q`#v{2gLTW+{$2D zhAJT>k%dZUQLb4rD=1NdI2bui*-bh$wAQYk(VOqCAL$v*x2)~|7-wQP`E}HWU3_bC z?f5m`P{_M+Vso0Y%PuZ%NU>UmmTF_{(koil45<3XftGc>3b8eh&*AsTw&wBffpPL` zq*k=fjL8Oj1FZ`WG1XFn*%@Az>~mOPD+Eo_h1TvAr3m#qEqbhUPb4$$EB7K)Ph6mq-`+9Y?m`GFeG3J#fY3 zmez`35js8P5%C_^giQ( zuW5fhP7A_TkP6E?Vc#@0{gw^oPT1S~`*u(#Y<9m`8V{TTjA!Ri52i*bTWlfzvV>I1 zT)8e3@VT8Zt{Pc`&^|dC)C%(@WWw$Si+-4o=7ThvCq}yJ%d9$jDrI04#H}a!D4L3i z3Ih~1)tpof!v{71v1P7DRk+w`T+PDfrVkW}m9@|G^vq=G-HHR2!TlSUhqJKXjc&+f zHjFYW|Mc31{e#>-)8&6hpTwG~H29;a3QAO^k!}EKE2`4cyeh5jjjGb%UHTKM(w^zFOFkxEtC%KYxp(cOb9Ypc>$4$`rF>7P-Rwx2li>+bOkbM!~!`k<3emJqW=<(10O;I(d%(C^<}uH-HB?C7|ojQ> zvfitkzW7BGAfufh`Vbr=A@h@eLoTkM`q4)nCw0wfW9!+h&7p;Sr59L}FQhqarO%Z< zX|h{1aEG?i4+xxuOTnix=RTgBjR+3XF098;Sc>t%$d}|j3UV^!H1ZHFmNpA=vnAxw zBR9K`;^YB1u_SNW>wp`}OrD(zNkFe8i?DhCN@m}w^?!lxtqAFBdUj^dz-0d7StM9$ zdj9;bh+hQ!gO)X{Wp<=YB}3cC;w(P4eYi|SLmOII>AOL%a)8c%{oTA`dwTKr$_Vl; zCMEPUTM61B+X4Mjh^Rr&R3OUx^f^nle+M^adc}B9p!S6U*lSF4cOCk zoUaK#{ubjner25hv~nJifVe~FLPqnl_OJUo!R=?0G*;s6AoC|sd~3c`s1gw6LIde!*AQ#)9P!PKzQ!d^nM zlod-$a@e5hU^7)72;c#3EFGl9DGqyDGxx2h^c0?=Qs;`=ovyE)=xgoV_EVIT2AR^I z^riFdk4-*6r?4N=>%S~I6^AS0{Os3;HnnuFX(QFR7cX`N?Uo@4K)GeRHpkr)f)S&Y zA~k8M6<$UsK2ng&4w=)k(phZn75V%XYiIW5^ZRB7rjn_tTy8Rzn%w#6n{GIoVb`GhYH{5l{A-veK$s$_4dVtz1e3{Ep#aN?FbA!BkaLgc zAiacq75EiEO}g4zsA;m%Dh9=%c07&YtKfPrXFTGmge}CMQTQv2*{&?V;gDnPQwNFx z6eYE<@0#7(CdLntht(r(E1OY97bsj*9J(-{7>M_+im$lZJbJ~1HyrkMuE}nh>{-)F ztT;84%1s040s68Ae?Z^1e6rZ*_Ka=rSb6y{(Ja|?JFr^yQi9ei&SPjW<3TRuUgLB^ zmONiAU=|JB4L+WLz5*(-5Ll!T~JC{smBIu&Lq4c_LN62eLxGM%Hz+>9#so& zpjFtQm+p46wQ&016RcNdi`5?Tme9}G6}$&%t_|#yBzcLFMliN65wkW{!h&&GfRRQK zQYg2^N|0W`$B2#zP|3r9z5-1H{EAxA(*O+#AgZN|XqCYl%KkBmbC7vzVPmVWoj@cq z)VZOzcdoN@uJ_Z#DcCLwNtXWZ9c!+gn7DT0&}up;zQ-#t(tX0={Z)Lm`p^VqGd+P0 z>xwu65O0de+~#Gw)PpIxOSL&gBm3>vgmVePA^mB^|I{tAZF zwx+Xlbz9r&hyKTV#I#V zGoZ`DK@aK&&mbe8E44LDLj&AHEzu;6YbJqezcW7O7DXT@fW_fMpGcZ3swRIzR7R&z$IKj%0jPGS!WeF`Q)9%M{fFo$ z6&$rn(8o-`NTOd5@*4c(XZS&}3x!CCT@d^W{|&Oz_%E(F!!HmCMFF}nKni&(L2u2( zyAoZs3#L}Lyx7X8`&ywtiS-=7qJh%5FLr>lI+(z$l`r4K#1$iKbl=MMsn(XMjt;y| zcjUMB_HNDNmGx~INaWC>WFXl$!PqL(imO(w+&eO|cjc<9R!nuwbc?m`p6Os4doRf6 zF6d=FTL#dCeIijvC36iEy}8wpz8zRqS#dLu{O9t7;(m%F3M!vd+!Rj(Um(Nge)RXG z)c_@w=@#yFusw3R8zfu%{00MmLxTNbZd(rj1Did!Z6Gm_!2j`lJf5dxTXX%}2Jkuq zjuyvp{uOpn=i;xS3BLz;9nJ8ePZW!OD_qGW%!G#=c@o%F;LcTJafE6Rqji+TlJ3d$ zBpU0Qqsx&DV)fHV_C)47lkt!_>FZvU(@CBZ(7DPy@_yobzk3fI+Eyv zUo@W0#^dcQ8;>Lskw`M>Y{;kDb53VdOIxAP*3#s34rEjLhLPr26h*4_vF5Jg}`+L zLIfTNCl>KQgYx*p>XhS1Fki&Id4z}99+E{326&=*B{OGj#*!{u^(O4T&= z_KvRM*epAO5DlSg*EO{?q?=uidmJv!8cq$Z#j}M0j^2i6LtMSsB=ipABFMEW za}jF&!);+d^OMqn!NDD9xJ)nz0+W7|-(!1k;9G9L-~CNM$li%cnVTAYY*QzYq z3|BxcNFZo2d0>L2?cTZ)utQ0c$+BBnQ3-={!yg=1P@)BzqbjEwg=UgFgt$V(@0v;g zWtz~RT3E(n++FBVG~pDEFoeB9bymulpo3ez0h9S5)zK79wz$1+ZDyn}-Q@cV#}_<$ zkcOz)RLf&(#1%;|v|_MmCJmVq+H9b)SaRmU;QL&Sr9GOMAn5QKk&BVk0U@8)g z*Ec3jvgYvkp~U1?CnE85YM9+Pm80sTx>UTbzRBxOMCx=Dv8$l3#@^V9o@lqz+1r%L zH4;}!W7iynmp&%(I;c~$m3?@cN$%?9Pt({yOW|=rTS1kU6^p@$-uYO|iftve0ZWkS z%P|y_J?ssrPgwnSx1OTv=#=--!|aIHQ$U)%cG7P5d0y1q9#6sJz4rl$E#3t}`3y#+ z3QsLs_R4}eGBkIQRHjnLbllR=k02B0{F;+}->TWsuep?U#l7-#4tp}VFc=`K2urCr zaJ{trK3GE;`F`nlxPw)GKl^6sh{$;;9T7PX=wki4{M{wz{)nIZ0d}!CSN>e(+>XW9 zl@O>SE#D`u%N)kJA35z@ZSmL0AFLe%>`=fb-^1?bmRrZ-uQA4&Ye{6e(f402e=k4J ze}Av>4F76;kJ-XAhH?FW;NQR3`2IV__qX6LlX@3ll^z8HbQ*IC!~o1GSUL)3%#xEi zX->I|#h|#W!pT%9jCOO$a3q-uhf?AyJAoK^8KNYO#d=&7HZwOJaV;io1m|$`zIK&M zfg|#~7rr0e@H`376RzH@D)3Y>UtnZa$nAgXC ze*gu%A9_`S^((Ox2ZZ&TSi~s!_kW2ISmeiEKR|e-;(N%p49I%FbRC{Ggt$|8v4fYD z!Ll#`Z3}6-*v*l!3%KwIN~9tw)BuEBAu$Ui$hf^^%)*)8?+GVqUXtIYzu{E!+a#~> zUQCwwG8Hzy#246SuwQYX#<|`3Q!q7$zr71*CABOamrJ zQMA`S>)j!roeXEagC^JJ-gc!p40 zCe=8YN>6t7uFmkt+m+MM+n`o7!U~EcXlYW9BX+wZ5gS<9n;B2HuI?gF!{ok^!o|hG z+3}|Osi;rqGnJ%e!b~+Icl&qperRzYm*evO$~^7o^MpzmR*>#vp8|C)zXz(@2@<%n zQoBJUk#Hix3Z&N%X<)js`+QJCUMG!k+5H4-z{5PWHE}Jv7_B=ur=CgV8sh_vjRWz< z9P`CfRqtIwej{DHuy1&h;ppaOZF(YBkB;5|*AO4U=56=bV zDs^|YwlpQ{!l;i$BM!2a#3K;kWLi{>hC=kVOn+8u-k?Mj%W;tlmtO|L>jrPoVq3Kl zc_<-7^erpB40*3eTVlR7c85EnYa3ViLIG7Xr<%-u_Da}e^Oy@(S@-yYW>f2W#bP4L zMxxPdhlPqXnYG{T$M4JxD?%#7&qzm%EtLnOpC+!{aRNQXLxNtb-78oSIjyV$!PVRnt?G#j)X`e6F{< zy{$EqN;K3*!h{3k04%43#0ej!he54^q)rh=4=EfeA-D7S>KlkDtXf~btcVHkkJZ{I z-gso3D<7l0t#EKd!$wLA-qd6Y`82O7^_3Tts|F*ykh$NQMqwJ3uQmuM_&{uqia>R22`R*CEyU`l~h@_c-Oi;eLZ_N0w*}LnPsFa~LVccm@3$ zbZaGdHmBU@RG)QtXlPiCXu9RE?XlfEin)P8}W^9tk_yU__QD^&!-YKV+b~LHY$T*b2V~w6H5F}=^NT%Rp zAn+Ub>ZraAwi4}Ta}uVBL5RJ0Yfx>HilVKQb1Dw7=?6B@_S^6PcPj<_8S*ckeBk5; z$|T=#@^}bduni~ELwa`Y$yuJojuE;r!pZUo(W-_NdqlmFUPt^zF~kNo98dS)BZNgo zO%yb2C}V_W4FrQDL$W&B%HUEo+CDz849W@VjWJpzrJw`T$+cO1D9wi&I*vblsL(2b z6QZ+DjL+y5FX~CS@D&;Dd_+hyckv#>x*79Dqai39 zJ!5onJB#4DY56NJA%-P?Wj`JD%I(14=#skRuSj2(?|e#vCiE4yf!;|zk`VHp7#Agh z^EbeL1>P?};k$UWG*yg~%w@;Sa2{chl)Kaz^EU^Y!Gtkb(r1NIF_0!)65bx6Z0pt> z`G;VG)oewcpvxVv_r*S5{n!}u#pL!_I1tAJx%KqWNT@k`%13&RQMp}uQt6`6OE2-! zbNMC)jhTO4_DhEq9drJb#c#@=6VgxqoH6HPatOb!!!vb>{8F`61V)RF>N@a_-q6&H zrSS9K1cq9K6dc|10aqMjt}8!+96DvpWQCLV{kWWjWz{LQ7h7AsJP!<0$p+Vpsf5)+ zkgQF~P-nOklZgi6G?{P@1Iz{NvMkXIMT{Rl{W!Z*^;r&?O>c5W5Gvol-=zN&4qU4! z=0j>2J+=4mS3;`#Q-{;;_!%;`?6&8hrz|lXvY^VJA9Glrf8K(!=9*DQppRkHap;v0 zg{O>~T!t;_y54B7a26V)rXiPgNowUrGDxUTr+-6VpjL>6#}LgAtA~)zqFihBepl0# ztFB@QmGNViYb`!XXnX#7lg+H@;h&l9X0yZcQ&m0nsKbeaSVPRabQ1F(k|4>Ee<&pR zVAbP*1O!C!Xpi-sVM?D_ZURrAt?IqPbT61xr`-$l6J}xKUdzwI?Aae!JQ`M~RnAMl zgao3hI9QxswDF~T3UXq|ZG_4q%~DxnE#P!{hjL{F@RJY`^x#6}$ERmi4T%+A-Qm5> zr7=4gneNc!yr#Z~q||%Jr}-XYc6f*Rr7=*Cxv~~%*u12bRkcWB2-O?Rsa^-MM~7F= zd)4<4%Y2XO1&{yD;vXPUBT|rZH2sCdIziuveg5Y zZ}}Wgn3T^ud@i5z#Ag&AY>&%rcAJ%51NWTOQhI;sVUyj3dr1*=RM7an8j8{KT2*fZ zs;JzE-=>n5g4@8;I*c29<_X2;^4mYJn4WN$y)L_n?Phx|R+rab`g1GpTDs3qe5#p! zTDnheQsBps4huiWVK5K#K$PHep$R?f`WE27wHFn=Q_Qt|)9$kD0xE*)G@6bav<%nA_WP#xeH19Jh zq+XA41k8&lVzWY?B?lMf@&x^AkE=&`CCJwTy#yv3R7?0xp$UR|xmTekF|nND1FHpd zV6{Aff+5CiLCtM0E!uB8D}=|MP(c1fFyda=9NKXf6b}r4Z1KyW>hrOyS4merv4R^8 zB7Bor<{7z>BZ{g=s5k{B9o2b2GbpnHcZM1Dc{B?+15PLEYg@>7btD?~RiRaooY=WE z5wJ5?$jtCsdt@ZwS}-9-nFnQRo@M!Muy*Sa8M4=#{3`01!>&@v9XAI~oGUR*B!kn) z6iQAw)h7RFeBo`04K7FF+$o|%dYC;ckANP=rMDJ=rGciZ$wnkgS*%^{ve}}5H&9_u zf{+cdMPP_otuj?E4z4#5a=MTKV^mPkP&o%;fxaY=vGUngOk=dKmr28g-toTi&W_d$ z_5FmAi=s9MrjlC}d01?a=zL3sLP!e&{cwW`Xfc#!OqLT#65#V#Ers@v2b1kOZ#j6T7pEqxr-G$fV-f;ACO4ttA$P20$%v1$Bb+4CE=jN~da@9292mOs7f3LGUKdn$mo` z;v}j=BL8S5+t9+ghA&&|hs1G3EP+cVfKAWNpP$-0xMKgRf%C`wcC%ZJ*#a};>*ix? zCl1|^S+%3X=|QJPAUY+-+qJ04F^%9uzzl_ew)Xoyw#2WUVoblMcO7r!zFniI*^7CVa~xHH(%VMLO8)IU{jeD7(#nN zV-_&;eQ*{4VaQ~bxFeE+f66Yj%2NiE+5A8zO$ha4!vhofm0cas6LQEzX^u2i5b7~k za37c1m>x1%x>w-!Lv1lEuv1I4gcVZ$mSxu*T3I|em6;y)2Rt4>8^5OXOJddR1SvEB z-Z$6PHP_d-v8!w22nY5<#cfc#e&sc*rw@*Y+hZ>ih-2w3s}GJ}PpR>K&FlYi*QS2{ zgTDSvUC3}lP?7$TB#)rl)q$$wPSDg^>DDJ&d1z5^y%r95i()RMzzY5tG; zJrvIdY%ce?FyKN!tB02iaPXKLIDbVHf~N;z62<&+?@M#4F&2#k(e1!#hk(qmjFHH| zX((TD!_<1pI7fr0*Bi(XVLZTENI`8mNwjkOdU}67cSJqF(2G|K)xS)t?D2Y16-uj5 zVvKq0i>Hto*CC-N6tQJ+>dP@uXkdtMtHwba_1p4lejJn zk}6yk?RsMs65jHg+EDB>nqH*g6;ZqPeNxqduFn(tN`LodI{sz2hp(d{%iLE1#E_S0 z(1+>eI#_!qNb0*Gsc#qhCp7qLo?JOTtN?S*&_RJ5K{_a!2G{DKPD2N^OE#+=;N?qo zN)=9bp^H+Ri$Sg$E^`5>lxO>WD}G;C=J%$fG=g)u0O_Xm2+}b=fLb;4oUTwi`elBM zm9~?PT7C}FRgI_Tx@uDBsxxaQCzjP$UH@P8)qF<8>4iU&y}P2lTFzzDnyh_CzBI$z zH9U=CvR@n`fT5T z&YBUqsSwe~P=lg0hVn(>O%@4$p(US?Rly}%KExC5A^)LFLB`|9=v%petfl+Nn&P&# zohv&uTcgK~M2uD2zb#9u$D@|`Yt4HWU4N(;>}zjoPVP8wa!<$_MF`&7_;w}KvvoMT zuHNQc)mxlk;ntAbVYM}A$wI31l;%>sUe%=?p%?m4I^MH$Wwaw<_c;3#<7*0CZnw!C z)g}RwK>kZfz8HL$EYn^I$hGMh++|&z2s+Ae2LT+#h6Rye{-Pu|x8CZ2S&G21pm=Id zTo?BB`g_r4NLXjqgs{$*%n4fGlFTlvH#J}hlq{3sXbLRFY$Od9eoMk+x1ETzf|ei? zT7qsj`Q5s+^y;<{d-tf9tS^x4U8iFFVMg6zDkK; z(Ee6+ceb_wR}aw;Xn+GmIbiQZCjAwy59`l0=yHf$Xn}p@LTmt*Vj?IXrz#4Tis!?g zfW_nuyKPQg%WWT?A3@1^(59L6{^nF6;R!li{?KbSpqF@6Env2!fu~%0H`jLJ^ji9H z^}Pnod}haSO40Fw%h$m8{TH1GAA z@gL@rl8;(IGj+%X8;~d;(&*MB6di1F9wvd?6V+fobPq$jU>2b;3CX=O6_93(twH9j zTTUsY5)b5gO#*oYYCnCHO7OMN>b}i63w(%xBC@T0)9SB#A{MjiVMR}!+2V4S{&wkS zf`cKVSh%G3f|J+wf^9;zi6>;a-E8xC!T@2kYwoc5b~+eFc8QE!i{Hp!R0MiC zYVTkH0MX8b0s)3UOt}J55-Cjt8UrmZ5$9$)TBKBK$qX}{9+E5jm9BK<><9#f$mA+d zLcsD)ufG26TesXXgYsB?@RA}@_I0Fy5R2Cx2*7+`?uLnp8|F%2)%bMJiXA;YJ64pg z^6FRP2`}PL_#nsgL5xFbCp;Gk^)JW?pL~9k$gSB#j&TJ!?UMX{?$0B^SXw<0RnL3Yauf%>cQb^dt>nF04E4 z{wiq`q0zPXN$xxPo( zf6?A29#C@AN_+M3YuBy0X8b?VO=lNQ$ju>j8+rMaXO2qUK=j*CM6?%z0*nnn3l1g& zCIw9c(CwR)cAJeObLUWr$C;eytpL!Fo(>o)_1&>CUu_*(wFAle2eOFKR;mbQOG zN5_W#N8af}e@^=M4it3+*Oh*8riaA(Vv#wTL>%Q$gGh8e{zNl(&aXSsLh6K_)DYz$ zX&+|z+FYpo1CSLOaHz}z4=knuzZa1}aCatch!(r)H_EYd|H-yuW~k7fO(qbh9xF@@ zP4;zX2ixsr^=wytX*e?N8A*w|H5FRGg5U)TSmQwf$nLS_NGm0nAaamH~TKe9FG)q<(9miAQu zneqnX9b1dkdhnxY8@tn8`jQs)$_{Et6#xWP@JTwEPQxTov;`nMZfT8lUU4I~4@?KB zcHkT`Bqy^myA7#kuxJ@FbI58_$gRnhyo%(+1g#hALz>Mxadbr(QIXD-gY^)NsgzxJqQFV!@XHJv1uh`MJ)8(1s=j~x)Zw!OrU*0)^Dc9p=F!ZhUjvsJ zIaIsxQS+EfFW`}Wwg8M~`RkP@k>Qn+lqrRBQ-8)d^X;-ZFqflKDCZGmH zc69ob?Y6yCJQPfk?cG?!+qMjpo9y6MvvUr^Oe4}|Ym zbk!9!-LJpjoCta>A2;bPPtbH<_&!VE8NzOte?+^|=a!!c$6elqx5$T3f$LhhTYh_8 zBD650dGXav3%7fG>=L)8x#=Hh6q-JvE%J!sfOP9;`{J;b$X+AkJ&oQuNF%tGdc+&D zk)lBm6u>Hi#zPH01{vdN>5kcKMa)4R~_bnNA*~kyN$W5Ue)ba?4@6ZShC!<<7oNK z2SeKL*{41A2r-q`v&Wqdf4#f3@%PB<0H^Dfet>ECPi!Ov@AFkFv$u%Raw>y5>F z>g&6IP~X$g*p2rMv7Q)a{|3xIr!`aB&1IJ?mJcj5Db7OD~{vI37E;m~}$N;b|{Lsa|(NZY1v=$1b zalEubWT6<;DSw$N4PB0fF&DlZEVQ%~bTi}0J|(9l;O7_9i83YwM`K`n2%2G#EHUKr5GF&4rN|O9 z;y#t2^mlnXqINdB$2!U)mSqqjKmB+grIftb{sx8CB!!+G&hMb0`M#X0l|XGMXGa<$f+NY^!AND{+q8+#nJMb_n;VggUVyritw~((a-yCeF@r2A^ zVsHsY{eE_R=^g%zpB)PZH`^=$E$I4j_C*z*Z~IBj9}?L=)ob~!xK=Y=L+B?~bB-OS(Lwue7fJ6W|3F+ z-;$~Hn&d^!+=*EuWv=uZnbG{*ta0w|E9d^#Dd+wdoy#c;l^LApbVxwdujMz8v{nUi zGt4wr&|(>|2!{fP^I6J)C}MCn4rJ^LgOgH$1$X$Omqq!V{yok(?x00mmNnrZXOtmE_XiQHp~iXi`v>K;jcQTcpXH6oGrJrCfwD}0Z(@^$n`2;T@^+Qxps z^U{Ipz_U9WgW&9y+#`jQ)(bc?hXS*x#-mH_I>lYPy#ek4zu_c<*N zc#R~}HvR?(S>#2R;l6SCy9sL2&r zj)|I@T)AzKAPoiwxAymME!}B+;D`FBruy-ZUE4o7*`J%7+}po(u;%3I`*r;5oN*fd zV!bW_AwP%eqDGP~2*-fAqnrS~Q7Rx)VCFFeGPCLeGaC%&ja*=GdTn^;{Pw$$|+Oj`T#-U;37@-u~Ux7n8h=ht3;wI@$p!$6~kCbf-R?o?4OKaN;p08w^$P(yeY><+^0B>+JhH*7LVN|WT) zg9!HqP#bKZslg5tDlwAJ`DmLH$_PkTW@%Hv=>%|Kvx1_Xg_G=sS3)3Oi~MC3|1C^d zoPZD9Aa`Rnn}Cn@0QAw&sjEuv5b^{v1tO&euHKj~a`6z8q2zY#R4>8R&rnQKZsp7) zR7#UnQ$9hTUO%5+mAAeAR;bn}=i&F{*snm5gCv6w0nZHQG4wCkb0liH>sXO+@A^7I z2$K>lP81a)wm=y5W#)kUCkQ^V0)VnP6ta=ru)$vBV<~0X`F4Bh6YTpmikCxPw-b!& zOR9^g3--cQs@v@-T}i7dq?087hq41+ZQzBMD??y7F$o5xB;AIAD)JVri~^dMiRLM) zi|pY#1_v|=S)R8jcnYmgS*9|}$&m8_V9B~P>zmoduuNuY!g8gzsX;bqb85O%eNFzl z%Spu<3pO2dF=t>oMx-SCmauOL$FU1F@eIvT_mbEj{b;5w`(xK1Iw{z_{aQZ!0F6Qk3wUZB2DIb)#H38BOXzAKV;pP$0jjg6EJT z8sH?rcg;X9Boa2b3xMQQ<$J)UO7+NfUT4Rtnhz^snRwG` z1_T`-KfW%S?8+-H&i@oe=szySeS{Lpe!#y4E+qC%Gxp6o?3*+!rS-+NMqUa?31oB> zES9Ro&}&hor`X{5lg!)j2h}y?z?L>r-)uOb23iKFj*-#_sDOoRkwhhdEX2V{t(?F) zBL>#rvQWW=!X-1=?93&Fy<6RL*C3fBfQUks~;>}vM##;eyRcE{~Sh7-nREcZ@_aRxe2`C80Tk1eVi}Iv_W`a z#mBrRPJGpAH*^555hH^3I#EA-sOWnIZy@rm!A{Na{z%F=w@2fkup$t*c$SX|@p8CG zp_WKUuCcGrcy zabH|mtsV$=p??aV#jREd;8SJVlAJPV0&n>JDc0?vm}dc|5g$k-@{RF4z%Cje8 zZ5dyKz%}syDaJ3mga1^V#{oACERKOhsRO^qw@a}&^6|t#99$i2d z^^2Phpd_}NC~J;M1UZEmoiPsD!AS5g>tPiOk$9~Yr6w=~w=c{P50(FVJ2(6uaylP! z&VZ+?+ljGmcY0tHKIHUh&IjQitQJ#?osjt{=^hcq+ zg?S;Jro!KM6Mx6Nh$eI85#^yG5>X1Zkw#%`v;@~6PioGG945;{PFf_~pIAKZ@6=~- zcaP15Z?I;L?X>^4(@OH0k=A34et>u!Mg-cR!63S5rqLi3miD`OHzgxtG%cBA9PS_u z91B@Qq`nvjTV#o_0n^*Pq>Vv8qPa?)z zSxFBL(>!k9?(zsPS@Yr^Q1~+#IpU;A6;d%p3k&@PbB7tFwEq;iJNe8~XtC<#?FJ>71W;;-Q=m<4GRG76_^H@&(mR!Jlq^ z;p6iv;N%GR3IvVpSlL_S_iI?+h# zFEU4vljp#~RG$py#n~TisqJPwsMTY6gC`Y1odU7+1m*=aZ?Vj?e>(N4OD%Y6IBXtr z-b~gw{ln9@E{05v;8@er7HNBNYY4#yuqQJT63yWJFq`*42ZUGBZa3{g>cb#MCRL#I zC{P@%Ry3>!|3Vtxn$>`g*syxbnk_3v(Sg1V&GVqMfj+0%w9ppHsfp#53b5}G>#t?* zqV*X^n^>BvPxiZVN~*Ekbnx?UU%U40pFeou3vXZByJZN9`1tzFh8tH+-846M(^M!J z?~AQCbbRNo z!SAQ1Z<>27-iY&e9zV3Ae4PLyM0M!V!UlV`4plBhySHQUck;)OC%Z!0D@r-w#$oav zY+A#mOMD)Hc*t&|Eam0C<;kGSeSx1LQ^^Cs{GL<-a0|fDBe$Jd%pJBo$xC4bk`-XJ zWJJi2G&4PjTqOfl8deR?g?)o91VdxuhUb;Ukk<$X3Wd7TdWA5fS;(tnP5QUy|3|1fV6J3I?q<2I1giz5 zUuO$EcS62z;d0`-@b{sf_;G{&FD~wmF}rn~0Tvc}0IAt#>rt4uWR)N=B(xwzkuYW( z5Z5dgz9q1}(8NyP2b3$&-qxH73BWyLAHa4Y!NG@bsLVVagdaufeT}uxIX1UEjZzM7 z;29V~r*4N|49w#JH67|sBdI%asE{q0)^rX{D&}+Gj5XiP=UOtE7JNhM5eF1Y44j14 zNwWq3wRkSkn2STz>6~kf&vpWK4DabXLaN9m@QQOgHpOBaJ20#44xB806$ca%`jbMN z9L5T#;0akLUBEpt>%dVEKC+TFPP2*D9bl!1aUem@Vlr8_Q8Ovi9wbUzOdAV>%}q?2 z7$00$Sl89jlyA;Q0h$Y00e3Y;i^ywJb&Ql#=t2L+G#NAwl#yDNLx^)m_ZI5b5@?Xw z=O?dTF|u#ffk~&?1Dx)jwO!LK*>yb=t!mWalAYt1Zo2!*kg_g@I@mFnL#j!$L$<3i$LQT7SKhsO?yjqVD|q+Z zW?X2ZZ~nT8iR<_;CngTh_hL@Ua}_`&s97pV>!kyHzAlM`Wn|sW07(^Dj0j)aIQ=0q zNi%4MUkMHFLA@p!AQ(1_#kLK9Y!;+YT5Oh$!$X-gb#0lwk2)X`Mp0^wL$F|m2134S)c6N9w+m-+=}a0zfu*KtMnRu z^)KxE9@+Dp`~rPoEv0{QdYI4caKL5ZApfIp@ej&-ftI3yg4RgeqzjAlkjfSV8V1-6 zFx_Cw*-4@sTx=PtS+{n0h)lT68`o}Iw{2p4XwC2%pkX(`fGhY4*nS8*Qs#=`eGx1S zQAZ0N)nHqI!l#0k3<;xZ`56fuw{kW!?q57X3;Vgs4{B&BXS3K< zua;_W9!aG}ngc21AR;r@T9<5MFOfOTIUHV7!zttcAq0ON4*9z-#DHxJomMM*XKtQ4 z_1IiNmm0P>UD4EVbMtUgbvm7vh*R~c*3ylJ(LE1YF|Z0(Y8px3LI){1@<~Nljb9XnX0bBw>5g2#) zC=@lo4g8H$mX{@kr-pO-r^_uD6e7zxV8`c9GxT^br&{Lx%?P+;K?FvmH+}` zQGY4`4!sm0pmHzRBo%|Ua`)#QfXr!E0!X}J@~Hje)xnH9XfTRJ;iEwz>@BDesT~`W z9soASNvsL4O6F=Ro|=@=+NxwC*Rs(VuslO@4E8FDI|SB;z}=9gSzPM@c>E~t$5B1W z5M+qSP+1r)?T|qATCT>rdU@LQ)laCmARCz9kp5DvkL@C3u=I!)TG$KSWIK1nd{|h3 zq>KCk{;WotY229Lv7tmFftGxH(AdPYEe!|>L>SzbSPyX=L%XPiq)9Wv-A@exg@95c z-$!G6mWKH(jdbC19(^Qp^b*W#mb{;kF%)Km9wbp7I3@)0eH(daF)hS4$(%!iLKI#D z0BTymA;`reW`R7?9e2!>VHeT92Qv^78wSN&UWD0knd)jg|l;j@*q>! zZf8gqffonx!$vaG@KClbhJpsc!TWmJ3fY2@aRID0tP)BZNcvY+Da5KIOBwh?FoKp0 zr$(m2;JF5R8rMPuNB8=j?B8HhhLJPpDm8@UFVI1BPJ%P{I5g1QHaI~0!NLgSj2IX6 zNO+CDiWWu-_sW}Smn@8Ub(ehQ0uZGcB^tn<_3Af+v2%xL4i}jvZIymWE;r7V@v;^X z#W=jAGsQKT6soWS%tWD+D%tYtL^5fSqbPz4f_&iw=H#13T^7a3{a)~{IE$mhVvPfs zo2#ir5F}f6KvbY2NC0A<0qRZVku@-R)3+q^Y{w>@feU=A=kdru3rpT?lTE(gH@(^OR)Zqx6V) z?c&owPZ@^QYLWl$YjnPWwt~pi*M;v=zLH%C?4WbU%i#m9=sh#Et|y5S)$r2kNcpdZBf^DII5f%0Sk0E&xMeO<&LpYk}baUfkuJ?PNow>S@S zx79T^3Pllx9EObRgKSUp>qear>^xRhp%S5*Eg33=u9zGU3gT||Ysm3swj6ZGC-Nk7G((tP(!`HDbQ4v@zu#WUCwiFLs`vu z;WRS(mxnMzZZauCfD9O{{))?8e%RggaUb zLoIEC`E016A*44n$QuXS+6D*PS_>VGXfK0f)XKA2K7{O&R}kGaI03iK5U$5}ls`_I z1}S5tX^7rrhFTOIHA2J2kDgvVa*a+&Rsl}+&u zEf9gUvO7aAx5d#S9|}2K4zG_4iNJdV!RZqDQj7f5L_cHtNIozdVjqWO=Kg;g$ufLyV+%R`Bi_mu6JUj)fSX5 z2zu({R*XpV^q<7YQWSc`yTPzM`fma)qsLdoId%W{}!vw9d53?)5BPzS;j2SAV?wz)quz`qc@}Bo3Qy}7D#9Fp$dfV!3 z>r^|6A<*-yxv3MKheKXCyJEQ%z&Wv}61o=P_kX)|LU|W5|6BN4QuQPl=r)q(v~m)y zToqiIZ(^Qnhua7>gKj$}zuW0B0G1n@0kEvR>lB3L*l2%(Xi{P?NDs>Qf;YAE`z7cW z$FQ$uI05iy4?JxWb~qT7q%|i@_AqB0-W+j@vY9|NSIAiLYd&8?UxK|b-4F=^w9@Bk zD$wq@Ux!tjRwlk0MG%ki%0$#wBG|b1- z9m7V)=10cOv1+KFr!HN@CBY^p)nNmG2O7D%L`0Pt5quAnOZJx7_=MU5BDUN&uuAth zk(&va?uHP6_8b~^y5Dc}^tU#RzSLRo(VY&bE8s&bNpmRL>eiyZCRbOYzKeP?WER8B zi#)d`DaXgzMr`O95AR`;3|UnfAr-&^pr?j8iTT2axLyKA1nwlFJs4(LMR)){jUKmV z0?J#EH8$Fiykk~PNhf>*u9k+M}VA^%0Z8a}?+0MmJ zR(Jm&AxkUkiMb-t@kX-rm+*IcvF-IlRg}^`*}>kn_?Lf#d@xqckPq9qxy0qeUy^7b z5kY%=j78Y9?7~0dx`qaBT=!zCj$lRp8Y$O2;JSnkxd~}|f3#+ATz4Z~QT`E`cPv(^ zEg^k%4*Dwf^*IMU7<;B>{m=L6LQ!=>Po1N*4AN7ftrALOGc1vviuF%gUCfBst*5PS zcDfDe(MvR?E0^-4 z20j}fh=e#FsL_Sa#0Rj!maqX;vs%Ley)j%L4mveQvcd&AVxEv%<^mQy+S*WM0(=fG zf;ISi$Tvd=4?y0OZ4pBUN5eELfm%`yZ^bwei(J;hD=N6%0W1wt!ClS^FLcNk1w1tx zxQ!HWSvp_7n%yJ6@FzfUyTPrR8%#aITF#gI{$3tWx(ns-^c3-o61yKE7{3E1a z?frIhi1U=6%q$dH{;+u7FOKZ{k8k#BhaD0{wMRCcU5_$e8lf1 zCdqZ^vUEzFlXOC^Ul7u1sr)2PR4biM7f$e7^|-ty)V$~rPDr9ddoDvZ#eR-22U|!s z=~}Q=CyaZ=6o&lrs}N0CoB!YKtU~LV>@2;pQU8BwXGPUoJFBr%^P_aLY-eTUL%Q=+ zJIiUWv9o$)2M~KT;0U^a&I`~-32!;p)U+JgtG*=F&$PG5_^v=W_2 z%>NtsJkbM-KS{j{%Tf^|uxbtinV%1m9G_=kOyvEPDkhBk^*FOTqoA z;{zphqX}1Aw5{q)B8-wVsz>nqR~0mRpno{sv(&xByLkQS%F{>6ikxsbmPh>)jJj3o zFZP^uysgpJa~|(fak_`WV6;w)IpQHk>#>JjE`!k$W!}iXq`Uwha|`XK6wp7&%S^!} z#RQaIvdU%j*scWD3DYvs7;cHQlwHr2ZaYg=Uha0rqb}V}^UL_5pBDQG4Rpv`zl>A* z!>8}38`%}g|Hh~@(m=7#@Qc6kh%=GQxs7<~hFWgG&sKL-Xu0uzqPnA~wnohIr%dRo z45~uRZm1wLG%)0X42ex(VMlEw*dWi20tuIjZ7itkvVhz;7o$1v?`>~OH-$$cBju;4 z6bGMS-p{(9mVdMwZ>ie?Z>cXEHN2(EtjsaPfr_^EaG=tLTH-*Jq50p)u2DXTCm)iE z#Zj?R^o&GMz)}K8D6$Ia=`HX?Ri3t|E8B`5XG4*pb9~w}IK(R(YR@us_n}C}?GC`# zLVAkWQP5Mwj*7T6zN40T=JJlJRb9l6N|A4WUV2gb2yBu!#EqwYQH?;~LS2vGR(KK7 z;~&%eQe0$5NQ>u7e}NbY6ZAbQdRWr+-UjTDKmK~Ve1XCaUob$|n+W?N5d=ufP+PV@e>-O7D-uIguj8*zChPqOiZ=~$@9$+8 z`vYt*JT0g66G4KXhaq!D6!w!V%b17M&4dYT2Ev(r!e#%R-Nj!>C)+LECB2XR4y$p;~_!Ang>B2Mz)y@pW!U7E=jkzgV4aBrAqgL zDqe+7;$sc0ixuG&zla@TH?w!KN7!c=)!+Y^y(Y`DUv5G(y=i%me69Sv{IW8sd`5Xj z`JVD)C-nDxunpV(H|=4^Xx*V^7@yT|rn+X>s#wtuw!Z`*(4 z$#nZR`xW*l>`&WYbua{nB93OqTOGf2c00$No18nH&pTgM*Qq6f7JbX_jf&C)12BC z?G^7j?+)*N?+xBNz4!b4z9wJJH}2cy+v$7Jzr+7t|D*mV{m=NH3wQ&`Kwn^0;QYX4 zfolVA3)~aEYlGW^@73LUqu#BL>znjP^Yhxnq%7 zQ>-gC6q|}|jO~bB9y=5}61y|@-q<6tPsTnMdnWe1*ozG-8$Q(7-&ky%Y24a)N#nuB zn;P$Ge6aCjjsMX2e|ozT_@;`je`fAYDQjCOWhuf<)0DPJLkoqrP@p7TfEFmFrAaH2 zv?*Iz3N711_N`V?Kvr25Q5MCU0tzUK;>vS*E}-B7R8df$iVKP;`Tld0)`Ixn@B4o5 zd&%!)&di*dIcMg~naRw(GpDxc>l|#yL<%(X?=jw~~ zNA=%D*dm5S6h(}Qc-k<`aM?$lZ|#BcG3aBl2|Qg~-d1zZ;w4C;`Qo zXdGlLFuIJBjPs3m8`m3m7@sg6F}`ek$M~`Fo2ZJYMNuoF9_-q?>*}t*MvsX0L?4ZQ zHTvD?PogiyWXBZ7l*CMmnH94*=5lOg>@riJse>uf)XnsO=@C<{=~>eW(<#$=(?3mD z%{p_4`8IQmxuuMr6~&dsO^tiWLY5Ymc9sZ>#gbyl zu;f~bE!!-6El*lr=$6~!)WKBNlTJGP0mVw zJo#WsRLa_vEh+m_p6ngjyS7hapT|>!QfpFIr=Co`(06Fxcl#~tcd_5q{w4h<_dl9u zN$ZuCl{O;HomQ20XWEK1?||R|`T;QmdJlMMz^MUW4EV*`)Y{QH+gfAYWPQwf)cTtB zjJ3}CrS*H;DBFp2Q+iVRl=PYD^V9E6Uzfo%)@5wX*qw1OQ_c*|%*tG!`Dx}?nLlJ+ z%aXF1XO(14%6dQR?7(gV)j@*?{W7@!;F`e~vz^)da}sk>b9N4CH6(0^en`xa{X+*1 zeQsF7uzk55b0c!yx%-BP4PTR&mbZC?VZ`zg_m4Q2pOHT#|KWT!|M~pa^54$?xFEY= zWPz(-d_h&g`vspCd{c0Bq&zZcWZB4yk#j~aAGx|PurRc+Q(yDkNu+kJ4b&9o=h-34x^yWBm~z1V%Pd!u`&+v9%0{igd&SyI{jvLj>Kj9E42?AWxi8^@j+w_@Cu zai5MKGXClDmnU?YFk`~S@`Q3n`IPdd<(ta)mOowo_woWIPvRA z6_XZBdSuc&lWmiSO};Ss$0?ns`tR6}MNcsd&BOhl*=c4O6qHR!*HW_0g$^ zr(T%)-L$6D@~63{RZiPm8BjU4a!cjOs&-XibTAW=8akmu8mE3Z3=P z?4h%_&;EUm@y=#<&YK%Kch%f)=X&SOo_A&b_ywI8JhqT69JBEHqWc#;yST$*{o?tH zUtIk4l3q*hS@PD>w54N~u2{Nb>EUHz%S_99FPpIJk>%mbM=yVN`ODP-)oIoDRiC`8 z?tbl_sC$;KkXP)wH}&2n_r=|JeC61cpRd}m>hsm1t4mf_ zuRd{qtNX{_|MxYeYmTq^VXd^b`Pw#X`>&n1cGueX*6G&S*R5H1e7&?jWBrEpFK+0# zVZw$z8|pTOZtS~p&c@>pw0mIu1G^r0Zxd}YZ?bRNu<4b}9XIE1zJK%4&6l?H-ZEy( zQ(LZX&DlC@>#1#hw^eSNv#oA>-|cH2Z2e%(gBKp^`_PdcJ@9qxSh!>Nj`I&Uc^Kyo zVg$wNLdWf8J0`q1IwIna&E*Hk{U3#?cr*5|%FaQVITQwPvoMr9Uvo#X zFfWe!^?r*m3GUZ$^L>DO@569yg)hDiIJO+TpYt&kr@?*5L%?heM)_SgPOEbB4b(z9 ziSklz1pd0;zY+EG-+(IWDGBhGB`>6Y+ztK!A`CkZ?pwk->dkKjqHQyg?mh~-8Swm= z`#%k+uOO@q1m6sJ57fe|p+^4>-lKTl7yAcqv}XBF|s{pm#i^4lJ*zr}mM z-~ukA&4qpp#u)ZIEQbWg>nbrEcg@s$%F-xFW`rrkfKS^cuoUtU%+mJgGXsPaFH)|;J}NIAHfs& z7Pdl@)#umjfo4m6_A&Yv_29D^^)d=qq-{$HLKf6RU#*V_eHOYr3a73er8ZjIV{8!Z zF4{uqkv5+1@#`$cZhjSch;~c@F2>Dc7#GFZ2mO#%QHs!6sRrrGpfe)>1KtWL$6En? ztdKV19@uKHSt`R#)JK~)_Ya1G&ce!o+i(MAYdrTq39sZ#hQ9^} z+oX6`NM`8tZy2*P&>!2vO@bSX_P9pv=>zIcb%5j8Wqg$)P-k6PGnCy7bt`nxfHzc+ zwi|7GeF%9ksXbwJl0$MT)4FC{mqkQ0fPuk;sn?L7$ zNAsWbo?-v+zE58wpAL92r32n~Xy^Tn-p6jsqdr&5SL7Yi05P!L4DrcL7YGk(6E@7fDZniPAU`fP zX((Idk2kJw@CzBRf=os9ERci1|ABppt2Bmw$EqllS(=JB14$R|HUG9x{zZf|{$Qn3 z=JVJ}(m{)A(D#Y5eJ;BLIz6y4?RH$UoJKUKKFsFG%b;UK*SNn7?A|KGwuyLLg3%I= zqOF&Te~V(>G!(z0e4O6hGz#wLv;hAl#{g?d-6)0Tv4L1cy^pQNI;zUv#5(F1>?+)&&tb9qns=KZ8(#~5uUsZyYwn}Fu zLWxr1l^#lOB~|ICq+>;|N_kLuSb0?0t?W~3m4nI=<)~h#Z=(;>N9d#U7X2OiwfbEV zJR$%$MYN7+8__YMOGHeBDPmxRE26CHrE47TCW%i=)JQz_rtNI7Cg*ncgeK?b>`V45 zkLB^2oKN$YA?F8JYz}~&A&}D`MQL*Ogq&57a|z_US6U_QkoHI(=>+5?Ib4pE`^f2X zi9A7`Ca;vY%X{Q~@{{s0`S0>u@<(!={Ee<-=LL{+JLGJm;OPfV&hARe4RY>K9)X;D z6_0WNYnRX5AZM|DWrLg{kh4QXXTO}z2zS?u*O=EUx%jJSfAIh}K3*Nm7Vh=mz4r;% z_qkqoeW!+%`U7Io2lY6ut^;(VHCFLMya&AbNc9fDb6v$RW(C(hM87Wq2u=StpYuNv z)jd(STaeW)tox+ypLMJ2D)B9>+gcY@mxR#%b?JX(QrEsNq%QdUujkL6zj_|w=O>+S zdY;bxLUisUL3QrTxzp#K6xf+B0`BtnqB?l5vt|602$xbN(f2i1N|P2z)tV0)iLiU{ ze*0G8|MN#$gLo}Y{7Sn3kXJ(9atrJcq|2Fdjyy)LK%35z7s<=yYI(E#kgUot%ddmx zJ&~hskq)E4pFg?A&(b+qg)hmA?Xdvd>(QQtv(7A% z8JP(^CWj4SBUmwWvKee9yOYgD-9IVm`BU7>-{ZUa`}|9OntvljNFAhXsUy1wXDSfx zzzLUzNuBxcIE8Mbl!+55+VjVxL3}-1!B6lld^6w5_d@G9HHH2KV|TM7dTCEscM~k_ zP@F6@2VhJNxj#-1y%mcLOf{S#;DNSN0#%u{rf#$-xofn;M%XasAA z7mnJ}K-PltF#pWKJSdZeQUT_`g{%|1jU22C6*DpOR_JyXL8F*~oGc3e(xb`6x>6~N zp}EXPV_6){VFPF}8${J?DAllBx{D2?ds#lM!i^&<*+{yN70?EZ80+z*_d0ev?PJqv zFYbTd%u48SRzSs zA>JYWgch(&Sc7+972e0__#-9JuXuZ{6=tAqXfjKrJDHX4X2a zjo4PLV7MCqBiK}yL`T^Y$t1-}gQbB|mXsq6mvW^%X{gjqikG@$^hlBtVPE5@E8EO=!NT7QTfdU6Vr$r1wt;PA53o&a3){{1u*cY5_Bh+eJlHo> z*;DKpc9dOYmoOT9#lB(RvhUds>__$!`&qohj<;HM*liEw&GD3AGakajcsuqTb{gBW zuX!*J;;pgc7|L6691p{OVOOvN*_1uUJFsIMrz7!j_5$z3?q~mG$N6pSMc$dc#JjMU zxx!xIdfea}!CvDAc7jK;zjGsdoky`Zcvto&k7jT27@SWM%iiWD_6~cO$Kh;m3pcZq zyc;{kfqlTcv(vl>JHr#%hjWevY5wU-3))Q~nvhh#5?f6pZn`jTDL#n||cqid)>I7W^0fJ^u~=X<#JHib@6c z42Pm*AEH*nv(9w%NHm5aC zWoA`zj)_yb*`PP*<5bD4xc5t;ZOLj=+t?JR)9T@&Hmk=d*;H=JpQWfR3_xryw<_n( zs)Z6E8&zM{NiRZcTeW4@P6|+iwHD7|BF>;vuD#4rivuvU0%fx*nbfv6yC_c$v)TLv z;fh;PkL9XzR8eg-YiY|U%}@g}?0Qu)I`WF`AP%pwD{5{og3=t}ikd92WQRlX_^81V zZbH)geTo_{;^PJ7v0S@?+Ng0UYO`Fs6Ct>{QLi==STBL~a)vu`y=6FROKo8*RVmM| zQnn!0!;dq~It#3Gw(C$Zl?sYOIx2BE+%AX8Ob&-%0*B&;JO-;HPSu%}3`LcVF38lx zmTOm=7_4fb!HO0@5@(zmpj9_&LUDVVlvouJDZ~x;u`hmA*_lzQ>SFbXv?(=84a)Mw z>x`(O;dW{AiM^v0qSC~x>Q~= zMrEa7L~Rlqr#3Y!g4AoUb{zY;%5~+~5LA1t+S_%C(SogPV zK~e^qDBPfT#6pRK%pT4&RJSWVP7O9g1VvGUY=eblK+r;Ju<+%<7p%2c2r>%RDn&sZ zl!9?J#O73LoQfKPYKv1_o3r!n9@(Alh*Vpa8D_<)ZOqxj?b#!If#G_Dx6#5w%^qrP zE3kW7x3;OwWmQ8=qRTzT7wowvB9x=1CrI_&<7DO zlAtGxSO+A@0{>YEy|JVdzuQ@WJb048bS?lqRI`5MP;Kz zw~15DjUvMuBB%Ny;~GUqHAGJHMJi@egG_%Vu#okjPgWslWBK%uPXS*MkWaV<$S2%L z$R}JQ^g>c3-tj3Zkfi3UgJuR zQ2uQ8~oIY>J-K$ZMc2Etmu^R z{c@D9qr)mpZZlYKln)LJnNBqTt$ky^Mb}~`-|!^coNj}v!{`dDC)-@%z?}{liks88 zz#0YuL#8V^+<+1?AtxNI6y$e{LcoZy%>n4dXbc?`4nxUJoFGS+7`6lx5`O(A^^dZk zEUEQ%p@0Kjl)o+vsi>yD4N+<{*bqg@G-QcFMJx8JkJE(l)wD|ac8ijVkzH`leSyfd zp()e=BYcAp)i8I+Oat9?v0P(Pt# zHR$Po#Ty#bqQ-;83{7OA#!En86s*i1J$i$Vl=L=t)XV2(CQFW^DuKQQ6`XF zAWR^`&9zJm$pfN=j1V+gh{_i<0x1wQ0vRc21X5_mk`>v2*@0n@2j(#EXTGo^V7{K2*?5*Jwn9pqYWheH(I}srj@NvwWyXG24d<^1mUUzP>Ey z_)tM`rwufju3tOu!|rL&CdgMg13utaV8iK#pO$qCOGBpQDko72~`M)CMFy7tUobHKa)x+_Jq1x{EM+^U9;8jto~^M*<7aKE*NA*LY?cSaku*w)@FQtO-Jv95}EtV)L=pDVz9 z>Dyzy316u_TO>eZB8ZNl)8d1l0G|U~T)PqA59e5eXzs_wg-ET%?uOhHv_E1M&xbSY zRf!wqL^z%=V4eK9M9D1HkIUHmEAitx8p)RU@c@LM@!{a11@_{!e8599TnXyK8|BF) zToc;5ux$L;aaB3uC$DVm^og!%)+rO+c+!3fRp8#nX*dvaEY>iqNWt1>Jl50_faN2k z46dM>gf-47psOMmz6$Qrm#qtlUp*E48g_FX#A$r|k?zm=`Z)cA zVx-1%CFBs?DmRp*Xtgy49Ef_Hf_fV7mna%iCV(gGiEC~m(#4?;<55#7Soi&Nxi@oG zh;r-OH>Ux!qLhiKJxORYbbm8i{#GB1IM}5U=MdreQBAMKnLva!eLfTFBv9zE=3q!N zYgq_iuofDM-$0EHF-+`9KO-oR8Ta|2pT01WM%)?Y-cH9z{H9T_o^6oj|NhhD^5yTp z$7X?dQ6Te@&$F<(7oAb|`>PrAE|Gr6!r=e8jCSopQ4wCYC=k06KF>lNVt0+M`Tf<1 JTq2=N`X5W*U?2bh literal 0 HcmV?d00001 diff --git a/test/subset/data/expected/basics/Comfortaa-Regular-new.drop-hints-retain-gids.retain-all-codepoint.ttf b/test/subset/data/expected/basics/Comfortaa-Regular-new.drop-hints-retain-gids.retain-all-codepoint.ttf new file mode 100644 index 0000000000000000000000000000000000000000..e3c0727608e1bba1fbd10fb11a71f915f8c7ea3b GIT binary patch literal 65976 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 literal 0 HcmV?d00001 diff --git a/test/subset/data/expected/basics/Comfortaa-Regular-new.drop-hints.retain-all-codepoint.ttf b/test/subset/data/expected/basics/Comfortaa-Regular-new.drop-hints.retain-all-codepoint.ttf new file mode 100644 index 0000000000000000000000000000000000000000..6425ecfd1e19375f43ed9df41b120d6b24705fa4 GIT binary patch literal 65936 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 s3$YU5M5o}@^1!hsk}lmay+ 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

9IXu)~NY;gdP6x;hEx1Uc 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%0AkxotE_%eY=BkV*8 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 Ls}Z?aLYee`<`X$b literal 0 HcmV?d00001 diff --git a/test/subset/data/expected/basics/Comfortaa-Regular-new.retain-gids.retain-all-codepoint.ttf b/test/subset/data/expected/basics/Comfortaa-Regular-new.retain-gids.retain-all-codepoint.ttf new file mode 100644 index 0000000000000000000000000000000000000000..cc2805a019468f70af028e141aed87ef4974a4e9 GIT binary patch literal 97244 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 Gr2hdZS#A^n literal 0 HcmV?d00001 diff --git a/test/subset/data/expected/basics/Roboto-Regular.abc.default.retain-all-codepoint.ttf b/test/subset/data/expected/basics/Roboto-Regular.abc.default.retain-all-codepoint.ttf new file mode 100644 index 0000000000000000000000000000000000000000..12d92081b31eda6deaf2aa8b62e69c0535dfe225 GIT binary patch literal 2168 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 = gs->len; From 1f94388516befe137d265c261f687a47ce6f8e69 Mon Sep 17 00:00:00 2001 From: Ebrahim Byagowi Date: Tue, 16 Jul 2019 11:24:29 +0430 Subject: [PATCH 11/78] [usp] define atfree callback only if used --- src/hb-uniscribe.cc | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/hb-uniscribe.cc b/src/hb-uniscribe.cc index 5c7ff8744..b113ed4cf 100644 --- a/src/hb-uniscribe.cc +++ b/src/hb-uniscribe.cc @@ -245,8 +245,9 @@ struct hb_uniscribe_shaper_funcs_t } }; - +#if HB_USE_ATEXIT static void free_static_uniscribe_shaper_funcs (); +#endif static struct hb_uniscribe_shaper_funcs_lazy_loader_t : hb_lazy_loader_t From c184180228540c23405aaa03b6b571bb41103b45 Mon Sep 17 00:00:00 2001 From: Ali Javadi Date: Tue, 16 Jul 2019 22:10:24 +0430 Subject: [PATCH 12/78] Fix C++20 compile warning on implicit capture of this with '=' default capture (#1833) Happens when compiled with -std=c++2a, the fix just makes the captures explicit to resolve the issue. Just adding this in addition to = doesn't work in C++11. src/hb-ot-layout-gpos-table.hh:737:18: warning: implicit capture of 'this' with a capture default of '=' is deprecated [-Wdeprecated-this-capture] { return (this+_).intersects (glyphs, valueFormat); }) ^ src/hb-ot-layout-gpos-table.hh:736:16: note: add an explicit capture of 'this' to capture '*this' by reference | hb_map ([=] (const OffsetTo &_) ^ , this --- src/hb-ot-layout-gpos-table.hh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/hb-ot-layout-gpos-table.hh b/src/hb-ot-layout-gpos-table.hh index f4be42c1d..5c219802c 100644 --- a/src/hb-ot-layout-gpos-table.hh +++ b/src/hb-ot-layout-gpos-table.hh @@ -733,7 +733,7 @@ struct PairPosFormat1 + hb_zip (this+coverage, pairSet) | hb_filter (*glyphs, hb_first) | hb_map (hb_second) - | hb_map ([=] (const OffsetTo &_) + | hb_map ([glyphs, this] (const OffsetTo &_) { return (this+_).intersects (glyphs, valueFormat); }) | hb_any ; From 25e2562fdff6c14a9cb70999a1ad71ee1bdff494 Mon Sep 17 00:00:00 2001 From: Behdad Esfahbod Date: Wed, 17 Jul 2019 09:35:56 -0700 Subject: [PATCH 13/78] [amalgam] Fix redundant-declaration warning/error --- src/hb-unicode.cc | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/hb-unicode.cc b/src/hb-unicode.cc index e2deaa240..9a8184063 100644 --- a/src/hb-unicode.cc +++ b/src/hb-unicode.cc @@ -126,8 +126,12 @@ hb_unicode_decompose_compatibility_nil (hb_unicode_funcs_t *ufuncs HB_UNUSED } #endif -extern "C" hb_unicode_funcs_t *hb_glib_get_unicode_funcs (); -extern "C" hb_unicode_funcs_t *hb_icu_get_unicode_funcs (); +#if !defined(HB_NO_UNICODE_FUNCS) && defined(HAVE_GLIB) +#include "hb-glib.h" +#endif +#if !defined(HB_NO_UNICODE_FUNCS) && defined(HAVE_ICU) && defined(HAVE_ICU_BUILTIN) +#include "hb-icu.h" +#endif hb_unicode_funcs_t * hb_unicode_funcs_get_default () From 6a6bf7b7bc4a0b375fcf04ff7c674bf76e6d51aa Mon Sep 17 00:00:00 2001 From: Ebrahim Byagowi Date: Wed, 17 Jul 2019 21:22:38 +0430 Subject: [PATCH 14/78] Downgrade -Wdeprecated-declarations to warning Fixes #1834 at least till fix of #1829 --- src/hb.hh | 1 + 1 file changed, 1 insertion(+) diff --git a/src/hb.hh b/src/hb.hh index bee39cd46..f8b5e70a8 100644 --- a/src/hb.hh +++ b/src/hb.hh @@ -98,6 +98,7 @@ #ifndef HB_NO_PRAGMA_GCC_DIAGNOSTIC_WARNING #pragma GCC diagnostic warning "-Wbuiltin-macro-redefined" #pragma GCC diagnostic warning "-Wdeprecated" +#pragma GCC diagnostic warning "-Wdeprecated-declarations" #pragma GCC diagnostic warning "-Wdisabled-optimization" #pragma GCC diagnostic warning "-Wdouble-promotion" #pragma GCC diagnostic warning "-Wformat=2" From ee05627aff2993c51ed8a4bff3170450c000a28a Mon Sep 17 00:00:00 2001 From: Ebrahim Byagowi Date: Wed, 17 Jul 2019 21:28:25 +0430 Subject: [PATCH 15/78] Improve syntax to make out linux-arm64 a little happy Decided to apply is we did the same on other places however this won't fix all of its complains --- src/hb-subset-plan.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/hb-subset-plan.cc b/src/hb-subset-plan.cc index 6b33c17b6..e244da199 100644 --- a/src/hb-subset-plan.cc +++ b/src/hb-subset-plan.cc @@ -179,7 +179,7 @@ _create_old_gid_to_new_gid_map (const hb_face_t *face, unsigned max_glyph = + hb_iter (all_gids_to_retain) - | hb_reduce (hb_max, 0) + | hb_reduce (hb_max, 0u) ; *num_glyphs = max_glyph + 1; } From b8e90ca1a10fbd472eda1aa8cc3797011da52356 Mon Sep 17 00:00:00 2001 From: Ebrahim Byagowi Date: Wed, 17 Jul 2019 21:38:19 +0430 Subject: [PATCH 16/78] Revert previous change Interestingly all of the bots disagreed with the change and the complain is... weird. --- src/hb-subset-plan.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/hb-subset-plan.cc b/src/hb-subset-plan.cc index e244da199..6b33c17b6 100644 --- a/src/hb-subset-plan.cc +++ b/src/hb-subset-plan.cc @@ -179,7 +179,7 @@ _create_old_gid_to_new_gid_map (const hb_face_t *face, unsigned max_glyph = + hb_iter (all_gids_to_retain) - | hb_reduce (hb_max, 0u) + | hb_reduce (hb_max, 0) ; *num_glyphs = max_glyph + 1; } From 4552864c82c876da738ec3bf772cc089216f2fd2 Mon Sep 17 00:00:00 2001 From: Ebrahim Byagowi Date: Wed, 17 Jul 2019 22:08:39 +0430 Subject: [PATCH 17/78] [ci] Disable -linux-arm64 bot This is its failure https://circleci.com/gh/harfbuzz/harfbuzz/99864 Trying to fix like ee05627, interestingly, makes the bot and the others to fail like this https://circleci.com/gh/harfbuzz/harfbuzz/99841 --- .circleci/config.yml | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 6ad98d237..566a4af8f 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -275,13 +275,13 @@ jobs: - run: cmake -Bbuild -H. -GNinja -DCMAKE_CXX_FLAGS="-DHB_TINY" -DHB_BUILD_TESTS=OFF - run: ninja -Cbuild - crosscompile-cmake-notest-linux-arm64: - docker: - - image: dockcross/linux-arm64 - steps: - - checkout - - run: cmake -Bbuild -H. -GNinja -DHB_BUILD_TESTS=OFF - - run: ninja -Cbuild + #crosscompile-cmake-notest-linux-arm64: + # docker: + # - image: dockcross/linux-arm64 + # steps: + # - checkout + # - run: cmake -Bbuild -H. -GNinja -DHB_BUILD_TESTS=OFF + # - run: ninja -Cbuild crosscompile-cmake-notest-linux-mips: docker: @@ -337,6 +337,6 @@ workflows: ## cmake - crosscompile-cmake-notest-android-arm - crosscompile-cmake-notest-browser-asmjs-hb_tiny - - crosscompile-cmake-notest-linux-arm64 + #- crosscompile-cmake-notest-linux-arm64 - crosscompile-cmake-notest-linux-mips #- crosscompile-cmake-notest-windows-x64 From 576065b4429109359c3af491b34b9ab0c6b149ee Mon Sep 17 00:00:00 2001 From: Behdad Esfahbod Date: Wed, 17 Jul 2019 11:19:34 -0700 Subject: [PATCH 18/78] [iter] Fix reduce type deduction --- src/hb-iter.hh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/hb-iter.hh b/src/hb-iter.hh index 5df433375..c820c8fb4 100644 --- a/src/hb-iter.hh +++ b/src/hb-iter.hh @@ -480,7 +480,7 @@ struct hb_reduce_t template + typename AccuT = hb_remove_reference> AccuT operator () (Iter it) { From 6157bbe5127bbcbd17348622601976cffcd11c63 Mon Sep 17 00:00:00 2001 From: Behdad Esfahbod Date: Wed, 17 Jul 2019 11:20:08 -0700 Subject: [PATCH 19/78] Revert "Revert previous change" This reverts commit b8e90ca1a10fbd472eda1aa8cc3797011da52356. Works now. --- src/hb-subset-plan.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/hb-subset-plan.cc b/src/hb-subset-plan.cc index 6b33c17b6..e244da199 100644 --- a/src/hb-subset-plan.cc +++ b/src/hb-subset-plan.cc @@ -179,7 +179,7 @@ _create_old_gid_to_new_gid_map (const hb_face_t *face, unsigned max_glyph = + hb_iter (all_gids_to_retain) - | hb_reduce (hb_max, 0) + | hb_reduce (hb_max, 0u) ; *num_glyphs = max_glyph + 1; } From 504bb17287c978d60a4a515555852465319f74ed Mon Sep 17 00:00:00 2001 From: Ebrahim Byagowi Date: Wed, 17 Jul 2019 22:57:46 +0430 Subject: [PATCH 20/78] [ci] Bring back -linux-arm64 bot Let's see if 576065b has fixed it --- .circleci/config.yml | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 566a4af8f..6ad98d237 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -275,13 +275,13 @@ jobs: - run: cmake -Bbuild -H. -GNinja -DCMAKE_CXX_FLAGS="-DHB_TINY" -DHB_BUILD_TESTS=OFF - run: ninja -Cbuild - #crosscompile-cmake-notest-linux-arm64: - # docker: - # - image: dockcross/linux-arm64 - # steps: - # - checkout - # - run: cmake -Bbuild -H. -GNinja -DHB_BUILD_TESTS=OFF - # - run: ninja -Cbuild + crosscompile-cmake-notest-linux-arm64: + docker: + - image: dockcross/linux-arm64 + steps: + - checkout + - run: cmake -Bbuild -H. -GNinja -DHB_BUILD_TESTS=OFF + - run: ninja -Cbuild crosscompile-cmake-notest-linux-mips: docker: @@ -337,6 +337,6 @@ workflows: ## cmake - crosscompile-cmake-notest-android-arm - crosscompile-cmake-notest-browser-asmjs-hb_tiny - #- crosscompile-cmake-notest-linux-arm64 + - crosscompile-cmake-notest-linux-arm64 - crosscompile-cmake-notest-linux-mips #- crosscompile-cmake-notest-windows-x64 From ed67efcc8c3638c625b2904833af3f27ef51db14 Mon Sep 17 00:00:00 2001 From: David Corbett Date: Mon, 17 Jun 2019 10:16:24 -0400 Subject: [PATCH 21/78] Revert "[Myanmar] Prevent reordering between Asat and Dot below" This reverts commit 1c8654ead41ca746d577549c92d2a41c594ab639. --- src/hb-unicode.hh | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/hb-unicode.hh b/src/hb-unicode.hh index 9b181c11c..0c355f111 100644 --- a/src/hb-unicode.hh +++ b/src/hb-unicode.hh @@ -105,9 +105,6 @@ HB_UNICODE_FUNCS_IMPLEMENT_CALLBACKS_SIMPLE unsigned int modified_combining_class (hb_codepoint_t u) { - /* XXX This hack belongs to the Myanmar shaper. */ - if (unlikely (u == 0x1037u)) u = 0x103Au; - /* XXX This hack belongs to the USE shaper (for Tai Tham): * Reorder SAKOT to ensure it comes after any tone marks. */ if (unlikely (u == 0x1A60u)) return 254; From 4cba7bdae94d21ae780b5a71186c5d6da0800fa2 Mon Sep 17 00:00:00 2001 From: blueshade7 Date: Thu, 18 Jul 2019 14:03:33 -0700 Subject: [PATCH 22/78] regenerate Confortaa subset test expected results --- ...gular-new.default.retain-all-codepoint.ttf | Bin 97204 -> 182944 bytes ...hints-retain-gids.retain-all-codepoint.ttf | Bin 65976 -> 151740 bytes ...ar-new.drop-hints.retain-all-codepoint.ttf | Bin 65936 -> 151676 bytes ...ular-new.name-ids.retain-all-codepoint.ttf | Bin 96948 -> 182688 bytes ...r-new.retain-gids.retain-all-codepoint.ttf | Bin 97244 -> 183008 bytes 5 files changed, 0 insertions(+), 0 deletions(-) diff --git a/test/subset/data/expected/basics/Comfortaa-Regular-new.default.retain-all-codepoint.ttf b/test/subset/data/expected/basics/Comfortaa-Regular-new.default.retain-all-codepoint.ttf index 5de8d898119a25f52c9d9ba39b16ce6b84779025..1e2d19f7905ea1955073637e3c4036f950dbf474 100644 GIT binary patch delta 86654 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%0DQOWb6r{0yl_Cx*f=4bVsNG#dS3v@jFEQuN7 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≠MQ)9REh>j#o~U6cUxbr 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

u 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�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 delta 243 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 delta 243 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%0DQOWb6r{0yl_Cx*f=4bVsNG#dS3v@jFEQuN7 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≠MQ)9REh>j#o~U6cUxbr zi+K4y>++iShhc4W+G!xQ}TGhgM+lTFXNJ zzfGAIZ7YOsg5%R&k50ZUE*8na;20*rIVDJ=&TEP={H<)EB&MEvZ`_do;UP*iLMBDb z7q%+ZGQAg23x@4gtI%o?ZR0AD#ZJ8xygohkp4!{04~Q8^n1GH+F0WNdsDZOX*Re!w zJWxU6cBlOPFzRY0MQP)o2{`%P#AC8X{DNUKgG^IF7Ywv^Mt7_cHw^KA#Y)^fkj#DrOD1Hhj#Sl!#cC~~+yz6eEK^AE>H1~rqp8}}cZEhPbI#_{= zvk$+#ziMLzBFM&z{lM7&!P}&B`TE$65oIg$|Cok`UcMdrcs>VVx;pE12LA4YfkUos zFsv=RSar>~n;XXMBrRkx3)N=_$JK56f0u&iPmTM-hqHhG{L61pIX;d1+;;Kf7ZK1d zQtmqj{rrmugC^k7xCLAYGm4)3#Xq>40p4uDo&SF5u|MI9^c0f98u7n)Fdsy1Fub6Q zg8l^k(#e#%P1ZJ(`}2m$6>`|m6h&%gSV8Eo3`Hly|3RF)y2F*UiVKPsyuO<-_WwaC zfeKZ4Nt;0>|SV8whkLHH{%BfbPrJ*UKJnZ?pp3-f|S*vJS7h1DOr1J(feRWk`c) z+7w>VQt5{Itsg}2!RR2u$GG%#5?_g!f=($%iI`e9x6vx47*bd}hLVijHA2 z#aMc;P&3TsiXh45>b8JEh$u;GYkv=yXshf{u9Tz{g|IzxO=XBdNL^RaPTH<{TfwWl z#dx$9%*d!2EY(IBEg1P+!9Dpr4am^AWENmMtCcunC5~8$IGu#D=wS%g?8i_~P;b_3 z3MDdrW~mkH&_FTZ+o&yk%-i)-A5qe$9{_?G{m#cbDScrWpYwsp(--?4s?kBH{U&1u+)x zk2WNmKG+uf#m^vh!;_vj=a^bOzzFel_5-Pd{$F0!$C01G8p1B2< zOLBfZP!@3v5bt0d3u^}9CqiOR(&G=`J+w+<3Q*#Uzcu`5X`tu*BCZ&>qlv=Wfk#Hg zcU4-rB_feL1PF3kKG8Iw`ev8RNkH{Wfbu5kiN*B=K!yNN07P@7=TxTceEGD8fq_wmfzcx-BQ-Ha zsCc4317koAP~I#9D8N30#RKR77a(6HBe$eNwP0-pP#$O??}D8CqO-17mp&(2h$5`BKFt|K~Fp0UZzkQczHoT43l= kcN^#fnPv;d?G}uTG5#zwCvV%ZeMSHyv*vc@Iz~%I0A)H?r2qf` diff --git a/test/subset/data/expected/basics/Comfortaa-Regular-new.retain-gids.retain-all-codepoint.ttf b/test/subset/data/expected/basics/Comfortaa-Regular-new.retain-gids.retain-all-codepoint.ttf index cc2805a019468f70af028e141aed87ef4974a4e9..4b0138fd9de4fe52b2bd4cfd984b7cb8edb62fed 100644 GIT binary patch delta 86679 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�M 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 I19Bz)2i4Du>Hq)$ delta 315 zcmaDbmHW`40>XoL0$YiA8+M>6;iBtAWxCcaqCW6!>^mfc$a+Ab(O?L3-{yGm#4n zj2Su%41A(#K=sWonUjF#odL?5q$d{F7XTRoK!F)Rnj<}@GVP$)8!H9|Mi~Z1kC=?q z#1x_8iT(_X0Tn=bvkagB`wSK!KQ0HzSINjNsZcFgTLF~cz`($}CnrBS@mI2s9|NN& z&^)#Wxrr48EF1YPfP9dCg}lVvRQ1Gd&wvhG!oa|Er66Cbxa9wQ1|y&YzzPbAQVR?{ l>TWYImbo-rFmAVCWX$kq`G0MD)b=F-jPhFBjq4dL83ER=SGfQH From 87e628436e32786635796fbb07ed200f8c0da68f Mon Sep 17 00:00:00 2001 From: Ebrahim Byagowi Date: Tue, 20 Nov 2018 23:26:46 +0330 Subject: [PATCH 23/78] Implement a simple API for fetching opentype metrics Fixes https://github.com/harfbuzz/harfbuzz/pull/1432 --- docs/harfbuzz-sections.txt | 9 +++ src/Makefile.sources | 6 ++ src/hb-ot-face-table-list.hh | 2 + src/hb-ot-hhea-table.hh | 2 + src/hb-ot-hmtx-table.hh | 62 +++++++--------- src/hb-ot-layout.cc | 1 - src/hb-ot-metrics-internal.cc | 94 +++++++++++++++++++++++ src/hb-ot-metrics.cc | 135 ++++++++++++++++++++++++++++++++++ src/hb-ot-metrics.h | 92 +++++++++++++++++++++++ src/hb-ot-metrics.hh | 35 +++++++++ src/hb-ot-os2-table.hh | 4 + src/hb-ot-post-table.hh | 5 +- src/hb-ot.h | 1 + test/api/Makefile.am | 1 + test/api/test-ot-metrics.c | 54 ++++++++++++++ 15 files changed, 467 insertions(+), 36 deletions(-) create mode 100644 src/hb-ot-metrics-internal.cc create mode 100644 src/hb-ot-metrics.cc create mode 100644 src/hb-ot-metrics.h create mode 100644 src/hb-ot-metrics.hh create mode 100644 test/api/test-ot-metrics.c diff --git a/docs/harfbuzz-sections.txt b/docs/harfbuzz-sections.txt index 4be248d30..91d7cfa24 100644 --- a/docs/harfbuzz-sections.txt +++ b/docs/harfbuzz-sections.txt @@ -600,6 +600,15 @@ hb_ot_math_get_min_connector_overlap hb_ot_math_get_glyph_assembly +

+hb-ot-metrics +hb_ot_metrics_t +hb_ot_metrics_get_position +hb_ot_metrics_get_variation +hb_ot_metrics_get_x_variation +hb_ot_metrics_get_y_variation +
+
hb-ot-shape hb_ot_shape_glyphs_closure diff --git a/src/Makefile.sources b/src/Makefile.sources index 6f42ba3dc..d30c489a1 100644 --- a/src/Makefile.sources +++ b/src/Makefile.sources @@ -88,6 +88,9 @@ HB_BASE_sources = \ hb-ot-math-table.hh \ hb-ot-math.cc \ hb-ot-maxp-table.hh \ + hb-ot-metrics-internal.cc \ + hb-ot-metrics.cc \ + hb-ot-metrics.hh \ hb-ot-name-language-static.hh \ hb-ot-name-language.hh \ hb-ot-name-table.hh \ @@ -191,6 +194,7 @@ HB_BASE_headers = \ hb-ot-font.h \ hb-ot-layout.h \ hb-ot-math.h \ + hb-ot-metrics.h \ hb-ot-name.h \ hb-ot-shape.h \ hb-ot-var.h \ @@ -233,6 +237,8 @@ HB_ICU_headers = hb-icu.h HB_SUBSET_sources = \ hb-ot-cff1-table.cc \ hb-ot-cff2-table.cc \ + hb-ot-metrics-internal.cc \ + hb-ot-metrics.hh \ hb-static.cc \ hb-subset-cff-common.cc \ hb-subset-cff-common.hh \ diff --git a/src/hb-ot-face-table-list.hh b/src/hb-ot-face-table-list.hh index ac7052751..09e000d04 100644 --- a/src/hb-ot-face-table-list.hh +++ b/src/hb-ot-face-table-list.hh @@ -50,6 +50,7 @@ HB_OT_TABLE (OT, head) #if !defined(HB_NO_FACE_COLLECT_UNICODES) || !defined(HB_NO_OT_FONT) HB_OT_ACCELERATOR (OT, cmap) #endif +HB_OT_TABLE (OT, hhea) HB_OT_ACCELERATOR (OT, hmtx) HB_OT_TABLE (OT, OS2) #ifndef HB_NO_OT_FONT_GLYPH_NAMES @@ -63,6 +64,7 @@ HB_OT_TABLE (OT, STAT) #endif /* Vertical layout. */ +HB_OT_TABLE (OT, vhea) HB_OT_ACCELERATOR (OT, vmtx) /* TrueType outlines. */ diff --git a/src/hb-ot-hhea-table.hh b/src/hb-ot-hhea-table.hh index c3155b79e..778b6c513 100644 --- a/src/hb-ot-hhea-table.hh +++ b/src/hb-ot-hhea-table.hh @@ -45,6 +45,8 @@ namespace OT { template struct _hea { + bool has_data () const { return version.major; } + bool sanitize (hb_sanitize_context_t *c) const { TRACE_SANITIZE (this); diff --git a/src/hb-ot-hmtx-table.hh b/src/hb-ot-hmtx-table.hh index 754a37628..09df44a93 100644 --- a/src/hb-ot-hmtx-table.hh +++ b/src/hb-ot-hmtx-table.hh @@ -31,6 +31,7 @@ #include "hb-ot-hhea-table.hh" #include "hb-ot-os2-table.hh" #include "hb-ot-var-hvar-table.hh" +#include "hb-ot-metrics.hh" /* * hmtx -- Horizontal Metrics @@ -88,22 +89,22 @@ struct hmtxvmtx template - void serialize (hb_serialize_context_t *c, - Iterator it, + void serialize (hb_serialize_context_t *c, + Iterator it, unsigned num_advances) { unsigned idx = 0; + it | hb_apply ([c, &idx, num_advances] (const hb_item_type& _) { - if (idx < num_advances) + if (idx < num_advances) { LongMetric lm; lm.advance = _.first; lm.sb = _.second; if (unlikely (!c->embed (&lm))) return; - } - else + } + else { FWORD *sb = c->allocate_size (FWORD::static_size); if (unlikely (!sb)) return; @@ -120,12 +121,12 @@ struct hmtxvmtx T *table_prime = c->serializer->start_embed (); if (unlikely (!table_prime)) return_trace (false); - + accelerator_t _mtx; _mtx.init (c->plan->source); unsigned num_advances = _mtx.num_advances_for_subset (c->plan); - - auto it = + + auto it = + hb_range (c->plan->num_output_glyphs ()) | hb_map ([c, &_mtx] (unsigned _) { @@ -161,29 +162,16 @@ struct hmtxvmtx unsigned int default_advance_ = 0) { default_advance = default_advance_ ? default_advance_ : hb_face_get_upem (face); + ascender = 0; descender = 0; line_gap = 0; - bool got_font_extents = false; - if (T::os2Tag != HB_TAG_NONE && face->table.OS2->is_typo_metrics ()) - { - ascender = abs (face->table.OS2->sTypoAscender); - descender = -abs (face->table.OS2->sTypoDescender); - line_gap = face->table.OS2->sTypoLineGap; - got_font_extents = (ascender | descender) != 0; - } + hb_ot_metrics_get_position_internal (face, (hb_ot_metrics_t) T::ascenderTag, &ascender); + hb_ot_metrics_get_position_internal (face, (hb_ot_metrics_t) T::descenderTag, &descender); + hb_ot_metrics_get_position_internal (face, (hb_ot_metrics_t) T::lineGapTag, &line_gap); + ascender = fabs (ascender); + descender = -fabs (descender); + has_font_extents = ascender != 0 || descender != 0; - hb_blob_t *_hea_blob = hb_sanitize_context_t().reference_table (face); - const H *_hea_table = _hea_blob->as (); - num_advances = _hea_table->numberOfLongMetrics; - if (!got_font_extents) - { - ascender = abs (_hea_table->ascender); - descender = -abs (_hea_table->descender); - line_gap = _hea_table->lineGap; - got_font_extents = (ascender | descender) != 0; - } - hb_blob_destroy (_hea_blob); - - has_font_extents = got_font_extents; + num_advances = T::is_horizontal ? face->table.hhea->numberOfLongMetrics : face->table.vhea->numberOfLongMetrics; table = hb_sanitize_context_t().reference_table (face, T::tableTag); @@ -279,9 +267,9 @@ struct hmtxvmtx public: bool has_font_extents; - int ascender; - int descender; - int line_gap; + float ascender; + float descender; + float line_gap; protected: unsigned int num_metrics; @@ -322,12 +310,18 @@ struct hmtxvmtx struct hmtx : hmtxvmtx { static constexpr hb_tag_t tableTag = HB_OT_TAG_hmtx; static constexpr hb_tag_t variationsTag = HB_OT_TAG_HVAR; - static constexpr hb_tag_t os2Tag = HB_OT_TAG_OS2; + static constexpr hb_tag_t ascenderTag = HB_OT_METRICS_HORIZONTAL_ASCENDER; + static constexpr hb_tag_t descenderTag = HB_OT_METRICS_HORIZONTAL_DESCENDER; + static constexpr hb_tag_t lineGapTag = HB_OT_METRICS_HORIZONTAL_LINE_GAP; + static constexpr bool is_horizontal = true; }; struct vmtx : hmtxvmtx { static constexpr hb_tag_t tableTag = HB_OT_TAG_vmtx; static constexpr hb_tag_t variationsTag = HB_OT_TAG_VVAR; - static constexpr hb_tag_t os2Tag = HB_TAG_NONE; + static constexpr hb_tag_t ascenderTag = HB_OT_METRICS_VERTICAL_ASCENDER; + static constexpr hb_tag_t descenderTag = HB_OT_METRICS_VERTICAL_DESCENDER; + static constexpr hb_tag_t lineGapTag = HB_OT_METRICS_VERTICAL_LINE_GAP; + static constexpr bool is_horizontal = false; }; struct hmtx_accelerator_t : hmtx::accelerator_t {}; diff --git a/src/hb-ot-layout.cc b/src/hb-ot-layout.cc index 98cd10923..c67cd0cbf 100644 --- a/src/hb-ot-layout.cc +++ b/src/hb-ot-layout.cc @@ -43,7 +43,6 @@ #include "hb-map.hh" #include "hb-ot-kern-table.hh" -#include "hb-ot-gasp-table.hh" // Just so we compile it; unused otherwise. #include "hb-ot-layout-gdef-table.hh" #include "hb-ot-layout-gsub-table.hh" #include "hb-ot-layout-gpos-table.hh" diff --git a/src/hb-ot-metrics-internal.cc b/src/hb-ot-metrics-internal.cc new file mode 100644 index 000000000..9f0294f66 --- /dev/null +++ b/src/hb-ot-metrics-internal.cc @@ -0,0 +1,94 @@ +/* + * Copyright © 2018 Ebrahim Byagowi + * + * This is part of HarfBuzz, a text shaping library. + * + * Permission is hereby granted, without written agreement and without + * license or royalty fees, to use, copy, modify, and distribute this + * software and its documentation for any purpose, provided that the + * above copyright notice and the following two paragraphs appear in + * all copies of this software. + * + * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES + * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, + * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. + */ + +#include "hb.hh" + +#include "hb-ot-gasp-table.hh" // Just so we compile it; unused otherwise. +#include "hb-ot-os2-table.hh" +#include "hb-ot-post-table.hh" +#include "hb-ot-hmtx-table.hh" +#include "hb-ot-var-mvar-table.hh" +#include "hb-ot-metrics.hh" + +#include "hb-ot-face.hh" + +#if 0 +static bool +_get_gasp (hb_face_t *face, float *result, hb_ot_metrics_t metrics_tag) +{ + const OT::GaspRange& range = face->table.gasp->get_gasp_range (metrics_tag - HB_TAG ('g','s','p','0')); + if (&range == &Null (OT::GaspRange)) return false; + if (result) *result = range.rangeMaxPPEM + face->table.MVAR->get_var (metrics_tag, nullptr, 0); + return true; +} +#endif + +bool +hb_ot_metrics_get_position_internal (hb_face_t *face, + hb_ot_metrics_t metrics_tag, + float *position /* OUT. May be NULL. */) +{ + switch (metrics_tag) + { +#define GET_METRIC(TABLE, ATTR) \ + (face->table.TABLE->has_data () && \ + (position && (*position = face->table.TABLE->ATTR + face->table.MVAR->get_var (metrics_tag, nullptr, 0)), true)) + case HB_OT_METRICS_HORIZONTAL_ASCENDER: + return (face->table.OS2->is_typo_metrics () ^ GET_METRIC (hhea, ascender)) || + GET_METRIC (OS2, sTypoAscender); + case HB_OT_METRICS_HORIZONTAL_DESCENDER: + return (face->table.OS2->is_typo_metrics () ^ GET_METRIC (hhea, descender)) || + GET_METRIC (OS2, sTypoDescender); + case HB_OT_METRICS_HORIZONTAL_LINE_GAP: + return (face->table.OS2->is_typo_metrics () ^ GET_METRIC (hhea, lineGap)) || + GET_METRIC (OS2, sTypoLineGap); + case HB_OT_METRICS_HORIZONTAL_CLIPPING_ASCENT: return GET_METRIC (OS2, usWinAscent); + case HB_OT_METRICS_HORIZONTAL_CLIPPING_DESCENT: return GET_METRIC (OS2, usWinDescent); + case HB_OT_METRICS_VERTICAL_ASCENDER: return GET_METRIC (vhea, ascender); + case HB_OT_METRICS_VERTICAL_DESCENDER: return GET_METRIC (vhea, descender); + case HB_OT_METRICS_VERTICAL_LINE_GAP: return GET_METRIC (vhea, lineGap); + case HB_OT_METRICS_HORIZONTAL_CARET_RISE: return GET_METRIC (hhea, caretSlopeRise); + case HB_OT_METRICS_HORIZONTAL_CARET_RUN: return GET_METRIC (hhea, caretSlopeRun); + case HB_OT_METRICS_HORIZONTAL_CARET_OFFSET: return GET_METRIC (hhea, caretOffset); + case HB_OT_METRICS_VERTICAL_CARET_RISE: return GET_METRIC (vhea, caretSlopeRise); + case HB_OT_METRICS_VERTICAL_CARET_RUN: return GET_METRIC (vhea, caretSlopeRun); + case HB_OT_METRICS_VERTICAL_CARET_OFFSET: return GET_METRIC (vhea, caretOffset); + case HB_OT_METRICS_X_HEIGHT: return GET_METRIC (OS2->v2 (), sxHeight); + case HB_OT_METRICS_CAP_HEIGHT: return GET_METRIC (OS2->v2 (), sCapHeight); + case HB_OT_METRICS_SUBSCRIPT_EM_X_SIZE: return GET_METRIC (OS2, ySubscriptXSize); + case HB_OT_METRICS_SUBSCRIPT_EM_Y_SIZE: return GET_METRIC (OS2, ySubscriptYSize); + case HB_OT_METRICS_SUBSCRIPT_EM_X_OFFSET: return GET_METRIC (OS2, ySubscriptXOffset); + case HB_OT_METRICS_SUBSCRIPT_EM_Y_OFFSET: return GET_METRIC (OS2, ySubscriptYOffset); + case HB_OT_METRICS_SUPERSCRIPT_EM_X_SIZE: return GET_METRIC (OS2, ySuperscriptXSize); + case HB_OT_METRICS_SUPERSCRIPT_EM_Y_SIZE: return GET_METRIC (OS2, ySuperscriptYSize); + case HB_OT_METRICS_SUPERSCRIPT_EM_X_OFFSET: return GET_METRIC (OS2, ySuperscriptXOffset); + case HB_OT_METRICS_SUPERSCRIPT_EM_Y_OFFSET: return GET_METRIC (OS2, ySuperscriptYOffset); + case HB_OT_METRICS_STRIKEOUT_SIZE: return GET_METRIC (OS2, yStrikeoutSize); + case HB_OT_METRICS_STRIKEOUT_OFFSET: return GET_METRIC (OS2, yStrikeoutPosition); + case HB_OT_METRICS_UNDERLINE_SIZE: return GET_METRIC (post->table, underlineThickness); + case HB_OT_METRICS_UNDERLINE_OFFSET: return GET_METRIC (post->table, underlinePosition); +#undef GET_METRIC + default: return false; + } +} diff --git a/src/hb-ot-metrics.cc b/src/hb-ot-metrics.cc new file mode 100644 index 000000000..d6672c685 --- /dev/null +++ b/src/hb-ot-metrics.cc @@ -0,0 +1,135 @@ +/* + * Copyright © 2018 Ebrahim Byagowi + * + * This is part of HarfBuzz, a text shaping library. + * + * Permission is hereby granted, without written agreement and without + * license or royalty fees, to use, copy, modify, and distribute this + * software and its documentation for any purpose, provided that the + * above copyright notice and the following two paragraphs appear in + * all copies of this software. + * + * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES + * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, + * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. + */ + +#include "hb.hh" + +#include "hb-ot-metrics.hh" +#include "hb-ot-var-mvar-table.hh" +#include "hb-ot-face.hh" + + +/** + * hb_ot_metrics_get_position: + * @font: + * @metrics_tag: + * @position: (out) (optional): + * + * Returns: Whether found the requested metrics + * + * Since: REPLACEME + **/ +hb_bool_t +hb_ot_metrics_get_position (hb_font_t *font, + hb_ot_metrics_t metrics_tag, + hb_position_t *position /* OUT. May be NULL. */) +{ + switch (metrics_tag) + { + case HB_OT_METRICS_HORIZONTAL_ASCENDER: + case HB_OT_METRICS_HORIZONTAL_DESCENDER: + case HB_OT_METRICS_HORIZONTAL_LINE_GAP: + case HB_OT_METRICS_HORIZONTAL_CLIPPING_ASCENT: + case HB_OT_METRICS_HORIZONTAL_CLIPPING_DESCENT: + case HB_OT_METRICS_HORIZONTAL_CARET_RISE: + case HB_OT_METRICS_VERTICAL_CARET_RUN: + case HB_OT_METRICS_VERTICAL_CARET_OFFSET: + case HB_OT_METRICS_X_HEIGHT: + case HB_OT_METRICS_CAP_HEIGHT: + case HB_OT_METRICS_SUBSCRIPT_EM_Y_SIZE: + case HB_OT_METRICS_SUBSCRIPT_EM_Y_OFFSET: + case HB_OT_METRICS_SUPERSCRIPT_EM_Y_SIZE: + case HB_OT_METRICS_SUPERSCRIPT_EM_Y_OFFSET: + case HB_OT_METRICS_STRIKEOUT_SIZE: + case HB_OT_METRICS_STRIKEOUT_OFFSET: + case HB_OT_METRICS_UNDERLINE_SIZE: + case HB_OT_METRICS_UNDERLINE_OFFSET: { + float value; + bool result = hb_ot_metrics_get_position_internal (font->face, metrics_tag, &value); + if (result && position) *position = font->em_scalef_y (value); + return result; + } + case HB_OT_METRICS_VERTICAL_ASCENDER: + case HB_OT_METRICS_VERTICAL_DESCENDER: + case HB_OT_METRICS_VERTICAL_LINE_GAP: + case HB_OT_METRICS_HORIZONTAL_CARET_RUN: + case HB_OT_METRICS_HORIZONTAL_CARET_OFFSET: + case HB_OT_METRICS_VERTICAL_CARET_RISE: + case HB_OT_METRICS_SUBSCRIPT_EM_X_SIZE: + case HB_OT_METRICS_SUBSCRIPT_EM_X_OFFSET: + case HB_OT_METRICS_SUPERSCRIPT_EM_X_SIZE: + case HB_OT_METRICS_SUPERSCRIPT_EM_X_OFFSET: { + float value; + bool result = hb_ot_metrics_get_position_internal (font->face, metrics_tag, &value); + if (result && position) *position = font->em_scalef_x (value); + return result; + } + default: + return false; + } +} + +/** + * hb_ot_metrics_get_variation: + * @face: + * @metrics_tag: + * + * Returns: + * + * Since: REPLACEME + **/ +float +hb_ot_metrics_get_variation (hb_face_t *face, hb_ot_metrics_t metrics_tag) +{ + return face->table.MVAR->get_var (metrics_tag, nullptr, 0); +} + +/** + * hb_ot_metrics_get_x_variation: + * @font: + * @metrics_tag: + * + * Returns: + * + * Since: REPLACEME + **/ +hb_position_t +hb_ot_metrics_get_x_variation (hb_font_t *font, hb_ot_metrics_t metrics_tag) +{ + return font->em_scalef_x (hb_ot_metrics_get_variation (font->face, metrics_tag)); +} + +/** + * hb_ot_metrics_get_y_variation: + * @font: + * @metrics_tag: + * + * Returns: + * + * Since: REPLACEME + **/ +hb_position_t +hb_ot_metrics_get_y_variation (hb_font_t *font, hb_ot_metrics_t metrics_tag) +{ + return font->em_scalef_y (hb_ot_metrics_get_variation (font->face, metrics_tag)); +} diff --git a/src/hb-ot-metrics.h b/src/hb-ot-metrics.h new file mode 100644 index 000000000..611222f26 --- /dev/null +++ b/src/hb-ot-metrics.h @@ -0,0 +1,92 @@ +/* + * Copyright © 2018 Ebrahim Byagowi + * + * This is part of HarfBuzz, a text shaping library. + * + * Permission is hereby granted, without written agreement and without + * license or royalty fees, to use, copy, modify, and distribute this + * software and its documentation for any purpose, provided that the + * above copyright notice and the following two paragraphs appear in + * all copies of this software. + * + * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES + * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, + * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. + */ + +#ifndef HB_OT_H_IN +#error "Include instead." +#endif + +#ifndef HB_OT_METRICS_H +#define HB_OT_METRICS_H + +#include "hb.h" +#include "hb-ot-name.h" + +HB_BEGIN_DECLS + + +/** + * hb_ot_metrics_t: + * + * From https://docs.microsoft.com/en-us/typography/opentype/spec/mvar#value-tags + * + * Since: REPLACEME + **/ +typedef enum { + HB_OT_METRICS_HORIZONTAL_ASCENDER = HB_TAG ('h','a','s','c'), + HB_OT_METRICS_HORIZONTAL_DESCENDER = HB_TAG ('h','d','s','c'), + HB_OT_METRICS_HORIZONTAL_LINE_GAP = HB_TAG ('h','l','g','p'), + HB_OT_METRICS_HORIZONTAL_CLIPPING_ASCENT = HB_TAG ('h','c','l','a'), + HB_OT_METRICS_HORIZONTAL_CLIPPING_DESCENT = HB_TAG ('h','c','l','d'), + HB_OT_METRICS_VERTICAL_ASCENDER = HB_TAG ('v','a','s','c'), + HB_OT_METRICS_VERTICAL_DESCENDER = HB_TAG ('v','d','s','c'), + HB_OT_METRICS_VERTICAL_LINE_GAP = HB_TAG ('v','l','g','p'), + HB_OT_METRICS_HORIZONTAL_CARET_RISE = HB_TAG ('h','c','r','s'), + HB_OT_METRICS_HORIZONTAL_CARET_RUN = HB_TAG ('h','c','r','n'), + HB_OT_METRICS_HORIZONTAL_CARET_OFFSET = HB_TAG ('h','c','o','f'), + HB_OT_METRICS_VERTICAL_CARET_RISE = HB_TAG ('v','c','r','s'), + HB_OT_METRICS_VERTICAL_CARET_RUN = HB_TAG ('v','c','r','n'), + HB_OT_METRICS_VERTICAL_CARET_OFFSET = HB_TAG ('v','c','o','f'), + HB_OT_METRICS_X_HEIGHT = HB_TAG ('x','h','g','t'), + HB_OT_METRICS_CAP_HEIGHT = HB_TAG ('c','p','h','t'), + HB_OT_METRICS_SUBSCRIPT_EM_X_SIZE = HB_TAG ('s','b','x','s'), + HB_OT_METRICS_SUBSCRIPT_EM_Y_SIZE = HB_TAG ('s','b','y','s'), + HB_OT_METRICS_SUBSCRIPT_EM_X_OFFSET = HB_TAG ('s','b','x','o'), + HB_OT_METRICS_SUBSCRIPT_EM_Y_OFFSET = HB_TAG ('s','b','y','o'), + HB_OT_METRICS_SUPERSCRIPT_EM_X_SIZE = HB_TAG ('s','p','x','s'), + HB_OT_METRICS_SUPERSCRIPT_EM_Y_SIZE = HB_TAG ('s','p','y','s'), + HB_OT_METRICS_SUPERSCRIPT_EM_X_OFFSET = HB_TAG ('s','p','x','o'), + HB_OT_METRICS_SUPERSCRIPT_EM_Y_OFFSET = HB_TAG ('s','p','y','o'), + HB_OT_METRICS_STRIKEOUT_SIZE = HB_TAG ('s','t','r','s'), + HB_OT_METRICS_STRIKEOUT_OFFSET = HB_TAG ('s','t','r','o'), + HB_OT_METRICS_UNDERLINE_SIZE = HB_TAG ('u','n','d','s'), + HB_OT_METRICS_UNDERLINE_OFFSET = HB_TAG ('u','n','d','o') +} hb_ot_metrics_t; + +HB_EXTERN hb_bool_t +hb_ot_metrics_get_position (hb_font_t *font, + hb_ot_metrics_t metrics_tag, + hb_position_t *position /* OUT. May be NULL. */); + +HB_EXTERN float +hb_ot_metrics_get_variation (hb_face_t *face, hb_ot_metrics_t metrics_tag); + +HB_EXTERN hb_position_t +hb_ot_metrics_get_x_variation (hb_font_t *font, hb_ot_metrics_t metrics_tag); + +HB_EXTERN hb_position_t +hb_ot_metrics_get_y_variation (hb_font_t *font, hb_ot_metrics_t metrics_tag); + +HB_END_DECLS + +#endif /* HB_OT_METRICS_H */ diff --git a/src/hb-ot-metrics.hh b/src/hb-ot-metrics.hh new file mode 100644 index 000000000..e813f463f --- /dev/null +++ b/src/hb-ot-metrics.hh @@ -0,0 +1,35 @@ +/* + * Copyright © 2018 Ebrahim Byagowi + * + * This is part of HarfBuzz, a text shaping library. + * + * Permission is hereby granted, without written agreement and without + * license or royalty fees, to use, copy, modify, and distribute this + * software and its documentation for any purpose, provided that the + * above copyright notice and the following two paragraphs appear in + * all copies of this software. + * + * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES + * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, + * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. + */ + +#ifndef HB_OT_METRICS_HH +#define HB_OT_METRICS_HH + +#include "hb.hh" + +HB_INTERNAL bool +hb_ot_metrics_get_position_internal (hb_face_t *face, + hb_ot_metrics_t metrics_tag, + float *position /* OUT. May be NULL. */); + +#endif /* HB_OT_METRICS_HH */ diff --git a/src/hb-ot-os2-table.hh b/src/hb-ot-os2-table.hh index 16e29caf3..bfe8ef9d2 100644 --- a/src/hb-ot-os2-table.hh +++ b/src/hb-ot-os2-table.hh @@ -59,6 +59,10 @@ struct OS2V1Tail struct OS2V2Tail { + bool has_data () const { return this != &Null (OS2V2Tail); } + + const OS2V2Tail * operator -> () const { return this; } + bool sanitize (hb_sanitize_context_t *c) const { TRACE_SANITIZE (this); diff --git a/src/hb-ot-post-table.hh b/src/hb-ot-post-table.hh index 720e03bac..fb826cd35 100644 --- a/src/hb-ot-post-table.hh +++ b/src/hb-ot-post-table.hh @@ -178,6 +178,8 @@ struct post return false; } + hb_blob_ptr_t table; + protected: unsigned int get_glyph_count () const @@ -237,7 +239,6 @@ struct post } private: - hb_blob_ptr_t table; uint32_t version; const ArrayOf *glyphNameIndex; hb_vector_t index_to_offset; @@ -245,6 +246,8 @@ struct post hb_atomic_ptr_t gids_sorted_by_name; }; + bool has_data () const { return version.to_int (); } + bool sanitize (hb_sanitize_context_t *c) const { TRACE_SANITIZE (this); diff --git a/src/hb-ot.h b/src/hb-ot.h index db784694c..d00ee80ae 100644 --- a/src/hb-ot.h +++ b/src/hb-ot.h @@ -35,6 +35,7 @@ #include "hb-ot-font.h" #include "hb-ot-layout.h" #include "hb-ot-math.h" +#include "hb-ot-metrics.h" #include "hb-ot-name.h" #include "hb-ot-shape.h" #include "hb-ot-var.h" diff --git a/test/api/Makefile.am b/test/api/Makefile.am index b9d4d7928..63c7195fa 100644 --- a/test/api/Makefile.am +++ b/test/api/Makefile.am @@ -84,6 +84,7 @@ TEST_PROGS += \ test-ot-color \ test-ot-ligature-carets \ test-ot-name \ + test-ot-metrics \ test-ot-tag \ test-ot-extents-cff \ $(NULL) diff --git a/test/api/test-ot-metrics.c b/test/api/test-ot-metrics.c new file mode 100644 index 000000000..270de8828 --- /dev/null +++ b/test/api/test-ot-metrics.c @@ -0,0 +1,54 @@ +/* + * Copyright © 2018 Ebrahim Byagowi + * + * This is part of HarfBuzz, a text shaping library. + * + * Permission is hereby granted, without written agreement and without + * license or royalty fees, to use, copy, modify, and distribute this + * software and its documentation for any purpose, provided that the + * above copyright notice and the following two paragraphs appear in + * all copies of this software. + * + * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES + * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, + * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. + */ + +#include "hb-test.h" + +#include + +#include + +/* Unit tests for hb-ot-metrics.h */ + +static void +test_ot_metrics_get (void) +{ + hb_face_t *face = hb_test_open_font_file ("fonts/cpal-v0.ttf"); + hb_font_t *font = hb_font_create (face); + hb_position_t value; + g_assert (hb_ot_metrics_get_position (font, HB_OT_METRICS_HORIZONTAL_ASCENDER, &value)); + g_assert_cmpint (value, ==, 1000); + g_assert_cmpint (hb_ot_metrics_get_x_variation (font, HB_OT_METRICS_HORIZONTAL_ASCENDER), ==, 0); + g_assert_cmpint (hb_ot_metrics_get_y_variation (font, HB_OT_METRICS_HORIZONTAL_ASCENDER), ==, 0); + // g_assert_cmpint ((int) hb_ot_metrics_get_variation (face, HB_OT_METRICS_HORIZONTAL_ASCENDER), ==, 0); + hb_font_destroy (font); + hb_face_destroy (face); +} + +int +main (int argc, char **argv) +{ + hb_test_init (&argc, &argv); + hb_test_add (test_ot_metrics_get); + return hb_test_run (); +} From 9675a067bf1cc0e5d4707c1345736fda4be75b82 Mon Sep 17 00:00:00 2001 From: Behdad Esfahbod Date: Thu, 18 Jul 2019 14:15:08 -0700 Subject: [PATCH 24/78] [ot-metrics] Touch up --- src/harfbuzz.cc | 2 ++ src/hb-ot-hmtx-table.hh | 19 +++++++++---------- 2 files changed, 11 insertions(+), 10 deletions(-) diff --git a/src/harfbuzz.cc b/src/harfbuzz.cc index 8f5bb79a1..e03d54bc4 100644 --- a/src/harfbuzz.cc +++ b/src/harfbuzz.cc @@ -16,6 +16,8 @@ #include "hb-ot-layout.cc" #include "hb-ot-map.cc" #include "hb-ot-math.cc" +#include "hb-ot-metrics-internal.cc" +#include "hb-ot-metrics.cc" #include "hb-ot-name.cc" #include "hb-ot-shape-complex-arabic.cc" #include "hb-ot-shape-complex-default.cc" diff --git a/src/hb-ot-hmtx-table.hh b/src/hb-ot-hmtx-table.hh index 09df44a93..77b068899 100644 --- a/src/hb-ot-hmtx-table.hh +++ b/src/hb-ot-hmtx-table.hh @@ -29,7 +29,6 @@ #include "hb-open-type.hh" #include "hb-ot-hhea-table.hh" -#include "hb-ot-os2-table.hh" #include "hb-ot-var-hvar-table.hh" #include "hb-ot-metrics.hh" @@ -164,9 +163,9 @@ struct hmtxvmtx default_advance = default_advance_ ? default_advance_ : hb_face_get_upem (face); ascender = 0; descender = 0; line_gap = 0; - hb_ot_metrics_get_position_internal (face, (hb_ot_metrics_t) T::ascenderTag, &ascender); - hb_ot_metrics_get_position_internal (face, (hb_ot_metrics_t) T::descenderTag, &descender); - hb_ot_metrics_get_position_internal (face, (hb_ot_metrics_t) T::lineGapTag, &line_gap); + hb_ot_metrics_get_position_internal (face, T::ascenderTag, &ascender); + hb_ot_metrics_get_position_internal (face, T::descenderTag, &descender); + hb_ot_metrics_get_position_internal (face, T::lineGapTag, &line_gap); ascender = fabs (ascender); descender = -fabs (descender); has_font_extents = ascender != 0 || descender != 0; @@ -310,17 +309,17 @@ struct hmtxvmtx struct hmtx : hmtxvmtx { static constexpr hb_tag_t tableTag = HB_OT_TAG_hmtx; static constexpr hb_tag_t variationsTag = HB_OT_TAG_HVAR; - static constexpr hb_tag_t ascenderTag = HB_OT_METRICS_HORIZONTAL_ASCENDER; - static constexpr hb_tag_t descenderTag = HB_OT_METRICS_HORIZONTAL_DESCENDER; - static constexpr hb_tag_t lineGapTag = HB_OT_METRICS_HORIZONTAL_LINE_GAP; + static constexpr hb_ot_metrics_t ascenderTag = HB_OT_METRICS_HORIZONTAL_ASCENDER; + static constexpr hb_ot_metrics_t descenderTag = HB_OT_METRICS_HORIZONTAL_DESCENDER; + static constexpr hb_ot_metrics_t lineGapTag = HB_OT_METRICS_HORIZONTAL_LINE_GAP; static constexpr bool is_horizontal = true; }; struct vmtx : hmtxvmtx { static constexpr hb_tag_t tableTag = HB_OT_TAG_vmtx; static constexpr hb_tag_t variationsTag = HB_OT_TAG_VVAR; - static constexpr hb_tag_t ascenderTag = HB_OT_METRICS_VERTICAL_ASCENDER; - static constexpr hb_tag_t descenderTag = HB_OT_METRICS_VERTICAL_DESCENDER; - static constexpr hb_tag_t lineGapTag = HB_OT_METRICS_VERTICAL_LINE_GAP; + static constexpr hb_ot_metrics_t ascenderTag = HB_OT_METRICS_VERTICAL_ASCENDER; + static constexpr hb_ot_metrics_t descenderTag = HB_OT_METRICS_VERTICAL_DESCENDER; + static constexpr hb_ot_metrics_t lineGapTag = HB_OT_METRICS_VERTICAL_LINE_GAP; static constexpr bool is_horizontal = false; }; From 2bd953ff4f656f042dba2845f0479a7fe7c439a6 Mon Sep 17 00:00:00 2001 From: Behdad Esfahbod Date: Thu, 18 Jul 2019 14:25:45 -0700 Subject: [PATCH 25/78] [metrics] Fix weird use of xor I believe that was a try to use one approach as fallback to other. But felt wrong. Just believe what's in OS/2 table to be correct. --- src/hb-ot-metrics-internal.cc | 12 ++++++------ src/hb-ot-os2-table.hh | 2 +- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/hb-ot-metrics-internal.cc b/src/hb-ot-metrics-internal.cc index 9f0294f66..9af5b8c38 100644 --- a/src/hb-ot-metrics-internal.cc +++ b/src/hb-ot-metrics-internal.cc @@ -55,14 +55,14 @@ hb_ot_metrics_get_position_internal (hb_face_t *face, (face->table.TABLE->has_data () && \ (position && (*position = face->table.TABLE->ATTR + face->table.MVAR->get_var (metrics_tag, nullptr, 0)), true)) case HB_OT_METRICS_HORIZONTAL_ASCENDER: - return (face->table.OS2->is_typo_metrics () ^ GET_METRIC (hhea, ascender)) || - GET_METRIC (OS2, sTypoAscender); + return face->table.OS2->use_typo_metrics () ? + GET_METRIC (OS2, sTypoAscender) : GET_METRIC (hhea, ascender); case HB_OT_METRICS_HORIZONTAL_DESCENDER: - return (face->table.OS2->is_typo_metrics () ^ GET_METRIC (hhea, descender)) || - GET_METRIC (OS2, sTypoDescender); + return face->table.OS2->use_typo_metrics () ? + GET_METRIC (OS2, sTypoDescender) : GET_METRIC (hhea, descender); case HB_OT_METRICS_HORIZONTAL_LINE_GAP: - return (face->table.OS2->is_typo_metrics () ^ GET_METRIC (hhea, lineGap)) || - GET_METRIC (OS2, sTypoLineGap); + return face->table.OS2->use_typo_metrics () ? + GET_METRIC (OS2, sTypoLineGap) : GET_METRIC (hhea, lineGap); case HB_OT_METRICS_HORIZONTAL_CLIPPING_ASCENT: return GET_METRIC (OS2, usWinAscent); case HB_OT_METRICS_HORIZONTAL_CLIPPING_DESCENT: return GET_METRIC (OS2, usWinDescent); case HB_OT_METRICS_VERTICAL_ASCENDER: return GET_METRIC (vhea, ascender); diff --git a/src/hb-ot-os2-table.hh b/src/hb-ot-os2-table.hh index bfe8ef9d2..aa1e75dfc 100644 --- a/src/hb-ot-os2-table.hh +++ b/src/hb-ot-os2-table.hh @@ -119,7 +119,7 @@ struct OS2 bool is_italic () const { return fsSelection & ITALIC; } bool is_oblique () const { return fsSelection & OBLIQUE; } - bool is_typo_metrics () const { return fsSelection & USE_TYPO_METRICS; } + bool use_typo_metrics () const { return fsSelection & USE_TYPO_METRICS; } enum width_class_t { FWIDTH_ULTRA_CONDENSED = 1, /* 50% */ From bdfdac0f26aafb3e9ff2db123116f0406fa49efc Mon Sep 17 00:00:00 2001 From: Ebrahim Byagowi Date: Fri, 19 Jul 2019 10:33:00 +0430 Subject: [PATCH 26/78] [ci][fuzzer] print valgrind failure if an error happened --- test/fuzzing/run-shape-fuzzer-tests.py | 34 +++++++++++++------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/test/fuzzing/run-shape-fuzzer-tests.py b/test/fuzzing/run-shape-fuzzer-tests.py index ba480dd52..6d36c2cfe 100755 --- a/test/fuzzing/run-shape-fuzzer-tests.py +++ b/test/fuzzing/run-shape-fuzzer-tests.py @@ -5,41 +5,41 @@ from __future__ import print_function, division, absolute_import import sys, os, subprocess, tempfile, threading -def which(program): +def which (program): # https://stackoverflow.com/a/377028 - def is_exe(fpath): - return os.path.isfile(fpath) and os.access(fpath, os.X_OK) + def is_exe (fpath): + return os.path.isfile (fpath) and os.access (fpath, os.X_OK) - fpath, _ = os.path.split(program) + fpath, _ = os.path.split (program) if fpath: - if is_exe(program): + if is_exe (program): return program else: - for path in os.environ["PATH"].split(os.pathsep): - exe_file = os.path.join(path, program) - if is_exe(exe_file): + for path in os.environ["PATH"].split (os.pathsep): + exe_file = os.path.join (path, program) + if is_exe (exe_file): return exe_file return None -def cmd(command): +def cmd (command): # https://stackoverflow.com/a/4408409 # https://stackoverflow.com/a/10012262 - with tempfile.TemporaryFile() as tempf: + with tempfile.TemporaryFile () as tempf: p = subprocess.Popen (command, stderr=tempf) is_killed = {'value': False} - def timeout(p, is_killed): + def timeout (p, is_killed): is_killed['value'] = True - p.kill() + p.kill () timer = threading.Timer (2, timeout, [p, is_killed]) try: timer.start() p.wait () tempf.seek (0) - text = tempf.read().decode ("utf-8").strip () + text = tempf.read ().decode ("utf-8").strip () returncode = p.returncode finally: timer.cancel() @@ -67,9 +67,9 @@ please provide it as the first argument to the tool""") print ('hb_shape_fuzzer:', hb_shape_fuzzer) fails = 0 -libtool = os.environ.get('LIBTOOL') +libtool = os.environ.get ('LIBTOOL') valgrind = None -if os.environ.get('RUN_VALGRIND', ''): +if os.environ.get ('RUN_VALGRIND', ''): valgrind = which ('valgrind') if valgrind is None: print ("""Valgrind requested but not found.""") @@ -80,7 +80,7 @@ if os.environ.get('RUN_VALGRIND', ''): parent_path = os.path.join (srcdir, "fonts") for file in os.listdir (parent_path): - path = os.path.join(parent_path, file) + path = os.path.join (parent_path, file) if valgrind: text, returncode = cmd (libtool.split(' ') + ['--mode=execute', valgrind + ' --leak-check=full --error-exitcode=1', '--', hb_shape_fuzzer, path]) @@ -89,7 +89,7 @@ for file in os.listdir (parent_path): if 'error' in text: returncode = 1 - if not valgrind and text.strip (): + if (not valgrind or returncode) and text.strip (): print (text) if returncode != 0: From 2e5b49d11d1dbfd44d8c640cb9ce5de7d26ca873 Mon Sep 17 00:00:00 2001 From: Ebrahim Byagowi Date: Fri, 19 Jul 2019 11:41:07 +0430 Subject: [PATCH 27/78] Add HB_NO_METRICS and fix HB_TINY build (#1839) --- src/hb-config.hh | 1 + src/hb-ot-face-table-list.hh | 2 -- src/hb-ot-metrics-internal.cc | 8 +++++++- src/hb-ot-metrics.cc | 6 ++++++ 4 files changed, 14 insertions(+), 3 deletions(-) diff --git a/src/hb-config.hh b/src/hb-config.hh index adf2b3348..bd440050e 100644 --- a/src/hb-config.hh +++ b/src/hb-config.hh @@ -66,6 +66,7 @@ #define HB_NO_LAYOUT_COLLECT_GLYPHS #define HB_NO_LAYOUT_UNUSED #define HB_NO_MATH +#define HB_NO_METRICS #define HB_NO_MMAP #define HB_NO_NAME #define HB_NO_OPEN diff --git a/src/hb-ot-face-table-list.hh b/src/hb-ot-face-table-list.hh index 09e000d04..7af024612 100644 --- a/src/hb-ot-face-table-list.hh +++ b/src/hb-ot-face-table-list.hh @@ -53,9 +53,7 @@ HB_OT_ACCELERATOR (OT, cmap) HB_OT_TABLE (OT, hhea) HB_OT_ACCELERATOR (OT, hmtx) HB_OT_TABLE (OT, OS2) -#ifndef HB_NO_OT_FONT_GLYPH_NAMES HB_OT_ACCELERATOR (OT, post) -#endif #ifndef HB_NO_NAME HB_OT_ACCELERATOR (OT, name) #endif diff --git a/src/hb-ot-metrics-internal.cc b/src/hb-ot-metrics-internal.cc index 9af5b8c38..ccf4e3706 100644 --- a/src/hb-ot-metrics-internal.cc +++ b/src/hb-ot-metrics-internal.cc @@ -51,9 +51,14 @@ hb_ot_metrics_get_position_internal (hb_face_t *face, { switch (metrics_tag) { +#ifndef HB_NO_VAR +#define GET_VAR hb_ot_metrics_get_variation (face, metrics_tag) +#else +#define GET_VAR 0 +#endif #define GET_METRIC(TABLE, ATTR) \ (face->table.TABLE->has_data () && \ - (position && (*position = face->table.TABLE->ATTR + face->table.MVAR->get_var (metrics_tag, nullptr, 0)), true)) + (position && (*position = face->table.TABLE->ATTR + GET_VAR), true)) case HB_OT_METRICS_HORIZONTAL_ASCENDER: return face->table.OS2->use_typo_metrics () ? GET_METRIC (OS2, sTypoAscender) : GET_METRIC (hhea, ascender); @@ -89,6 +94,7 @@ hb_ot_metrics_get_position_internal (hb_face_t *face, case HB_OT_METRICS_UNDERLINE_SIZE: return GET_METRIC (post->table, underlineThickness); case HB_OT_METRICS_UNDERLINE_OFFSET: return GET_METRIC (post->table, underlinePosition); #undef GET_METRIC +#undef GET_VAR default: return false; } } diff --git a/src/hb-ot-metrics.cc b/src/hb-ot-metrics.cc index d6672c685..8a9859751 100644 --- a/src/hb-ot-metrics.cc +++ b/src/hb-ot-metrics.cc @@ -24,6 +24,8 @@ #include "hb.hh" +#ifndef HB_NO_METRICS + #include "hb-ot-metrics.hh" #include "hb-ot-var-mvar-table.hh" #include "hb-ot-face.hh" @@ -89,6 +91,7 @@ hb_ot_metrics_get_position (hb_font_t *font, } } +#ifndef HB_NO_VAR /** * hb_ot_metrics_get_variation: * @face: @@ -133,3 +136,6 @@ hb_ot_metrics_get_y_variation (hb_font_t *font, hb_ot_metrics_t metrics_tag) { return font->em_scalef_y (hb_ot_metrics_get_variation (font->face, metrics_tag)); } +#endif + +#endif From ec8dde8142fbf9e5bc0aee9318a7c4e73d61c758 Mon Sep 17 00:00:00 2001 From: Behdad Esfahbod Date: Fri, 19 Jul 2019 11:13:50 -0700 Subject: [PATCH 28/78] [metrics] Fall back to hhea if OS2 metrics are empty Reinstates previous logic, even if it might be unnecessary. --- src/hb-ot-metrics-internal.cc | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/hb-ot-metrics-internal.cc b/src/hb-ot-metrics-internal.cc index ccf4e3706..513053c1f 100644 --- a/src/hb-ot-metrics-internal.cc +++ b/src/hb-ot-metrics-internal.cc @@ -60,14 +60,14 @@ hb_ot_metrics_get_position_internal (hb_face_t *face, (face->table.TABLE->has_data () && \ (position && (*position = face->table.TABLE->ATTR + GET_VAR), true)) case HB_OT_METRICS_HORIZONTAL_ASCENDER: - return face->table.OS2->use_typo_metrics () ? - GET_METRIC (OS2, sTypoAscender) : GET_METRIC (hhea, ascender); + return (face->table.OS2->use_typo_metrics () && GET_METRIC (OS2, sTypoAscender)) || + GET_METRIC (hhea, ascender); case HB_OT_METRICS_HORIZONTAL_DESCENDER: - return face->table.OS2->use_typo_metrics () ? - GET_METRIC (OS2, sTypoDescender) : GET_METRIC (hhea, descender); + return (face->table.OS2->use_typo_metrics () && GET_METRIC (OS2, sTypoDescender)) || + GET_METRIC (hhea, descender); case HB_OT_METRICS_HORIZONTAL_LINE_GAP: - return face->table.OS2->use_typo_metrics () ? - GET_METRIC (OS2, sTypoLineGap) : GET_METRIC (hhea, lineGap); + return (face->table.OS2->use_typo_metrics () && GET_METRIC (OS2, sTypoLineGap)) || + GET_METRIC (hhea, lineGap); case HB_OT_METRICS_HORIZONTAL_CLIPPING_ASCENT: return GET_METRIC (OS2, usWinAscent); case HB_OT_METRICS_HORIZONTAL_CLIPPING_DESCENT: return GET_METRIC (OS2, usWinDescent); case HB_OT_METRICS_VERTICAL_ASCENDER: return GET_METRIC (vhea, ascender); From 54b9ab704dbf62e2916f1d5276ffef2543bcc2a7 Mon Sep 17 00:00:00 2001 From: Ebrahim Byagowi Date: Sat, 20 Jul 2019 12:51:38 +0430 Subject: [PATCH 29/78] Fallback hhea's ascender/descender to OS2 --- src/hb-ot-metrics-internal.cc | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/hb-ot-metrics-internal.cc b/src/hb-ot-metrics-internal.cc index 513053c1f..fb80ee8f4 100644 --- a/src/hb-ot-metrics-internal.cc +++ b/src/hb-ot-metrics-internal.cc @@ -60,14 +60,14 @@ hb_ot_metrics_get_position_internal (hb_face_t *face, (face->table.TABLE->has_data () && \ (position && (*position = face->table.TABLE->ATTR + GET_VAR), true)) case HB_OT_METRICS_HORIZONTAL_ASCENDER: - return (face->table.OS2->use_typo_metrics () && GET_METRIC (OS2, sTypoAscender)) || - GET_METRIC (hhea, ascender); + return (!face->table.OS2->use_typo_metrics () && GET_METRIC (hhea, ascender)) || + GET_METRIC (OS2, sTypoAscender); case HB_OT_METRICS_HORIZONTAL_DESCENDER: - return (face->table.OS2->use_typo_metrics () && GET_METRIC (OS2, sTypoDescender)) || - GET_METRIC (hhea, descender); + return (!face->table.OS2->use_typo_metrics () && GET_METRIC (hhea, descender)) || + GET_METRIC (OS2, sTypoDescender); case HB_OT_METRICS_HORIZONTAL_LINE_GAP: - return (face->table.OS2->use_typo_metrics () && GET_METRIC (OS2, sTypoLineGap)) || - GET_METRIC (hhea, lineGap); + return (!face->table.OS2->use_typo_metrics () && GET_METRIC (hhea, lineGap)) || + GET_METRIC (OS2, sTypoLineGap); case HB_OT_METRICS_HORIZONTAL_CLIPPING_ASCENT: return GET_METRIC (OS2, usWinAscent); case HB_OT_METRICS_HORIZONTAL_CLIPPING_DESCENT: return GET_METRIC (OS2, usWinDescent); case HB_OT_METRICS_VERTICAL_ASCENDER: return GET_METRIC (vhea, ascender); From 08b48e89d3c1bafe252badc7c65a9fc2f166a693 Mon Sep 17 00:00:00 2001 From: Ebrahim Byagowi Date: Sat, 20 Jul 2019 12:53:40 +0430 Subject: [PATCH 30/78] [os2] minor spacing tweaks --- src/hb-ot-os2-table.hh | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/src/hb-ot-os2-table.hh b/src/hb-ot-os2-table.hh index aa1e75dfc..67f21eb34 100644 --- a/src/hb-ot-os2-table.hh +++ b/src/hb-ot-os2-table.hh @@ -117,8 +117,8 @@ struct OS2 OBLIQUE = 1u<<9 }; - bool is_italic () const { return fsSelection & ITALIC; } - bool is_oblique () const { return fsSelection & OBLIQUE; } + bool is_italic () const { return fsSelection & ITALIC; } + bool is_oblique () const { return fsSelection & OBLIQUE; } bool use_typo_metrics () const { return fsSelection & USE_TYPO_METRICS; } enum width_class_t { @@ -196,13 +196,14 @@ struct OS2 } static void find_min_and_max_codepoint (const hb_set_t *codepoints, - uint16_t *min_cp, /* OUT */ - uint16_t *max_cp /* OUT */) + uint16_t *min_cp, /* OUT */ + uint16_t *max_cp /* OUT */) { *min_cp = codepoints->get_min (); *max_cp = codepoints->get_max (); } + /* https://github.com/Microsoft/Font-Validator/blob/520aaae/OTFontFileVal/val_OS2.cs#L644-L681 */ enum font_page_t { HEBREW_FONT_PAGE = 0xB100, // Hebrew Windows 3.1 font page SIMP_ARABIC_FONT_PAGE = 0xB200, // Simplified Arabic Windows 3.1 font page @@ -212,8 +213,6 @@ struct OS2 TRAD_FARSI_FONT_PAGE = 0xBB00, // Traditional Farsi Windows 3.1 font page THAI_FONT_PAGE = 0xDE00 // Thai Windows 3.1 font page }; - - // https://github.com/Microsoft/Font-Validator/blob/520aaae/OTFontFileVal/val_OS2.cs#L644-L681 font_page_t get_font_page () const { return (font_page_t) (version == 0 ? fsSelection & 0xFF00 : 0); } From 5e28c2654d030655d7b93ec0d6213d2b9fb2956e Mon Sep 17 00:00:00 2001 From: Ebrahim Byagowi Date: Sat, 20 Jul 2019 14:08:11 +0430 Subject: [PATCH 31/78] [doc] minor, improve hb-ot-metrics doc a bit --- src/hb-ot-metrics.cc | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/hb-ot-metrics.cc b/src/hb-ot-metrics.cc index 8a9859751..bec4c569b 100644 --- a/src/hb-ot-metrics.cc +++ b/src/hb-ot-metrics.cc @@ -33,12 +33,13 @@ /** * hb_ot_metrics_get_position: - * @font: - * @metrics_tag: - * @position: (out) (optional): - * - * Returns: Whether found the requested metrics + * @font: a #hb_font_t object. + * @metrics_tag: tag of metrics value you like to fetch. + * @position: (out) (optional): result of metrics value from the font. * + * It fetches metrics value corresponding to a given tag from a font. + * + * Returns: Whether found the requested metrics in the font. * Since: REPLACEME **/ hb_bool_t From 29444d7e9fd5007bf39efa2cf57a0117aabfc770 Mon Sep 17 00:00:00 2001 From: Ebrahim Byagowi Date: Sat, 20 Jul 2019 13:52:21 +0430 Subject: [PATCH 32/78] Don't cache ascender/descender metrics --- src/hb-ot-font.cc | 24 ++++++++---------------- src/hb-ot-hmtx-table.hh | 20 -------------------- 2 files changed, 8 insertions(+), 36 deletions(-) diff --git a/src/hb-ot-font.cc b/src/hb-ot-font.cc index 999bfac29..ae56aedea 100644 --- a/src/hb-ot-font.cc +++ b/src/hb-ot-font.cc @@ -230,32 +230,24 @@ hb_ot_get_glyph_from_name (hb_font_t *font HB_UNUSED, static hb_bool_t hb_ot_get_font_h_extents (hb_font_t *font, - void *font_data, + void *font_data HB_UNUSED, hb_font_extents_t *metrics, void *user_data HB_UNUSED) { - const hb_ot_face_t *ot_face = (const hb_ot_face_t *) font_data; - const OT::hmtx_accelerator_t &hmtx = *ot_face->hmtx; - metrics->ascender = font->em_scale_y (hmtx.ascender); - metrics->descender = font->em_scale_y (hmtx.descender); - metrics->line_gap = font->em_scale_y (hmtx.line_gap); - // TODO Hook up variations. - return hmtx.has_font_extents; + return hb_ot_metrics_get_position (font, HB_OT_METRICS_HORIZONTAL_ASCENDER, &metrics->ascender) && + hb_ot_metrics_get_position (font, HB_OT_METRICS_HORIZONTAL_DESCENDER, &metrics->descender) && + hb_ot_metrics_get_position (font, HB_OT_METRICS_HORIZONTAL_LINE_GAP, &metrics->line_gap); } static hb_bool_t hb_ot_get_font_v_extents (hb_font_t *font, - void *font_data, + void *font_data HB_UNUSED, hb_font_extents_t *metrics, void *user_data HB_UNUSED) { - const hb_ot_face_t *ot_face = (const hb_ot_face_t *) font_data; - const OT::vmtx_accelerator_t &vmtx = *ot_face->vmtx; - metrics->ascender = font->em_scale_x (vmtx.ascender); - metrics->descender = font->em_scale_x (vmtx.descender); - metrics->line_gap = font->em_scale_x (vmtx.line_gap); - // TODO Hook up variations. - return vmtx.has_font_extents; + return hb_ot_metrics_get_position (font, HB_OT_METRICS_VERTICAL_ASCENDER, &metrics->ascender) && + hb_ot_metrics_get_position (font, HB_OT_METRICS_VERTICAL_DESCENDER, &metrics->descender) && + hb_ot_metrics_get_position (font, HB_OT_METRICS_VERTICAL_LINE_GAP, &metrics->line_gap); } #if HB_USE_ATEXIT diff --git a/src/hb-ot-hmtx-table.hh b/src/hb-ot-hmtx-table.hh index 77b068899..11a588e38 100644 --- a/src/hb-ot-hmtx-table.hh +++ b/src/hb-ot-hmtx-table.hh @@ -161,14 +161,6 @@ struct hmtxvmtx unsigned int default_advance_ = 0) { default_advance = default_advance_ ? default_advance_ : hb_face_get_upem (face); - ascender = 0; descender = 0; line_gap = 0; - - hb_ot_metrics_get_position_internal (face, T::ascenderTag, &ascender); - hb_ot_metrics_get_position_internal (face, T::descenderTag, &descender); - hb_ot_metrics_get_position_internal (face, T::lineGapTag, &line_gap); - ascender = fabs (ascender); - descender = -fabs (descender); - has_font_extents = ascender != 0 || descender != 0; num_advances = T::is_horizontal ? face->table.hhea->numberOfLongMetrics : face->table.vhea->numberOfLongMetrics; @@ -264,12 +256,6 @@ struct hmtxvmtx return get_advance (old_gid); } - public: - bool has_font_extents; - float ascender; - float descender; - float line_gap; - protected: unsigned int num_metrics; unsigned int num_advances; @@ -309,17 +295,11 @@ struct hmtxvmtx struct hmtx : hmtxvmtx { static constexpr hb_tag_t tableTag = HB_OT_TAG_hmtx; static constexpr hb_tag_t variationsTag = HB_OT_TAG_HVAR; - static constexpr hb_ot_metrics_t ascenderTag = HB_OT_METRICS_HORIZONTAL_ASCENDER; - static constexpr hb_ot_metrics_t descenderTag = HB_OT_METRICS_HORIZONTAL_DESCENDER; - static constexpr hb_ot_metrics_t lineGapTag = HB_OT_METRICS_HORIZONTAL_LINE_GAP; static constexpr bool is_horizontal = true; }; struct vmtx : hmtxvmtx { static constexpr hb_tag_t tableTag = HB_OT_TAG_vmtx; static constexpr hb_tag_t variationsTag = HB_OT_TAG_VVAR; - static constexpr hb_ot_metrics_t ascenderTag = HB_OT_METRICS_VERTICAL_ASCENDER; - static constexpr hb_ot_metrics_t descenderTag = HB_OT_METRICS_VERTICAL_DESCENDER; - static constexpr hb_ot_metrics_t lineGapTag = HB_OT_METRICS_VERTICAL_LINE_GAP; static constexpr bool is_horizontal = false; }; From 471f798ace08b4551f0c9ead6855a4e49b72ba25 Mon Sep 17 00:00:00 2001 From: Ebrahim Byagowi Date: Sat, 20 Jul 2019 14:00:20 +0430 Subject: [PATCH 33/78] Merge ot-metrics-internal.cc with ot-metrics now that isn't needed in subset --- src/Makefile.sources | 3 - src/harfbuzz.cc | 1 - src/hb-ot-metrics-internal.cc | 100 ---------------------------------- src/hb-ot-metrics.cc | 71 +++++++++++++++++++++++- 4 files changed, 70 insertions(+), 105 deletions(-) delete mode 100644 src/hb-ot-metrics-internal.cc diff --git a/src/Makefile.sources b/src/Makefile.sources index d30c489a1..e8d5bc593 100644 --- a/src/Makefile.sources +++ b/src/Makefile.sources @@ -88,7 +88,6 @@ HB_BASE_sources = \ hb-ot-math-table.hh \ hb-ot-math.cc \ hb-ot-maxp-table.hh \ - hb-ot-metrics-internal.cc \ hb-ot-metrics.cc \ hb-ot-metrics.hh \ hb-ot-name-language-static.hh \ @@ -237,8 +236,6 @@ HB_ICU_headers = hb-icu.h HB_SUBSET_sources = \ hb-ot-cff1-table.cc \ hb-ot-cff2-table.cc \ - hb-ot-metrics-internal.cc \ - hb-ot-metrics.hh \ hb-static.cc \ hb-subset-cff-common.cc \ hb-subset-cff-common.hh \ diff --git a/src/harfbuzz.cc b/src/harfbuzz.cc index e03d54bc4..26cfac1b4 100644 --- a/src/harfbuzz.cc +++ b/src/harfbuzz.cc @@ -16,7 +16,6 @@ #include "hb-ot-layout.cc" #include "hb-ot-map.cc" #include "hb-ot-math.cc" -#include "hb-ot-metrics-internal.cc" #include "hb-ot-metrics.cc" #include "hb-ot-name.cc" #include "hb-ot-shape-complex-arabic.cc" diff --git a/src/hb-ot-metrics-internal.cc b/src/hb-ot-metrics-internal.cc deleted file mode 100644 index fb80ee8f4..000000000 --- a/src/hb-ot-metrics-internal.cc +++ /dev/null @@ -1,100 +0,0 @@ -/* - * Copyright © 2018 Ebrahim Byagowi - * - * This is part of HarfBuzz, a text shaping library. - * - * Permission is hereby granted, without written agreement and without - * license or royalty fees, to use, copy, modify, and distribute this - * software and its documentation for any purpose, provided that the - * above copyright notice and the following two paragraphs appear in - * all copies of this software. - * - * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR - * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES - * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN - * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH - * DAMAGE. - * - * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, - * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND - * FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS - * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO - * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. - */ - -#include "hb.hh" - -#include "hb-ot-gasp-table.hh" // Just so we compile it; unused otherwise. -#include "hb-ot-os2-table.hh" -#include "hb-ot-post-table.hh" -#include "hb-ot-hmtx-table.hh" -#include "hb-ot-var-mvar-table.hh" -#include "hb-ot-metrics.hh" - -#include "hb-ot-face.hh" - -#if 0 -static bool -_get_gasp (hb_face_t *face, float *result, hb_ot_metrics_t metrics_tag) -{ - const OT::GaspRange& range = face->table.gasp->get_gasp_range (metrics_tag - HB_TAG ('g','s','p','0')); - if (&range == &Null (OT::GaspRange)) return false; - if (result) *result = range.rangeMaxPPEM + face->table.MVAR->get_var (metrics_tag, nullptr, 0); - return true; -} -#endif - -bool -hb_ot_metrics_get_position_internal (hb_face_t *face, - hb_ot_metrics_t metrics_tag, - float *position /* OUT. May be NULL. */) -{ - switch (metrics_tag) - { -#ifndef HB_NO_VAR -#define GET_VAR hb_ot_metrics_get_variation (face, metrics_tag) -#else -#define GET_VAR 0 -#endif -#define GET_METRIC(TABLE, ATTR) \ - (face->table.TABLE->has_data () && \ - (position && (*position = face->table.TABLE->ATTR + GET_VAR), true)) - case HB_OT_METRICS_HORIZONTAL_ASCENDER: - return (!face->table.OS2->use_typo_metrics () && GET_METRIC (hhea, ascender)) || - GET_METRIC (OS2, sTypoAscender); - case HB_OT_METRICS_HORIZONTAL_DESCENDER: - return (!face->table.OS2->use_typo_metrics () && GET_METRIC (hhea, descender)) || - GET_METRIC (OS2, sTypoDescender); - case HB_OT_METRICS_HORIZONTAL_LINE_GAP: - return (!face->table.OS2->use_typo_metrics () && GET_METRIC (hhea, lineGap)) || - GET_METRIC (OS2, sTypoLineGap); - case HB_OT_METRICS_HORIZONTAL_CLIPPING_ASCENT: return GET_METRIC (OS2, usWinAscent); - case HB_OT_METRICS_HORIZONTAL_CLIPPING_DESCENT: return GET_METRIC (OS2, usWinDescent); - case HB_OT_METRICS_VERTICAL_ASCENDER: return GET_METRIC (vhea, ascender); - case HB_OT_METRICS_VERTICAL_DESCENDER: return GET_METRIC (vhea, descender); - case HB_OT_METRICS_VERTICAL_LINE_GAP: return GET_METRIC (vhea, lineGap); - case HB_OT_METRICS_HORIZONTAL_CARET_RISE: return GET_METRIC (hhea, caretSlopeRise); - case HB_OT_METRICS_HORIZONTAL_CARET_RUN: return GET_METRIC (hhea, caretSlopeRun); - case HB_OT_METRICS_HORIZONTAL_CARET_OFFSET: return GET_METRIC (hhea, caretOffset); - case HB_OT_METRICS_VERTICAL_CARET_RISE: return GET_METRIC (vhea, caretSlopeRise); - case HB_OT_METRICS_VERTICAL_CARET_RUN: return GET_METRIC (vhea, caretSlopeRun); - case HB_OT_METRICS_VERTICAL_CARET_OFFSET: return GET_METRIC (vhea, caretOffset); - case HB_OT_METRICS_X_HEIGHT: return GET_METRIC (OS2->v2 (), sxHeight); - case HB_OT_METRICS_CAP_HEIGHT: return GET_METRIC (OS2->v2 (), sCapHeight); - case HB_OT_METRICS_SUBSCRIPT_EM_X_SIZE: return GET_METRIC (OS2, ySubscriptXSize); - case HB_OT_METRICS_SUBSCRIPT_EM_Y_SIZE: return GET_METRIC (OS2, ySubscriptYSize); - case HB_OT_METRICS_SUBSCRIPT_EM_X_OFFSET: return GET_METRIC (OS2, ySubscriptXOffset); - case HB_OT_METRICS_SUBSCRIPT_EM_Y_OFFSET: return GET_METRIC (OS2, ySubscriptYOffset); - case HB_OT_METRICS_SUPERSCRIPT_EM_X_SIZE: return GET_METRIC (OS2, ySuperscriptXSize); - case HB_OT_METRICS_SUPERSCRIPT_EM_Y_SIZE: return GET_METRIC (OS2, ySuperscriptYSize); - case HB_OT_METRICS_SUPERSCRIPT_EM_X_OFFSET: return GET_METRIC (OS2, ySuperscriptXOffset); - case HB_OT_METRICS_SUPERSCRIPT_EM_Y_OFFSET: return GET_METRIC (OS2, ySuperscriptYOffset); - case HB_OT_METRICS_STRIKEOUT_SIZE: return GET_METRIC (OS2, yStrikeoutSize); - case HB_OT_METRICS_STRIKEOUT_OFFSET: return GET_METRIC (OS2, yStrikeoutPosition); - case HB_OT_METRICS_UNDERLINE_SIZE: return GET_METRIC (post->table, underlineThickness); - case HB_OT_METRICS_UNDERLINE_OFFSET: return GET_METRIC (post->table, underlinePosition); -#undef GET_METRIC -#undef GET_VAR - default: return false; - } -} diff --git a/src/hb-ot-metrics.cc b/src/hb-ot-metrics.cc index bec4c569b..a25e2e61c 100644 --- a/src/hb-ot-metrics.cc +++ b/src/hb-ot-metrics.cc @@ -26,10 +26,79 @@ #ifndef HB_NO_METRICS -#include "hb-ot-metrics.hh" #include "hb-ot-var-mvar-table.hh" +#include "hb-ot-gasp-table.hh" // Just so we compile it; unused otherwise. +#include "hb-ot-os2-table.hh" +#include "hb-ot-post-table.hh" +#include "hb-ot-hmtx-table.hh" +#include "hb-ot-metrics.hh" #include "hb-ot-face.hh" +#if 0 +static bool +_get_gasp (hb_face_t *face, float *result, hb_ot_metrics_t metrics_tag) +{ + const OT::GaspRange& range = face->table.gasp->get_gasp_range (metrics_tag - HB_TAG ('g','s','p','0')); + if (&range == &Null (OT::GaspRange)) return false; + if (result) *result = range.rangeMaxPPEM + face->table.MVAR->get_var (metrics_tag, nullptr, 0); + return true; +} +#endif + +bool +hb_ot_metrics_get_position_internal (hb_face_t *face, + hb_ot_metrics_t metrics_tag, + float *position /* OUT. May be NULL. */) +{ + switch (metrics_tag) + { +#ifndef HB_NO_VAR +#define GET_VAR hb_ot_metrics_get_variation (face, metrics_tag) +#else +#define GET_VAR 0 +#endif +#define GET_METRIC(TABLE, ATTR) \ + (face->table.TABLE->has_data () && \ + (position && (*position = face->table.TABLE->ATTR + GET_VAR), true)) + case HB_OT_METRICS_HORIZONTAL_ASCENDER: + return (!face->table.OS2->use_typo_metrics () && GET_METRIC (hhea, ascender)) || + GET_METRIC (OS2, sTypoAscender); + case HB_OT_METRICS_HORIZONTAL_DESCENDER: + return (!face->table.OS2->use_typo_metrics () && GET_METRIC (hhea, descender)) || + GET_METRIC (OS2, sTypoDescender); + case HB_OT_METRICS_HORIZONTAL_LINE_GAP: + return (!face->table.OS2->use_typo_metrics () && GET_METRIC (hhea, lineGap)) || + GET_METRIC (OS2, sTypoLineGap); + case HB_OT_METRICS_HORIZONTAL_CLIPPING_ASCENT: return GET_METRIC (OS2, usWinAscent); + case HB_OT_METRICS_HORIZONTAL_CLIPPING_DESCENT: return GET_METRIC (OS2, usWinDescent); + case HB_OT_METRICS_VERTICAL_ASCENDER: return GET_METRIC (vhea, ascender); + case HB_OT_METRICS_VERTICAL_DESCENDER: return GET_METRIC (vhea, descender); + case HB_OT_METRICS_VERTICAL_LINE_GAP: return GET_METRIC (vhea, lineGap); + case HB_OT_METRICS_HORIZONTAL_CARET_RISE: return GET_METRIC (hhea, caretSlopeRise); + case HB_OT_METRICS_HORIZONTAL_CARET_RUN: return GET_METRIC (hhea, caretSlopeRun); + case HB_OT_METRICS_HORIZONTAL_CARET_OFFSET: return GET_METRIC (hhea, caretOffset); + case HB_OT_METRICS_VERTICAL_CARET_RISE: return GET_METRIC (vhea, caretSlopeRise); + case HB_OT_METRICS_VERTICAL_CARET_RUN: return GET_METRIC (vhea, caretSlopeRun); + case HB_OT_METRICS_VERTICAL_CARET_OFFSET: return GET_METRIC (vhea, caretOffset); + case HB_OT_METRICS_X_HEIGHT: return GET_METRIC (OS2->v2 (), sxHeight); + case HB_OT_METRICS_CAP_HEIGHT: return GET_METRIC (OS2->v2 (), sCapHeight); + case HB_OT_METRICS_SUBSCRIPT_EM_X_SIZE: return GET_METRIC (OS2, ySubscriptXSize); + case HB_OT_METRICS_SUBSCRIPT_EM_Y_SIZE: return GET_METRIC (OS2, ySubscriptYSize); + case HB_OT_METRICS_SUBSCRIPT_EM_X_OFFSET: return GET_METRIC (OS2, ySubscriptXOffset); + case HB_OT_METRICS_SUBSCRIPT_EM_Y_OFFSET: return GET_METRIC (OS2, ySubscriptYOffset); + case HB_OT_METRICS_SUPERSCRIPT_EM_X_SIZE: return GET_METRIC (OS2, ySuperscriptXSize); + case HB_OT_METRICS_SUPERSCRIPT_EM_Y_SIZE: return GET_METRIC (OS2, ySuperscriptYSize); + case HB_OT_METRICS_SUPERSCRIPT_EM_X_OFFSET: return GET_METRIC (OS2, ySuperscriptXOffset); + case HB_OT_METRICS_SUPERSCRIPT_EM_Y_OFFSET: return GET_METRIC (OS2, ySuperscriptYOffset); + case HB_OT_METRICS_STRIKEOUT_SIZE: return GET_METRIC (OS2, yStrikeoutSize); + case HB_OT_METRICS_STRIKEOUT_OFFSET: return GET_METRIC (OS2, yStrikeoutPosition); + case HB_OT_METRICS_UNDERLINE_SIZE: return GET_METRIC (post->table, underlineThickness); + case HB_OT_METRICS_UNDERLINE_OFFSET: return GET_METRIC (post->table, underlinePosition); +#undef GET_METRIC +#undef GET_VAR + default: return false; + } +} /** * hb_ot_metrics_get_position: From ac3518af58464b33f1b16b34b8846c302b935208 Mon Sep 17 00:00:00 2001 From: Ebrahim Byagowi Date: Sat, 20 Jul 2019 14:03:36 +0430 Subject: [PATCH 34/78] Define post table only when used --- src/hb-ot-face-table-list.hh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/hb-ot-face-table-list.hh b/src/hb-ot-face-table-list.hh index 7af024612..f9c484be6 100644 --- a/src/hb-ot-face-table-list.hh +++ b/src/hb-ot-face-table-list.hh @@ -53,7 +53,9 @@ HB_OT_ACCELERATOR (OT, cmap) HB_OT_TABLE (OT, hhea) HB_OT_ACCELERATOR (OT, hmtx) HB_OT_TABLE (OT, OS2) +#if !defined(HB_NO_OT_FONT_GLYPH_NAMES) || !defined(HB_NO_METRICS) HB_OT_ACCELERATOR (OT, post) +#endif #ifndef HB_NO_NAME HB_OT_ACCELERATOR (OT, name) #endif From cb704337407ae9ccb57ae7631567002028b93c84 Mon Sep 17 00:00:00 2001 From: Ebrahim Byagowi Date: Sat, 20 Jul 2019 14:33:57 +0430 Subject: [PATCH 35/78] Merge _get_position_internal into _get_position --- src/hb-ot-metrics.cc | 143 +++++++++++++++---------------------------- src/hb-ot-metrics.hh | 5 -- 2 files changed, 49 insertions(+), 99 deletions(-) diff --git a/src/hb-ot-metrics.cc b/src/hb-ot-metrics.cc index a25e2e61c..e424ebc97 100644 --- a/src/hb-ot-metrics.cc +++ b/src/hb-ot-metrics.cc @@ -30,7 +30,7 @@ #include "hb-ot-gasp-table.hh" // Just so we compile it; unused otherwise. #include "hb-ot-os2-table.hh" #include "hb-ot-post-table.hh" -#include "hb-ot-hmtx-table.hh" +#include "hb-ot-hhea-table.hh" #include "hb-ot-metrics.hh" #include "hb-ot-face.hh" @@ -45,61 +45,6 @@ _get_gasp (hb_face_t *face, float *result, hb_ot_metrics_t metrics_tag) } #endif -bool -hb_ot_metrics_get_position_internal (hb_face_t *face, - hb_ot_metrics_t metrics_tag, - float *position /* OUT. May be NULL. */) -{ - switch (metrics_tag) - { -#ifndef HB_NO_VAR -#define GET_VAR hb_ot_metrics_get_variation (face, metrics_tag) -#else -#define GET_VAR 0 -#endif -#define GET_METRIC(TABLE, ATTR) \ - (face->table.TABLE->has_data () && \ - (position && (*position = face->table.TABLE->ATTR + GET_VAR), true)) - case HB_OT_METRICS_HORIZONTAL_ASCENDER: - return (!face->table.OS2->use_typo_metrics () && GET_METRIC (hhea, ascender)) || - GET_METRIC (OS2, sTypoAscender); - case HB_OT_METRICS_HORIZONTAL_DESCENDER: - return (!face->table.OS2->use_typo_metrics () && GET_METRIC (hhea, descender)) || - GET_METRIC (OS2, sTypoDescender); - case HB_OT_METRICS_HORIZONTAL_LINE_GAP: - return (!face->table.OS2->use_typo_metrics () && GET_METRIC (hhea, lineGap)) || - GET_METRIC (OS2, sTypoLineGap); - case HB_OT_METRICS_HORIZONTAL_CLIPPING_ASCENT: return GET_METRIC (OS2, usWinAscent); - case HB_OT_METRICS_HORIZONTAL_CLIPPING_DESCENT: return GET_METRIC (OS2, usWinDescent); - case HB_OT_METRICS_VERTICAL_ASCENDER: return GET_METRIC (vhea, ascender); - case HB_OT_METRICS_VERTICAL_DESCENDER: return GET_METRIC (vhea, descender); - case HB_OT_METRICS_VERTICAL_LINE_GAP: return GET_METRIC (vhea, lineGap); - case HB_OT_METRICS_HORIZONTAL_CARET_RISE: return GET_METRIC (hhea, caretSlopeRise); - case HB_OT_METRICS_HORIZONTAL_CARET_RUN: return GET_METRIC (hhea, caretSlopeRun); - case HB_OT_METRICS_HORIZONTAL_CARET_OFFSET: return GET_METRIC (hhea, caretOffset); - case HB_OT_METRICS_VERTICAL_CARET_RISE: return GET_METRIC (vhea, caretSlopeRise); - case HB_OT_METRICS_VERTICAL_CARET_RUN: return GET_METRIC (vhea, caretSlopeRun); - case HB_OT_METRICS_VERTICAL_CARET_OFFSET: return GET_METRIC (vhea, caretOffset); - case HB_OT_METRICS_X_HEIGHT: return GET_METRIC (OS2->v2 (), sxHeight); - case HB_OT_METRICS_CAP_HEIGHT: return GET_METRIC (OS2->v2 (), sCapHeight); - case HB_OT_METRICS_SUBSCRIPT_EM_X_SIZE: return GET_METRIC (OS2, ySubscriptXSize); - case HB_OT_METRICS_SUBSCRIPT_EM_Y_SIZE: return GET_METRIC (OS2, ySubscriptYSize); - case HB_OT_METRICS_SUBSCRIPT_EM_X_OFFSET: return GET_METRIC (OS2, ySubscriptXOffset); - case HB_OT_METRICS_SUBSCRIPT_EM_Y_OFFSET: return GET_METRIC (OS2, ySubscriptYOffset); - case HB_OT_METRICS_SUPERSCRIPT_EM_X_SIZE: return GET_METRIC (OS2, ySuperscriptXSize); - case HB_OT_METRICS_SUPERSCRIPT_EM_Y_SIZE: return GET_METRIC (OS2, ySuperscriptYSize); - case HB_OT_METRICS_SUPERSCRIPT_EM_X_OFFSET: return GET_METRIC (OS2, ySuperscriptXOffset); - case HB_OT_METRICS_SUPERSCRIPT_EM_Y_OFFSET: return GET_METRIC (OS2, ySuperscriptYOffset); - case HB_OT_METRICS_STRIKEOUT_SIZE: return GET_METRIC (OS2, yStrikeoutSize); - case HB_OT_METRICS_STRIKEOUT_OFFSET: return GET_METRIC (OS2, yStrikeoutPosition); - case HB_OT_METRICS_UNDERLINE_SIZE: return GET_METRIC (post->table, underlineThickness); - case HB_OT_METRICS_UNDERLINE_OFFSET: return GET_METRIC (post->table, underlinePosition); -#undef GET_METRIC -#undef GET_VAR - default: return false; - } -} - /** * hb_ot_metrics_get_position: * @font: a #hb_font_t object. @@ -107,7 +52,7 @@ hb_ot_metrics_get_position_internal (hb_face_t *face, * @position: (out) (optional): result of metrics value from the font. * * It fetches metrics value corresponding to a given tag from a font. - * + * * Returns: Whether found the requested metrics in the font. * Since: REPLACEME **/ @@ -116,48 +61,58 @@ hb_ot_metrics_get_position (hb_font_t *font, hb_ot_metrics_t metrics_tag, hb_position_t *position /* OUT. May be NULL. */) { + hb_face_t *face = font->face; switch (metrics_tag) { +#ifndef HB_NO_VAR +#define GET_VAR hb_ot_metrics_get_variation (face, metrics_tag) +#else +#define GET_VAR 0 +#endif +#define GET_METRIC_X(TABLE, ATTR) \ + (face->table.TABLE->has_data () && \ + (position && (*position = font->em_scalef_x (face->table.TABLE->ATTR + GET_VAR)), true)) +#define GET_METRIC_Y(TABLE, ATTR) \ + (face->table.TABLE->has_data () && \ + (position && (*position = font->em_scalef_y (face->table.TABLE->ATTR + GET_VAR)), true)) case HB_OT_METRICS_HORIZONTAL_ASCENDER: + return (!face->table.OS2->use_typo_metrics () && GET_METRIC_Y (hhea, ascender)) || + GET_METRIC_Y (OS2, sTypoAscender); case HB_OT_METRICS_HORIZONTAL_DESCENDER: + return (!face->table.OS2->use_typo_metrics () && GET_METRIC_Y (hhea, descender)) || + GET_METRIC_Y (OS2, sTypoDescender); case HB_OT_METRICS_HORIZONTAL_LINE_GAP: - case HB_OT_METRICS_HORIZONTAL_CLIPPING_ASCENT: - case HB_OT_METRICS_HORIZONTAL_CLIPPING_DESCENT: - case HB_OT_METRICS_HORIZONTAL_CARET_RISE: - case HB_OT_METRICS_VERTICAL_CARET_RUN: - case HB_OT_METRICS_VERTICAL_CARET_OFFSET: - case HB_OT_METRICS_X_HEIGHT: - case HB_OT_METRICS_CAP_HEIGHT: - case HB_OT_METRICS_SUBSCRIPT_EM_Y_SIZE: - case HB_OT_METRICS_SUBSCRIPT_EM_Y_OFFSET: - case HB_OT_METRICS_SUPERSCRIPT_EM_Y_SIZE: - case HB_OT_METRICS_SUPERSCRIPT_EM_Y_OFFSET: - case HB_OT_METRICS_STRIKEOUT_SIZE: - case HB_OT_METRICS_STRIKEOUT_OFFSET: - case HB_OT_METRICS_UNDERLINE_SIZE: - case HB_OT_METRICS_UNDERLINE_OFFSET: { - float value; - bool result = hb_ot_metrics_get_position_internal (font->face, metrics_tag, &value); - if (result && position) *position = font->em_scalef_y (value); - return result; - } - case HB_OT_METRICS_VERTICAL_ASCENDER: - case HB_OT_METRICS_VERTICAL_DESCENDER: - case HB_OT_METRICS_VERTICAL_LINE_GAP: - case HB_OT_METRICS_HORIZONTAL_CARET_RUN: - case HB_OT_METRICS_HORIZONTAL_CARET_OFFSET: - case HB_OT_METRICS_VERTICAL_CARET_RISE: - case HB_OT_METRICS_SUBSCRIPT_EM_X_SIZE: - case HB_OT_METRICS_SUBSCRIPT_EM_X_OFFSET: - case HB_OT_METRICS_SUPERSCRIPT_EM_X_SIZE: - case HB_OT_METRICS_SUPERSCRIPT_EM_X_OFFSET: { - float value; - bool result = hb_ot_metrics_get_position_internal (font->face, metrics_tag, &value); - if (result && position) *position = font->em_scalef_x (value); - return result; - } - default: - return false; + return (!face->table.OS2->use_typo_metrics () && GET_METRIC_Y (hhea, lineGap)) || + GET_METRIC_Y (OS2, sTypoLineGap); + case HB_OT_METRICS_VERTICAL_ASCENDER: return GET_METRIC_X (vhea, ascender); + case HB_OT_METRICS_VERTICAL_DESCENDER: return GET_METRIC_X (vhea, descender); + case HB_OT_METRICS_VERTICAL_LINE_GAP: return GET_METRIC_X (vhea, lineGap); + case HB_OT_METRICS_HORIZONTAL_CLIPPING_ASCENT: return GET_METRIC_Y (OS2, usWinAscent); + case HB_OT_METRICS_HORIZONTAL_CLIPPING_DESCENT: return GET_METRIC_Y (OS2, usWinDescent); + case HB_OT_METRICS_HORIZONTAL_CARET_RISE: return GET_METRIC_Y (hhea, caretSlopeRise); + case HB_OT_METRICS_HORIZONTAL_CARET_RUN: return GET_METRIC_X (hhea, caretSlopeRun); + case HB_OT_METRICS_HORIZONTAL_CARET_OFFSET: return GET_METRIC_X (hhea, caretOffset); + case HB_OT_METRICS_VERTICAL_CARET_RISE: return GET_METRIC_X (vhea, caretSlopeRise); + case HB_OT_METRICS_VERTICAL_CARET_RUN: return GET_METRIC_Y (vhea, caretSlopeRun); + case HB_OT_METRICS_VERTICAL_CARET_OFFSET: return GET_METRIC_Y (vhea, caretOffset); + case HB_OT_METRICS_X_HEIGHT: return GET_METRIC_Y (OS2->v2 (), sxHeight); + case HB_OT_METRICS_CAP_HEIGHT: return GET_METRIC_Y (OS2->v2 (), sCapHeight); + case HB_OT_METRICS_SUBSCRIPT_EM_X_SIZE: return GET_METRIC_X (OS2, ySubscriptXSize); + case HB_OT_METRICS_SUBSCRIPT_EM_Y_SIZE: return GET_METRIC_Y (OS2, ySubscriptYSize); + case HB_OT_METRICS_SUBSCRIPT_EM_X_OFFSET: return GET_METRIC_X (OS2, ySubscriptXOffset); + case HB_OT_METRICS_SUBSCRIPT_EM_Y_OFFSET: return GET_METRIC_Y (OS2, ySubscriptYOffset); + case HB_OT_METRICS_SUPERSCRIPT_EM_X_SIZE: return GET_METRIC_X (OS2, ySuperscriptXSize); + case HB_OT_METRICS_SUPERSCRIPT_EM_Y_SIZE: return GET_METRIC_Y (OS2, ySuperscriptYSize); + case HB_OT_METRICS_SUPERSCRIPT_EM_X_OFFSET: return GET_METRIC_X (OS2, ySuperscriptXOffset); + case HB_OT_METRICS_SUPERSCRIPT_EM_Y_OFFSET: return GET_METRIC_Y (OS2, ySuperscriptYOffset); + case HB_OT_METRICS_STRIKEOUT_SIZE: return GET_METRIC_Y (OS2, yStrikeoutSize); + case HB_OT_METRICS_STRIKEOUT_OFFSET: return GET_METRIC_Y (OS2, yStrikeoutPosition); + case HB_OT_METRICS_UNDERLINE_SIZE: return GET_METRIC_Y (post->table, underlineThickness); + case HB_OT_METRICS_UNDERLINE_OFFSET: return GET_METRIC_Y (post->table, underlinePosition); +#undef GET_METRIC_Y +#undef GET_METRIC_X +#undef GET_VAR + default: return false; } } diff --git a/src/hb-ot-metrics.hh b/src/hb-ot-metrics.hh index e813f463f..c7b254385 100644 --- a/src/hb-ot-metrics.hh +++ b/src/hb-ot-metrics.hh @@ -27,9 +27,4 @@ #include "hb.hh" -HB_INTERNAL bool -hb_ot_metrics_get_position_internal (hb_face_t *face, - hb_ot_metrics_t metrics_tag, - float *position /* OUT. May be NULL. */); - #endif /* HB_OT_METRICS_HH */ From 772e62688cd72c02910f623653d2ec8ef6990928 Mon Sep 17 00:00:00 2001 From: Ebrahim Byagowi Date: Sat, 20 Jul 2019 14:50:31 +0430 Subject: [PATCH 36/78] Make HB_TINY builds work again by separating the always needed part --- src/hb-ot-font.cc | 12 ++++----- src/hb-ot-metrics.cc | 62 ++++++++++++++++++++++++++++++++++---------- src/hb-ot-metrics.hh | 5 ++++ 3 files changed, 59 insertions(+), 20 deletions(-) diff --git a/src/hb-ot-font.cc b/src/hb-ot-font.cc index ae56aedea..77eb6bb3a 100644 --- a/src/hb-ot-font.cc +++ b/src/hb-ot-font.cc @@ -234,9 +234,9 @@ hb_ot_get_font_h_extents (hb_font_t *font, hb_font_extents_t *metrics, void *user_data HB_UNUSED) { - return hb_ot_metrics_get_position (font, HB_OT_METRICS_HORIZONTAL_ASCENDER, &metrics->ascender) && - hb_ot_metrics_get_position (font, HB_OT_METRICS_HORIZONTAL_DESCENDER, &metrics->descender) && - hb_ot_metrics_get_position (font, HB_OT_METRICS_HORIZONTAL_LINE_GAP, &metrics->line_gap); + return hb_ot_metrics_get_position_common (font, HB_OT_METRICS_HORIZONTAL_ASCENDER, &metrics->ascender) && + hb_ot_metrics_get_position_common (font, HB_OT_METRICS_HORIZONTAL_DESCENDER, &metrics->descender) && + hb_ot_metrics_get_position_common (font, HB_OT_METRICS_HORIZONTAL_LINE_GAP, &metrics->line_gap); } static hb_bool_t @@ -245,9 +245,9 @@ hb_ot_get_font_v_extents (hb_font_t *font, hb_font_extents_t *metrics, void *user_data HB_UNUSED) { - return hb_ot_metrics_get_position (font, HB_OT_METRICS_VERTICAL_ASCENDER, &metrics->ascender) && - hb_ot_metrics_get_position (font, HB_OT_METRICS_VERTICAL_DESCENDER, &metrics->descender) && - hb_ot_metrics_get_position (font, HB_OT_METRICS_VERTICAL_LINE_GAP, &metrics->line_gap); + return hb_ot_metrics_get_position_common (font, HB_OT_METRICS_VERTICAL_ASCENDER, &metrics->ascender) && + hb_ot_metrics_get_position_common (font, HB_OT_METRICS_VERTICAL_DESCENDER, &metrics->descender) && + hb_ot_metrics_get_position_common (font, HB_OT_METRICS_VERTICAL_LINE_GAP, &metrics->line_gap); } #if HB_USE_ATEXIT diff --git a/src/hb-ot-metrics.cc b/src/hb-ot-metrics.cc index e424ebc97..249f0594c 100644 --- a/src/hb-ot-metrics.cc +++ b/src/hb-ot-metrics.cc @@ -24,8 +24,6 @@ #include "hb.hh" -#ifndef HB_NO_METRICS - #include "hb-ot-var-mvar-table.hh" #include "hb-ot-gasp-table.hh" // Just so we compile it; unused otherwise. #include "hb-ot-os2-table.hh" @@ -34,6 +32,48 @@ #include "hb-ot-metrics.hh" #include "hb-ot-face.hh" +/* Common part of _get_position logic needed on hb-ot-font so we + can have a slim builds using HB_NO_METRICS */ +bool +hb_ot_metrics_get_position_common (hb_font_t *font, + hb_ot_metrics_t metrics_tag, + hb_position_t *position /* OUT. May be NULL. */) +{ + hb_face_t *face = font->face; + switch ((unsigned int) metrics_tag) + { +#ifndef HB_NO_VAR +#define GET_VAR hb_ot_metrics_get_variation (face, metrics_tag) +#else +#define GET_VAR 0 +#endif +#define GET_METRIC_X(TABLE, ATTR) \ + (face->table.TABLE->has_data () && \ + (position && (*position = font->em_scalef_x (face->table.TABLE->ATTR + GET_VAR)), true)) +#define GET_METRIC_Y(TABLE, ATTR) \ + (face->table.TABLE->has_data () && \ + (position && (*position = font->em_scalef_y (face->table.TABLE->ATTR + GET_VAR)), true)) + case HB_OT_METRICS_HORIZONTAL_ASCENDER: + return (!face->table.OS2->use_typo_metrics () && GET_METRIC_Y (hhea, ascender)) || + GET_METRIC_Y (OS2, sTypoAscender); + case HB_OT_METRICS_HORIZONTAL_DESCENDER: + return (!face->table.OS2->use_typo_metrics () && GET_METRIC_Y (hhea, descender)) || + GET_METRIC_Y (OS2, sTypoDescender); + case HB_OT_METRICS_HORIZONTAL_LINE_GAP: + return (!face->table.OS2->use_typo_metrics () && GET_METRIC_Y (hhea, lineGap)) || + GET_METRIC_Y (OS2, sTypoLineGap); + case HB_OT_METRICS_VERTICAL_ASCENDER: return GET_METRIC_X (vhea, ascender); + case HB_OT_METRICS_VERTICAL_DESCENDER: return GET_METRIC_X (vhea, descender); + case HB_OT_METRICS_VERTICAL_LINE_GAP: return GET_METRIC_X (vhea, lineGap); +#undef GET_METRIC_Y +#undef GET_METRIC_X +#undef GET_VAR + default: assert (0); return false; + } +} + +#ifndef HB_NO_METRICS + #if 0 static bool _get_gasp (hb_face_t *face, float *result, hb_ot_metrics_t metrics_tag) @@ -64,6 +104,12 @@ hb_ot_metrics_get_position (hb_font_t *font, hb_face_t *face = font->face; switch (metrics_tag) { + case HB_OT_METRICS_HORIZONTAL_ASCENDER: + case HB_OT_METRICS_HORIZONTAL_DESCENDER: + case HB_OT_METRICS_HORIZONTAL_LINE_GAP: + case HB_OT_METRICS_VERTICAL_ASCENDER: + case HB_OT_METRICS_VERTICAL_DESCENDER: + case HB_OT_METRICS_VERTICAL_LINE_GAP: return hb_ot_metrics_get_position_common (font, metrics_tag, position); #ifndef HB_NO_VAR #define GET_VAR hb_ot_metrics_get_variation (face, metrics_tag) #else @@ -75,18 +121,6 @@ hb_ot_metrics_get_position (hb_font_t *font, #define GET_METRIC_Y(TABLE, ATTR) \ (face->table.TABLE->has_data () && \ (position && (*position = font->em_scalef_y (face->table.TABLE->ATTR + GET_VAR)), true)) - case HB_OT_METRICS_HORIZONTAL_ASCENDER: - return (!face->table.OS2->use_typo_metrics () && GET_METRIC_Y (hhea, ascender)) || - GET_METRIC_Y (OS2, sTypoAscender); - case HB_OT_METRICS_HORIZONTAL_DESCENDER: - return (!face->table.OS2->use_typo_metrics () && GET_METRIC_Y (hhea, descender)) || - GET_METRIC_Y (OS2, sTypoDescender); - case HB_OT_METRICS_HORIZONTAL_LINE_GAP: - return (!face->table.OS2->use_typo_metrics () && GET_METRIC_Y (hhea, lineGap)) || - GET_METRIC_Y (OS2, sTypoLineGap); - case HB_OT_METRICS_VERTICAL_ASCENDER: return GET_METRIC_X (vhea, ascender); - case HB_OT_METRICS_VERTICAL_DESCENDER: return GET_METRIC_X (vhea, descender); - case HB_OT_METRICS_VERTICAL_LINE_GAP: return GET_METRIC_X (vhea, lineGap); case HB_OT_METRICS_HORIZONTAL_CLIPPING_ASCENT: return GET_METRIC_Y (OS2, usWinAscent); case HB_OT_METRICS_HORIZONTAL_CLIPPING_DESCENT: return GET_METRIC_Y (OS2, usWinDescent); case HB_OT_METRICS_HORIZONTAL_CARET_RISE: return GET_METRIC_Y (hhea, caretSlopeRise); diff --git a/src/hb-ot-metrics.hh b/src/hb-ot-metrics.hh index c7b254385..3a9331619 100644 --- a/src/hb-ot-metrics.hh +++ b/src/hb-ot-metrics.hh @@ -27,4 +27,9 @@ #include "hb.hh" +HB_INTERNAL bool +hb_ot_metrics_get_position_common (hb_font_t *font, + hb_ot_metrics_t metrics_tag, + hb_position_t *position /* OUT. May be NULL. */); + #endif /* HB_OT_METRICS_HH */ From c13ef9cc64a447e74abfed75f4f418bf644be88d Mon Sep 17 00:00:00 2001 From: Ebrahim Byagowi Date: Sat, 20 Jul 2019 15:01:37 +0430 Subject: [PATCH 37/78] Bring back asc/desc abs logic used to be in hmtx table --- src/hb-ot-metrics.cc | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/src/hb-ot-metrics.cc b/src/hb-ot-metrics.cc index 249f0594c..8b98511ee 100644 --- a/src/hb-ot-metrics.cc +++ b/src/hb-ot-metrics.cc @@ -32,6 +32,19 @@ #include "hb-ot-metrics.hh" #include "hb-ot-face.hh" + +static float +_fix_ascender_descender (float value, hb_ot_metrics_t metrics_tag) +{ + if (metrics_tag == HB_OT_METRICS_HORIZONTAL_ASCENDER || + metrics_tag == HB_OT_METRICS_VERTICAL_ASCENDER) + return fabs ((double) value); + if (metrics_tag == HB_OT_METRICS_HORIZONTAL_DESCENDER || + metrics_tag == HB_OT_METRICS_VERTICAL_DESCENDER) + return -fabs ((double) value); + return value; +} + /* Common part of _get_position logic needed on hb-ot-font so we can have a slim builds using HB_NO_METRICS */ bool @@ -45,14 +58,16 @@ hb_ot_metrics_get_position_common (hb_font_t *font, #ifndef HB_NO_VAR #define GET_VAR hb_ot_metrics_get_variation (face, metrics_tag) #else -#define GET_VAR 0 +#define GET_VAR .0f #endif #define GET_METRIC_X(TABLE, ATTR) \ (face->table.TABLE->has_data () && \ - (position && (*position = font->em_scalef_x (face->table.TABLE->ATTR + GET_VAR)), true)) + (position && (*position = font->em_scalef_x (_fix_ascender_descender ( \ + face->table.TABLE->ATTR + GET_VAR, metrics_tag))), true)) #define GET_METRIC_Y(TABLE, ATTR) \ (face->table.TABLE->has_data () && \ - (position && (*position = font->em_scalef_y (face->table.TABLE->ATTR + GET_VAR)), true)) + (position && (*position = font->em_scalef_y (_fix_ascender_descender ( \ + face->table.TABLE->ATTR + GET_VAR, metrics_tag))), true)) case HB_OT_METRICS_HORIZONTAL_ASCENDER: return (!face->table.OS2->use_typo_metrics () && GET_METRIC_Y (hhea, ascender)) || GET_METRIC_Y (OS2, sTypoAscender); From 00e13985fbc5291850b8ea3d021e5f83c8a297e3 Mon Sep 17 00:00:00 2001 From: Ebrahim Byagowi Date: Sat, 20 Jul 2019 23:03:51 +0430 Subject: [PATCH 38/78] Revert hhea fallback to OS/2 to its reverse way As searching number of hhea having fonts beats the number of OS/2 having ones in macOS 10.14.2 --- src/hb-ot-metrics.cc | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/hb-ot-metrics.cc b/src/hb-ot-metrics.cc index 8b98511ee..ecdba46ae 100644 --- a/src/hb-ot-metrics.cc +++ b/src/hb-ot-metrics.cc @@ -69,14 +69,14 @@ hb_ot_metrics_get_position_common (hb_font_t *font, (position && (*position = font->em_scalef_y (_fix_ascender_descender ( \ face->table.TABLE->ATTR + GET_VAR, metrics_tag))), true)) case HB_OT_METRICS_HORIZONTAL_ASCENDER: - return (!face->table.OS2->use_typo_metrics () && GET_METRIC_Y (hhea, ascender)) || - GET_METRIC_Y (OS2, sTypoAscender); + return (face->table.OS2->use_typo_metrics () && GET_METRIC_Y (OS2, sTypoAscender)) || + GET_METRIC_Y (hhea, ascender); case HB_OT_METRICS_HORIZONTAL_DESCENDER: - return (!face->table.OS2->use_typo_metrics () && GET_METRIC_Y (hhea, descender)) || - GET_METRIC_Y (OS2, sTypoDescender); + return (face->table.OS2->use_typo_metrics () && GET_METRIC_Y (OS2, sTypoDescender)) || + GET_METRIC_Y (hhea, descender); case HB_OT_METRICS_HORIZONTAL_LINE_GAP: - return (!face->table.OS2->use_typo_metrics () && GET_METRIC_Y (hhea, lineGap)) || - GET_METRIC_Y (OS2, sTypoLineGap); + return (face->table.OS2->use_typo_metrics () && GET_METRIC_Y (OS2, sTypoLineGap)) || + GET_METRIC_Y (hhea, lineGap); case HB_OT_METRICS_VERTICAL_ASCENDER: return GET_METRIC_X (vhea, ascender); case HB_OT_METRICS_VERTICAL_DESCENDER: return GET_METRIC_X (vhea, descender); case HB_OT_METRICS_VERTICAL_LINE_GAP: return GET_METRIC_X (vhea, lineGap); From e540d402f6120e8761ff655bdbffb07d91a5f643 Mon Sep 17 00:00:00 2001 From: Behdad Esfahbod Date: Fri, 19 Jul 2019 11:19:31 -0700 Subject: [PATCH 39/78] [docs] Minor --- docs/harfbuzz-sections.txt | 2 ++ src/hb-ot-math.h | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/docs/harfbuzz-sections.txt b/docs/harfbuzz-sections.txt index 91d7cfa24..f23dcd19b 100644 --- a/docs/harfbuzz-sections.txt +++ b/docs/harfbuzz-sections.txt @@ -1,6 +1,7 @@ HB_H_IN HB_OT_H_IN +HB_AAT_H_IN
@@ -179,6 +180,7 @@ HB_BUFFER_SERIALIZE_FLAGS_DEFAULT HB_SCRIPT_CANADIAN_ABORIGINAL hb_font_funcs_set_glyph_func hb_font_get_glyph_func_t +HB_MATH_GLYPH_PART_FLAG_EXTENDER hb_ot_layout_table_choose_script hb_ot_layout_table_find_script hb_ot_tag_from_language diff --git a/src/hb-ot-math.h b/src/hb-ot-math.h index 7b2befbce..ad864a762 100644 --- a/src/hb-ot-math.h +++ b/src/hb-ot-math.h @@ -158,7 +158,7 @@ typedef enum { /*< flags >*/ * hb_ot_math_glyph_part_t: * @glyph: The glyph index of the variant part * @start_connector_length: The length of the connector on the starting side of the variant part - * @end_connection_length: The length of the connector on the ending side of the variant part + * @end_connector_length: The length of the connector on the ending side of the variant part * @full_advance: The total advance of the part * @flags: #hb_ot_math_glyph_part_flags_t flags for the part * From 3d03bb84d44bc9ef8a77e974d0e937a3385ffb92 Mon Sep 17 00:00:00 2001 From: Ebrahim Byagowi Date: Sun, 21 Jul 2019 12:38:04 +0430 Subject: [PATCH 40/78] [metrics] minor, tweak comment --- src/hb-ot-metrics.cc | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/hb-ot-metrics.cc b/src/hb-ot-metrics.cc index ecdba46ae..1f2402b12 100644 --- a/src/hb-ot-metrics.cc +++ b/src/hb-ot-metrics.cc @@ -1,5 +1,5 @@ /* - * Copyright © 2018 Ebrahim Byagowi + * Copyright © 2018-2019 Ebrahim Byagowi * * This is part of HarfBuzz, a text shaping library. * @@ -45,8 +45,8 @@ _fix_ascender_descender (float value, hb_ot_metrics_t metrics_tag) return value; } -/* Common part of _get_position logic needed on hb-ot-font so we - can have a slim builds using HB_NO_METRICS */ +/* The common part of _get_position logic needed on hb-ot-font and here + to be able to have slim builds without the not always needed parts */ bool hb_ot_metrics_get_position_common (hb_font_t *font, hb_ot_metrics_t metrics_tag, From eb8bd2f7eccde483d33406f102c69260fde6fe23 Mon Sep 17 00:00:00 2001 From: Ebrahim Byagowi Date: Tue, 16 Jul 2019 22:27:01 +0430 Subject: [PATCH 41/78] Add hb_gdi_face_create API Based on Konstantin Ritt work posted on mailing list --- CMakeLists.txt | 8 +++++ appveyor.yml | 2 +- configure.ac | 23 ++++++++++++ docs/harfbuzz-sections.txt | 5 +++ src/Makefile.am | 8 +++++ src/Makefile.sources | 3 ++ src/harfbuzz.cc | 1 + src/hb-directwrite.cc | 9 ++--- src/hb-gdi.cc | 73 ++++++++++++++++++++++++++++++++++++++ src/hb-gdi.h | 39 ++++++++++++++++++++ src/hb-uniscribe.cc | 7 ---- src/hb.hh | 5 +++ 12 files changed, 168 insertions(+), 15 deletions(-) create mode 100644 src/hb-gdi.cc create mode 100644 src/hb-gdi.h diff --git a/CMakeLists.txt b/CMakeLists.txt index c41579c1c..ac857ef8f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -43,6 +43,7 @@ if (APPLE) endif () if (WIN32) option(HB_HAVE_UNISCRIBE "Enable Uniscribe shaper backend on Windows" OFF) + option(HB_HAVE_GDI "Enable GDI integration helpers on Windows" OFF) option(HB_HAVE_DIRECTWRITE "Enable DirectWrite shaper backend on Windows" OFF) endif () option(HB_BUILD_UTILS "Build harfbuzz utils, needs cairo, freetype, and glib properly be installed" OFF) @@ -77,6 +78,7 @@ if (HB_CHECK) set (HB_HAVE_GRAPHITE2 ON) if (WIN32) set (HB_HAVE_UNISCRIBE ON) + set (HB_HAVE_GDI ON) set (HB_HAVE_DIRECTWRITE ON) elseif (APPLE) set (HB_HAVE_CORETEXT ON) @@ -305,6 +307,12 @@ if (APPLE AND HB_HAVE_CORETEXT) endif () endif () +if (WIN32 AND HB_HAVE_GDI) + add_definitions(-DHAVE_GDI) + list(APPEND project_headers ${PROJECT_SOURCE_DIR}/src/hb-gdi.h) + list(APPEND THIRD_PARTY_LIBS gdi32) +endif () + if (WIN32 AND HB_HAVE_UNISCRIBE) add_definitions(-DHAVE_UNISCRIBE) list(APPEND project_headers ${PROJECT_SOURCE_DIR}/src/hb-uniscribe.h) diff --git a/appveyor.yml b/appveyor.yml index 236bb1b12..6daf8d225 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -73,7 +73,7 @@ build_script: - 'if "%compiler%"=="msvc2" cmake --build build --config %configuration%' - 'if "%compiler%"=="msys2" C:\msys64\usr\bin\bash -lc "curl https://raw.githubusercontent.com/mirror/mingw-w64/023eb04c396d4e8d8fcf604cfababc53dae13398/mingw-w64-headers/include/dwrite_1.h > %MINGW_PREFIX%/%MINGW_CHOST%/include/dwrite_1.h"' - - 'if "%compiler%"=="msys2" C:\msys64\usr\bin\bash -lc "cd $APPVEYOR_BUILD_FOLDER; PATH=$PATH:/mingw64/bin:/mingw32/bin; ./autogen.sh --with-uniscribe --with-freetype --with-glib --with-gobject --with-cairo --with-icu --with-graphite2 --with-directwrite --build=%MINGW_CHOST% --host=%MINGW_CHOST% --prefix=%MINGW_PREFIX%; make -j3 check || .ci/fail.sh"' + - 'if "%compiler%"=="msys2" C:\msys64\usr\bin\bash -lc "cd $APPVEYOR_BUILD_FOLDER; PATH=$PATH:/mingw64/bin:/mingw32/bin; ./autogen.sh --with-uniscribe --with-freetype --with-glib --with-gobject --with-cairo --with-icu --with-graphite2 --with-directwrite --with-gdi --build=%MINGW_CHOST% --host=%MINGW_CHOST% --prefix=%MINGW_PREFIX%; make -j3 check || .ci/fail.sh"' cache: - c:\tools\vcpkg\installed\ diff --git a/configure.ac b/configure.ac index 09ce4e6ec..cebb10adf 100644 --- a/configure.ac +++ b/configure.ac @@ -361,6 +361,28 @@ AM_CONDITIONAL(HAVE_UNISCRIBE, $have_uniscribe) dnl =========================================================================== +AC_ARG_WITH(gdi, + [AS_HELP_STRING([--with-gdi=@<:@yes/no/auto@:>@], + [Provide GDI integration helpers @<:@default=no@:>@])],, + [with_gdi=no]) +have_gdi=false +if test "x$with_gdi" = "xyes" -o "x$with_gdi" = "xauto"; then + AC_CHECK_HEADERS(windows.h, have_gdi=true) +fi +if test "x$with_gdi" = "xyes" -a "x$have_gdi" != "xtrue"; then + AC_MSG_ERROR([gdi support requested but not found]) +fi +if $have_gdi; then + GDI_CFLAGS= + GDI_LIBS="-lgdi32" + AC_SUBST(GDI_CFLAGS) + AC_SUBST(GDI_LIBS) + AC_DEFINE(HAVE_GDI, 1, [Have GDI library]) +fi +AM_CONDITIONAL(HAVE_GDI, $have_gdi) + +dnl =========================================================================== + AC_ARG_WITH(directwrite, [AS_HELP_STRING([--with-directwrite=@<:@yes/no/auto@:>@], [Use the DirectWrite library (experimental) @<:@default=no@:>@])],, @@ -510,6 +532,7 @@ Additional shapers (the more the merrier): Platform shapers (not normally needed): CoreText: ${have_coretext} DirectWrite: ${have_directwrite} + GDI: ${have_gdi} Uniscribe: ${have_uniscribe} Other features: diff --git a/docs/harfbuzz-sections.txt b/docs/harfbuzz-sections.txt index f23dcd19b..43fd76115 100644 --- a/docs/harfbuzz-sections.txt +++ b/docs/harfbuzz-sections.txt @@ -369,6 +369,11 @@ hb_ft_font_get_load_flags hb_ft_font_set_funcs
+
+hb-gdi +hb_gdi_face_create +
+
hb-glib hb_glib_get_unicode_funcs diff --git a/src/Makefile.am b/src/Makefile.am index 1e79483c9..54e4a02cf 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -82,6 +82,13 @@ HBSOURCES += $(HB_DIRECTWRITE_sources) HBHEADERS += $(HB_DIRECTWRITE_headers) endif +if HAVE_GDI +HBCFLAGS += $(GDI_CXXFLAGS) +HBNONPCLIBS += $(GDI_LIBS) +HBSOURCES += $(HB_GDI_sources) +HBHEADERS += $(HB_GDI_headers) +endif + if HAVE_CORETEXT HBCFLAGS += $(CORETEXT_CFLAGS) HBNONPCLIBS += $(CORETEXT_LIBS) @@ -313,6 +320,7 @@ harfbuzz.cc: Makefile.sources $(HB_FT_sources) \ $(HB_GRAPHITE2_sources) \ $(HB_UNISCRIBE_sources) \ + $(HB_GDI_sources) \ $(HB_DIRECTWRITE_sources) \ $(HB_CORETEXT_sources) \ ; do echo '#include "'$$f'"'; done | \ diff --git a/src/Makefile.sources b/src/Makefile.sources index e8d5bc593..4e84d869e 100644 --- a/src/Makefile.sources +++ b/src/Makefile.sources @@ -225,6 +225,9 @@ HB_CORETEXT_headers = hb-coretext.h HB_DIRECTWRITE_sources = hb-directwrite.cc HB_DIRECTWRITE_headers = hb-directwrite.h +HB_GDI_sources = hb-gdi.cc +HB_GDI_headers = hb-gdi.h + HB_UNISCRIBE_sources = hb-uniscribe.cc HB_UNISCRIBE_headers = hb-uniscribe.h diff --git a/src/harfbuzz.cc b/src/harfbuzz.cc index 26cfac1b4..e39913761 100644 --- a/src/harfbuzz.cc +++ b/src/harfbuzz.cc @@ -47,5 +47,6 @@ #include "hb-ft.cc" #include "hb-graphite2.cc" #include "hb-uniscribe.cc" +#include "hb-gdi.cc" #include "hb-directwrite.cc" #include "hb-coretext.cc" diff --git a/src/hb-directwrite.cc b/src/hb-directwrite.cc index 810c5e553..c14e9d2be 100644 --- a/src/hb-directwrite.cc +++ b/src/hb-directwrite.cc @@ -539,11 +539,6 @@ protected: Run mRunHead; }; -static inline uint16_t hb_dw_uint16_swap (const uint16_t v) -{ return (v >> 8) | (v << 8); } -static inline uint32_t hb_dw_uint32_swap (const uint32_t v) -{ return (hb_dw_uint16_swap (v) << 16) | hb_dw_uint16_swap (v >> 16); } - /* * shaper */ @@ -653,7 +648,7 @@ _hb_directwrite_shape_full (hb_shape_plan_t *shape_plan, for (unsigned int i = 0; i < num_features; ++i) { typographic_features.features[i].nameTag = (DWRITE_FONT_FEATURE_TAG) - hb_dw_uint32_swap (features[i].tag); + hb_uint32_swap (features[i].tag); typographic_features.features[i].parameter = features[i].value; } } @@ -941,7 +936,7 @@ _hb_directwrite_reference_table (hb_face_t *face HB_UNUSED, hb_tag_t tag, void * uint32_t length; void *table_context; BOOL exists; - if (!dw_face || FAILED (dw_face->TryGetFontTable (hb_dw_uint32_swap (tag), &data, + if (!dw_face || FAILED (dw_face->TryGetFontTable (hb_uint32_swap (tag), &data, &length, &table_context, &exists))) return nullptr; diff --git a/src/hb-gdi.cc b/src/hb-gdi.cc new file mode 100644 index 000000000..526f1cd9e --- /dev/null +++ b/src/hb-gdi.cc @@ -0,0 +1,73 @@ +/* + * Copyright © 2019 Ebrahim Byagowi + * + * This is part of HarfBuzz, a text shaping library. + * + * Permission is hereby granted, without written agreement and without + * license or royalty fees, to use, copy, modify, and distribute this + * software and its documentation for any purpose, provided that the + * above copyright notice and the following two paragraphs appear in + * all copies of this software. + * + * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES + * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, + * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. + */ + +#include "hb.hh" + +#ifdef HAVE_GDI + +#include "hb-gdi.h" + +static hb_blob_t * +_hb_gdi_reference_table (hb_face_t *face HB_UNUSED, hb_tag_t tag, void *user_data) +{ + char *buffer = nullptr; + DWORD length = 0; + + HDC hdc = GetDC (nullptr); + if (unlikely (!SelectObject (hdc, (HFONT) user_data))) goto fail; + + length = GetFontData (hdc, hb_uint32_swap (tag), 0, buffer, length); + if (unlikely (length == GDI_ERROR)) goto fail_with_releasedc; + + buffer = (char *) malloc (length); + if (unlikely (!buffer)) goto fail_with_releasedc; + length = GetFontData (hdc, hb_uint32_swap (tag), 0, buffer, length); + if (unlikely (length == GDI_ERROR)) goto fail_with_releasedc_and_free; + ReleaseDC (nullptr, hdc); + + return hb_blob_create ((const char *) buffer, length, HB_MEMORY_MODE_WRITABLE, buffer, free); + +fail_with_releasedc_and_free: + free (buffer); +fail_with_releasedc: + ReleaseDC (nullptr, hdc); +fail: + return hb_blob_get_empty (); +} + +/** + * hb_gdi_face_create: + * @hdc: a HFONT object. + * + * Return value: #hb_face_t object corresponding to the given input + * + * Since: REPLACEME + **/ +hb_face_t * +hb_gdi_face_create (HFONT hfont) +{ + return hb_face_create_for_tables (_hb_gdi_reference_table, (void *) hfont, nullptr); +} + +#endif diff --git a/src/hb-gdi.h b/src/hb-gdi.h new file mode 100644 index 000000000..68cc43917 --- /dev/null +++ b/src/hb-gdi.h @@ -0,0 +1,39 @@ +/* + * Copyright © 2019 Ebrahim Byagowi + * + * This is part of HarfBuzz, a text shaping library. + * + * Permission is hereby granted, without written agreement and without + * license or royalty fees, to use, copy, modify, and distribute this + * software and its documentation for any purpose, provided that the + * above copyright notice and the following two paragraphs appear in + * all copies of this software. + * + * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES + * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, + * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. + */ + +#ifndef HB_GDI_H +#define HB_GDI_H + +#include "hb.h" + +#include + +HB_BEGIN_DECLS + +HB_EXTERN hb_face_t * +hb_gdi_face_create (HFONT hfont); + +HB_END_DECLS + +#endif /* HB_GDI_H */ diff --git a/src/hb-uniscribe.cc b/src/hb-uniscribe.cc index b113ed4cf..289a3477f 100644 --- a/src/hb-uniscribe.cc +++ b/src/hb-uniscribe.cc @@ -58,13 +58,6 @@ * Functions for using HarfBuzz with the Windows fonts. **/ - -static inline uint16_t hb_uint16_swap (const uint16_t v) -{ return (v >> 8) | (v << 8); } -static inline uint32_t hb_uint32_swap (const uint32_t v) -{ return (hb_uint16_swap (v) << 16) | hb_uint16_swap (v >> 16); } - - typedef HRESULT (WINAPI *SIOT) /*ScriptItemizeOpenType*/( const WCHAR *pwcInChars, int cInChars, diff --git a/src/hb.hh b/src/hb.hh index f8b5e70a8..0790de2fd 100644 --- a/src/hb.hh +++ b/src/hb.hh @@ -476,6 +476,11 @@ static_assert ((sizeof (hb_var_int_t) == 4), ""); /* Size signifying variable-sized array */ #define VAR 1 +/* Endian swap, used in Windows related backends */ +static inline uint16_t hb_uint16_swap (const uint16_t v) +{ return (v >> 8) | (v << 8); } +static inline uint32_t hb_uint32_swap (const uint32_t v) +{ return (hb_uint16_swap (v) << 16) | hb_uint16_swap (v >> 16); } /* * Big-endian integers. Here because fundamental. From 759f3bd486c99bb09fb9fa5f42e621ec21399df8 Mon Sep 17 00:00:00 2001 From: Ebrahim Byagowi Date: Mon, 22 Jul 2019 02:06:07 +0430 Subject: [PATCH 42/78] [metrics] Don't use metrics API in _common As it is exposed with a different condition --- src/hb-ot-metrics.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/hb-ot-metrics.cc b/src/hb-ot-metrics.cc index 1f2402b12..0aedc923c 100644 --- a/src/hb-ot-metrics.cc +++ b/src/hb-ot-metrics.cc @@ -56,7 +56,7 @@ hb_ot_metrics_get_position_common (hb_font_t *font, switch ((unsigned int) metrics_tag) { #ifndef HB_NO_VAR -#define GET_VAR hb_ot_metrics_get_variation (face, metrics_tag) +#define GET_VAR face->table.MVAR->get_var (metrics_tag, nullptr, 0) #else #define GET_VAR .0f #endif From c9796d15e1ec5f8939f8b1ae368cb3352b6a9cb9 Mon Sep 17 00:00:00 2001 From: Khaled Hosny Date: Mon, 22 Jul 2019 03:57:24 +0200 Subject: [PATCH 43/78] Fix sbix glyph extents MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * The ‘height’ needs to be negated since the API returns “distance from top to bottom side”. * Similarly, the ‘y_offset‘ needs to be added to the height to get the ‘y_bearing’, since sbix’s offset is “the point in the glyph relative to its lower-left corner which corresponds to the origin” while ‘y_bearing’ is the “top side of glyph from origin”. With these changes the sbix glyph metrics return values similar to other tables, as they were otherwise unusable. --- src/hb-ot-color-sbix-table.hh | 4 ++-- test/api/test-ot-color.c | 4 ++-- .../fcbaa518d3cce441ed37ae3b1fed6a19e9b54efd.ttf | Bin 0 -> 3128 bytes .../data/in-house/tests/color-fonts.tests | 1 + 4 files changed, 5 insertions(+), 4 deletions(-) create mode 100644 test/shaping/data/in-house/fonts/fcbaa518d3cce441ed37ae3b1fed6a19e9b54efd.ttf diff --git a/src/hb-ot-color-sbix-table.hh b/src/hb-ot-color-sbix-table.hh index 9b725c46e..8a915a661 100644 --- a/src/hb-ot-color-sbix-table.hh +++ b/src/hb-ot-color-sbix-table.hh @@ -235,9 +235,9 @@ struct sbix const PNGHeader &png = *blob->as(); extents->x_bearing = x_offset; - extents->y_bearing = y_offset; + extents->y_bearing = png.IHDR.height + y_offset; extents->width = png.IHDR.width; - extents->height = png.IHDR.height; + extents->height = -png.IHDR.height; /* Convert to font units. */ if (strike_ppem) diff --git a/test/api/test-ot-color.c b/test/api/test-ot-color.c index c0cbd77b9..d646f7371 100644 --- a/test/api/test-ot-color.c +++ b/test/api/test-ot-color.c @@ -426,9 +426,9 @@ test_hb_ot_color_png (void) g_assert (strncmp (data + 1, "PNG", 3) == 0); hb_font_get_glyph_extents (sbix_font, 1, &extents); g_assert_cmpint (extents.x_bearing, ==, 0); - g_assert_cmpint (extents.y_bearing, ==, 0); + g_assert_cmpint (extents.y_bearing, ==, 800); g_assert_cmpint (extents.width, ==, 800); - g_assert_cmpint (extents.height, ==, 800); + g_assert_cmpint (extents.height, ==, -800); hb_blob_destroy (blob); hb_font_destroy (sbix_font); diff --git a/test/shaping/data/in-house/fonts/fcbaa518d3cce441ed37ae3b1fed6a19e9b54efd.ttf b/test/shaping/data/in-house/fonts/fcbaa518d3cce441ed37ae3b1fed6a19e9b54efd.ttf new file mode 100644 index 0000000000000000000000000000000000000000..b1a8a33e93d3fd36dc72ff16fe09fbe4ce56bf37 GIT binary patch literal 3128 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] +../fonts/fcbaa518d3cce441ed37ae3b1fed6a19e9b54efd.ttf:--font-funcs=ot --show-extents:U+1F600:[gid4=0+2550<0,1898,2555,-2405>] From 89228ccb9a81b728bc9955082c17c68c848c50c4 Mon Sep 17 00:00:00 2001 From: Behdad Esfahbod Date: Mon, 22 Jul 2019 07:07:37 -0400 Subject: [PATCH 44/78] Fix warning on IBM compilers Fixes https://github.com/harfbuzz/harfbuzz/issues/1852 --- src/hb.hh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/hb.hh b/src/hb.hh index 0790de2fd..8dcd5aa88 100644 --- a/src/hb.hh +++ b/src/hb.hh @@ -318,7 +318,8 @@ extern "C" void hb_free_impl(void *ptr); # define HB_FALLTHROUGH /* FALLTHROUGH */ #endif -#ifdef __clang__ +/* https://github.com/harfbuzz/harfbuzz/issues/1852 */ +#if defined(__clang__) && !(defined(_AIX) && (defined(__IBMCPP__) || defined(__ibmxl__))) /* Disable certain sanitizer errors. */ /* https://github.com/harfbuzz/harfbuzz/issues/1247 */ #define HB_NO_SANITIZE_SIGNED_INTEGER_OVERFLOW __attribute__((no_sanitize("signed-integer-overflow"))) From 77141dff7d73fa6290f51c9e1ca56ce51a5deec0 Mon Sep 17 00:00:00 2001 From: Behdad Esfahbod Date: Mon, 22 Jul 2019 07:48:32 -0400 Subject: [PATCH 45/78] [metrics] _-prefix internal symbol --- src/hb-ot-font.cc | 12 ++++++------ src/hb-ot-metrics.cc | 8 ++++---- src/hb-ot-metrics.hh | 6 +++--- 3 files changed, 13 insertions(+), 13 deletions(-) diff --git a/src/hb-ot-font.cc b/src/hb-ot-font.cc index 77eb6bb3a..56e4685a5 100644 --- a/src/hb-ot-font.cc +++ b/src/hb-ot-font.cc @@ -234,9 +234,9 @@ hb_ot_get_font_h_extents (hb_font_t *font, hb_font_extents_t *metrics, void *user_data HB_UNUSED) { - return hb_ot_metrics_get_position_common (font, HB_OT_METRICS_HORIZONTAL_ASCENDER, &metrics->ascender) && - hb_ot_metrics_get_position_common (font, HB_OT_METRICS_HORIZONTAL_DESCENDER, &metrics->descender) && - hb_ot_metrics_get_position_common (font, HB_OT_METRICS_HORIZONTAL_LINE_GAP, &metrics->line_gap); + return _hb_ot_metrics_get_position_common (font, HB_OT_METRICS_HORIZONTAL_ASCENDER, &metrics->ascender) && + _hb_ot_metrics_get_position_common (font, HB_OT_METRICS_HORIZONTAL_DESCENDER, &metrics->descender) && + _hb_ot_metrics_get_position_common (font, HB_OT_METRICS_HORIZONTAL_LINE_GAP, &metrics->line_gap); } static hb_bool_t @@ -245,9 +245,9 @@ hb_ot_get_font_v_extents (hb_font_t *font, hb_font_extents_t *metrics, void *user_data HB_UNUSED) { - return hb_ot_metrics_get_position_common (font, HB_OT_METRICS_VERTICAL_ASCENDER, &metrics->ascender) && - hb_ot_metrics_get_position_common (font, HB_OT_METRICS_VERTICAL_DESCENDER, &metrics->descender) && - hb_ot_metrics_get_position_common (font, HB_OT_METRICS_VERTICAL_LINE_GAP, &metrics->line_gap); + return _hb_ot_metrics_get_position_common (font, HB_OT_METRICS_VERTICAL_ASCENDER, &metrics->ascender) && + _hb_ot_metrics_get_position_common (font, HB_OT_METRICS_VERTICAL_DESCENDER, &metrics->descender) && + _hb_ot_metrics_get_position_common (font, HB_OT_METRICS_VERTICAL_LINE_GAP, &metrics->line_gap); } #if HB_USE_ATEXIT diff --git a/src/hb-ot-metrics.cc b/src/hb-ot-metrics.cc index 0aedc923c..c343f6d18 100644 --- a/src/hb-ot-metrics.cc +++ b/src/hb-ot-metrics.cc @@ -48,9 +48,9 @@ _fix_ascender_descender (float value, hb_ot_metrics_t metrics_tag) /* The common part of _get_position logic needed on hb-ot-font and here to be able to have slim builds without the not always needed parts */ bool -hb_ot_metrics_get_position_common (hb_font_t *font, - hb_ot_metrics_t metrics_tag, - hb_position_t *position /* OUT. May be NULL. */) +_hb_ot_metrics_get_position_common (hb_font_t *font, + hb_ot_metrics_t metrics_tag, + hb_position_t *position /* OUT. May be NULL. */) { hb_face_t *face = font->face; switch ((unsigned int) metrics_tag) @@ -124,7 +124,7 @@ hb_ot_metrics_get_position (hb_font_t *font, case HB_OT_METRICS_HORIZONTAL_LINE_GAP: case HB_OT_METRICS_VERTICAL_ASCENDER: case HB_OT_METRICS_VERTICAL_DESCENDER: - case HB_OT_METRICS_VERTICAL_LINE_GAP: return hb_ot_metrics_get_position_common (font, metrics_tag, position); + case HB_OT_METRICS_VERTICAL_LINE_GAP: return _hb_ot_metrics_get_position_common (font, metrics_tag, position); #ifndef HB_NO_VAR #define GET_VAR hb_ot_metrics_get_variation (face, metrics_tag) #else diff --git a/src/hb-ot-metrics.hh b/src/hb-ot-metrics.hh index 3a9331619..f9ae46fc9 100644 --- a/src/hb-ot-metrics.hh +++ b/src/hb-ot-metrics.hh @@ -28,8 +28,8 @@ #include "hb.hh" HB_INTERNAL bool -hb_ot_metrics_get_position_common (hb_font_t *font, - hb_ot_metrics_t metrics_tag, - hb_position_t *position /* OUT. May be NULL. */); +_hb_ot_metrics_get_position_common (hb_font_t *font, + hb_ot_metrics_t metrics_tag, + hb_position_t *position /* OUT. May be NULL. */); #endif /* HB_OT_METRICS_HH */ From a51aa951b5ad8da4ac7effc891437345e012a0ac Mon Sep 17 00:00:00 2001 From: Ebrahim Byagowi Date: Mon, 22 Jul 2019 18:35:55 +0430 Subject: [PATCH 46/78] [metrics] Fix _get_variation API to works with actual coord values --- src/hb-ot-metrics.cc | 16 ++++++++-------- src/hb-ot-metrics.h | 2 +- test/api/test-ot-metrics.c | 2 +- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/src/hb-ot-metrics.cc b/src/hb-ot-metrics.cc index c343f6d18..910d826b9 100644 --- a/src/hb-ot-metrics.cc +++ b/src/hb-ot-metrics.cc @@ -56,7 +56,7 @@ _hb_ot_metrics_get_position_common (hb_font_t *font, switch ((unsigned int) metrics_tag) { #ifndef HB_NO_VAR -#define GET_VAR face->table.MVAR->get_var (metrics_tag, nullptr, 0) +#define GET_VAR face->table.MVAR->get_var (metrics_tag, font->coords, font->num_coords) #else #define GET_VAR .0f #endif @@ -95,7 +95,7 @@ _get_gasp (hb_face_t *face, float *result, hb_ot_metrics_t metrics_tag) { const OT::GaspRange& range = face->table.gasp->get_gasp_range (metrics_tag - HB_TAG ('g','s','p','0')); if (&range == &Null (OT::GaspRange)) return false; - if (result) *result = range.rangeMaxPPEM + face->table.MVAR->get_var (metrics_tag, nullptr, 0); + if (result) *result = range.rangeMaxPPEM + font->face->table.MVAR->get_var (metrics_tag, font->coords, font->num_coords); return true; } #endif @@ -126,7 +126,7 @@ hb_ot_metrics_get_position (hb_font_t *font, case HB_OT_METRICS_VERTICAL_DESCENDER: case HB_OT_METRICS_VERTICAL_LINE_GAP: return _hb_ot_metrics_get_position_common (font, metrics_tag, position); #ifndef HB_NO_VAR -#define GET_VAR hb_ot_metrics_get_variation (face, metrics_tag) +#define GET_VAR hb_ot_metrics_get_variation (font, metrics_tag) #else #define GET_VAR 0 #endif @@ -168,7 +168,7 @@ hb_ot_metrics_get_position (hb_font_t *font, #ifndef HB_NO_VAR /** * hb_ot_metrics_get_variation: - * @face: + * @font: * @metrics_tag: * * Returns: @@ -176,9 +176,9 @@ hb_ot_metrics_get_position (hb_font_t *font, * Since: REPLACEME **/ float -hb_ot_metrics_get_variation (hb_face_t *face, hb_ot_metrics_t metrics_tag) +hb_ot_metrics_get_variation (hb_font_t *font, hb_ot_metrics_t metrics_tag) { - return face->table.MVAR->get_var (metrics_tag, nullptr, 0); + return font->face->table.MVAR->get_var (metrics_tag, font->coords, font->num_coords); } /** @@ -193,7 +193,7 @@ hb_ot_metrics_get_variation (hb_face_t *face, hb_ot_metrics_t metrics_tag) hb_position_t hb_ot_metrics_get_x_variation (hb_font_t *font, hb_ot_metrics_t metrics_tag) { - return font->em_scalef_x (hb_ot_metrics_get_variation (font->face, metrics_tag)); + return font->em_scalef_x (hb_ot_metrics_get_variation (font, metrics_tag)); } /** @@ -208,7 +208,7 @@ hb_ot_metrics_get_x_variation (hb_font_t *font, hb_ot_metrics_t metrics_tag) hb_position_t hb_ot_metrics_get_y_variation (hb_font_t *font, hb_ot_metrics_t metrics_tag) { - return font->em_scalef_y (hb_ot_metrics_get_variation (font->face, metrics_tag)); + return font->em_scalef_y (hb_ot_metrics_get_variation (font, metrics_tag)); } #endif diff --git a/src/hb-ot-metrics.h b/src/hb-ot-metrics.h index 611222f26..4d22837f2 100644 --- a/src/hb-ot-metrics.h +++ b/src/hb-ot-metrics.h @@ -79,7 +79,7 @@ hb_ot_metrics_get_position (hb_font_t *font, hb_position_t *position /* OUT. May be NULL. */); HB_EXTERN float -hb_ot_metrics_get_variation (hb_face_t *face, hb_ot_metrics_t metrics_tag); +hb_ot_metrics_get_variation (hb_font_t *font, hb_ot_metrics_t metrics_tag); HB_EXTERN hb_position_t hb_ot_metrics_get_x_variation (hb_font_t *font, hb_ot_metrics_t metrics_tag); diff --git a/test/api/test-ot-metrics.c b/test/api/test-ot-metrics.c index 270de8828..91dd7f5e1 100644 --- a/test/api/test-ot-metrics.c +++ b/test/api/test-ot-metrics.c @@ -40,7 +40,7 @@ test_ot_metrics_get (void) g_assert_cmpint (value, ==, 1000); g_assert_cmpint (hb_ot_metrics_get_x_variation (font, HB_OT_METRICS_HORIZONTAL_ASCENDER), ==, 0); g_assert_cmpint (hb_ot_metrics_get_y_variation (font, HB_OT_METRICS_HORIZONTAL_ASCENDER), ==, 0); - // g_assert_cmpint ((int) hb_ot_metrics_get_variation (face, HB_OT_METRICS_HORIZONTAL_ASCENDER), ==, 0); + // g_assert_cmpint ((int) hb_ot_metrics_get_variation (font, HB_OT_METRICS_HORIZONTAL_ASCENDER), ==, 0); hb_font_destroy (font); hb_face_destroy (face); } From 41ab56e09586b675b1c5de745cf5f520a808bba1 Mon Sep 17 00:00:00 2001 From: Ebrahim Byagowi Date: Mon, 22 Jul 2019 18:46:52 +0430 Subject: [PATCH 47/78] Implement meta table parsing --- src/Makefile.sources | 1 + src/hb-ot-face-table-list.hh | 1 + src/hb-ot-layout.cc | 15 +++--- src/hb-ot-meta-table.hh | 89 ++++++++++++++++++++++++++++++++++++ 4 files changed, 99 insertions(+), 7 deletions(-) create mode 100644 src/hb-ot-meta-table.hh diff --git a/src/Makefile.sources b/src/Makefile.sources index 4e84d869e..21fb1b6e1 100644 --- a/src/Makefile.sources +++ b/src/Makefile.sources @@ -88,6 +88,7 @@ HB_BASE_sources = \ hb-ot-math-table.hh \ hb-ot-math.cc \ hb-ot-maxp-table.hh \ + hb-ot-meta-table.hh \ hb-ot-metrics.cc \ hb-ot-metrics.hh \ hb-ot-name-language-static.hh \ diff --git a/src/hb-ot-face-table-list.hh b/src/hb-ot-face-table-list.hh index f9c484be6..c5ff01537 100644 --- a/src/hb-ot-face-table-list.hh +++ b/src/hb-ot-face-table-list.hh @@ -62,6 +62,7 @@ HB_OT_ACCELERATOR (OT, name) #ifndef HB_NO_STAT HB_OT_TABLE (OT, STAT) #endif +HB_OT_TABLE (OT, meta) /* Vertical layout. */ HB_OT_TABLE (OT, vhea) diff --git a/src/hb-ot-layout.cc b/src/hb-ot-layout.cc index c67cd0cbf..f493005bc 100644 --- a/src/hb-ot-layout.cc +++ b/src/hb-ot-layout.cc @@ -48,6 +48,7 @@ #include "hb-ot-layout-gpos-table.hh" #include "hb-ot-layout-base-table.hh" // Just so we compile it; unused otherwise. #include "hb-ot-layout-jstf-table.hh" // Just so we compile it; unused otherwise. +#include "hb-ot-meta-table.hh" // Just so we compile it; unused otherwise. #include "hb-ot-name-table.hh" #include "hb-ot-os2-table.hh" @@ -108,7 +109,7 @@ hb_ot_layout_has_machine_kerning (hb_face_t *face) * * Tests whether a face has any cross-stream kerning (i.e., kerns * that make adjustments perpendicular to the direction of the text - * flow: Y adjustments in horizontal text or X adjustments in + * flow: Y adjustments in horizontal text or X adjustments in * vertical text) in the 'kern' table. * * Does NOT examine the GPOS table. @@ -285,7 +286,7 @@ hb_ot_layout_has_glyph_classes (hb_face_t *face) * * Fetches the GDEF class of the requested glyph in the specified face. * - * Return value: The #hb_ot_layout_glyph_class_t glyph class of the given code + * Return value: The #hb_ot_layout_glyph_class_t glyph class of the given code * point in the GDEF table of the face. * * Since: 0.9.7 @@ -329,7 +330,7 @@ hb_ot_layout_get_glyphs_in_class (hb_face_t *face, * @point_array: (out) (array length=point_count): The array of attachment points found for the query * * Fetches a list of all attachment points for the specified glyph in the GDEF - * table of the face. The list returned will begin at the offset provided. + * table of the face. The list returned will begin at the offset provided. * * Useful if the client program wishes to cache the list. * @@ -979,7 +980,7 @@ hb_ot_layout_feature_get_lookups (hb_face_t *face, * @face: #hb_face_t to work upon * @table_tag: HB_OT_TAG_GSUB or HB_OT_TAG_GPOS * - * Fetches the total number of lookups enumerated in the specified + * Fetches the total number of lookups enumerated in the specified * face's GSUB table or GPOS table. * * Since: 0.9.22 @@ -1187,7 +1188,7 @@ hb_ot_layout_collect_features (hb_face_t *face, * table or GPOS table, underneath the specified scripts, languages, and * features. If no list of scripts is provided, all scripts will be queried. * If no list of languages is provided, all languages will be queried. If no - * list of features is provided, all features will be queried. + * list of features is provided, all features will be queried. * * Since: 0.9.8 **/ @@ -1581,7 +1582,7 @@ hb_ot_layout_position_finish_offsets (hb_font_t *font, hb_buffer_t *buffer) * as used here are defined as pertaining only to fonts within a font family that differ * specifically in their respective size ranges; other ways to differentiate fonts within * a subfamily are not covered by the `size` feature. - * + * * For more information on this distinction, see the `size` documentation at * https://docs.microsoft.com/en-us/typography/opentype/spec/features_pt#tag-39size39 * @@ -1723,7 +1724,7 @@ hb_ot_layout_feature_get_name_ids (hb_face_t *face, * returned. This function can be called with incrementally larger start_offset * until the char_count output value is lower than its input value, or the size * of the characters array can be increased. - * + * * Return value: Number of total sample characters in the cvXX feature. * * Since: 2.0.0 diff --git a/src/hb-ot-meta-table.hh b/src/hb-ot-meta-table.hh new file mode 100644 index 000000000..dac55e47f --- /dev/null +++ b/src/hb-ot-meta-table.hh @@ -0,0 +1,89 @@ +/* + * Copyright © 2019 Ebrahim Byagowi + * + * This is part of HarfBuzz, a text shaping library. + * + * Permission is hereby granted, without written agreement and without + * license or royalty fees, to use, copy, modify, and distribute this + * software and its documentation for any purpose, provided that the + * above copyright notice and the following two paragraphs appear in + * all copies of this software. + * + * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES + * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, + * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. + */ + +#ifndef HB_OT_META_TABLE_HH +#define HB_OT_META_TABLE_HH + +#include "hb-open-type.hh" + +/* + * meta -- Metadata Table + * https://docs.microsoft.com/en-us/typography/opentype/spec/meta + * https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6meta.html + */ +#define HB_OT_TAG_meta HB_TAG('m','e','t','a') + + +namespace OT { + + +struct DataMap +{ + bool sanitize (hb_sanitize_context_t *c, const void *base) const + { + TRACE_SANITIZE (this); + return_trace (likely (c->check_struct (this) && + dataZ.sanitize (c, base, dataLength))); + } + + protected: + Tag tag; /* A tag indicating the type of metadata. */ + LOffsetTo> + dataZ; /* Offset in bytes from the beginning of the + * metadata table to the data for this tag. */ + HBUINT32 dataLength; /* Length of the data. The data is not required to + * be padded to any byte boundary. */ + public: + DEFINE_SIZE_STATIC (12); +}; + +struct meta +{ + static constexpr hb_tag_t tableTag = HB_OT_TAG_meta; + + bool sanitize (hb_sanitize_context_t *c) const + { + TRACE_SANITIZE (this); + return_trace (likely (c->check_struct (this) && + version == 1 && + dataMaps.sanitize (c, this))); + } + + protected: + HBUINT32 version; /* Version number of the metadata table — set to 1. */ + HBUINT32 flags; /* Flags — currently unused; set to 0. */ + HBUINT32 dataOffset; /* Per Apple specification: + * Offset from the beginning of the table to the data. + * Per OT specification: + * Reserved. Not used; should be set to 0. */ + LArrayOf + dataMaps; /* Array of data map records. */ + public: + DEFINE_SIZE_ARRAY (16, dataMaps); +}; + +} /* namespace OT */ + + +#endif /* HB_OT_META_TABLE_HH */ From 636ae422372ed7f17b695e78c9c9015188b204e8 Mon Sep 17 00:00:00 2001 From: Ebrahim Byagowi Date: Mon, 22 Jul 2019 22:50:21 +0430 Subject: [PATCH 48/78] minor, comment out meta table in list till its use --- src/hb-ot-face-table-list.hh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/hb-ot-face-table-list.hh b/src/hb-ot-face-table-list.hh index c5ff01537..4ec622c57 100644 --- a/src/hb-ot-face-table-list.hh +++ b/src/hb-ot-face-table-list.hh @@ -62,7 +62,7 @@ HB_OT_ACCELERATOR (OT, name) #ifndef HB_NO_STAT HB_OT_TABLE (OT, STAT) #endif -HB_OT_TABLE (OT, meta) +//HB_OT_TABLE (OT, meta) /* Vertical layout. */ HB_OT_TABLE (OT, vhea) From dd9a0ed3f0c0a8a94e107689318463d62414cf60 Mon Sep 17 00:00:00 2001 From: Ebrahim Byagowi Date: Wed, 24 Jul 2019 00:47:19 +0430 Subject: [PATCH 49/78] Replace 0x7FFFFFFFu in enums with HB_TAG_MAX_SIGNED --- src/hb-aat-layout.h | 4 ++-- src/hb-ot-var.h | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/hb-aat-layout.h b/src/hb-aat-layout.h index 760aaae40..b617e8b70 100644 --- a/src/hb-aat-layout.h +++ b/src/hb-aat-layout.h @@ -85,7 +85,7 @@ typedef enum HB_AAT_LAYOUT_FEATURE_TYPE_LANGUAGE_TAG_TYPE = 39, HB_AAT_LAYOUT_FEATURE_TYPE_CJK_ROMAN_SPACING_TYPE = 103, - _HB_AAT_LAYOUT_FEATURE_TYPE_MAX_VALUE= 0x7FFFFFFFu, /*< skip >*/ + _HB_AAT_LAYOUT_FEATURE_TYPE_MAX_VALUE = HB_TAG_MAX_SIGNED /*< skip >*/ } hb_aat_layout_feature_type_t; /** @@ -424,7 +424,7 @@ typedef enum HB_AAT_LAYOUT_FEATURE_SELECTOR_DEFAULT_CJK_ROMAN = 2, HB_AAT_LAYOUT_FEATURE_SELECTOR_FULL_WIDTH_CJK_ROMAN = 3, - _HB_AAT_LAYOUT_FEATURE_SELECTOR_MAX_VALUE= 0x7FFFFFFFu, /*< skip >*/ + _HB_AAT_LAYOUT_FEATURE_SELECTOR_MAX_VALUE = HB_TAG_MAX_SIGNED /*< skip >*/ } hb_aat_layout_feature_selector_t; HB_EXTERN unsigned int diff --git a/src/hb-ot-var.h b/src/hb-ot-var.h index cf6f0c950..df89bc5a2 100644 --- a/src/hb-ot-var.h +++ b/src/hb-ot-var.h @@ -68,7 +68,7 @@ hb_ot_var_get_axis_count (hb_face_t *face); typedef enum { /*< flags >*/ HB_OT_VAR_AXIS_FLAG_HIDDEN = 0x00000001u, - _HB_OT_VAR_AXIS_FLAG_MAX_VALUE= 0x7FFFFFFFu /*< skip >*/ + _HB_OT_VAR_AXIS_FLAG_MAX_VALUE= HB_TAG_MAX_SIGNED /*< skip >*/ } hb_ot_var_axis_flags_t; /** From 737eb85a4ec8861791157d83dd170ac48fa2cfc7 Mon Sep 17 00:00:00 2001 From: Ebrahim Byagowi Date: Thu, 25 Jul 2019 14:26:30 +0430 Subject: [PATCH 50/78] Add _MAX_VALUE to disabled baseline types enum --- src/hb-ot-layout.cc | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/hb-ot-layout.cc b/src/hb-ot-layout.cc index f493005bc..665dd028f 100644 --- a/src/hb-ot-layout.cc +++ b/src/hb-ot-layout.cc @@ -1980,7 +1980,9 @@ typedef enum { HB_OT_LAYOUT_BASELINE_IDEO = HB_TAG('i','d','e','o'), HB_OT_LAYOUT_BASELINE_IDTB = HB_TAG('i','d','t','b'), HB_OT_LAYOUT_BASELINE_MATH = HB_TAG('m','a','t','h'), - HB_OT_LAYOUT_BASELINE_ROMN = HB_TAG('r','o','m','n') + HB_OT_LAYOUT_BASELINE_ROMN = HB_TAG('r','o','m','n'), + + _HB_OT_LAYOUT_BASELINE_MAX_VALUE= HB_TAG_MAX_SIGNED /*< skip >*/ } hb_ot_layout_baseline_t; From 069872c51b31fe1a618e3ca5c3b0ab8ccba0cf81 Mon Sep 17 00:00:00 2001 From: Ebrahim Byagowi Date: Thu, 25 Jul 2019 14:27:43 +0430 Subject: [PATCH 51/78] minor --- src/hb-ot-layout.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/hb-ot-layout.cc b/src/hb-ot-layout.cc index 665dd028f..dcd50a25e 100644 --- a/src/hb-ot-layout.cc +++ b/src/hb-ot-layout.cc @@ -1982,7 +1982,7 @@ typedef enum { HB_OT_LAYOUT_BASELINE_MATH = HB_TAG('m','a','t','h'), HB_OT_LAYOUT_BASELINE_ROMN = HB_TAG('r','o','m','n'), - _HB_OT_LAYOUT_BASELINE_MAX_VALUE= HB_TAG_MAX_SIGNED /*< skip >*/ + _HB_OT_LAYOUT_BASELINE_MAX_VALUE = HB_TAG_MAX_SIGNED /*< skip >*/ } hb_ot_layout_baseline_t; From a744fdc6c8217d0d4bfce30e638ed2e5200cf380 Mon Sep 17 00:00:00 2001 From: Ebrahim Byagowi Date: Thu, 25 Jul 2019 14:49:02 +0430 Subject: [PATCH 52/78] Add _MAX_VALUE to hb_ot_metrics_t (#1861) --- src/hb-ot-metrics.cc | 4 ++-- src/hb-ot-metrics.h | 4 +++- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/hb-ot-metrics.cc b/src/hb-ot-metrics.cc index 910d826b9..d0694bb51 100644 --- a/src/hb-ot-metrics.cc +++ b/src/hb-ot-metrics.cc @@ -53,7 +53,7 @@ _hb_ot_metrics_get_position_common (hb_font_t *font, hb_position_t *position /* OUT. May be NULL. */) { hb_face_t *face = font->face; - switch ((unsigned int) metrics_tag) + switch ((unsigned) metrics_tag) { #ifndef HB_NO_VAR #define GET_VAR face->table.MVAR->get_var (metrics_tag, font->coords, font->num_coords) @@ -117,7 +117,7 @@ hb_ot_metrics_get_position (hb_font_t *font, hb_position_t *position /* OUT. May be NULL. */) { hb_face_t *face = font->face; - switch (metrics_tag) + switch ((unsigned) metrics_tag) { case HB_OT_METRICS_HORIZONTAL_ASCENDER: case HB_OT_METRICS_HORIZONTAL_DESCENDER: diff --git a/src/hb-ot-metrics.h b/src/hb-ot-metrics.h index 4d22837f2..c60ee739c 100644 --- a/src/hb-ot-metrics.h +++ b/src/hb-ot-metrics.h @@ -70,7 +70,9 @@ typedef enum { HB_OT_METRICS_STRIKEOUT_SIZE = HB_TAG ('s','t','r','s'), HB_OT_METRICS_STRIKEOUT_OFFSET = HB_TAG ('s','t','r','o'), HB_OT_METRICS_UNDERLINE_SIZE = HB_TAG ('u','n','d','s'), - HB_OT_METRICS_UNDERLINE_OFFSET = HB_TAG ('u','n','d','o') + HB_OT_METRICS_UNDERLINE_OFFSET = HB_TAG ('u','n','d','o'), + + _HB_OT_METRICS_MAX_VALUE = HB_TAG_MAX_SIGNED /*< skip >*/ } hb_ot_metrics_t; HB_EXTERN hb_bool_t From 356b68a00afaf972908cb2a478170e3933eaf974 Mon Sep 17 00:00:00 2001 From: Ebrahim Byagowi Date: Thu, 25 Jul 2019 23:22:00 +0430 Subject: [PATCH 53/78] [metrics] Add a test that actually practices variation (#1858) --- test/api/fonts/TestCFF2VF.otf | Bin 0 -> 3636 bytes test/api/test-ot-metrics.c | 28 ++++++++++++++++++++++++++-- 2 files changed, 26 insertions(+), 2 deletions(-) create mode 100644 test/api/fonts/TestCFF2VF.otf diff --git a/test/api/fonts/TestCFF2VF.otf b/test/api/fonts/TestCFF2VF.otf new file mode 100644 index 0000000000000000000000000000000000000000..a9e48e396372d41d6615e429d54c5a1ab610ea61 GIT binary patch literal 3636 zcmbVP4Nz3q6+ZXv56iOBhek2z=%UonRw!U_O0`iJ#l)XtTtrNxxUf%_x<9z=5~7HL z5Eph~7toLpNz|$_YGaeeVhoNrI{h^|O_*qB+QgVi>P)L``nNcXrQdz~6f|mW-_CpY zJKs6yyXW2a?tORj3kvdSG$T@z(KOGzK$^7rB$4hc5#{CPMX`(drg1%QyGj{6!v-VK(fU3(YG`e|~JyBd|TNUwE=`-f|jCGhh#L|5Dgr-25P$ zXw>7d^YYE#&RVsoa4{r9u-BRk<`q;|*jnJPfj!YuWpPh6Og|6%CD_wS9hM3Tv3|sJ zz2ocPZ#n1fhQAN?4{eggI{IDnA^3THGi@NWSI%{< z17tp2v`&jd`cdx01w_I-M4Iaru1e3)abCY}AN)ps=fs5Izh=KVqxfsH|4AyaQD5|m2-Km0p%RKP8bCrb zqKOtqTegO>*i^7_npl-uB?#(~=^W3SZ_1~+ltKl<^&u_qktKlUH52Wk4(Ic>44qK0X1E5X#oPbB!pA`Kih^~h=cosLkambvdiJm7bZAGs|IF zFS$JHq-x2Sm7bkGGdnwH=KYjpxs_6Rna#7H+T*q?;iy2W^zh|WcBT#U_i)~WQf_0Z zWG(kP?v#phX30@r;<8)s^xa}jU-59pWVe*AzcWFm$V@KslAB6NA|vI(vdXBCEMUuV zEx}xuXgSU@MA~IOlhUzbWa6BKwPHS*C?9B~)-9#Gb<&{ZA_r8QR0vHsRiYOcEF<)W zRc+ursET{4Zu`>ZK6B6)S6GjH9<>f_HBKXDdpc#~oQZ2T<)HmvYZ|U@B^1kX&o=b1 z0Qw%(YM~{!xdQkr!RAsPepw^#EA5`~5109HQFlI#rKrS;y1W>b2URsP&Ws!fa!N3Q zc4R*&@9tRBL*(3wG0AUCDW27XdKiw1exb0)4;{mp-dgJcZXXOthf_`QB$Qhvm)qrV zl6rpLk^)L9eco-Sq%ya(o|5bqkCT$H67z%M%cdg(v7y4~dMaQ^*A2XDNI9FZYrGsX zO?Dsz7XL&FebgsA=Hg2$AN*s)y&3_{>udshf^A~I|J5ETAdVZTD83jFZ=?=Z^vp@t zhuPq@@Bgjh_!NDAIPvtC2cJDYcjxoL#-OMPYEON=Ka#j})AqIl&#w6hOr-CW<-@vH zrsxMOA4L)ZVoZ2Uq~^dH={GH+rsqBHQSZ?y`c+q-3dc3>Y;JYE*ZUphgljKEw8{EK zk+^5lohP38_=Oz-ALyPRc#rNWo1zbo4%h52erqul1}$^LT=dYZc2xQ4iqBD8%z&`B zfA@#GFYdFvu_{#GzO{Ax_O{lBwz>}S(V+IVIeT*Vn!=hvA=ucsv&9!|4AnQhxUbZ4 zvO^sIx%rRD`pAYGDK-0ojgbG=g@`&?KXq`mqxVPwIzD|Na(Y`=>A8-YR#6*%aepy7 z{bb+|VaEr9UGu|^m7krMz00w-zuWaQ(=JE5s5R<$+m1dBp|z(zDf>9Iwc(|$yS8_9 z)P}?fMUls<4+ne@opIxuxji!D=Jn=4t8ag?FBE8Q3bu(FqrQIweidB8wQY;b|N7>p zZr_0exQ)tzU$<5H%ctniY&eswKk45Q5dA07_; zAgUv&XTqueg&WTJFSLp={CP8`=^r>ddQ0cP#?FhKr#jm@dpi9%w!Q542ejkof{8=NsO7ayQJ6<>o>%mx1J9q>Ms{v2_(k#kAbF&u>)@$37>7>5)gkp zHk|P3xj%W|YVp-~H3fs>#oBqf@0FiV~5XQI9gS9qTAV3*;&yg|I(!Al-;?DzS9Bc^7!7aqg346ii%2TmPBP1ySp)3Z1r{y)jUMn!d4JlB$IrT+k8JQsfe literal 0 HcmV?d00001 diff --git a/test/api/test-ot-metrics.c b/test/api/test-ot-metrics.c index 91dd7f5e1..9712c932a 100644 --- a/test/api/test-ot-metrics.c +++ b/test/api/test-ot-metrics.c @@ -31,7 +31,7 @@ /* Unit tests for hb-ot-metrics.h */ static void -test_ot_metrics_get (void) +test_ot_metrics_get_no_var (void) { hb_face_t *face = hb_test_open_font_file ("fonts/cpal-v0.ttf"); hb_font_t *font = hb_font_create (face); @@ -40,15 +40,39 @@ test_ot_metrics_get (void) g_assert_cmpint (value, ==, 1000); g_assert_cmpint (hb_ot_metrics_get_x_variation (font, HB_OT_METRICS_HORIZONTAL_ASCENDER), ==, 0); g_assert_cmpint (hb_ot_metrics_get_y_variation (font, HB_OT_METRICS_HORIZONTAL_ASCENDER), ==, 0); + g_assert_cmpint (hb_ot_metrics_get_x_variation (font, HB_OT_METRICS_X_HEIGHT), ==, 0); // g_assert_cmpint ((int) hb_ot_metrics_get_variation (font, HB_OT_METRICS_HORIZONTAL_ASCENDER), ==, 0); hb_font_destroy (font); hb_face_destroy (face); } +static void +test_ot_metrics_get_var (void) +{ + hb_face_t *face = hb_test_open_font_file ("fonts/TestCFF2VF.otf"); + hb_font_t *font = hb_font_create (face); + hb_position_t value; + g_assert (hb_ot_metrics_get_position (font, HB_OT_METRICS_X_HEIGHT, &value)); + g_assert_cmpint (value, ==, 486); + g_assert_cmpint (hb_ot_metrics_get_x_variation (font, HB_OT_METRICS_HORIZONTAL_ASCENDER), ==, 0); + g_assert_cmpint (hb_ot_metrics_get_y_variation (font, HB_OT_METRICS_HORIZONTAL_ASCENDER), ==, 0); + g_assert_cmpint (hb_ot_metrics_get_x_variation (font, HB_OT_METRICS_X_HEIGHT), ==, 0); + float coords[] = {100.f}; + hb_font_set_var_coords_design (font, coords, 1); + g_assert (hb_ot_metrics_get_position (font, HB_OT_METRICS_X_HEIGHT, &value)); + g_assert_cmpint (value, ==, 478); + g_assert_cmpint (hb_ot_metrics_get_x_variation (font, HB_OT_METRICS_HORIZONTAL_ASCENDER), ==, 0); + g_assert_cmpint (hb_ot_metrics_get_y_variation (font, HB_OT_METRICS_HORIZONTAL_ASCENDER), ==, 0); + g_assert_cmpint (hb_ot_metrics_get_x_variation (font, HB_OT_METRICS_X_HEIGHT), ==, -8); + hb_font_destroy (font); + hb_face_destroy (face); +} + int main (int argc, char **argv) { hb_test_init (&argc, &argv); - hb_test_add (test_ot_metrics_get); + hb_test_add (test_ot_metrics_get_no_var); + hb_test_add (test_ot_metrics_get_var); return hb_test_run (); } From d791446a930f8e2009c5ab5ea389da98d1ed9b95 Mon Sep 17 00:00:00 2001 From: Ebrahim Byagowi Date: Fri, 26 Jul 2019 02:12:06 +0430 Subject: [PATCH 54/78] [feat] minor --- src/hb-aat-layout-feat-table.hh | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/hb-aat-layout-feat-table.hh b/src/hb-aat-layout-feat-table.hh index a20ef8640..2345f2198 100644 --- a/src/hb-aat-layout-feat-table.hh +++ b/src/hb-aat-layout-feat-table.hh @@ -174,9 +174,7 @@ struct feat } const FeatureName& get_feature (hb_aat_layout_feature_type_t feature_type) const - { - return namesZ.bsearch (featureNameCount, feature_type); - } + { return namesZ.bsearch (featureNameCount, feature_type); } hb_ot_name_id_t get_feature_name_id (hb_aat_layout_feature_type_t feature) const { return get_feature (feature).get_feature_name_id (); } From aab8e084873eb098c55ed2569c15bb308c59e436 Mon Sep 17 00:00:00 2001 From: Ebrahim Byagowi Date: Fri, 26 Jul 2019 02:19:22 +0430 Subject: [PATCH 55/78] minor spacing fix (#1869) --- src/hb-open-type.hh | 16 ++++++++-------- src/hb-ot-vorg-table.hh | 2 +- src/hb-vector.hh | 8 ++++---- 3 files changed, 13 insertions(+), 13 deletions(-) diff --git a/src/hb-open-type.hh b/src/hb-open-type.hh index e235a97c3..ad995750b 100644 --- a/src/hb-open-type.hh +++ b/src/hb-open-type.hh @@ -576,13 +576,13 @@ struct ArrayOf operator writer_t () { return writer (); } hb_array_t sub_array (unsigned int start_offset, unsigned int count) const - { return as_array ().sub_array (start_offset, count);} + { return as_array ().sub_array (start_offset, count); } hb_array_t sub_array (unsigned int start_offset, unsigned int *count = nullptr /* IN/OUT */) const - { return as_array ().sub_array (start_offset, count);} + { return as_array ().sub_array (start_offset, count); } hb_array_t sub_array (unsigned int start_offset, unsigned int count) - { return as_array ().sub_array (start_offset, count);} + { return as_array ().sub_array (start_offset, count); } hb_array_t sub_array (unsigned int start_offset, unsigned int *count = nullptr /* IN/OUT */) - { return as_array ().sub_array (start_offset, count);} + { return as_array ().sub_array (start_offset, count); } bool serialize (hb_serialize_context_t *c, unsigned int items_len) { @@ -826,13 +826,13 @@ struct SortedArrayOf : ArrayOf operator writer_t () { return writer (); } hb_sorted_array_t sub_array (unsigned int start_offset, unsigned int count) const - { return as_array ().sub_array (start_offset, count);} + { return as_array ().sub_array (start_offset, count); } hb_sorted_array_t sub_array (unsigned int start_offset, unsigned int *count = nullptr /* IN/OUT */) const - { return as_array ().sub_array (start_offset, count);} + { return as_array ().sub_array (start_offset, count); } hb_sorted_array_t sub_array (unsigned int start_offset, unsigned int count) - { return as_array ().sub_array (start_offset, count);} + { return as_array ().sub_array (start_offset, count); } hb_sorted_array_t sub_array (unsigned int start_offset, unsigned int *count = nullptr /* IN/OUT */) - { return as_array ().sub_array (start_offset, count);} + { return as_array ().sub_array (start_offset, count); } bool serialize (hb_serialize_context_t *c, unsigned int items_len) { diff --git a/src/hb-ot-vorg-table.hh b/src/hb-ot-vorg-table.hh index 19e08ebb5..d9002f3d6 100644 --- a/src/hb-ot-vorg-table.hh +++ b/src/hb-ot-vorg-table.hh @@ -85,7 +85,7 @@ struct VORG this->vertYOrigins.len = it.len (); + it - | hb_apply ([c] (const VertOriginMetric& _) { c->copy (_);}) + | hb_apply ([c] (const VertOriginMetric& _) { c->copy (_); }) ; } diff --git a/src/hb-vector.hh b/src/hb-vector.hh index de16c97dd..035c6d0a8 100644 --- a/src/hb-vector.hh +++ b/src/hb-vector.hh @@ -143,13 +143,13 @@ struct hb_vector_t operator writer_t () { return writer (); } hb_array_t sub_array (unsigned int start_offset, unsigned int count) const - { return as_array ().sub_array (start_offset, count);} + { return as_array ().sub_array (start_offset, count); } hb_array_t sub_array (unsigned int start_offset, unsigned int *count = nullptr /* IN/OUT */) const - { return as_array ().sub_array (start_offset, count);} + { return as_array ().sub_array (start_offset, count); } hb_array_t sub_array (unsigned int start_offset, unsigned int count) - { return as_array ().sub_array (start_offset, count);} + { return as_array ().sub_array (start_offset, count); } hb_array_t sub_array (unsigned int start_offset, unsigned int *count = nullptr /* IN/OUT */) - { return as_array ().sub_array (start_offset, count);} + { return as_array ().sub_array (start_offset, count); } hb_sorted_array_t as_sorted_array () { return hb_sorted_array (arrayZ, length); } From 3ac03bd67cb9f4a72e636bf56bc4a79e04bcba62 Mon Sep 17 00:00:00 2001 From: Ebrahim Byagowi Date: Mon, 22 Jul 2019 23:35:08 +0430 Subject: [PATCH 56/78] [meta] New API, hb_ot_metadata_reference_entry for fetching meta entries --- docs/harfbuzz-sections.txt | 6 ++++ src/Makefile.sources | 2 ++ src/harfbuzz.cc | 1 + src/hb-config.hh | 1 + src/hb-ot-face-table-list.hh | 4 ++- src/hb-ot-face.cc | 1 + src/hb-ot-layout.cc | 1 - src/hb-ot-meta-table.hh | 20 ++++++++++++ src/hb-ot-metadata.cc | 57 ++++++++++++++++++++++++++++++++++ src/hb-ot-metadata.h | 57 ++++++++++++++++++++++++++++++++++ src/hb-ot.h | 1 + test/api/Makefile.am | 1 + test/api/fonts/meta.ttf | Bin 0 -> 320 bytes test/api/test-ot-metadata.c | 58 +++++++++++++++++++++++++++++++++++ 14 files changed, 208 insertions(+), 2 deletions(-) create mode 100644 src/hb-ot-metadata.cc create mode 100644 src/hb-ot-metadata.h create mode 100644 test/api/fonts/meta.ttf create mode 100644 test/api/test-ot-metadata.c diff --git a/docs/harfbuzz-sections.txt b/docs/harfbuzz-sections.txt index 43fd76115..888859e28 100644 --- a/docs/harfbuzz-sections.txt +++ b/docs/harfbuzz-sections.txt @@ -607,6 +607,12 @@ hb_ot_math_get_min_connector_overlap hb_ot_math_get_glyph_assembly
+
+hb-ot-metadata +hb_ot_metadata_reference_entry +hb_ot_metadata_t +
+
hb-ot-metrics hb_ot_metrics_t diff --git a/src/Makefile.sources b/src/Makefile.sources index 21fb1b6e1..a024381ab 100644 --- a/src/Makefile.sources +++ b/src/Makefile.sources @@ -89,6 +89,7 @@ HB_BASE_sources = \ hb-ot-math.cc \ hb-ot-maxp-table.hh \ hb-ot-meta-table.hh \ + hb-ot-metadata.cc \ hb-ot-metrics.cc \ hb-ot-metrics.hh \ hb-ot-name-language-static.hh \ @@ -194,6 +195,7 @@ HB_BASE_headers = \ hb-ot-font.h \ hb-ot-layout.h \ hb-ot-math.h \ + hb-ot-metadata.h \ hb-ot-metrics.h \ hb-ot-name.h \ hb-ot-shape.h \ diff --git a/src/harfbuzz.cc b/src/harfbuzz.cc index e39913761..d97143981 100644 --- a/src/harfbuzz.cc +++ b/src/harfbuzz.cc @@ -16,6 +16,7 @@ #include "hb-ot-layout.cc" #include "hb-ot-map.cc" #include "hb-ot-math.cc" +#include "hb-ot-metadata.cc" #include "hb-ot-metrics.cc" #include "hb-ot-name.cc" #include "hb-ot-shape-complex-arabic.cc" diff --git a/src/hb-config.hh b/src/hb-config.hh index bd440050e..b6db206a3 100644 --- a/src/hb-config.hh +++ b/src/hb-config.hh @@ -66,6 +66,7 @@ #define HB_NO_LAYOUT_COLLECT_GLYPHS #define HB_NO_LAYOUT_UNUSED #define HB_NO_MATH +#define HB_NO_META #define HB_NO_METRICS #define HB_NO_MMAP #define HB_NO_NAME diff --git a/src/hb-ot-face-table-list.hh b/src/hb-ot-face-table-list.hh index 4ec622c57..97fb765a2 100644 --- a/src/hb-ot-face-table-list.hh +++ b/src/hb-ot-face-table-list.hh @@ -62,7 +62,9 @@ HB_OT_ACCELERATOR (OT, name) #ifndef HB_NO_STAT HB_OT_TABLE (OT, STAT) #endif -//HB_OT_TABLE (OT, meta) +#ifndef HB_NO_META +HB_OT_ACCELERATOR (OT, meta) +#endif /* Vertical layout. */ HB_OT_TABLE (OT, vhea) diff --git a/src/hb-ot-face.cc b/src/hb-ot-face.cc index f54d0b639..5ef8df43c 100644 --- a/src/hb-ot-face.cc +++ b/src/hb-ot-face.cc @@ -32,6 +32,7 @@ #include "hb-ot-cff2-table.hh" #include "hb-ot-hmtx-table.hh" #include "hb-ot-kern-table.hh" +#include "hb-ot-meta-table.hh" #include "hb-ot-name-table.hh" #include "hb-ot-post-table.hh" #include "hb-ot-color-cbdt-table.hh" diff --git a/src/hb-ot-layout.cc b/src/hb-ot-layout.cc index dcd50a25e..4cd65b4a9 100644 --- a/src/hb-ot-layout.cc +++ b/src/hb-ot-layout.cc @@ -48,7 +48,6 @@ #include "hb-ot-layout-gpos-table.hh" #include "hb-ot-layout-base-table.hh" // Just so we compile it; unused otherwise. #include "hb-ot-layout-jstf-table.hh" // Just so we compile it; unused otherwise. -#include "hb-ot-meta-table.hh" // Just so we compile it; unused otherwise. #include "hb-ot-name-table.hh" #include "hb-ot-os2-table.hh" diff --git a/src/hb-ot-meta-table.hh b/src/hb-ot-meta-table.hh index dac55e47f..d36c3e94f 100644 --- a/src/hb-ot-meta-table.hh +++ b/src/hb-ot-meta-table.hh @@ -40,6 +40,11 @@ namespace OT { struct DataMap { + int cmp (hb_tag_t a) const { return tag.cmp (a); } + + hb_blob_t *reference_entry (hb_blob_t *meta_blob) const + { return hb_blob_create_sub_blob (meta_blob, dataZ, dataLength); } + bool sanitize (hb_sanitize_context_t *c, const void *base) const { TRACE_SANITIZE (this); @@ -62,6 +67,19 @@ struct meta { static constexpr hb_tag_t tableTag = HB_OT_TAG_meta; + struct accelerator_t + { + void init (hb_face_t *face) + { table = hb_sanitize_context_t ().reference_table (face); } + void fini () { table.destroy (); } + + hb_blob_t *reference_entry (hb_tag_t tag) const + { return table->dataMaps.lsearch (tag, Null (DataMap)).reference_entry (table.get_blob ()); } + + private: + hb_blob_ptr_t table; + }; + bool sanitize (hb_sanitize_context_t *c) const { TRACE_SANITIZE (this); @@ -83,6 +101,8 @@ struct meta DEFINE_SIZE_ARRAY (16, dataMaps); }; +struct meta_accelerator_t : meta::accelerator_t {}; + } /* namespace OT */ diff --git a/src/hb-ot-metadata.cc b/src/hb-ot-metadata.cc new file mode 100644 index 000000000..42153be73 --- /dev/null +++ b/src/hb-ot-metadata.cc @@ -0,0 +1,57 @@ +/* + * Copyright © 2019 Ebrahim Byagowi + * + * This is part of HarfBuzz, a text shaping library. + * + * Permission is hereby granted, without written agreement and without + * license or royalty fees, to use, copy, modify, and distribute this + * software and its documentation for any purpose, provided that the + * above copyright notice and the following two paragraphs appear in + * all copies of this software. + * + * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES + * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, + * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. + */ + +#include "hb.hh" + +#ifndef HB_NO_META + +#include "hb-ot-meta-table.hh" + +/** + * SECTION:hb-ot-metadata + * @title: hb-ot-metadata + * @short_description: OpenType Metadata + * @include: hb-ot.h + * + * Functions for fetching metadata from fonts. + **/ + +/** + * hb_ot_meta_reference_entry: + * @face: a #hb_face_t object. + * @meta_tag: tag of metadata you like to have. + * + * It fetches metadata entry of a given tag from a font. + * + * Returns: (transfer full): A blob containing the blob. + * + * Since: REPLACEME + **/ +hb_blob_t * +hb_ot_metadata_reference_entry (hb_face_t *face, hb_ot_metadata_t meta_tag) +{ + return face->table.meta->reference_entry (meta_tag); +} + +#endif diff --git a/src/hb-ot-metadata.h b/src/hb-ot-metadata.h new file mode 100644 index 000000000..3654458a1 --- /dev/null +++ b/src/hb-ot-metadata.h @@ -0,0 +1,57 @@ +/* + * Copyright © 2019 Ebrahim Byagowi + * + * This is part of HarfBuzz, a text shaping library. + * + * Permission is hereby granted, without written agreement and without + * license or royalty fees, to use, copy, modify, and distribute this + * software and its documentation for any purpose, provided that the + * above copyright notice and the following two paragraphs appear in + * all copies of this software. + * + * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES + * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, + * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. + */ + +#ifndef HB_OT_H_IN +#error "Include instead." +#endif + +#ifndef HB_OT_METADATA_H +#define HB_OT_METADATA_H + +#include "hb.h" + +HB_BEGIN_DECLS + +/** + * hb_ot_metadata_t: + * + * From https://docs.microsoft.com/en-us/typography/opentype/spec/meta + * + * Since: REPLACEME + **/ +typedef enum { +/* + HB_OT_METADATA_APPL = HB_TAG ('a','p','p','l'), + HB_OT_METADATA_BILD = HB_TAG ('b','i','l','d'), +*/ + HB_OT_METADATA_DESIGN_LANGUAGES = HB_TAG ('d','l','n','g'), + HB_OT_METADATA_SUPPORTED_LANGUAGES = HB_TAG ('s','l','n','g') +} hb_ot_metadata_t; + +HB_EXTERN hb_blob_t * +hb_ot_metadata_reference_entry (hb_face_t *face, hb_ot_metadata_t tag); + +HB_END_DECLS + +#endif /* HB_OT_METADATA_H */ diff --git a/src/hb-ot.h b/src/hb-ot.h index d00ee80ae..411d0936f 100644 --- a/src/hb-ot.h +++ b/src/hb-ot.h @@ -35,6 +35,7 @@ #include "hb-ot-font.h" #include "hb-ot-layout.h" #include "hb-ot-math.h" +#include "hb-ot-metadata.h" #include "hb-ot-metrics.h" #include "hb-ot-name.h" #include "hb-ot-shape.h" diff --git a/test/api/Makefile.am b/test/api/Makefile.am index 63c7195fa..a675c50ff 100644 --- a/test/api/Makefile.am +++ b/test/api/Makefile.am @@ -84,6 +84,7 @@ TEST_PROGS += \ test-ot-color \ test-ot-ligature-carets \ test-ot-name \ + test-ot-metadata \ test-ot-metrics \ test-ot-tag \ test-ot-extents-cff \ diff --git a/test/api/fonts/meta.ttf b/test/api/fonts/meta.ttf new file mode 100644 index 0000000000000000000000000000000000000000..414d7e67117f4bbfb58504825e6aa4a3f5472a0e GIT binary patch literal 320 zcmZQzWME)mVQ^qzVqnNfO-$jNr;!R2@d0A944?qpH6}M8y9J0|fb0`MT+RS83y43*1V4=DxB1Gz%=`iZ1Z zAeS9vCl~kbMXMn-$&PfB(2|&zK3=s$E;l8(a-+LHNEYe9y)k#Z) O@j*01EHw`(%m4r~NJE$a literal 0 HcmV?d00001 diff --git a/test/api/test-ot-metadata.c b/test/api/test-ot-metadata.c new file mode 100644 index 000000000..d5f922415 --- /dev/null +++ b/test/api/test-ot-metadata.c @@ -0,0 +1,58 @@ +/* + * Copyright © 2019 Ebrahim Byagowi + * + * This is part of HarfBuzz, a text shaping library. + * + * Permission is hereby granted, without written agreement and without + * license or royalty fees, to use, copy, modify, and distribute this + * software and its documentation for any purpose, provided that the + * above copyright notice and the following two paragraphs appear in + * all copies of this software. + * + * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES + * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, + * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. + */ + +#include "hb-test.h" + +#include + +/* Unit tests for hb-ot-metadata.h */ + +static void +test_ot_metadata_reference_entry (void) +{ + hb_face_t *face = hb_test_open_font_file ("fonts/meta.ttf"); + hb_blob_t *dlng = hb_ot_metadata_reference_entry (face, HB_OT_METADATA_DESIGN_LANGUAGES); + g_assert_cmpint (hb_blob_get_length (dlng), ==, 8); + g_assert_cmpmem (hb_blob_get_data (dlng, NULL), 8, "ar,de,fa", 8); + hb_blob_destroy (dlng); + hb_blob_t *fslf = hb_ot_metadata_reference_entry (face, (hb_ot_metadata_t) HB_TAG ('f','s','l','f')); + g_assert_cmpint (hb_blob_get_length (fslf), ==, 12); + hb_blob_destroy (fslf); + hb_blob_t *nacl = hb_ot_metadata_reference_entry (face, (hb_ot_metadata_t) HB_TAG ('n','a','c','l')); + g_assert_cmpint (hb_blob_get_length (nacl), ==, 0); + hb_blob_destroy (nacl); + hb_blob_t *slng = hb_ot_metadata_reference_entry (face, HB_OT_METADATA_SUPPORTED_LANGUAGES); + g_assert_cmpint (hb_blob_get_length (slng), ==, 11); + g_assert_cmpmem (hb_blob_get_data (slng, NULL), 11, "ar,de,en,fa", 11); + hb_blob_destroy (slng); + hb_face_destroy (face); +} + +int +main (int argc, char **argv) +{ + hb_test_init (&argc, &argv); + hb_test_add (test_ot_metadata_reference_entry); + return hb_test_run (); +} From bc65ebbce765545bc4455d8ae5ba4a6a99201e41 Mon Sep 17 00:00:00 2001 From: Ebrahim Byagowi Date: Wed, 24 Jul 2019 02:28:09 +0430 Subject: [PATCH 57/78] [meta] hb_ot_metadata_get_entries, tags iteration API --- src/hb-ot-meta-table.hh | 17 +++++++++++++++++ src/hb-ot-metadata.cc | 28 ++++++++++++++++++++++++---- src/hb-ot-metadata.h | 8 +++++++- test/api/test-ot-metadata.c | 26 ++++++++++++++++++++++++++ 4 files changed, 74 insertions(+), 5 deletions(-) diff --git a/src/hb-ot-meta-table.hh b/src/hb-ot-meta-table.hh index d36c3e94f..7d60c7662 100644 --- a/src/hb-ot-meta-table.hh +++ b/src/hb-ot-meta-table.hh @@ -42,6 +42,8 @@ struct DataMap { int cmp (hb_tag_t a) const { return tag.cmp (a); } + hb_tag_t get_tag () const { return tag; } + hb_blob_t *reference_entry (hb_blob_t *meta_blob) const { return hb_blob_create_sub_blob (meta_blob, dataZ, dataLength); } @@ -76,6 +78,21 @@ struct meta hb_blob_t *reference_entry (hb_tag_t tag) const { return table->dataMaps.lsearch (tag, Null (DataMap)).reference_entry (table.get_blob ()); } + unsigned int get_entries (unsigned int start_offset, + unsigned int *count, + hb_ot_metadata_t *entries) const + { + unsigned int entries_count = table->dataMaps.len; + if (count && *count) + { + unsigned int len = hb_min (entries_count - start_offset, *count); + for (unsigned int i = 0; i < len; i++) + entries[i] = (hb_ot_metadata_t) table->dataMaps[i + start_offset].get_tag (); + *count = len; + } + return table->dataMaps.len; + } + private: hb_blob_ptr_t table; }; diff --git a/src/hb-ot-metadata.cc b/src/hb-ot-metadata.cc index 42153be73..8ad602a91 100644 --- a/src/hb-ot-metadata.cc +++ b/src/hb-ot-metadata.cc @@ -38,9 +38,29 @@ **/ /** - * hb_ot_meta_reference_entry: + * hb_ot_metadata_reference_entry: + * @face: a face object + * @start_offset: iteration's start offset + * @entries_count:(inout) (allow-none): buffer size as input, filled size as output + * @entries: (out caller-allocates) (array length=entries_count): entries tags buffer + * + * Return value: Number of all available feature types. + * + * Since: REPLACEME + **/ +unsigned int +hb_ot_metadata_get_entries (hb_face_t *face, + unsigned int start_offset, + unsigned int *entries_count, /* IN/OUT. May be NULL. */ + hb_ot_metadata_t *entries /* OUT. May be NULL. */) +{ + return face->table.meta->get_entries (start_offset, entries_count, entries); +} + +/** + * hb_ot_metadata_reference_entry: * @face: a #hb_face_t object. - * @meta_tag: tag of metadata you like to have. + * @metadata_tag: tag of metadata you like to have. * * It fetches metadata entry of a given tag from a font. * @@ -49,9 +69,9 @@ * Since: REPLACEME **/ hb_blob_t * -hb_ot_metadata_reference_entry (hb_face_t *face, hb_ot_metadata_t meta_tag) +hb_ot_metadata_reference_entry (hb_face_t *face, hb_ot_metadata_t metadata_tag) { - return face->table.meta->reference_entry (meta_tag); + return face->table.meta->reference_entry (metadata_tag); } #endif diff --git a/src/hb-ot-metadata.h b/src/hb-ot-metadata.h index 3654458a1..5d26e1d5a 100644 --- a/src/hb-ot-metadata.h +++ b/src/hb-ot-metadata.h @@ -49,8 +49,14 @@ typedef enum { HB_OT_METADATA_SUPPORTED_LANGUAGES = HB_TAG ('s','l','n','g') } hb_ot_metadata_t; +HB_EXTERN unsigned int +hb_ot_metadata_get_entries (hb_face_t *face, + unsigned int start_offset, + unsigned int *entries_count, /* IN/OUT. May be NULL. */ + hb_ot_metadata_t *entries /* OUT. May be NULL. */); + HB_EXTERN hb_blob_t * -hb_ot_metadata_reference_entry (hb_face_t *face, hb_ot_metadata_t tag); +hb_ot_metadata_reference_entry (hb_face_t *face, hb_ot_metadata_t metadata_tag); HB_END_DECLS diff --git a/test/api/test-ot-metadata.c b/test/api/test-ot-metadata.c index d5f922415..f0e633e50 100644 --- a/test/api/test-ot-metadata.c +++ b/test/api/test-ot-metadata.c @@ -28,6 +28,31 @@ /* Unit tests for hb-ot-metadata.h */ +static void +test_ot_metadata_get_entries (void) +{ + hb_face_t *face = hb_test_open_font_file ("fonts/meta.ttf"); + hb_ot_metadata_t entries[2]; + + unsigned int entries_count = 2; + g_assert_cmpint (hb_ot_metadata_get_entries (face, 0, &entries_count, entries), ==, 5); + g_assert_cmpint (entries_count, ==, 2); + g_assert_cmpint (entries[0], ==, HB_TAG ('a','p','p','l')); + g_assert_cmpint (entries[1], ==, HB_TAG ('b','i','l','d')); + + entries_count = 1; + g_assert_cmpint (hb_ot_metadata_get_entries (face, 2, &entries_count, entries), ==, 5); + g_assert_cmpint (entries_count, ==, 1); + g_assert_cmpint (entries[0], ==, HB_TAG ('d','l','n','g')); + + entries_count = 2; + g_assert_cmpint (hb_ot_metadata_get_entries (face, 4, &entries_count, entries), ==, 5); + g_assert_cmpint (entries_count, ==, 1); + g_assert_cmpint (entries[0], ==, HB_TAG ('s','l','n','g')); + + hb_face_destroy (face); +} + static void test_ot_metadata_reference_entry (void) { @@ -53,6 +78,7 @@ int main (int argc, char **argv) { hb_test_init (&argc, &argv); + hb_test_add (test_ot_metadata_get_entries); hb_test_add (test_ot_metadata_reference_entry); return hb_test_run (); } From 80e246a1f2b3c4e3c25a4a3ec042e7610944abd4 Mon Sep 17 00:00:00 2001 From: Ebrahim Byagowi Date: Wed, 24 Jul 2019 03:08:34 +0430 Subject: [PATCH 58/78] [meta] Add a test program for metadata --- src/Makefile.am | 5 +++ src/test-ot-metadata.cc | 70 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 75 insertions(+) create mode 100644 src/test-ot-metadata.cc diff --git a/src/Makefile.am b/src/Makefile.am index 54e4a02cf..84b51ac3e 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -332,6 +332,7 @@ noinst_PROGRAMS = \ main \ test \ test-buffer-serialize \ + test-ot-metadata \ test-ot-name \ test-gpos-size-params \ test-gsub-would-substitute \ @@ -350,6 +351,10 @@ test_buffer_serialize_SOURCES = test-buffer-serialize.cc test_buffer_serialize_CPPFLAGS = $(HBCFLAGS) test_buffer_serialize_LDADD = libharfbuzz.la $(HBLIBS) +test_ot_metadata_SOURCES = test-ot-metadata.cc +test_ot_metadata_CPPFLAGS = $(HBCFLAGS) +test_ot_metadata_LDADD = libharfbuzz.la $(HBLIBS) + test_ot_name_SOURCES = test-ot-name.cc test_ot_name_CPPFLAGS = $(HBCFLAGS) test_ot_name_LDADD = libharfbuzz.la $(HBLIBS) diff --git a/src/test-ot-metadata.cc b/src/test-ot-metadata.cc new file mode 100644 index 000000000..5c9e85210 --- /dev/null +++ b/src/test-ot-metadata.cc @@ -0,0 +1,70 @@ +/* + * Copyright © 2019 Ebrahim Byagowi + * + * This is part of HarfBuzz, a text shaping library. + * + * Permission is hereby granted, without written agreement and without + * license or royalty fees, to use, copy, modify, and distribute this + * software and its documentation for any purpose, provided that the + * above copyright notice and the following two paragraphs appear in + * all copies of this software. + * + * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES + * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, + * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. + */ + +#include "hb.hh" +#include "hb-ot.h" + +#include +#include + +#ifdef HB_NO_OPEN +#define hb_blob_create_from_file(x) hb_blob_get_empty () +#endif + +int +main (int argc, char **argv) +{ + if (argc != 2) { + fprintf (stderr, "usage: %s font-file\n", argv[0]); + exit (1); + } + + hb_blob_t *blob = hb_blob_create_from_file (argv[1]); + hb_face_t *face = hb_face_create (blob, 0 /* first face */); + hb_blob_destroy (blob); + blob = nullptr; + + unsigned int count = 0; + +#ifndef HB_NO_META + count = hb_ot_metadata_get_entries (face, 0, nullptr, nullptr); + + hb_ot_metadata_t *tags = (hb_ot_metadata_t *) + malloc (sizeof (hb_ot_metadata_t) * count); + hb_ot_metadata_get_entries (face, 0, &count, tags); + for (unsigned i = 0; i < count; ++i) + { + hb_blob_t *entry = hb_ot_metadata_reference_entry (face, tags[i]); + printf ("%c%c%c%c, size: %d: %.*s\n", + HB_UNTAG (tags[i]), hb_blob_get_length (entry), + hb_blob_get_length (entry), hb_blob_get_data (entry, nullptr)); + hb_blob_destroy (entry); + } + free (tags); +#endif + + hb_face_destroy (face); + + return !count; +} From a250af98ae74c94ac3aa069e6e5958a937586bfc Mon Sep 17 00:00:00 2001 From: Ebrahim Byagowi Date: Wed, 24 Jul 2019 03:10:41 +0430 Subject: [PATCH 59/78] [meta] Add max value to hb_ot_metadata_t --- src/hb-ot-metadata.h | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/hb-ot-metadata.h b/src/hb-ot-metadata.h index 5d26e1d5a..71e92a81f 100644 --- a/src/hb-ot-metadata.h +++ b/src/hb-ot-metadata.h @@ -46,7 +46,9 @@ typedef enum { HB_OT_METADATA_BILD = HB_TAG ('b','i','l','d'), */ HB_OT_METADATA_DESIGN_LANGUAGES = HB_TAG ('d','l','n','g'), - HB_OT_METADATA_SUPPORTED_LANGUAGES = HB_TAG ('s','l','n','g') + HB_OT_METADATA_SUPPORTED_LANGUAGES = HB_TAG ('s','l','n','g'), + + _HB_OT_METADATA_MAX_VALUE = HB_TAG_MAX_SIGNED /*< skip >*/ } hb_ot_metadata_t; HB_EXTERN unsigned int From 821d9e9034c57c5c593741284b134c76cc3c7c0f Mon Sep 17 00:00:00 2001 From: Ebrahim Byagowi Date: Fri, 26 Jul 2019 00:08:58 +0430 Subject: [PATCH 60/78] Use .sub_array for DataMap tags iteration --- src/hb-ot-meta-table.hh | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/src/hb-ot-meta-table.hh b/src/hb-ot-meta-table.hh index 7d60c7662..a7bd7bffc 100644 --- a/src/hb-ot-meta-table.hh +++ b/src/hb-ot-meta-table.hh @@ -82,13 +82,11 @@ struct meta unsigned int *count, hb_ot_metadata_t *entries) const { - unsigned int entries_count = table->dataMaps.len; if (count && *count) { - unsigned int len = hb_min (entries_count - start_offset, *count); - for (unsigned int i = 0; i < len; i++) - entries[i] = (hb_ot_metadata_t) table->dataMaps[i + start_offset].get_tag (); - *count = len; + hb_array_t array = table->dataMaps.sub_array (start_offset, count); + for (unsigned int i = 0; i < *count; i++) + entries[i] = (hb_ot_metadata_t) array[i].get_tag (); } return table->dataMaps.len; } From 62932c14bd256f10031380047ededd93a2aacd88 Mon Sep 17 00:00:00 2001 From: Ebrahim Byagowi Date: Fri, 26 Jul 2019 00:30:29 +0430 Subject: [PATCH 61/78] [meta] Rename ot-metadata to ot-meta per review --- docs/harfbuzz-sections.txt | 7 +++-- src/Makefile.am | 8 ++--- src/Makefile.sources | 4 +-- src/harfbuzz.cc | 2 +- src/hb-ot-meta-table.hh | 8 ++--- src/{hb-ot-metadata.cc => hb-ot-meta.cc} | 22 +++++++------- src/{hb-ot-metadata.h => hb-ot-meta.h} | 30 +++++++++---------- src/hb-ot.h | 2 +- src/{test-ot-metadata.cc => test-ot-meta.cc} | 10 +++---- test/api/Makefile.am | 2 +- .../{test-ot-metadata.c => test-ot-meta.c} | 26 ++++++++-------- 11 files changed, 61 insertions(+), 60 deletions(-) rename src/{hb-ot-metadata.cc => hb-ot-meta.cc} (77%) rename src/{hb-ot-metadata.h => hb-ot-meta.h} (65%) rename src/{test-ot-metadata.cc => test-ot-meta.cc} (86%) rename test/api/{test-ot-metadata.c => test-ot-meta.c} (72%) diff --git a/docs/harfbuzz-sections.txt b/docs/harfbuzz-sections.txt index 888859e28..99916ebe2 100644 --- a/docs/harfbuzz-sections.txt +++ b/docs/harfbuzz-sections.txt @@ -608,9 +608,10 @@ hb_ot_math_get_glyph_assembly
-hb-ot-metadata -hb_ot_metadata_reference_entry -hb_ot_metadata_t +hb-ot-meta +hb_ot_meta_t +hb_ot_meta_get_entries +hb_ot_meta_reference_entry
diff --git a/src/Makefile.am b/src/Makefile.am index 84b51ac3e..7173f4b7d 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -332,7 +332,7 @@ noinst_PROGRAMS = \ main \ test \ test-buffer-serialize \ - test-ot-metadata \ + test-ot-meta \ test-ot-name \ test-gpos-size-params \ test-gsub-would-substitute \ @@ -351,9 +351,9 @@ test_buffer_serialize_SOURCES = test-buffer-serialize.cc test_buffer_serialize_CPPFLAGS = $(HBCFLAGS) test_buffer_serialize_LDADD = libharfbuzz.la $(HBLIBS) -test_ot_metadata_SOURCES = test-ot-metadata.cc -test_ot_metadata_CPPFLAGS = $(HBCFLAGS) -test_ot_metadata_LDADD = libharfbuzz.la $(HBLIBS) +test_ot_meta_SOURCES = test-ot-meta.cc +test_ot_meta_CPPFLAGS = $(HBCFLAGS) +test_ot_meta_LDADD = libharfbuzz.la $(HBLIBS) test_ot_name_SOURCES = test-ot-name.cc test_ot_name_CPPFLAGS = $(HBCFLAGS) diff --git a/src/Makefile.sources b/src/Makefile.sources index a024381ab..a8369bf1a 100644 --- a/src/Makefile.sources +++ b/src/Makefile.sources @@ -89,7 +89,7 @@ HB_BASE_sources = \ hb-ot-math.cc \ hb-ot-maxp-table.hh \ hb-ot-meta-table.hh \ - hb-ot-metadata.cc \ + hb-ot-meta.cc \ hb-ot-metrics.cc \ hb-ot-metrics.hh \ hb-ot-name-language-static.hh \ @@ -195,7 +195,7 @@ HB_BASE_headers = \ hb-ot-font.h \ hb-ot-layout.h \ hb-ot-math.h \ - hb-ot-metadata.h \ + hb-ot-meta.h \ hb-ot-metrics.h \ hb-ot-name.h \ hb-ot-shape.h \ diff --git a/src/harfbuzz.cc b/src/harfbuzz.cc index d97143981..d338d1735 100644 --- a/src/harfbuzz.cc +++ b/src/harfbuzz.cc @@ -16,7 +16,7 @@ #include "hb-ot-layout.cc" #include "hb-ot-map.cc" #include "hb-ot-math.cc" -#include "hb-ot-metadata.cc" +#include "hb-ot-meta.cc" #include "hb-ot-metrics.cc" #include "hb-ot-name.cc" #include "hb-ot-shape-complex-arabic.cc" diff --git a/src/hb-ot-meta-table.hh b/src/hb-ot-meta-table.hh index a7bd7bffc..cc31bfb32 100644 --- a/src/hb-ot-meta-table.hh +++ b/src/hb-ot-meta-table.hh @@ -78,15 +78,15 @@ struct meta hb_blob_t *reference_entry (hb_tag_t tag) const { return table->dataMaps.lsearch (tag, Null (DataMap)).reference_entry (table.get_blob ()); } - unsigned int get_entries (unsigned int start_offset, - unsigned int *count, - hb_ot_metadata_t *entries) const + unsigned int get_entries (unsigned int start_offset, + unsigned int *count, + hb_ot_meta_t *entries) const { if (count && *count) { hb_array_t array = table->dataMaps.sub_array (start_offset, count); for (unsigned int i = 0; i < *count; i++) - entries[i] = (hb_ot_metadata_t) array[i].get_tag (); + entries[i] = (hb_ot_meta_t) array[i].get_tag (); } return table->dataMaps.len; } diff --git a/src/hb-ot-metadata.cc b/src/hb-ot-meta.cc similarity index 77% rename from src/hb-ot-metadata.cc rename to src/hb-ot-meta.cc index 8ad602a91..78eca6829 100644 --- a/src/hb-ot-metadata.cc +++ b/src/hb-ot-meta.cc @@ -29,8 +29,8 @@ #include "hb-ot-meta-table.hh" /** - * SECTION:hb-ot-metadata - * @title: hb-ot-metadata + * SECTION:hb-ot-meta + * @title: hb-ot-meta * @short_description: OpenType Metadata * @include: hb-ot.h * @@ -38,7 +38,7 @@ **/ /** - * hb_ot_metadata_reference_entry: + * hb_ot_meta_reference_entry: * @face: a face object * @start_offset: iteration's start offset * @entries_count:(inout) (allow-none): buffer size as input, filled size as output @@ -49,18 +49,18 @@ * Since: REPLACEME **/ unsigned int -hb_ot_metadata_get_entries (hb_face_t *face, - unsigned int start_offset, - unsigned int *entries_count, /* IN/OUT. May be NULL. */ - hb_ot_metadata_t *entries /* OUT. May be NULL. */) +hb_ot_meta_get_entries (hb_face_t *face, + unsigned int start_offset, + unsigned int *entries_count, /* IN/OUT. May be NULL. */ + hb_ot_meta_t *entries /* OUT. May be NULL. */) { return face->table.meta->get_entries (start_offset, entries_count, entries); } /** - * hb_ot_metadata_reference_entry: + * hb_ot_meta_reference_entry: * @face: a #hb_face_t object. - * @metadata_tag: tag of metadata you like to have. + * @meta_tag: tag of metadata you like to have. * * It fetches metadata entry of a given tag from a font. * @@ -69,9 +69,9 @@ hb_ot_metadata_get_entries (hb_face_t *face, * Since: REPLACEME **/ hb_blob_t * -hb_ot_metadata_reference_entry (hb_face_t *face, hb_ot_metadata_t metadata_tag) +hb_ot_meta_reference_entry (hb_face_t *face, hb_ot_meta_t meta_tag) { - return face->table.meta->reference_entry (metadata_tag); + return face->table.meta->reference_entry (meta_tag); } #endif diff --git a/src/hb-ot-metadata.h b/src/hb-ot-meta.h similarity index 65% rename from src/hb-ot-metadata.h rename to src/hb-ot-meta.h index 71e92a81f..e80273a7b 100644 --- a/src/hb-ot-metadata.h +++ b/src/hb-ot-meta.h @@ -26,15 +26,15 @@ #error "Include instead." #endif -#ifndef HB_OT_METADATA_H -#define HB_OT_METADATA_H +#ifndef HB_OT_META_H +#define HB_OT_META_H #include "hb.h" HB_BEGIN_DECLS /** - * hb_ot_metadata_t: + * hb_ot_meta_t: * * From https://docs.microsoft.com/en-us/typography/opentype/spec/meta * @@ -42,24 +42,24 @@ HB_BEGIN_DECLS **/ typedef enum { /* - HB_OT_METADATA_APPL = HB_TAG ('a','p','p','l'), - HB_OT_METADATA_BILD = HB_TAG ('b','i','l','d'), + HB_OT_META_APPL = HB_TAG ('a','p','p','l'), + HB_OT_META_BILD = HB_TAG ('b','i','l','d'), */ - HB_OT_METADATA_DESIGN_LANGUAGES = HB_TAG ('d','l','n','g'), - HB_OT_METADATA_SUPPORTED_LANGUAGES = HB_TAG ('s','l','n','g'), + HB_OT_META_DESIGN_LANGUAGES = HB_TAG ('d','l','n','g'), + HB_OT_META_SUPPORTED_LANGUAGES= HB_TAG ('s','l','n','g'), - _HB_OT_METADATA_MAX_VALUE = HB_TAG_MAX_SIGNED /*< skip >*/ -} hb_ot_metadata_t; + _HB_OT_META_MAX_VALUE = HB_TAG_MAX_SIGNED /*< skip >*/ +} hb_ot_meta_t; HB_EXTERN unsigned int -hb_ot_metadata_get_entries (hb_face_t *face, - unsigned int start_offset, - unsigned int *entries_count, /* IN/OUT. May be NULL. */ - hb_ot_metadata_t *entries /* OUT. May be NULL. */); +hb_ot_meta_get_entries (hb_face_t *face, + unsigned int start_offset, + unsigned int *entries_count, /* IN/OUT. May be NULL. */ + hb_ot_meta_t *entries /* OUT. May be NULL. */); HB_EXTERN hb_blob_t * -hb_ot_metadata_reference_entry (hb_face_t *face, hb_ot_metadata_t metadata_tag); +hb_ot_meta_reference_entry (hb_face_t *face, hb_ot_meta_t meta_tag); HB_END_DECLS -#endif /* HB_OT_METADATA_H */ +#endif /* HB_OT_META_H */ diff --git a/src/hb-ot.h b/src/hb-ot.h index 411d0936f..f2dbaa1b3 100644 --- a/src/hb-ot.h +++ b/src/hb-ot.h @@ -35,7 +35,7 @@ #include "hb-ot-font.h" #include "hb-ot-layout.h" #include "hb-ot-math.h" -#include "hb-ot-metadata.h" +#include "hb-ot-meta.h" #include "hb-ot-metrics.h" #include "hb-ot-name.h" #include "hb-ot-shape.h" diff --git a/src/test-ot-metadata.cc b/src/test-ot-meta.cc similarity index 86% rename from src/test-ot-metadata.cc rename to src/test-ot-meta.cc index 5c9e85210..33b1ee94e 100644 --- a/src/test-ot-metadata.cc +++ b/src/test-ot-meta.cc @@ -48,14 +48,14 @@ main (int argc, char **argv) unsigned int count = 0; #ifndef HB_NO_META - count = hb_ot_metadata_get_entries (face, 0, nullptr, nullptr); + count = hb_ot_meta_get_entries (face, 0, nullptr, nullptr); - hb_ot_metadata_t *tags = (hb_ot_metadata_t *) - malloc (sizeof (hb_ot_metadata_t) * count); - hb_ot_metadata_get_entries (face, 0, &count, tags); + hb_ot_meta_t *tags = (hb_ot_meta_t *) + malloc (sizeof (hb_ot_meta_t) * count); + hb_ot_meta_get_entries (face, 0, &count, tags); for (unsigned i = 0; i < count; ++i) { - hb_blob_t *entry = hb_ot_metadata_reference_entry (face, tags[i]); + hb_blob_t *entry = hb_ot_meta_reference_entry (face, tags[i]); printf ("%c%c%c%c, size: %d: %.*s\n", HB_UNTAG (tags[i]), hb_blob_get_length (entry), hb_blob_get_length (entry), hb_blob_get_data (entry, nullptr)); diff --git a/test/api/Makefile.am b/test/api/Makefile.am index a675c50ff..2386e53ea 100644 --- a/test/api/Makefile.am +++ b/test/api/Makefile.am @@ -84,7 +84,7 @@ TEST_PROGS += \ test-ot-color \ test-ot-ligature-carets \ test-ot-name \ - test-ot-metadata \ + test-ot-meta \ test-ot-metrics \ test-ot-tag \ test-ot-extents-cff \ diff --git a/test/api/test-ot-metadata.c b/test/api/test-ot-meta.c similarity index 72% rename from test/api/test-ot-metadata.c rename to test/api/test-ot-meta.c index f0e633e50..a08e67dc5 100644 --- a/test/api/test-ot-metadata.c +++ b/test/api/test-ot-meta.c @@ -26,27 +26,27 @@ #include -/* Unit tests for hb-ot-metadata.h */ +/* Unit tests for hb-ot-meta.h */ static void -test_ot_metadata_get_entries (void) +test_ot_meta_get_entries (void) { hb_face_t *face = hb_test_open_font_file ("fonts/meta.ttf"); - hb_ot_metadata_t entries[2]; + hb_ot_meta_t entries[2]; unsigned int entries_count = 2; - g_assert_cmpint (hb_ot_metadata_get_entries (face, 0, &entries_count, entries), ==, 5); + g_assert_cmpint (hb_ot_meta_get_entries (face, 0, &entries_count, entries), ==, 5); g_assert_cmpint (entries_count, ==, 2); g_assert_cmpint (entries[0], ==, HB_TAG ('a','p','p','l')); g_assert_cmpint (entries[1], ==, HB_TAG ('b','i','l','d')); entries_count = 1; - g_assert_cmpint (hb_ot_metadata_get_entries (face, 2, &entries_count, entries), ==, 5); + g_assert_cmpint (hb_ot_meta_get_entries (face, 2, &entries_count, entries), ==, 5); g_assert_cmpint (entries_count, ==, 1); g_assert_cmpint (entries[0], ==, HB_TAG ('d','l','n','g')); entries_count = 2; - g_assert_cmpint (hb_ot_metadata_get_entries (face, 4, &entries_count, entries), ==, 5); + g_assert_cmpint (hb_ot_meta_get_entries (face, 4, &entries_count, entries), ==, 5); g_assert_cmpint (entries_count, ==, 1); g_assert_cmpint (entries[0], ==, HB_TAG ('s','l','n','g')); @@ -54,20 +54,20 @@ test_ot_metadata_get_entries (void) } static void -test_ot_metadata_reference_entry (void) +test_ot_meta_reference_entry (void) { hb_face_t *face = hb_test_open_font_file ("fonts/meta.ttf"); - hb_blob_t *dlng = hb_ot_metadata_reference_entry (face, HB_OT_METADATA_DESIGN_LANGUAGES); + hb_blob_t *dlng = hb_ot_meta_reference_entry (face, HB_OT_META_DESIGN_LANGUAGES); g_assert_cmpint (hb_blob_get_length (dlng), ==, 8); g_assert_cmpmem (hb_blob_get_data (dlng, NULL), 8, "ar,de,fa", 8); hb_blob_destroy (dlng); - hb_blob_t *fslf = hb_ot_metadata_reference_entry (face, (hb_ot_metadata_t) HB_TAG ('f','s','l','f')); + hb_blob_t *fslf = hb_ot_meta_reference_entry (face, (hb_ot_meta_t) HB_TAG ('f','s','l','f')); g_assert_cmpint (hb_blob_get_length (fslf), ==, 12); hb_blob_destroy (fslf); - hb_blob_t *nacl = hb_ot_metadata_reference_entry (face, (hb_ot_metadata_t) HB_TAG ('n','a','c','l')); + hb_blob_t *nacl = hb_ot_meta_reference_entry (face, (hb_ot_meta_t) HB_TAG ('n','a','c','l')); g_assert_cmpint (hb_blob_get_length (nacl), ==, 0); hb_blob_destroy (nacl); - hb_blob_t *slng = hb_ot_metadata_reference_entry (face, HB_OT_METADATA_SUPPORTED_LANGUAGES); + hb_blob_t *slng = hb_ot_meta_reference_entry (face, HB_OT_META_SUPPORTED_LANGUAGES); g_assert_cmpint (hb_blob_get_length (slng), ==, 11); g_assert_cmpmem (hb_blob_get_data (slng, NULL), 11, "ar,de,en,fa", 11); hb_blob_destroy (slng); @@ -78,7 +78,7 @@ int main (int argc, char **argv) { hb_test_init (&argc, &argv); - hb_test_add (test_ot_metadata_get_entries); - hb_test_add (test_ot_metadata_reference_entry); + hb_test_add (test_ot_meta_get_entries); + hb_test_add (test_ot_meta_reference_entry); return hb_test_run (); } From aaffe41094f8ddefad6f33e86cbd04a24dd9bfff Mon Sep 17 00:00:00 2001 From: Ebrahim Byagowi Date: Fri, 26 Jul 2019 01:14:37 +0430 Subject: [PATCH 62/78] [meta] minor, simplify iterator --- src/hb-ot-meta-table.hh | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/hb-ot-meta-table.hh b/src/hb-ot-meta-table.hh index cc31bfb32..37f627cad 100644 --- a/src/hb-ot-meta-table.hh +++ b/src/hb-ot-meta-table.hh @@ -82,11 +82,11 @@ struct meta unsigned int *count, hb_ot_meta_t *entries) const { - if (count && *count) + if (count) { - hb_array_t array = table->dataMaps.sub_array (start_offset, count); - for (unsigned int i = 0; i < *count; i++) - entries[i] = (hb_ot_meta_t) array[i].get_tag (); + hb_array_t arr = table->dataMaps.sub_array (start_offset, count); + for (unsigned int i = 0; i < arr.length; i++) + entries[i] = (hb_ot_meta_t) arr[i].get_tag (); } return table->dataMaps.len; } From d3d99f8bb6ad77d1ac73901885acfffd3bb3e7f7 Mon Sep 17 00:00:00 2001 From: Ebrahim Byagowi Date: Fri, 26 Jul 2019 16:46:04 +0430 Subject: [PATCH 63/78] [metrics] Expose raw OS2/HHEA asc/dsc values using private tags (#1867) --- src/hb-ot-metrics.cc | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/hb-ot-metrics.cc b/src/hb-ot-metrics.cc index d0694bb51..07eb4667a 100644 --- a/src/hb-ot-metrics.cc +++ b/src/hb-ot-metrics.cc @@ -100,6 +100,14 @@ _get_gasp (hb_face_t *face, float *result, hb_ot_metrics_t metrics_tag) } #endif +/* Private tags for https://github.com/harfbuzz/harfbuzz/issues/1866 */ +#define _HB_OT_METRICS_HORIZONTAL_ASCENDER_OS2 HB_TAG ('O','a','s','c') +#define _HB_OT_METRICS_HORIZONTAL_ASCENDER_HHEA HB_TAG ('H','a','s','c') +#define _HB_OT_METRICS_HORIZONTAL_DESCENDER_OS2 HB_TAG ('O','d','s','c') +#define _HB_OT_METRICS_HORIZONTAL_DESCENDER_HHEA HB_TAG ('H','d','s','c') +#define _HB_OT_METRICS_HORIZONTAL_LINE_GAP_OS2 HB_TAG ('O','l','g','p') +#define _HB_OT_METRICS_HORIZONTAL_LINE_GAP_HHEA HB_TAG ('H','l','g','p') + /** * hb_ot_metrics_get_position: * @font: a #hb_font_t object. @@ -158,6 +166,14 @@ hb_ot_metrics_get_position (hb_font_t *font, case HB_OT_METRICS_STRIKEOUT_OFFSET: return GET_METRIC_Y (OS2, yStrikeoutPosition); case HB_OT_METRICS_UNDERLINE_SIZE: return GET_METRIC_Y (post->table, underlineThickness); case HB_OT_METRICS_UNDERLINE_OFFSET: return GET_METRIC_Y (post->table, underlinePosition); + + /* Private tags */ + case _HB_OT_METRICS_HORIZONTAL_ASCENDER_OS2: return GET_METRIC_Y (OS2, sTypoAscender); + case _HB_OT_METRICS_HORIZONTAL_ASCENDER_HHEA: return GET_METRIC_Y (hhea, ascender); + case _HB_OT_METRICS_HORIZONTAL_DESCENDER_OS2: return GET_METRIC_Y (OS2, sTypoDescender); + case _HB_OT_METRICS_HORIZONTAL_DESCENDER_HHEA: return GET_METRIC_Y (hhea, descender); + case _HB_OT_METRICS_HORIZONTAL_LINE_GAP_OS2: return GET_METRIC_Y (OS2, sTypoLineGap); + case _HB_OT_METRICS_HORIZONTAL_LINE_GAP_HHEA: return GET_METRIC_Y (hhea, lineGap); #undef GET_METRIC_Y #undef GET_METRIC_X #undef GET_VAR From 6d53cda1baf130853e5725fe8fea1d1c5f766a79 Mon Sep 17 00:00:00 2001 From: Zero King Date: Fri, 26 Jul 2019 15:43:51 +0000 Subject: [PATCH 64/78] [util] Fix memory leak --- util/options.cc | 1 + 1 file changed, 1 insertion(+) diff --git a/util/options.cc b/util/options.cc index 42dfa956a..f71a5a34d 100644 --- a/util/options.cc +++ b/util/options.cc @@ -370,6 +370,7 @@ parse_unicodes (const char *name G_GNUC_UNUSED, hb_codepoint_t u = strtoul (s, &p, 16); if (errno || s == p) { + g_string_free (gs, TRUE); g_set_error (error, G_OPTION_ERROR, G_OPTION_ERROR_BAD_VALUE, "Failed parsing Unicode values at: '%s'", s); return false; From 658424b29efbc758541a790193c42171bb7fa965 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Derzsi=20D=C3=A1niel?= Date: Fri, 26 Jul 2019 22:52:03 +0300 Subject: [PATCH 65/78] [cmake] Fix CMake build on newer CMake versions Unfortunately, newer CMake versions die during regex variable extraction, causing the build to fail. This is caused by the lack of escaping used around variables in the extract_make_variable function, causing these variables to be automatically unwrapped into empty strings. --- CMakeLists.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index ac857ef8f..66e4a8388 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -142,8 +142,8 @@ endif () ## Extract variables from Makefile files function (extract_make_variable variable makefile_source) - string(REGEX MATCH "${variable} = ([^$]+)\\$" temp ${makefile_source}) - string(REGEX MATCHALL "[^ \n\t\\]+" listVar ${CMAKE_MATCH_1}) + string(REGEX MATCH "${variable} = ([^$]+)\\$" temp "${makefile_source}") + string(REGEX MATCHALL "[^ \n\t\\]+" listVar "${CMAKE_MATCH_1}") set (${variable} ${listVar} PARENT_SCOPE) endfunction () From 0a18efd766b3b6cc987ee18785f7858fe2bd1c67 Mon Sep 17 00:00:00 2001 From: Behdad Esfahbod Date: Fri, 26 Jul 2019 14:34:26 -0700 Subject: [PATCH 66/78] Minor --- src/hb-ot-layout-gsub-table.hh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/hb-ot-layout-gsub-table.hh b/src/hb-ot-layout-gsub-table.hh index a6cc1a230..84e1b1578 100644 --- a/src/hb-ot-layout-gsub-table.hh +++ b/src/hb-ot-layout-gsub-table.hh @@ -248,7 +248,7 @@ struct SingleSubst if (unlikely (!c->extend_min (u.format))) return_trace (false); unsigned format = 2; unsigned delta = 0; - if (glyphs.len ()) + if (glyphs) { format = 1; auto get_delta = [=] (hb_codepoint_pair_t _) { From eddd45653282ffff8ef002ad2163bcf8bf4f3df1 Mon Sep 17 00:00:00 2001 From: Ebrahim Byagowi Date: Sun, 28 Jul 2019 02:21:54 +0430 Subject: [PATCH 67/78] [base] minor spacing --- src/hb-ot-layout-base-table.hh | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/hb-ot-layout-base-table.hh b/src/hb-ot-layout-base-table.hh index 091236294..91facf875 100644 --- a/src/hb-ot-layout-base-table.hh +++ b/src/hb-ot-layout-base-table.hh @@ -195,8 +195,8 @@ struct FeatMinMaxRecord struct MinMax { void get_min_max (hb_tag_t feature_tag, - const BaseCoord **min, - const BaseCoord **max) const + const BaseCoord **min, + const BaseCoord **max) const { /* TODO Replace hb_bsearch() with .bsearch(). */ const FeatMinMaxRecord *minMaxCoord = (const FeatMinMaxRecord *) @@ -412,9 +412,9 @@ struct BaseScriptList struct Axis { bool get_baseline (hb_ot_layout_baseline_t baseline, - hb_tag_t script_tag, - hb_tag_t language_tag, - const BaseCoord **coord) const + hb_tag_t script_tag, + hb_tag_t language_tag, + const BaseCoord **coord) const { const BaseScript &base_script = (this+baseScriptList).get_base_script (script_tag); if (base_script.is_empty ()) return false; From a157342fce2616141ee62d68ad8e3fb93e52187e Mon Sep 17 00:00:00 2001 From: Ebrahim Byagowi Date: Sun, 28 Jul 2019 18:54:13 +0430 Subject: [PATCH 68/78] [base] Fix use of bsearch --- src/hb-ot-layout-base-table.hh | 94 +++++++++++----------------------- 1 file changed, 31 insertions(+), 63 deletions(-) diff --git a/src/hb-ot-layout-base-table.hh b/src/hb-ot-layout-base-table.hh index 91facf875..ee3aad961 100644 --- a/src/hb-ot-layout-base-table.hh +++ b/src/hb-ot-layout-base-table.hh @@ -1,7 +1,7 @@ /* - * Copyright © 2016 Elie Roux + * Copyright © 2016 Elie Roux * Copyright © 2018 Google, Inc. - * Copyright © 2018 Ebrahim Byagowi + * Copyright © 2018-2019 Ebrahim Byagowi * * This is part of HarfBuzz, a text shaping library. * @@ -32,9 +32,6 @@ #include "hb-open-type.hh" #include "hb-ot-layout-common.hh" -/* To be removed */ -typedef hb_tag_t hb_ot_layout_baseline_t; - namespace OT { /* @@ -153,14 +150,9 @@ struct BaseCoord struct FeatMinMaxRecord { - HB_INTERNAL static int cmp (const void *key_, const void *entry_) - { - hb_tag_t key = * (hb_tag_t *) key_; - const FeatMinMaxRecord &entry = * (const FeatMinMaxRecord *) entry_; - return key < (unsigned int) entry.tag ? -1 : - key > (unsigned int) entry.tag ? 1 : - 0; - } + int cmp (hb_tag_t key) const { return tag.cmp (key); } + + bool has_data () const { return tag; } void get_min_max (const BaseCoord **min, const BaseCoord **max) const { @@ -198,14 +190,9 @@ struct MinMax const BaseCoord **min, const BaseCoord **max) const { - /* TODO Replace hb_bsearch() with .bsearch(). */ - const FeatMinMaxRecord *minMaxCoord = (const FeatMinMaxRecord *) - hb_bsearch (&feature_tag, featMinMaxRecords.arrayZ, - featMinMaxRecords.len, - FeatMinMaxRecord::static_size, - FeatMinMaxRecord::cmp); - if (minMaxCoord) - minMaxCoord->get_min_max (min, max); + const FeatMinMaxRecord &minMaxCoord = featMinMaxRecords.bsearch (feature_tag); + if (minMaxCoord.has_data ()) + minMaxCoord.get_min_max (min, max); else { if (likely (min)) *min = &(this+minCoord); @@ -271,14 +258,9 @@ struct BaseValues struct BaseLangSysRecord { - HB_INTERNAL static int cmp (const void *key_, const void *entry_) - { - hb_tag_t key = * (hb_tag_t *) key_; - const BaseLangSysRecord &entry = * (const BaseLangSysRecord *) entry_; - return key < (unsigned int) entry.baseLangSysTag ? -1 : - key > (unsigned int) entry.baseLangSysTag ? 1 : - 0; - } + int cmp (hb_tag_t key) const { return baseLangSysTag.cmp (key); } + + bool has_data () const { return baseLangSysTag; } const MinMax &get_min_max () const { return this+minMax; } @@ -303,19 +285,14 @@ struct BaseScript { const MinMax &get_min_max (hb_tag_t language_tag) const { - /* TODO Replace hb_bsearch() with .bsearch(). */ - const BaseLangSysRecord* record = (const BaseLangSysRecord *) - hb_bsearch (&language_tag, baseLangSysRecords.arrayZ, - baseLangSysRecords.len, - BaseLangSysRecord::static_size, - BaseLangSysRecord::cmp); - return record ? record->get_min_max () : this+defaultMinMax; + const BaseLangSysRecord& record = baseLangSysRecords.bsearch (language_tag); + return record.has_data () ? record.get_min_max () : this+defaultMinMax; } const BaseCoord &get_base_coord (int baseline_tag_index) const { return (this+baseValues).get_base_coord (baseline_tag_index); } - bool is_empty () const { return !baseValues; } + bool has_data () const { return baseValues; } bool sanitize (hb_sanitize_context_t *c) const { @@ -345,14 +322,9 @@ struct BaseScript struct BaseScriptList; struct BaseScriptRecord { - HB_INTERNAL static int cmp (const void *key_, const void *entry_) - { - hb_tag_t key = * (hb_tag_t *) key_; - const BaseScriptRecord &entry = * (const BaseScriptRecord *) entry_; - return key < (unsigned int) entry.baseScriptTag ? -1 : - key > (unsigned int) entry.baseScriptTag ? 1 : - 0; - } + int cmp (hb_tag_t key) const { return baseScriptTag.cmp (key); } + + bool has_data () const { return baseScriptTag; } const BaseScript &get_base_script (const BaseScriptList *list) const { return list+baseScript; } @@ -376,20 +348,11 @@ struct BaseScriptRecord struct BaseScriptList { - const BaseScriptRecord *find_record (hb_tag_t script) const - { - /* TODO Replace hb_bsearch() with .bsearch(). */ - return (const BaseScriptRecord *) hb_bsearch (&script, baseScriptRecords.arrayZ, - baseScriptRecords.len, - BaseScriptRecord::static_size, - BaseScriptRecord::cmp); - } - - /* TODO: Or client should handle fallback? */ const BaseScript &get_base_script (hb_tag_t script) const { - const BaseScriptRecord *record = find_record (script); - if (!record) record = find_record ((hb_script_t) HB_TAG ('D','F','L','T')); + const BaseScriptRecord *record = &baseScriptRecords.bsearch (script); + /* TODO: Or client should handle fallback? */ + if (!record->has_data ()) record = &baseScriptRecords.bsearch (HB_TAG ('D','F','L','T')); return record ? record->get_base_script (this) : Null (BaseScript); } @@ -417,9 +380,14 @@ struct Axis const BaseCoord **coord) const { const BaseScript &base_script = (this+baseScriptList).get_base_script (script_tag); - if (base_script.is_empty ()) return false; + if (!base_script.has_data ()) return false; - if (likely (coord)) *coord = &base_script.get_base_coord ((this+baseTagList).bsearch (baseline)); + if (likely (coord)) + { + unsigned int tag_index = 0; + (this+baseTagList).bfind (baseline, &tag_index); + *coord = &base_script.get_base_coord (tag_index); + } return true; } @@ -431,7 +399,7 @@ struct Axis const BaseCoord **max_coord) const { const BaseScript &base_script = (this+baseScriptList).get_base_script (script_tag); - if (base_script.is_empty ()) return false; + if (!base_script.has_data ()) return false; base_script.get_min_max (language_tag).get_min_max (feature_tag, min_coord, max_coord); @@ -483,9 +451,9 @@ struct BASE if (!get_axis (direction).get_baseline (baseline, script_tag, language_tag, &base_coord)) return false; - if (likely (base && base_coord)) *base = base_coord->get_coord (font, - get_var_store (), - direction); + if (likely (base && base_coord)) + *base = base_coord->get_coord (font, get_var_store (), direction); + return true; } From c7b22b96cc64c81248362a70f2d60d93ee520f2d Mon Sep 17 00:00:00 2001 From: Ebrahim Byagowi Date: Sun, 28 Jul 2019 19:46:57 +0430 Subject: [PATCH 69/78] [base] minor --- src/hb-ot-layout-base-table.hh | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/hb-ot-layout-base-table.hh b/src/hb-ot-layout-base-table.hh index ee3aad961..d8b5acc12 100644 --- a/src/hb-ot-layout-base-table.hh +++ b/src/hb-ot-layout-base-table.hh @@ -351,10 +351,8 @@ struct BaseScriptList const BaseScript &get_base_script (hb_tag_t script) const { const BaseScriptRecord *record = &baseScriptRecords.bsearch (script); - /* TODO: Or client should handle fallback? */ if (!record->has_data ()) record = &baseScriptRecords.bsearch (HB_TAG ('D','F','L','T')); - - return record ? record->get_base_script (this) : Null (BaseScript); + return record->has_data () ? record->get_base_script (this) : Null (BaseScript); } bool sanitize (hb_sanitize_context_t *c) const From ed126d8c37c45d8d60eb0368143c6776d1fcfbff Mon Sep 17 00:00:00 2001 From: Ebrahim Byagowi Date: Sun, 28 Jul 2019 20:21:59 +0430 Subject: [PATCH 70/78] [base] fix build --- src/hb-ot-layout-base-table.hh | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/hb-ot-layout-base-table.hh b/src/hb-ot-layout-base-table.hh index d8b5acc12..1b7bce7db 100644 --- a/src/hb-ot-layout-base-table.hh +++ b/src/hb-ot-layout-base-table.hh @@ -32,6 +32,9 @@ #include "hb-open-type.hh" #include "hb-ot-layout-common.hh" +/* To be removed */ +typedef hb_tag_t hb_ot_layout_baseline_t; + namespace OT { /* From 53853c044a6382ece51393dfc3a4fe6a5f8a5a23 Mon Sep 17 00:00:00 2001 From: Ebrahim Byagowi Date: Sun, 28 Jul 2019 20:23:48 +0430 Subject: [PATCH 71/78] [meta] minor --- src/hb-ot-meta-table.hh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/hb-ot-meta-table.hh b/src/hb-ot-meta-table.hh index 37f627cad..708cdf4ff 100644 --- a/src/hb-ot-meta-table.hh +++ b/src/hb-ot-meta-table.hh @@ -76,7 +76,7 @@ struct meta void fini () { table.destroy (); } hb_blob_t *reference_entry (hb_tag_t tag) const - { return table->dataMaps.lsearch (tag, Null (DataMap)).reference_entry (table.get_blob ()); } + { return table->dataMaps.lsearch (tag).reference_entry (table.get_blob ()); } unsigned int get_entries (unsigned int start_offset, unsigned int *count, From d9c44e7239daf59e283fecd4166c984b43d48e24 Mon Sep 17 00:00:00 2001 From: Ebrahim Byagowi Date: Sun, 28 Jul 2019 20:35:32 +0430 Subject: [PATCH 72/78] [base] Check if the returned base_coord is valid --- src/hb-ot-layout-base-table.hh | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/src/hb-ot-layout-base-table.hh b/src/hb-ot-layout-base-table.hh index 1b7bce7db..25a57fb33 100644 --- a/src/hb-ot-layout-base-table.hh +++ b/src/hb-ot-layout-base-table.hh @@ -116,6 +116,8 @@ struct BaseCoordFormat3 struct BaseCoord { + bool has_data () const { return u.format; } + hb_position_t get_coord (hb_font_t *font, const VariationStore &var_store, hb_direction_t direction) const @@ -142,10 +144,10 @@ struct BaseCoord protected: union { - HBUINT16 format; - BaseCoordFormat1 format1; - BaseCoordFormat2 format2; - BaseCoordFormat3 format3; + HBUINT16 format; + BaseCoordFormat1 format1; + BaseCoordFormat2 format2; + BaseCoordFormat3 format3; } u; public: DEFINE_SIZE_UNION (2, format); @@ -449,7 +451,8 @@ struct BASE hb_position_t *base) const { const BaseCoord *base_coord; - if (!get_axis (direction).get_baseline (baseline, script_tag, language_tag, &base_coord)) + if (unlikely (!get_axis (direction).get_baseline (baseline, script_tag, language_tag, &base_coord) && + base_coord && !base_coord->has_data ())) return false; if (likely (base && base_coord)) From 69655d5bc3c7b240424545bdef197d9d7251e509 Mon Sep 17 00:00:00 2001 From: Ebrahim Byagowi Date: Sun, 28 Jul 2019 20:39:20 +0430 Subject: [PATCH 73/78] [base] minor --- src/hb-ot-layout-base-table.hh | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/hb-ot-layout-base-table.hh b/src/hb-ot-layout-base-table.hh index 25a57fb33..3b69f6c6a 100644 --- a/src/hb-ot-layout-base-table.hh +++ b/src/hb-ot-layout-base-table.hh @@ -267,8 +267,7 @@ struct BaseLangSysRecord bool has_data () const { return baseLangSysTag; } - const MinMax &get_min_max () const - { return this+minMax; } + const MinMax &get_min_max () const { return this+minMax; } bool sanitize (hb_sanitize_context_t *c, const void *base) const { @@ -450,7 +449,7 @@ struct BASE hb_tag_t language_tag, hb_position_t *base) const { - const BaseCoord *base_coord; + const BaseCoord *base_coord = nullptr; if (unlikely (!get_axis (direction).get_baseline (baseline, script_tag, language_tag, &base_coord) && base_coord && !base_coord->has_data ())) return false; From 87454c447d705327a26c1f879e0a4f3002ae2667 Mon Sep 17 00:00:00 2001 From: Ebrahim Byagowi Date: Sun, 28 Jul 2019 20:46:47 +0430 Subject: [PATCH 74/78] [base] fix logic --- src/hb-ot-layout-base-table.hh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/hb-ot-layout-base-table.hh b/src/hb-ot-layout-base-table.hh index 3b69f6c6a..12cc163ce 100644 --- a/src/hb-ot-layout-base-table.hh +++ b/src/hb-ot-layout-base-table.hh @@ -450,11 +450,11 @@ struct BASE hb_position_t *base) const { const BaseCoord *base_coord = nullptr; - if (unlikely (!get_axis (direction).get_baseline (baseline, script_tag, language_tag, &base_coord) && - base_coord && !base_coord->has_data ())) + if (unlikely (!get_axis (direction).get_baseline (baseline, script_tag, language_tag, &base_coord) || + !base_coord || !base_coord->has_data ())) return false; - if (likely (base && base_coord)) + if (likely (base)) *base = base_coord->get_coord (font, get_var_store (), direction); return true; From e21bdf500d4ecc3a5fd6f79aabf6232f3967035e Mon Sep 17 00:00:00 2001 From: Ebrahim Byagowi Date: Sun, 28 Jul 2019 22:59:09 +0430 Subject: [PATCH 75/78] Increase subset fuzzer timeout to 8s Probably we should just remove timeout when running tsan and vaglrind here, the flaky bots --- test/fuzzing/run-subset-fuzzer-tests.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/fuzzing/run-subset-fuzzer-tests.py b/test/fuzzing/run-subset-fuzzer-tests.py index d431e10a3..f94c13ffe 100755 --- a/test/fuzzing/run-subset-fuzzer-tests.py +++ b/test/fuzzing/run-subset-fuzzer-tests.py @@ -33,7 +33,7 @@ def cmd(command): def timeout(p, is_killed): is_killed['value'] = True p.kill() - timer = threading.Timer (6, timeout, [p, is_killed]) + timer = threading.Timer (8, timeout, [p, is_killed]) try: timer.start() From 7bcc5dfa97a43d9c5f6dfdb87b4f0d5a589ecd48 Mon Sep 17 00:00:00 2001 From: Behdad Esfahbod Date: Sun, 28 Jul 2019 20:55:50 -0700 Subject: [PATCH 76/78] [iter] Fix accumulate to accept const types --- src/hb-iter.hh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/hb-iter.hh b/src/hb-iter.hh index c820c8fb4..8d2ff80c2 100644 --- a/src/hb-iter.hh +++ b/src/hb-iter.hh @@ -480,7 +480,7 @@ struct hb_reduce_t template > + typename AccuT = hb_decay> AccuT operator () (Iter it) { From 2c2a2b97dbe24ae2e09018f435559c97a460bdcb Mon Sep 17 00:00:00 2001 From: Ebrahim Byagowi Date: Mon, 29 Jul 2019 22:01:13 +0430 Subject: [PATCH 77/78] [meta] Rename hb_ot_meta_t to hb_ot_meta_tag_t --- src/hb-ot-meta-table.hh | 10 +++++----- src/hb-ot-meta.cc | 10 +++++----- src/hb-ot-meta.h | 14 +++++++------- src/test-ot-meta.cc | 4 ++-- test/api/test-ot-meta.c | 6 +++--- 5 files changed, 22 insertions(+), 22 deletions(-) diff --git a/src/hb-ot-meta-table.hh b/src/hb-ot-meta-table.hh index 708cdf4ff..f0842e4ef 100644 --- a/src/hb-ot-meta-table.hh +++ b/src/hb-ot-meta-table.hh @@ -32,7 +32,7 @@ * https://docs.microsoft.com/en-us/typography/opentype/spec/meta * https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6meta.html */ -#define HB_OT_TAG_meta HB_TAG('m','e','t','a') +#define HB_OT_TAG_meta HB_TAG ('m','e','t','a') namespace OT { @@ -78,15 +78,15 @@ struct meta hb_blob_t *reference_entry (hb_tag_t tag) const { return table->dataMaps.lsearch (tag).reference_entry (table.get_blob ()); } - unsigned int get_entries (unsigned int start_offset, - unsigned int *count, - hb_ot_meta_t *entries) const + unsigned int get_entries (unsigned int start_offset, + unsigned int *count, + hb_ot_meta_tag_t *entries) const { if (count) { hb_array_t arr = table->dataMaps.sub_array (start_offset, count); for (unsigned int i = 0; i < arr.length; i++) - entries[i] = (hb_ot_meta_t) arr[i].get_tag (); + entries[i] = (hb_ot_meta_tag_t) arr[i].get_tag (); } return table->dataMaps.len; } diff --git a/src/hb-ot-meta.cc b/src/hb-ot-meta.cc index 78eca6829..a5ce14876 100644 --- a/src/hb-ot-meta.cc +++ b/src/hb-ot-meta.cc @@ -49,10 +49,10 @@ * Since: REPLACEME **/ unsigned int -hb_ot_meta_get_entries (hb_face_t *face, - unsigned int start_offset, - unsigned int *entries_count, /* IN/OUT. May be NULL. */ - hb_ot_meta_t *entries /* OUT. May be NULL. */) +hb_ot_meta_get_entries (hb_face_t *face, + unsigned int start_offset, + unsigned int *entries_count, /* IN/OUT. May be NULL. */ + hb_ot_meta_tag_t *entries /* OUT. May be NULL. */) { return face->table.meta->get_entries (start_offset, entries_count, entries); } @@ -69,7 +69,7 @@ hb_ot_meta_get_entries (hb_face_t *face, * Since: REPLACEME **/ hb_blob_t * -hb_ot_meta_reference_entry (hb_face_t *face, hb_ot_meta_t meta_tag) +hb_ot_meta_reference_entry (hb_face_t *face, hb_ot_meta_tag_t meta_tag) { return face->table.meta->reference_entry (meta_tag); } diff --git a/src/hb-ot-meta.h b/src/hb-ot-meta.h index e80273a7b..5267728ea 100644 --- a/src/hb-ot-meta.h +++ b/src/hb-ot-meta.h @@ -34,7 +34,7 @@ HB_BEGIN_DECLS /** - * hb_ot_meta_t: + * hb_ot_meta_tag_t: * * From https://docs.microsoft.com/en-us/typography/opentype/spec/meta * @@ -49,16 +49,16 @@ typedef enum { HB_OT_META_SUPPORTED_LANGUAGES= HB_TAG ('s','l','n','g'), _HB_OT_META_MAX_VALUE = HB_TAG_MAX_SIGNED /*< skip >*/ -} hb_ot_meta_t; +} hb_ot_meta_tag_t; HB_EXTERN unsigned int -hb_ot_meta_get_entries (hb_face_t *face, - unsigned int start_offset, - unsigned int *entries_count, /* IN/OUT. May be NULL. */ - hb_ot_meta_t *entries /* OUT. May be NULL. */); +hb_ot_meta_get_entries (hb_face_t *face, + unsigned int start_offset, + unsigned int *entries_count, /* IN/OUT. May be NULL. */ + hb_ot_meta_tag_t *entries /* OUT. May be NULL. */); HB_EXTERN hb_blob_t * -hb_ot_meta_reference_entry (hb_face_t *face, hb_ot_meta_t meta_tag); +hb_ot_meta_reference_entry (hb_face_t *face, hb_ot_meta_tag_t meta_tag); HB_END_DECLS diff --git a/src/test-ot-meta.cc b/src/test-ot-meta.cc index 33b1ee94e..512df5a78 100644 --- a/src/test-ot-meta.cc +++ b/src/test-ot-meta.cc @@ -50,8 +50,8 @@ main (int argc, char **argv) #ifndef HB_NO_META count = hb_ot_meta_get_entries (face, 0, nullptr, nullptr); - hb_ot_meta_t *tags = (hb_ot_meta_t *) - malloc (sizeof (hb_ot_meta_t) * count); + hb_ot_meta_tag_t *tags = (hb_ot_meta_tag_t *) + malloc (sizeof (hb_ot_meta_tag_t) * count); hb_ot_meta_get_entries (face, 0, &count, tags); for (unsigned i = 0; i < count; ++i) { diff --git a/test/api/test-ot-meta.c b/test/api/test-ot-meta.c index a08e67dc5..b8be5a30d 100644 --- a/test/api/test-ot-meta.c +++ b/test/api/test-ot-meta.c @@ -32,7 +32,7 @@ static void test_ot_meta_get_entries (void) { hb_face_t *face = hb_test_open_font_file ("fonts/meta.ttf"); - hb_ot_meta_t entries[2]; + hb_ot_meta_tag_t entries[2]; unsigned int entries_count = 2; g_assert_cmpint (hb_ot_meta_get_entries (face, 0, &entries_count, entries), ==, 5); @@ -61,10 +61,10 @@ test_ot_meta_reference_entry (void) g_assert_cmpint (hb_blob_get_length (dlng), ==, 8); g_assert_cmpmem (hb_blob_get_data (dlng, NULL), 8, "ar,de,fa", 8); hb_blob_destroy (dlng); - hb_blob_t *fslf = hb_ot_meta_reference_entry (face, (hb_ot_meta_t) HB_TAG ('f','s','l','f')); + hb_blob_t *fslf = hb_ot_meta_reference_entry (face, (hb_ot_meta_tag_t) HB_TAG ('f','s','l','f')); g_assert_cmpint (hb_blob_get_length (fslf), ==, 12); hb_blob_destroy (fslf); - hb_blob_t *nacl = hb_ot_meta_reference_entry (face, (hb_ot_meta_t) HB_TAG ('n','a','c','l')); + hb_blob_t *nacl = hb_ot_meta_reference_entry (face, (hb_ot_meta_tag_t) HB_TAG ('n','a','c','l')); g_assert_cmpint (hb_blob_get_length (nacl), ==, 0); hb_blob_destroy (nacl); hb_blob_t *slng = hb_ot_meta_reference_entry (face, HB_OT_META_SUPPORTED_LANGUAGES); From 4e1da6bb612b0c6386ab143dbb4ca19ff25bc2ba Mon Sep 17 00:00:00 2001 From: Ebrahim Byagowi Date: Mon, 29 Jul 2019 22:03:56 +0430 Subject: [PATCH 78/78] [metrics] Rename hb_ot_metrics_t to hb_ot_metrics_tag_t --- src/hb-ot-metrics.cc | 22 +++++++++++----------- src/hb-ot-metrics.h | 16 ++++++++-------- src/hb-ot-metrics.hh | 6 +++--- 3 files changed, 22 insertions(+), 22 deletions(-) diff --git a/src/hb-ot-metrics.cc b/src/hb-ot-metrics.cc index 07eb4667a..d211d7e68 100644 --- a/src/hb-ot-metrics.cc +++ b/src/hb-ot-metrics.cc @@ -34,7 +34,7 @@ static float -_fix_ascender_descender (float value, hb_ot_metrics_t metrics_tag) +_fix_ascender_descender (float value, hb_ot_metrics_tag_t metrics_tag) { if (metrics_tag == HB_OT_METRICS_HORIZONTAL_ASCENDER || metrics_tag == HB_OT_METRICS_VERTICAL_ASCENDER) @@ -48,9 +48,9 @@ _fix_ascender_descender (float value, hb_ot_metrics_t metrics_tag) /* The common part of _get_position logic needed on hb-ot-font and here to be able to have slim builds without the not always needed parts */ bool -_hb_ot_metrics_get_position_common (hb_font_t *font, - hb_ot_metrics_t metrics_tag, - hb_position_t *position /* OUT. May be NULL. */) +_hb_ot_metrics_get_position_common (hb_font_t *font, + hb_ot_metrics_tag_t metrics_tag, + hb_position_t *position /* OUT. May be NULL. */) { hb_face_t *face = font->face; switch ((unsigned) metrics_tag) @@ -91,7 +91,7 @@ _hb_ot_metrics_get_position_common (hb_font_t *font, #if 0 static bool -_get_gasp (hb_face_t *face, float *result, hb_ot_metrics_t metrics_tag) +_get_gasp (hb_face_t *face, float *result, hb_ot_metrics_tag_t metrics_tag) { const OT::GaspRange& range = face->table.gasp->get_gasp_range (metrics_tag - HB_TAG ('g','s','p','0')); if (&range == &Null (OT::GaspRange)) return false; @@ -120,9 +120,9 @@ _get_gasp (hb_face_t *face, float *result, hb_ot_metrics_t metrics_tag) * Since: REPLACEME **/ hb_bool_t -hb_ot_metrics_get_position (hb_font_t *font, - hb_ot_metrics_t metrics_tag, - hb_position_t *position /* OUT. May be NULL. */) +hb_ot_metrics_get_position (hb_font_t *font, + hb_ot_metrics_tag_t metrics_tag, + hb_position_t *position /* OUT. May be NULL. */) { hb_face_t *face = font->face; switch ((unsigned) metrics_tag) @@ -192,7 +192,7 @@ hb_ot_metrics_get_position (hb_font_t *font, * Since: REPLACEME **/ float -hb_ot_metrics_get_variation (hb_font_t *font, hb_ot_metrics_t metrics_tag) +hb_ot_metrics_get_variation (hb_font_t *font, hb_ot_metrics_tag_t metrics_tag) { return font->face->table.MVAR->get_var (metrics_tag, font->coords, font->num_coords); } @@ -207,7 +207,7 @@ hb_ot_metrics_get_variation (hb_font_t *font, hb_ot_metrics_t metrics_tag) * Since: REPLACEME **/ hb_position_t -hb_ot_metrics_get_x_variation (hb_font_t *font, hb_ot_metrics_t metrics_tag) +hb_ot_metrics_get_x_variation (hb_font_t *font, hb_ot_metrics_tag_t metrics_tag) { return font->em_scalef_x (hb_ot_metrics_get_variation (font, metrics_tag)); } @@ -222,7 +222,7 @@ hb_ot_metrics_get_x_variation (hb_font_t *font, hb_ot_metrics_t metrics_tag) * Since: REPLACEME **/ hb_position_t -hb_ot_metrics_get_y_variation (hb_font_t *font, hb_ot_metrics_t metrics_tag) +hb_ot_metrics_get_y_variation (hb_font_t *font, hb_ot_metrics_tag_t metrics_tag) { return font->em_scalef_y (hb_ot_metrics_get_variation (font, metrics_tag)); } diff --git a/src/hb-ot-metrics.h b/src/hb-ot-metrics.h index c60ee739c..6b2747b96 100644 --- a/src/hb-ot-metrics.h +++ b/src/hb-ot-metrics.h @@ -36,7 +36,7 @@ HB_BEGIN_DECLS /** - * hb_ot_metrics_t: + * hb_ot_metrics_tag_t: * * From https://docs.microsoft.com/en-us/typography/opentype/spec/mvar#value-tags * @@ -73,21 +73,21 @@ typedef enum { HB_OT_METRICS_UNDERLINE_OFFSET = HB_TAG ('u','n','d','o'), _HB_OT_METRICS_MAX_VALUE = HB_TAG_MAX_SIGNED /*< skip >*/ -} hb_ot_metrics_t; +} hb_ot_metrics_tag_t; HB_EXTERN hb_bool_t -hb_ot_metrics_get_position (hb_font_t *font, - hb_ot_metrics_t metrics_tag, - hb_position_t *position /* OUT. May be NULL. */); +hb_ot_metrics_get_position (hb_font_t *font, + hb_ot_metrics_tag_t metrics_tag, + hb_position_t *position /* OUT. May be NULL. */); HB_EXTERN float -hb_ot_metrics_get_variation (hb_font_t *font, hb_ot_metrics_t metrics_tag); +hb_ot_metrics_get_variation (hb_font_t *font, hb_ot_metrics_tag_t metrics_tag); HB_EXTERN hb_position_t -hb_ot_metrics_get_x_variation (hb_font_t *font, hb_ot_metrics_t metrics_tag); +hb_ot_metrics_get_x_variation (hb_font_t *font, hb_ot_metrics_tag_t metrics_tag); HB_EXTERN hb_position_t -hb_ot_metrics_get_y_variation (hb_font_t *font, hb_ot_metrics_t metrics_tag); +hb_ot_metrics_get_y_variation (hb_font_t *font, hb_ot_metrics_tag_t metrics_tag); HB_END_DECLS diff --git a/src/hb-ot-metrics.hh b/src/hb-ot-metrics.hh index f9ae46fc9..19a5e9ed4 100644 --- a/src/hb-ot-metrics.hh +++ b/src/hb-ot-metrics.hh @@ -28,8 +28,8 @@ #include "hb.hh" HB_INTERNAL bool -_hb_ot_metrics_get_position_common (hb_font_t *font, - hb_ot_metrics_t metrics_tag, - hb_position_t *position /* OUT. May be NULL. */); +_hb_ot_metrics_get_position_common (hb_font_t *font, + hb_ot_metrics_tag_t metrics_tag, + hb_position_t *position /* OUT. May be NULL. */); #endif /* HB_OT_METRICS_HH */