def test_sub(self): kerning1 = { ("A", "A"): 1, ("B", "B"): 1, ("NotIn2", "NotIn2"): 1, ("public.kern1.NotIn2", "C"): 1, ("public.kern1.D", "public.kern2.D"): 1, } groups1 = { "public.kern1.NotIn1": ["C"], "public.kern1.D": ["D", "H"], "public.kern2.D": ["D", "H"], } kerning2 = { ("A", "A"): -1, ("B", "B"): 1, ("NotIn1", "NotIn1"): 1, ("public.kern1.NotIn1", "C"): 1, ("public.kern1.D", "public.kern2.D"): 1, } groups2 = { "public.kern1.NotIn2": ["C"], "public.kern1.D": ["D"], "public.kern2.D": ["D", "H"], } obj = MathKerning(kerning1, groups1) - MathKerning(kerning2, groups2) self.assertEqual(sorted(obj.items()), [(('A', 'A'), 2), (('NotIn1', 'NotIn1'), -1), (('NotIn2', 'NotIn2'), 1), (('public.kern1.NotIn1', 'C'), -1), (('public.kern1.NotIn2', 'C'), 1)]) self.assertEqual(sorted(obj.groups()["public.kern1.D"]), ['D', 'H']) self.assertEqual(sorted(obj.groups()["public.kern2.D"]), ['D', 'H'])
def test_addTo(self): kerning = { ("A", "A"): 1, ("B", "B"): -1, } obj = MathKerning(kerning) obj.addTo(1) self.assertEqual(sorted(obj.items()), [(('A', 'A'), 2), (('B', 'B'), 0)])
def test_round(self): kerning = { ("A", "A"): 1.99, ("B", "B"): 4, ("C", "C"): 7, ("D", "D"): 9.01, } obj = MathKerning(kerning) obj.round(5) self.assertEqual(sorted(obj.items()), [(('A', 'A'), 0), (('B', 'B'), 5), (('C', 'C'), 5), (('D', 'D'), 10)])
def test_round(self): kerning = { ("A", "A"): 1.99, ("B", "B"): 4, ("C", "C"): 7, ("D", "D"): 9.01, } obj = MathKerning(kerning) obj.round(5) self.assertEqual( sorted(obj.items()), [(('A', 'A'), 0), (('B', 'B'), 5), (('C', 'C'), 5), (('D', 'D'), 10)])
def test_div_tuple_factor(self): kerning = { ("A", "A"): 0, ("B", "B"): 4, ("C2", "public.kern2.C"): 0, ("public.kern1.C", "public.kern2.C"): 4, } groups = { "public.kern1.C": ["C1", "C2"], "public.kern2.C": ["C1", "C2"], } obj = MathKerning(kerning, groups) / (4, 2) self.assertEqual(sorted(obj.items()), [(('B', 'B'), 1), (('C2', 'public.kern2.C'), 0), (('public.kern1.C', 'public.kern2.C'), 1)])
def test_mul(self): kerning = { ("A", "A"): 0, ("B", "B"): 1, ("C2", "public.kern2.C"): 0, ("public.kern1.C", "public.kern2.C"): 2, } groups = { "public.kern1.C": ["C1", "C2"], "public.kern2.C": ["C1", "C2"], } obj = MathKerning(kerning, groups) * 2 self.assertEqual(sorted(obj.items()), [(('B', 'B'), 2), (('C2', 'public.kern2.C'), 0), (('public.kern1.C', 'public.kern2.C'), 4)])
def test_copy(self): kerning1 = { ("A", "A"): 1, ("B", "B"): 1, ("NotIn2", "NotIn2"): 1, ("public.kern1.NotIn2", "C"): 1, ("public.kern1.D", "public.kern2.D"): 1, } groups1 = { "public.kern1.NotIn1": ["C"], "public.kern1.D": ["D", "H"], "public.kern2.D": ["D", "H"], } obj1 = MathKerning(kerning1, groups1) obj2 = obj1.copy() self.assertEqual(sorted(obj1.items()), sorted(obj2.items()))
def test_cleanup(self): kerning = { ("A", "A"): 0, ("B", "B"): 1, ("C", "public.kern2.C"): 0, ("public.kern1.C", "public.kern2.C"): 1, ("D", "D"): 1.0, ("E", "E"): 1.2, } groups = {"public.kern1.C": ["C", "C1"], "public.kern2.C": ["C", "C1"]} obj = MathKerning(kerning, groups) obj.cleanup() self.assertEqual(sorted(obj.items()), [(('B', 'B'), 1), (('C', 'public.kern2.C'), 0), (('D', 'D'), 1), (('E', 'E'), 1.2), (('public.kern1.C', 'public.kern2.C'), 1)])
def test_div_tuple_factor(self): kerning = { ("A", "A"): 0, ("B", "B"): 4, ("C2", "public.kern2.C"): 0, ("public.kern1.C", "public.kern2.C"): 4, } groups = { "public.kern1.C": ["C1", "C2"], "public.kern2.C": ["C1", "C2"], } obj = MathKerning(kerning, groups) / (4, 2) self.assertEqual( sorted(obj.items()), [(('B', 'B'), 1), (('C2', 'public.kern2.C'), 0), (('public.kern1.C', 'public.kern2.C'), 1)])
def test_mul(self): kerning = { ("A", "A"): 0, ("B", "B"): 1, ("C2", "public.kern2.C"): 0, ("public.kern1.C", "public.kern2.C"): 2, } groups = { "public.kern1.C": ["C1", "C2"], "public.kern2.C": ["C1", "C2"], } obj = MathKerning(kerning, groups) * 2 self.assertEqual( sorted(obj.items()), [(('B', 'B'), 2), (('C2', 'public.kern2.C'), 0), (('public.kern1.C', 'public.kern2.C'), 4)])
def test_add(self): kerning1 = { ("A", "A"): 1, ("B", "B"): 1, ("NotIn2", "NotIn2"): 1, ("public.kern1.NotIn2", "C"): 1, ("public.kern1.D", "public.kern2.D"): 1, } groups1 = { "public.kern1.NotIn1": ["C"], "public.kern1.D": ["D", "H"], "public.kern2.D": ["D", "H"], } kerning2 = { ("A", "A"): -1, ("B", "B"): 1, ("NotIn1", "NotIn1"): 1, ("public.kern1.NotIn1", "C"): 1, ("public.kern1.D", "public.kern2.D"): 1, } groups2 = { "public.kern1.NotIn2": ["C"], "public.kern1.D": ["D", "H"], "public.kern2.D": ["D", "H"], } obj = MathKerning(kerning1, groups1) + MathKerning(kerning2, groups2) self.assertEqual( sorted(obj.items()), [(('B', 'B'), 2), (('NotIn1', 'NotIn1'), 1), (('NotIn2', 'NotIn2'), 1), (('public.kern1.D', 'public.kern2.D'), 2), (('public.kern1.NotIn1', 'C'), 1), (('public.kern1.NotIn2', 'C'), 1)]) self.assertEqual( obj.groups()["public.kern1.D"], ['D', 'H']) self.assertEqual( obj.groups()["public.kern2.D"], ['D', 'H'])
def test_cleanup(self): kerning = { ("A", "A"): 0, ("B", "B"): 1, ("C", "public.kern2.C"): 0, ("public.kern1.C", "public.kern2.C"): 1, ("D", "D"): 1.0, ("E", "E"): 1.2, } groups = { "public.kern1.C": ["C", "C1"], "public.kern2.C": ["C", "C1"] } obj = MathKerning(kerning, groups) obj.cleanup() self.assertEqual( sorted(obj.items()), [(('B', 'B'), 1), (('C', 'public.kern2.C'), 0), (('D', 'D'), 1), (('E', 'E'), 1.2), (('public.kern1.C', 'public.kern2.C'), 1)])
from fontMath.mathKerning import MathKerning from defcon.objects.font import Font f = Font() f.groups["public.kern1.groupA"] = ['one', 'Bee'] f.groups["public.kern2.groupB"] = ['two', 'Three'] f.kerning[('public.kern1.groupA', 'public.kern2.groupB')] = -100 f.kerning[('one', 'two')] = 0 m = MathKerning(f.kerning, f.groups) print(m.items()) print((m*1.0).items())
from ufoProcessor.varModels import VariationModelMutator from mutatorMath.objects.mutator import buildMutator from fontTools.designspaceLib import AxisDescriptor # kerning exception value. Different results for 1 and 0 value = 0 #f = Font() f = RFont() # doesn't make a difference f.groups["public.kern1.groupA"] = ['one', 'Bee'] f.groups["public.kern2.groupB"] = ['two', 'Three'] f.kerning[('public.kern1.groupA', 'public.kern2.groupB')] = -100 f.kerning[("one", "two")] = value m = MathKerning(f.kerning, f.groups) print("mathKerning object items:", m.items()) print("\tpair", ('public.kern1.groupA', 'public.kern2.groupB'), m[('public.kern1.groupA', 'public.kern2.groupB')]) print("\tpair", ('public.kern1.groupA', 'two'), m[('public.kern1.groupA', 'two')]) print("\tpair", ('one', 'public.kern2.groupB'), m[('one', 'public.kern2.groupB')]) print("\tpair", ('one', 'two'), m[('one', 'two')]) items = [(dict(w=0), m), (dict(w=1), m)] a = AxisDescriptor() a.name = "w" a.minimum = 0 a.default = 0 a.maximum = 1