def _makeMarkClass(cls, markClasses, accentName, x, y, className): """ Make a MarkClassDefinition statement given the accent name, position, class name, and pre-existing mark classes. Return None if a mark class with the same name and anchor already exists. Or create new mark class with unique name when different. """ glyphs = ast.GlyphName(accentName) anchor = cls._makeAnchorFormatA(x, y) className = ast.makeFeaClassName(className) markClass = markClasses.get(className) if markClass is None: markClass = ast.MarkClass(className) markClasses[className] = markClass else: if accentName in markClass.glyphs: mcdef = markClass.glyphs[accentName] if cls._anchorsAreEqual(anchor, mcdef.anchor): logger.debug( "Glyph %s already defined in markClass @%s", accentName, className, ) return None else: # same accent glyph defined with different anchors for the # same markClass; make a new unique markClass definition newClassName = ast.makeFeaClassName(className, markClasses) markClass = ast.MarkClass(newClassName) markClasses[newClassName] = markClass mcdef = ast.MarkClassDefinition(markClass, anchor, glyphs) markClass.addDefinition(mcdef) return mcdef
def _defineMarkClass(self, glyphName, x, y, className, markClasses): anchor = ast.Anchor(x=otRound(x), y=otRound(y)) markClass = markClasses.get(className) if markClass is None: markClass = ast.MarkClass(className) markClasses[className] = markClass else: if glyphName in markClass.glyphs: mcdef = markClass.glyphs[glyphName] if self._anchorsAreEqual(anchor, mcdef.anchor): self.log.debug( "Glyph %s already defined in markClass @%s", glyphName, className, ) return None else: # same mark glyph defined with different anchors for the # same markClass; make a new unique markClass definition newClassName = ast.makeFeaClassName(className, markClasses) markClass = ast.MarkClass(newClassName) markClasses[newClassName] = markClass glyphName = ast.GlyphName(glyphName) mcdef = ast.MarkClassDefinition(markClass, anchor, glyphName) markClass.addDefinition(mcdef) return mcdef