Beispiel #1
0
    def build(self):
        st = otTables.MarkLigPos()
        st.Format = 1
        st.MarkCoverage = \
            self.buildCoverage_(self.marks, otTables.MarkCoverage)
        markClasses = self.buildMarkClasses_(self.marks)
        st.ClassCount = len(markClasses)
        self.setMarkArray_(self.marks, markClasses, st)

        st.LigatureCoverage = \
            self.buildCoverage_(self.ligatures, otTables.LigatureCoverage)
        st.LigatureArray = otTables.LigatureArray()
        st.LigatureArray.LigatureCount = len(self.ligatures)
        st.LigatureArray.LigatureAttach = []
        for lig in st.LigatureCoverage.glyphs:
            components = self.ligatures[lig]
            attach = otTables.LigatureAttach()
            attach.ComponentCount = len(components)
            attach.ComponentRecord = []
            for component in components:
                crec = otTables.ComponentRecord()
                attach.ComponentRecord.append(crec)
                crec.LigatureAnchor = []
                for markClass in sorted(markClasses.keys(),
                                        key=markClasses.get):
                    crec.LigatureAnchor.append(component.get(markClass))
            st.LigatureArray.LigatureAttach.append(attach)

        return self.buildLookup_([st])
Beispiel #2
0
def buildComponentRecord(anchors):
    """[otTables.Anchor, otTables.Anchor, ...] --> otTables.ComponentRecord"""
    if not anchors:
        return None
    self = ot.ComponentRecord()
    self.LigatureAnchor = anchors
    return self
Beispiel #3
0
def makeLigatureRecords(data, coverage, c, classCount):
	records = [None] * len(coverage.glyphs)
	idx = {g:i for i,g in enumerate(coverage.glyphs)}

	for (glyph,klass,compIdx,compCount),anchor in data.items():
		record = records[idx[glyph]]
		if record is None:
			record = records[idx[glyph]] = ot.LigatureAttach()
			record.ComponentCount = compCount
			record.ComponentRecord = [ot.ComponentRecord() for i in range(compCount)]
			for compRec in record.ComponentRecord:
				compRec.LigatureAnchor = [None] * classCount
		assert record.ComponentCount == compCount, (glyph, record.ComponentCount, compCount)

		anchors = record.ComponentRecord[compIdx - 1].LigatureAnchor
		assert anchors[klass] is None, (glyph, compIdx, klass)
		anchors[klass] = anchor
	return records