aboutsummaryrefslogtreecommitdiff
path: root/Lib/fontTools/subset/__init__.py
diff options
context:
space:
mode:
authorElliott Hughes <enh@google.com>2021-04-02 20:28:33 +0000
committerAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>2021-04-02 20:28:33 +0000
commitccfc92cc9b9473f058787f81d3532b578f3e1c1d (patch)
tree8e925d800e27f7a70c2b6a131b14526bc0f095b5 /Lib/fontTools/subset/__init__.py
parent415c3a2bf62ec876ea36acebe274bfcb8c2f3d24 (diff)
parentc1d5ba5438b639565b0c35ab2cd58555d0fa7645 (diff)
downloadfonttools-ccfc92cc9b9473f058787f81d3532b578f3e1c1d.tar.gz
Upgrade fonttools to 4.22.0 am: 6cf80b8fa7 am: d11d71b940 am: 78e33b8121 am: c1d5ba5438
Original change: https://android-review.googlesource.com/c/platform/external/fonttools/+/1662591 Change-Id: I224057ca890f000f5c895070e2cba6ef61d24e46
Diffstat (limited to 'Lib/fontTools/subset/__init__.py')
-rw-r--r--Lib/fontTools/subset/__init__.py19
1 files changed, 10 insertions, 9 deletions
diff --git a/Lib/fontTools/subset/__init__.py b/Lib/fontTools/subset/__init__.py
index 8162c09c..f687b056 100644
--- a/Lib/fontTools/subset/__init__.py
+++ b/Lib/fontTools/subset/__init__.py
@@ -2,14 +2,13 @@
#
# Google Author(s): Behdad Esfahbod
-from fontTools.misc.fixedTools import otRound
+from fontTools.misc.roundTools import otRound
from fontTools import ttLib
from fontTools.ttLib.tables import otTables
from fontTools.otlLib.maxContextCalc import maxCtxFont
from fontTools.pens.basePen import NullPen
from fontTools.misc.loggingTools import Timer
from fontTools.subset.cff import *
-from fontTools.varLib import varStore
import sys
import struct
import array
@@ -428,13 +427,14 @@ def intersect_class(self, glyphs, klass):
if v == klass and g in glyphs)
@_add_method(otTables.ClassDef)
-def subset(self, glyphs, remap=False):
+def subset(self, glyphs, remap=False, useClass0=True):
"""Returns ascending list of remaining classes."""
self.classDefs = {g:v for g,v in self.classDefs.items() if g in glyphs}
# Note: while class 0 has the special meaning of "not matched",
# if no glyph will ever /not match/, we can optimize class 0 out too.
+ # Only do this if allowed.
indices = _uniq_sort(
- ([0] if any(g not in self.classDefs for g in glyphs) else []) +
+ ([0] if ((not useClass0) or any(g not in self.classDefs for g in glyphs)) else []) +
list(self.classDefs.values()))
if remap:
self.remap(indices)
@@ -570,15 +570,16 @@ def subset_glyphs(self, s):
self.PairSetCount = len(self.PairSet)
return bool(self.PairSetCount)
elif self.Format == 2:
- class1_map = [c for c in self.ClassDef1.subset(s.glyphs, remap=True) if c < self.Class1Count]
- class2_map = [c for c in self.ClassDef2.subset(s.glyphs, remap=True) if c < self.Class2Count]
+ class1_map = [c for c in self.ClassDef1.subset(s.glyphs.intersection(self.Coverage.glyphs), remap=True) if c < self.Class1Count]
+ class2_map = [c for c in self.ClassDef2.subset(s.glyphs, remap=True, useClass0=False) if c < self.Class2Count]
self.Class1Record = [self.Class1Record[i] for i in class1_map]
for c in self.Class1Record:
c.Class2Record = [c.Class2Record[i] for i in class2_map]
self.Class1Count = len(class1_map)
self.Class2Count = len(class2_map)
+ # If only Class2 0 left, no need to keep anything.
return bool(self.Class1Count and
- self.Class2Count and
+ (self.Class2Count > 1) and
self.Coverage.subset(s.glyphs))
else:
assert 0, "unknown format: %s" % self.Format
@@ -1877,7 +1878,7 @@ def subset_glyphs(self, s):
table.RsbMap.mapping = _dict_subset(table.RsbMap.mapping, s.glyphs)
used.update(table.RsbMap.mapping.values())
- varidx_map = varStore.VarStore_subset_varidxes(table.VarStore, used, retainFirstMap=retainAdvMap, advIdxes=advIdxes_)
+ varidx_map = table.VarStore.subset_varidxes(used, retainFirstMap=retainAdvMap, advIdxes=advIdxes_)
if table.AdvWidthMap:
table.AdvWidthMap.mapping = _remap_index_map(s, varidx_map, table.AdvWidthMap)
@@ -1915,7 +1916,7 @@ def subset_glyphs(self, s):
table.VOrgMap.mapping = _dict_subset(table.VOrgMap.mapping, s.glyphs)
used.update(table.VOrgMap.mapping.values())
- varidx_map = varStore.VarStore_subset_varidxes(table.VarStore, used, retainFirstMap=retainAdvMap, advIdxes=advIdxes_)
+ varidx_map = table.VarStore.subset_varidxes(used, retainFirstMap=retainAdvMap, advIdxes=advIdxes_)
if table.AdvHeightMap:
table.AdvHeightMap.mapping = _remap_index_map(s, varidx_map, table.AdvHeightMap)