[feaLib] Simplify how ClassDef tables are built

In f0eb7e98ca0642f17ac82433db8c957fffd6a9d3, the various subclasses
of otTables.ClassDef were merged into one single class. Therefore,
we can now always instantiate otTables.ClassDef() which is simpler.
This commit is contained in:
Sascha Brawer 2016-01-14 11:56:57 +01:00
parent bf29ec9555
commit d2f9fa8a39
2 changed files with 11 additions and 12 deletions

View File

@ -1248,8 +1248,8 @@ class ClassPairPosSubtableBuilder(object):
self.classDef2_.canAdd(gc2)) self.classDef2_.canAdd(gc2))
if not mergeable: if not mergeable:
self.flush_() self.flush_()
self.classDef1_ = ClassDefBuilder(otTables.ClassDef1, useClass0=True) self.classDef1_ = ClassDefBuilder(useClass0=True)
self.classDef2_ = ClassDefBuilder(otTables.ClassDef2) self.classDef2_ = ClassDefBuilder(useClass0=False)
self.coverage_ = set() self.coverage_ = set()
self.values_ = {} self.values_ = {}
self.classDef1_.add(gc1) self.classDef1_.add(gc1)
@ -1410,10 +1410,9 @@ class SinglePosBuilder(LookupBuilder):
class ClassDefBuilder(object): class ClassDefBuilder(object):
"""Helper for building ClassDef tables.""" """Helper for building ClassDef tables."""
def __init__(self, otClass, useClass0=False): def __init__(self, useClass0):
self.classes_ = set() self.classes_ = set()
self.glyphs_ = {} self.glyphs_ = {}
self.otClass_ = otClass
self.useClass0_ = useClass0 self.useClass0_ = useClass0
def canAdd(self, glyphs): def canAdd(self, glyphs):
@ -1459,6 +1458,6 @@ class ClassDefBuilder(object):
continue continue
for glyph in glyphs: for glyph in glyphs:
glyphClasses[glyph] = classID glyphClasses[glyph] = classID
classDef = self.otClass_() classDef = otTables.ClassDef()
classDef.classDefs = glyphClasses classDef.classDefs = glyphClasses
return classDef return classDef

View File

@ -332,26 +332,26 @@ for name in BuilderTest.TEST_FEATURE_FILES:
class ClassDefBuilderTest(unittest.TestCase): class ClassDefBuilderTest(unittest.TestCase):
def test_build_ClassDef1(self): def test_build_usingClass0(self):
builder = ClassDefBuilder(otTables.ClassDef1, useClass0=True) builder = ClassDefBuilder(useClass0=True)
builder.add({"a", "b"}) builder.add({"a", "b"})
builder.add({"c"}) builder.add({"c"})
builder.add({"e", "f", "g", "h"}) builder.add({"e", "f", "g", "h"})
cdef = builder.build() cdef = builder.build()
self.assertIsInstance(cdef, otTables.ClassDef1) self.assertIsInstance(cdef, otTables.ClassDef)
self.assertEqual(cdef.classDefs, { self.assertEqual(cdef.classDefs, {
"a": 1, "a": 1,
"b": 1, "b": 1,
"c": 2 "c": 2
}) })
def test_build_ClassDef2(self): def test_build_notUsingClass0(self):
builder = ClassDefBuilder(otTables.ClassDef2) builder = ClassDefBuilder(useClass0=False)
builder.add({"a", "b"}) builder.add({"a", "b"})
builder.add({"c"}) builder.add({"c"})
builder.add({"e", "f", "g", "h"}) builder.add({"e", "f", "g", "h"})
cdef = builder.build() cdef = builder.build()
self.assertIsInstance(cdef, otTables.ClassDef2) self.assertIsInstance(cdef, otTables.ClassDef)
self.assertEqual(cdef.classDefs, { self.assertEqual(cdef.classDefs, {
"a": 2, "a": 2,
"b": 2, "b": 2,
@ -363,7 +363,7 @@ class ClassDefBuilderTest(unittest.TestCase):
}) })
def test_canAdd(self): def test_canAdd(self):
b = ClassDefBuilder(otTables.ClassDef1, useClass0=True) b = ClassDefBuilder(useClass0=True)
b.add({"a", "b", "c", "d"}) b.add({"a", "b", "c", "d"})
b.add({"e", "f"}) b.add({"e", "f"})
self.assertTrue(b.canAdd({"a", "b", "c", "d"})) self.assertTrue(b.canAdd({"a", "b", "c", "d"}))