From 50cbd5ca7851514fac26566fef21d08cb50103eb Mon Sep 17 00:00:00 2001 From: Sascha Brawer Date: Fri, 22 Jan 2016 10:57:03 +0100 Subject: [PATCH] [otlLib] Move building of BaseArrays from feaLib to otlLib --- Lib/fontTools/feaLib/builder.py | 8 +------ Lib/fontTools/otlLib/builder.py | 11 +++++++++ Lib/fontTools/otlLib/builder_test.py | 35 +++++++++++++++++++++++++++- 3 files changed, 46 insertions(+), 8 deletions(-) diff --git a/Lib/fontTools/feaLib/builder.py b/Lib/fontTools/feaLib/builder.py index cf4c3ada3..ef8f4e2b1 100644 --- a/Lib/fontTools/feaLib/builder.py +++ b/Lib/fontTools/feaLib/builder.py @@ -979,13 +979,7 @@ class MarkBasePosBuilder(LookupBuilder): st.MarkArray = otl.buildMarkArray(marks, self.glyphMap) st.ClassCount = len(markClasses) st.BaseCoverage = otl.buildCoverage(bases, self.glyphMap) - st.BaseArray = ba = otTables.BaseArray() - ba.BaseCount = len(bases) - ba.BaseRecord = [] - for base in sorted(bases, key=self.glyphMap.__getitem__): - baseAnchors = bases[base] - anchors = [baseAnchors.get(mc) for mc in range(st.ClassCount)] - ba.BaseRecord.append(otl.buildBaseRecord(anchors)) + st.BaseArray = otl.buildBaseArray(bases, st.ClassCount, self.glyphMap) return self.buildLookup_([st]) diff --git a/Lib/fontTools/otlLib/builder.py b/Lib/fontTools/otlLib/builder.py index 7067f9b7b..154913cd5 100644 --- a/Lib/fontTools/otlLib/builder.py +++ b/Lib/fontTools/otlLib/builder.py @@ -111,6 +111,17 @@ def buildAnchor(x, y, point=None, deviceX=None, deviceY=None): return self +def buildBaseArray(bases, numMarkClasses, glyphMap): + self = ot.BaseArray() + self.BaseCount = len(bases) + self.BaseRecord = [] + for base in sorted(bases, key=glyphMap.__getitem__): + b = bases[base] + anchors = [b.get(markClass) for markClass in range(numMarkClasses)] + self.BaseRecord.append(buildBaseRecord(anchors)) + return self + + def buildBaseRecord(anchors): """[otTables.Anchor, otTables.Anchor, ...] --> otTables.BaseRecord""" self = ot.BaseRecord() diff --git a/Lib/fontTools/otlLib/builder_test.py b/Lib/fontTools/otlLib/builder_test.py index 99b5cdbc9..1b2129bf6 100644 --- a/Lib/fontTools/otlLib/builder_test.py +++ b/Lib/fontTools/otlLib/builder_test.py @@ -7,7 +7,7 @@ import unittest class BuilderTest(unittest.TestCase): GLYPHS = (".notdef space zero one two three four five six f_f_i c_t " - "grave acute cedilla").split() + "A B C a b c grave acute cedilla").split() GLYPHMAP = {name: num for num, name in enumerate(GLYPHS)} ANCHOR1 = builder.buildAnchor(11, -11) @@ -95,6 +95,39 @@ class BuilderTest(unittest.TestCase): ' ' '') + def test_buildBaseArray(self): + anchor = builder.buildAnchor + baseArray = builder.buildBaseArray({ + "a": {2: anchor(300, 80)}, + "c": {1: anchor(300, 80), 2: anchor(300, -20)} + }, numMarkClasses=4, glyphMap=self.GLYPHMAP) + self.maxDiff = None + self.assertEqual(getXML(baseArray.toXML), + '' + ' ' + ' ' + ' ' + ' ' + ' ' + ' ' + ' ' + ' ' + ' ' + ' ' + ' ' + ' ' + ' ' + ' ' + ' ' + ' ' + ' ' + ' ' + ' ' + ' ' + ' ' + ' ' + '') + def test_buildBaseRecord(self): a = builder.buildAnchor rec = builder.buildBaseRecord([a(500, -20), None, a(300, -15)])