[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.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])
|
||||
|
||||
|
||||
|
@ -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()
|
||||
|
@ -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):
|
||||
' <PointIndex index="1" value="7"/>'
|
||||
'</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):
|
||||
a = builder.buildAnchor
|
||||
rec = builder.buildBaseRecord([a(500, -20), None, a(300, -15)])
|
||||
|
Loading…
x
Reference in New Issue
Block a user