Esempio n. 1
0
 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
Esempio n. 2
0
 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