[otlLib] Move building of BaseArrays from feaLib to otlLib
This commit is contained in:
parent
109989b0c1
commit
50cbd5ca78
@ -979,13 +979,7 @@ class MarkBasePosBuilder(LookupBuilder):
|
|||||||
st.MarkArray = otl.buildMarkArray(marks, self.glyphMap)
|
st.MarkArray = otl.buildMarkArray(marks, self.glyphMap)
|
||||||
st.ClassCount = len(markClasses)
|
st.ClassCount = len(markClasses)
|
||||||
st.BaseCoverage = otl.buildCoverage(bases, self.glyphMap)
|
st.BaseCoverage = otl.buildCoverage(bases, self.glyphMap)
|
||||||
st.BaseArray = ba = otTables.BaseArray()
|
st.BaseArray = otl.buildBaseArray(bases, st.ClassCount, self.glyphMap)
|
||||||
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))
|
|
||||||
return self.buildLookup_([st])
|
return self.buildLookup_([st])
|
||||||
|
|
||||||
|
|
||||||
|
@ -111,6 +111,17 @@ def buildAnchor(x, y, point=None, deviceX=None, deviceY=None):
|
|||||||
return self
|
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):
|
def buildBaseRecord(anchors):
|
||||||
"""[otTables.Anchor, otTables.Anchor, ...] --> otTables.BaseRecord"""
|
"""[otTables.Anchor, otTables.Anchor, ...] --> otTables.BaseRecord"""
|
||||||
self = ot.BaseRecord()
|
self = ot.BaseRecord()
|
||||||
|
@ -7,7 +7,7 @@ import unittest
|
|||||||
|
|
||||||
class BuilderTest(unittest.TestCase):
|
class BuilderTest(unittest.TestCase):
|
||||||
GLYPHS = (".notdef space zero one two three four five six f_f_i c_t "
|
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)}
|
GLYPHMAP = {name: num for num, name in enumerate(GLYPHS)}
|
||||||
|
|
||||||
ANCHOR1 = builder.buildAnchor(11, -11)
|
ANCHOR1 = builder.buildAnchor(11, -11)
|
||||||
@ -95,6 +95,39 @@ class BuilderTest(unittest.TestCase):
|
|||||||
' <PointIndex index="1" value="7"/>'
|
' <PointIndex index="1" value="7"/>'
|
||||||
'</AttachPoint>')
|
'</AttachPoint>')
|
||||||
|
|
||||||
|
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),
|
||||||
|
'<BaseArray>'
|
||||||
|
' <!-- BaseCount=2 -->'
|
||||||
|
' <BaseRecord index="0">'
|
||||||
|
' <BaseAnchor index="0" empty="1"/>'
|
||||||
|
' <BaseAnchor index="1" empty="1"/>'
|
||||||
|
' <BaseAnchor index="2" Format="1">'
|
||||||
|
' <XCoordinate value="300"/>'
|
||||||
|
' <YCoordinate value="80"/>'
|
||||||
|
' </BaseAnchor>'
|
||||||
|
' <BaseAnchor index="3" empty="1"/>'
|
||||||
|
' </BaseRecord>'
|
||||||
|
' <BaseRecord index="1">'
|
||||||
|
' <BaseAnchor index="0" empty="1"/>'
|
||||||
|
' <BaseAnchor index="1" Format="1">'
|
||||||
|
' <XCoordinate value="300"/>'
|
||||||
|
' <YCoordinate value="80"/>'
|
||||||
|
' </BaseAnchor>'
|
||||||
|
' <BaseAnchor index="2" Format="1">'
|
||||||
|
' <XCoordinate value="300"/>'
|
||||||
|
' <YCoordinate value="-20"/>'
|
||||||
|
' </BaseAnchor>'
|
||||||
|
' <BaseAnchor index="3" empty="1"/>'
|
||||||
|
' </BaseRecord>'
|
||||||
|
'</BaseArray>')
|
||||||
|
|
||||||
def test_buildBaseRecord(self):
|
def test_buildBaseRecord(self):
|
||||||
a = builder.buildAnchor
|
a = builder.buildAnchor
|
||||||
rec = builder.buildBaseRecord([a(500, -20), None, a(300, -15)])
|
rec = builder.buildBaseRecord([a(500, -20), None, a(300, -15)])
|
||||||
|
Loading…
x
Reference in New Issue
Block a user