def test_buildCursivePos(self): pos = builder.buildCursivePosSubtable({ "two": (self.ANCHOR1, self.ANCHOR2), "four": (self.ANCHOR3, self.ANCHOR1) }, self.GLYPHMAP) self.assertEqual(getXML(pos.toXML), '<CursivePos Format="1">' ' <Coverage>' ' <Glyph value="two"/>' ' <Glyph value="four"/>' ' </Coverage>' ' <!-- EntryExitCount=2 -->' ' <EntryExitRecord index="0">' ' <EntryAnchor Format="1">' ' <XCoordinate value="11"/>' ' <YCoordinate value="-11"/>' ' </EntryAnchor>' ' <ExitAnchor Format="1">' ' <XCoordinate value="22"/>' ' <YCoordinate value="-22"/>' ' </ExitAnchor>' ' </EntryExitRecord>' ' <EntryExitRecord index="1">' ' <EntryAnchor Format="1">' ' <XCoordinate value="33"/>' ' <YCoordinate value="-33"/>' ' </EntryAnchor>' ' <ExitAnchor Format="1">' ' <XCoordinate value="11"/>' ' <YCoordinate value="-11"/>' ' </ExitAnchor>' ' </EntryExitRecord>' '</CursivePos>')
def parseCursive(lines, font, _lookupMap=None): records = {} for line in lines: assert len(line) in [3,4], line idx,klass = { 'entry': (0,ot.EntryAnchor), 'exit': (1,ot.ExitAnchor), }[line[0]] glyph = makeGlyph(line[1]) if glyph not in records: records[glyph] = [None,None] assert records[glyph][idx] is None, (glyph, idx) records[glyph][idx] = makeAnchor(line[2:], klass) return otl.buildCursivePosSubtable(records, font.getReverseGlyphMap())
def build(self): st = otl.buildCursivePosSubtable(self.attachments, self.glyphMap) return self.buildLookup_([st])