From 4a38610072a9fe819c6227cae0e57f7be29816a2 Mon Sep 17 00:00:00 2001 From: Garret Rieger Date: Wed, 23 Oct 2024 20:50:45 +0000 Subject: [PATCH 1/3] [subset] consider variation selectors subsetting cmap14 cmap14 subsetting code was not considering variation selectors in the input unicode set when deciding which variant glyphs to keep. This updates subsetting to only keeps variant glyphs if their variation selector code point is in the input unicodes set. --- Lib/fontTools/subset/__init__.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/Lib/fontTools/subset/__init__.py b/Lib/fontTools/subset/__init__.py index 99556d49e..496eda92e 100644 --- a/Lib/fontTools/subset/__init__.py +++ b/Lib/fontTools/subset/__init__.py @@ -2873,7 +2873,9 @@ def closure_glyphs(self, s): # Close glyphs for table in tables: if table.format == 14: - for cmap in table.uvsDict.values(): + for varSelector, cmap in table.uvsDict.items(): + if varSelector not in s.unicodes_requested: + continue glyphs = {g for u, g in cmap if u in s.unicodes_requested} if None in glyphs: glyphs.remove(None) @@ -2927,7 +2929,7 @@ def subset_glyphs(self, s): for u, g in l if g in s.glyphs_requested or u in s.unicodes_requested ] - for v, l in t.uvsDict.items() + for v, l in t.uvsDict.items() if v in s.unicodes_requested } t.uvsDict = {v: l for v, l in t.uvsDict.items() if l} elif t.isUnicode(): @@ -3797,6 +3799,8 @@ def main(args=None): for t in font["cmap"].tables: if t.isUnicode(): unicodes.extend(t.cmap.keys()) + if t.format == 14: + unicodes.extend(t.uvsDict.keys()) assert "" not in glyphs log.info("Text: '%s'" % text) From edaab1fa2fe53254d2179c2d4c9001d263a5438c Mon Sep 17 00:00:00 2001 From: Garret Rieger Date: Wed, 23 Oct 2024 22:07:34 +0000 Subject: [PATCH 2/3] [subset] Add tests for UVS + cmap14 subsetting. --- Tests/subset/data/cmap14_font1.no_uvs.ttx | 11 + .../data/cmap14_font1.no_uvs_non_default.ttx | 11 + Tests/subset/data/cmap14_font1.ttx | 1101 +++++++++++++++++ Tests/subset/data/cmap14_font1.uvs.ttx | 14 + .../data/cmap14_font1.uvs_non_default.ttx | 14 + Tests/subset/subset_test.py | 21 + 6 files changed, 1172 insertions(+) create mode 100644 Tests/subset/data/cmap14_font1.no_uvs.ttx create mode 100644 Tests/subset/data/cmap14_font1.no_uvs_non_default.ttx create mode 100644 Tests/subset/data/cmap14_font1.ttx create mode 100644 Tests/subset/data/cmap14_font1.uvs.ttx create mode 100644 Tests/subset/data/cmap14_font1.uvs_non_default.ttx diff --git a/Tests/subset/data/cmap14_font1.no_uvs.ttx b/Tests/subset/data/cmap14_font1.no_uvs.ttx new file mode 100644 index 000000000..75bd02842 --- /dev/null +++ b/Tests/subset/data/cmap14_font1.no_uvs.ttx @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/Tests/subset/data/cmap14_font1.no_uvs_non_default.ttx b/Tests/subset/data/cmap14_font1.no_uvs_non_default.ttx new file mode 100644 index 000000000..48b04de43 --- /dev/null +++ b/Tests/subset/data/cmap14_font1.no_uvs_non_default.ttx @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/Tests/subset/data/cmap14_font1.ttx b/Tests/subset/data/cmap14_font1.ttx new file mode 100644 index 000000000..fdb00a4e7 --- /dev/null +++ b/Tests/subset/data/cmap14_font1.ttx @@ -0,0 +1,1101 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + cmap14_font1 + + + Regular + + + cmap14_font1 + + + cmap14_font1 + + + Version1.0 + + + cmap14_font1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 145 665 rmoveto + -74 -43 -28 -166 -6 -75 -10 -124 21 -220 148 -44 rrcurveto + -11 37 40 7 39 hhcurveto + 6 8 3 4 4 hvcurveto + 69 60 39 31 2 103 1 44 5 43 -4 43 -7 87 -50 217 -88 45 -24 13 -29 1 -28 7 -12 -1 -8 -4 -6 -7 -16 -2 -16 -3 -13 -8 rrcurveto + 122 -50 rmoveto + 97 -69 31 -246 -15 -107 -13 -95 -42 -80 -111 33 -52 16 -30 55 -16 46 -32 98 -1 279 95 68 13 9 18 -2 15 4 1 1 2 1 2 1 14 -2 13 -2 11 -8 rrcurveto + 233 -615 rmoveto + return + + + 175 661 rmoveto + 1 -215 6 -215 1 -215 4 -42 54 3 2 41 -1 216 -6 214 -1 215 -11 35 -42 0 -7 -37 rrcurveto + 325 -661 rmoveto + return + + + 143 536 rmoveto + 59 22 61 39 64 3 78 5 3 -97 -32 -48 -76 -117 -268 -55 -9 -168 -2 -31 11 -30 5 -31 5 -10 5 -5 10 -5 50 -15 58 8 50 1 65 1 66 3 65 1 37 7 0 42 -35 11 rrcurveto + -106 -2 -108 -7 -107 4 -2 18 -8 18 2 17 16 141 259 55 69 117 72 122 -67 142 -156 -40 -52 -14 -48 -26 -51 -19 -40 -14 16 -51 41 8 rrcurveto + 357 -536 rmoveto + return + + + 92 580 rmoveto + 13 6 13 7 14 4 54 16 184 1 9 -81 1 -13 -3 -13 -3 -14 -9 -45 -124 -14 -42 -8 rrcurveto + -2 -2 1 -1 hhcurveto + -2 vlineto + -30 -15 5 -40 35 -4 60 -5 62 -4 47 -43 83 -75 -108 -134 -82 -20 -75 -17 -101 91 -42 -14 -22 -8 -7 -18 10 -21 2 -2 2 -2 1 -2 10 -10 11 -3 10 2 rrcurveto + 2 2 -1 1 hhcurveto + 16 -7 15 -7 15 -7 33 -14 33 -14 35 -7 103 -18 81 94 48 78 51 83 -64 98 -77 36 -4 1 -3 2 -4 2 17 7 16 9 15 12 77 61 -32 107 -79 40 -91 47 -115 -9 -91 -40 rrcurveto + -27 -24 18 -37 36 7 rrcurveto + 408 -580 rmoveto + return + + + 336 627 rmoveto + -73 -94 -78 -92 -70 -97 -32 -45 -39 -39 -2 -56 2 -16 5 -7 14 -7 76 -39 130 16 102 10 -2 -44 -2 -44 -1 -43 4 -42 54 3 2 41 1 45 2 45 2 45 rrcurveto + 6 6 0 1 5 hvcurveto + 41 8 -6 54 -42 -3 rrcurveto + -2 -3 -1 -2 hhcurveto + 4 135 -3 133 -49 127 -2 3 -3 2 -2 2 -6 6 -8 4 -9 -1 rrcurveto + -6 -6 -3 -4 -4 hvcurveto + -2 -1 -1 -1 -1 -1 rrcurveto + -230 -408 rmoveto + 9 14 6 14 9 13 16 24 37 51 17 22 48 64 50 62 50 62 29 -105 1 -110 -4 -109 -87 -9 -131 -13 -50 20 rrcurveto + 394 -219 rmoveto + return + + + 41 642 rmoveto + 1 -2 1 -1 -1 vvcurveto + -7 2 -7 5 -5 vhcurveto + 15 -69 -71 -105 61 -45 71 -50 214 60 48 -116 9 -20 3 -24 -3 -22 -13 -128 -51 -35 -120 -6 -38 -1 -62 -5 -26 34 -29 22 -33 -28 16 -33 39 -51 75 0 59 2 83 5 76 21 49 69 rrcurveto + 25 36 0 48 11 42 19 72 -43 43 -42 45 -62 68 -159 -25 -76 26 -20 43 44 56 -6 66 101 14 102 -5 103 -1 37 7 0 42 -35 11 -109 1 -110 5 -108 -17 rrcurveto + -1 1 0 0 1 vvcurveto + -25 33 -45 -26 18 -38 rrcurveto + 407 -673 rmoveto + return + + + 399 660 rmoveto + -36 2 -37 10 -35 -8 -152 -32 -56 -137 -37 -134 -35 -130 55 -175 141 -42 156 -46 135 253 -64 123 -39 78 -32 -3 -81 14 -26 5 -36 -14 -24 -10 -36 -15 -28 -18 -26 -26 19 101 63 130 114 18 rrcurveto + 32 5 31 -8 32 -1 37 7 0 42 -35 11 rrcurveto + -263 -360 rmoveto + 52 57 149 71 42 -110 33 -84 -77 -193 -113 33 -98 30 -29 103 4 92 9 -7 14 -1 14 9 rrcurveto + 401 -299 rmoveto + return + + + 99 610 rmoveto + 63 14 62 -15 64 -2 rrcurveto + 22 23 1 2 22 hvcurveto + -24 -33 -19 -38 -22 -38 -85 -149 -77 -149 -19 -173 4 -37 43 -4 12 34 19 165 74 145 83 142 34 57 25 61 56 36 21 24 -14 30 -32 -2 rrcurveto + -6 -47 -49 -8 -48 hhcurveto + -71 2 -67 15 -70 -17 -40 -14 16 -51 41 8 rrcurveto + 418 -667 rmoveto + return + + + 289 676 rmoveto + -88 12 -105 -100 -7 -86 -1 -23 -10 -26 9 -22 9 -21 8 -23 13 -20 6 -8 8 -7 9 -5 -42 -15 -31 -26 -21 -57 -31 -83 41 -138 89 -34 25 -9 24 -16 27 1 90 2 -6 -5 70 46 rrcurveto + 60 39 -5 113 -8 58 -2 24 -13 22 -9 22 -8 20 -18 15 -15 16 -7 7 -9 4 -9 3 3 5 3 5 3 6 43 84 -21 87 -3 90 -6 20 -17 8 -14 -3 -10 9 -11 8 -13 1 rrcurveto + -12 -364 rmoveto + 2 -2 2 -1 3 -1 12 -4 13 -1 9 -8 26 -18 13 -38 6 -28 24 -103 -43 -94 -120 16 -104 15 -73 140 80 83 31 33 22 -2 42 7 19 -4 19 3 17 7 rrcurveto + 32 196 rmoveto + 2 -48 -9 -48 -33 -37 -30 -34 -85 64 -8 41 -11 56 73 136 70 -23 8 -3 8 -6 7 -6 2 -31 4 -31 2 -30 rrcurveto + 191 -508 rmoveto + return + + + 379 635 rmoveto + -50 16 -48 25 -52 6 -169 23 -32 -255 81 -95 66 -76 -16 4 97 -2 rrcurveto + 6 9 3 4 4 hvcurveto + 21 21 19 16 16 17 8 -65 4 -65 -6 -62 -4 -33 -9 -54 -40 -14 -66 -23 -78 47 -54 20 -40 13 -19 -50 37 -19 46 -17 45 -17 45 -16 31 -11 34 12 32 2 104 6 0 190 -4 62 rrcurveto + -1 36 -5 36 -5 36 -2 23 -4 24 -3 23 13 51 -17 20 19 51 5 16 -4 13 -9 8 15 11 0 23 -20 16 rrcurveto + -72 -84 rmoveto + 2 -34 4 -35 5 -35 -3 -19 -4 -16 -6 -7 -19 -22 -22 -20 -21 -21 -14 1 -14 0 -15 1 -53 58 -34 59 18 84 5 21 15 17 10 18 21 7 21 16 22 -3 41 -5 38 -19 40 -14 rrcurveto + -1 -2 -2 -1 -1 -2 -14 3 -15 -9 -4 -21 rrcurveto + 193 -551 rmoveto + return + + + f75af910 158c838c 828d8387 5d8a7d7a + 4d5ffb37 3afb2878 fb3e8f66 b68797ad + 92c79ac5 9dc3c287 bf99c18f 9d559f55 + a4569e66 bd9e7eb3 0838f74a 65f7516b + f7570892 8c938c93 1e8da478 977a887a + 8d797d8e 7208acfb 50159847 9b489e49 + 61866381 618ca4d2 a8d2a1d4 08f7a1fc + 54150b + + + c0f8f115 78538277 884f8830 a6318e30 + 8e468891 7e480888 8c878c89 1e867b95 + 78a389c9 91f72b8d c3c1a0a0 a49d9aa4 + c7f22be8 2baea298 a39ba6a1 cfc272f6 + 57be799e 71937497 50aa4068 55790871 + 82897396 7d898989 898a8808 b4fba915 + dd8daf97 d367d665 9f323c5c 47625089 + 428593b6 8e9f89c0 89b584b6 84b708f7 + 28f7bd15 ce79b23d 5852564f 3b7f3f7f + 088a8b8a 8a1b8c84 07898b8a 8c8a1e73 + 7b9168aa 86d696bb 96bda779 9179907a + 8d618f61 85608a86 b98ab995 b990a194 + 9e92a008 928a9188 901ebe9d a79ac37d + 08fb36fb 85158f78 90798f78 088c0688 + 9f889e89 9f08f833 fc17150b + + + f83bf8f9 155ea564 b85791fb 5ba649fc + 1bb1fb10 bafb2b70 a9f70734 08879092 + 89911bda 90d09eb3 cc9ba696 a1a29fa4 + a771ac69 7f7e8080 82807d7d 78745176 + 85698168 83688276 9b6e967d a143f70b + 9df7b1f4 ec089e9d aa8ba393 b175b075 + b075b179 a5b86aa4 08d4fcf9 150b + + + cef8ec15 93948c94 1b6efb1f 9efb1d9d + fb200889 0791578a 998e4408 8807838d + 848c848e 89997f97 778a0888 888b8a88 + 1f808787 88848008 8a8b8a8a 891e887c + 8e829680 df3ff75a cbc2e0e8 f724a2f7 + 0e4ef734 81a6729e 79a14dd6 fb1b7c34 + 81088a85 858b851b 62898855 b58708f7 + 9a6b15f7 052b64fb 6f38266a 624c6e54 + 82088e07 84f7455a f743b4f7 42089007 + c991c88a bf5f08f7 3ffccc15 0b + + + bff8fa15 9f36903a 87338957 88678757 + 08857bfb 4392751e 9669b487 a98a08f3 + ecb091f2 1fb49385 c1618820 85215cfb + 019a94c4 8ac48ec4 8daa8dab 8daabd8d + be90bd8c b0928bb5 6896598a 5a865889 + 8ed988d9 7bd908e8 a0f7088b e7799e77 + ab958dab 8a8e8b8e 8a8e869a 85927b8f + 21a3fb2e 88216d08 7a85857f 801a8a88 + 8b888c88 08f854fc fa150b + + + cef90215 90068e6c 7969876d 876b8c7f + 8a61082d 0783808c 7d93828d fb0190fb + 018cfb01 8f61c18e 8db48af5 85f689f6 + d79ad97b d99caa9d 7fb46789 437b4298 + 44818ab6 8cb68db6 088db59e b48cb2f7 + 0287f584 f702a3aa 9d7fb467 89fb0174 + fb0095fb 028f7ba1 7286817b 67858b5a + b38708f8 45fd0215 0b + + + 500 0 rmoveto + return + + + 0b + + + + + + -91 callsubr + -91 callsubr + endchar + + + -107 callsubr + -106 callsubr + endchar + + + -106 callsubr + -107 callsubr + endchar + + + -106 callsubr + -106 callsubr + endchar + + + -106 callsubr + -105 callsubr + endchar + + + -106 callsubr + -104 callsubr + endchar + + + -106 callsubr + -103 callsubr + endchar + + + -106 callsubr + -102 callsubr + endchar + + + -106 callsubr + -101 callsubr + endchar + + + -106 callsubr + -100 callsubr + endchar + + + -106 callsubr + -99 callsubr + endchar + + + -106 callsubr + -98 callsubr + endchar + + + -107 callsubr + -105 callsubr + endchar + + + -105 callsubr + -107 callsubr + endchar + + + -105 callsubr + -106 callsubr + endchar + + + -105 callsubr + -105 callsubr + endchar + + + -105 callsubr + -104 callsubr + endchar + + + -105 callsubr + -103 callsubr + endchar + + + -105 callsubr + -102 callsubr + endchar + + + -105 callsubr + -101 callsubr + endchar + + + -105 callsubr + -100 callsubr + endchar + + + -105 callsubr + -99 callsubr + endchar + + + -105 callsubr + -98 callsubr + endchar + + + -107 callsubr + -104 callsubr + endchar + + + -104 callsubr + -107 callsubr + endchar + + + -104 callsubr + -106 callsubr + endchar + + + -104 callsubr + -105 callsubr + endchar + + + -104 callsubr + -104 callsubr + endchar + + + -104 callsubr + -103 callsubr + endchar + + + -104 callsubr + -102 callsubr + endchar + + + -104 callsubr + -101 callsubr + endchar + + + -104 callsubr + -100 callsubr + endchar + + + -104 callsubr + -99 callsubr + endchar + + + -104 callsubr + -98 callsubr + endchar + + + -107 callsubr + -103 callsubr + endchar + + + -103 callsubr + -107 callsubr + endchar + + + -103 callsubr + -106 callsubr + endchar + + + -103 callsubr + -105 callsubr + endchar + + + -103 callsubr + -104 callsubr + endchar + + + -103 callsubr + -103 callsubr + endchar + + + -103 callsubr + -102 callsubr + endchar + + + -103 callsubr + -101 callsubr + endchar + + + -103 callsubr + -100 callsubr + endchar + + + -103 callsubr + -99 callsubr + endchar + + + -103 callsubr + -98 callsubr + endchar + + + -107 callsubr + -102 callsubr + endchar + + + -102 callsubr + -107 callsubr + endchar + + + -102 callsubr + -106 callsubr + endchar + + + -102 callsubr + -105 callsubr + endchar + + + -102 callsubr + -104 callsubr + endchar + + + -102 callsubr + -103 callsubr + endchar + + + -102 callsubr + -102 callsubr + endchar + + + -102 callsubr + -101 callsubr + endchar + + + -102 callsubr + -100 callsubr + endchar + + + -102 callsubr + -99 callsubr + endchar + + + -102 callsubr + -98 callsubr + endchar + + + -107 callsubr + -101 callsubr + endchar + + + -101 callsubr + -107 callsubr + endchar + + + -101 callsubr + -106 callsubr + endchar + + + -101 callsubr + -105 callsubr + endchar + + + -101 callsubr + -104 callsubr + endchar + + + -101 callsubr + -103 callsubr + endchar + + + -101 callsubr + -102 callsubr + endchar + + + -101 callsubr + -101 callsubr + endchar + + + -101 callsubr + -100 callsubr + endchar + + + -101 callsubr + -99 callsubr + endchar + + + -101 callsubr + -98 callsubr + endchar + + + -107 callsubr + -100 callsubr + endchar + + + -100 callsubr + -107 callsubr + endchar + + + -100 callsubr + -106 callsubr + endchar + + + -100 callsubr + -105 callsubr + endchar + + + -100 callsubr + -104 callsubr + endchar + + + -100 callsubr + -103 callsubr + endchar + + + -100 callsubr + -102 callsubr + endchar + + + -100 callsubr + -101 callsubr + endchar + + + -100 callsubr + -100 callsubr + endchar + + + -100 callsubr + -99 callsubr + endchar + + + -100 callsubr + -98 callsubr + endchar + + + -107 callsubr + -99 callsubr + endchar + + + -99 callsubr + -107 callsubr + endchar + + + -99 callsubr + -106 callsubr + endchar + + + -99 callsubr + -105 callsubr + endchar + + + -99 callsubr + -104 callsubr + endchar + + + -99 callsubr + -103 callsubr + endchar + + + -99 callsubr + -102 callsubr + endchar + + + -99 callsubr + -101 callsubr + endchar + + + -99 callsubr + -100 callsubr + endchar + + + -99 callsubr + -99 callsubr + endchar + + + -99 callsubr + -98 callsubr + endchar + + + -107 callsubr + -98 callsubr + endchar + + + -98 callsubr + -107 callsubr + endchar + + + -98 callsubr + -106 callsubr + endchar + + + -98 callsubr + -105 callsubr + endchar + + + -98 callsubr + -104 callsubr + endchar + + + -98 callsubr + -103 callsubr + endchar + + + -98 callsubr + -102 callsubr + endchar + + + -98 callsubr + -101 callsubr + endchar + + + -98 callsubr + -100 callsubr + endchar + + + -98 callsubr + -99 callsubr + endchar + + + -98 callsubr + -98 callsubr + endchar + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Tests/subset/data/cmap14_font1.uvs.ttx b/Tests/subset/data/cmap14_font1.uvs.ttx new file mode 100644 index 000000000..f241c4763 --- /dev/null +++ b/Tests/subset/data/cmap14_font1.uvs.ttx @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/Tests/subset/data/cmap14_font1.uvs_non_default.ttx b/Tests/subset/data/cmap14_font1.uvs_non_default.ttx new file mode 100644 index 000000000..07c4ba0cf --- /dev/null +++ b/Tests/subset/data/cmap14_font1.uvs_non_default.ttx @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/Tests/subset/subset_test.py b/Tests/subset/subset_test.py index 8fdee83b4..c10c21cc8 100644 --- a/Tests/subset/subset_test.py +++ b/Tests/subset/subset_test.py @@ -938,6 +938,27 @@ class SubsetTest: subsetfont = TTFont(subsetpath) self.expect_ttx(subsetfont, self.getpath("CmapSubsetTest.subset.ttx"), ["cmap"]) + + def test_cmap_format14(self): + fontpath = self.compile_font(self.getpath("cmap14_font1.ttx"), ".otf") + subsetpath = self.temp_path(".otf") + + subset.main([fontpath, "--unicodes=4e05", "--output-file=%s" % subsetpath]) + subsetfont = TTFont(subsetpath) + self.expect_ttx(subsetfont, self.getpath("cmap14_font1.no_uvs.ttx"), ["cmap"]) + + subset.main([fontpath, "--unicodes=4e05,e0100", "--output-file=%s" % subsetpath]) + subsetfont = TTFont(subsetpath) + self.expect_ttx(subsetfont, self.getpath("cmap14_font1.uvs.ttx"), ["cmap"]) + + subset.main([fontpath, "--unicodes=4e10", "--output-file=%s" % subsetpath]) + subsetfont = TTFont(subsetpath) + self.expect_ttx(subsetfont, self.getpath("cmap14_font1.no_uvs_non_default.ttx"), ["cmap"]) + + subset.main([fontpath, "--unicodes=4e10,e0100", "--output-file=%s" % subsetpath]) + subsetfont = TTFont(subsetpath) + self.expect_ttx(subsetfont, self.getpath("cmap14_font1.uvs_non_default.ttx"), ["cmap"]) + @pytest.mark.parametrize("text, n", [("!", 1), ("#", 2)]) def test_GPOS_PairPos_Format2_useClass0(self, text, n): # Check two things related to class 0 ('every other glyph'): From 201f02c2c2a223bca2e526a6e05c273cf64a37dc Mon Sep 17 00:00:00 2001 From: Garret Rieger Date: Thu, 24 Oct 2024 00:30:38 +0000 Subject: [PATCH 3/3] [subset] Fix lint. --- Lib/fontTools/subset/__init__.py | 3 ++- Tests/subset/subset_test.py | 17 ++++++++++++----- 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/Lib/fontTools/subset/__init__.py b/Lib/fontTools/subset/__init__.py index 496eda92e..8458edc35 100644 --- a/Lib/fontTools/subset/__init__.py +++ b/Lib/fontTools/subset/__init__.py @@ -2929,7 +2929,8 @@ def subset_glyphs(self, s): for u, g in l if g in s.glyphs_requested or u in s.unicodes_requested ] - for v, l in t.uvsDict.items() if v in s.unicodes_requested + for v, l in t.uvsDict.items() + if v in s.unicodes_requested } t.uvsDict = {v: l for v, l in t.uvsDict.items() if l} elif t.isUnicode(): diff --git a/Tests/subset/subset_test.py b/Tests/subset/subset_test.py index c10c21cc8..01a1564ea 100644 --- a/Tests/subset/subset_test.py +++ b/Tests/subset/subset_test.py @@ -938,7 +938,6 @@ class SubsetTest: subsetfont = TTFont(subsetpath) self.expect_ttx(subsetfont, self.getpath("CmapSubsetTest.subset.ttx"), ["cmap"]) - def test_cmap_format14(self): fontpath = self.compile_font(self.getpath("cmap14_font1.ttx"), ".otf") subsetpath = self.temp_path(".otf") @@ -947,17 +946,25 @@ class SubsetTest: subsetfont = TTFont(subsetpath) self.expect_ttx(subsetfont, self.getpath("cmap14_font1.no_uvs.ttx"), ["cmap"]) - subset.main([fontpath, "--unicodes=4e05,e0100", "--output-file=%s" % subsetpath]) + subset.main( + [fontpath, "--unicodes=4e05,e0100", "--output-file=%s" % subsetpath] + ) subsetfont = TTFont(subsetpath) self.expect_ttx(subsetfont, self.getpath("cmap14_font1.uvs.ttx"), ["cmap"]) subset.main([fontpath, "--unicodes=4e10", "--output-file=%s" % subsetpath]) subsetfont = TTFont(subsetpath) - self.expect_ttx(subsetfont, self.getpath("cmap14_font1.no_uvs_non_default.ttx"), ["cmap"]) + self.expect_ttx( + subsetfont, self.getpath("cmap14_font1.no_uvs_non_default.ttx"), ["cmap"] + ) - subset.main([fontpath, "--unicodes=4e10,e0100", "--output-file=%s" % subsetpath]) + subset.main( + [fontpath, "--unicodes=4e10,e0100", "--output-file=%s" % subsetpath] + ) subsetfont = TTFont(subsetpath) - self.expect_ttx(subsetfont, self.getpath("cmap14_font1.uvs_non_default.ttx"), ["cmap"]) + self.expect_ttx( + subsetfont, self.getpath("cmap14_font1.uvs_non_default.ttx"), ["cmap"] + ) @pytest.mark.parametrize("text, n", [("!", 1), ("#", 2)]) def test_GPOS_PairPos_Format2_useClass0(self, text, n):