Ejemplo n.º 1
0
 def _makeFeatureBlocks(self, lookups):
     features = {}
     if "kern" in self.context.todo:
         kern = ast.FeatureBlock("kern")
         self._registerKernLookups(kern, lookups)
         if kern.statements:
             features["kern"] = kern
     if "dist" in self.context.todo:
         dist = ast.FeatureBlock("dist")
         self._registerDistLookups(dist, lookups)
         if dist.statements:
             features["dist"] = dist
     return features
Ejemplo n.º 2
0
    def _makeMarkFeature(self, include):
        baseLkps = []
        for i, attachments in enumerate(
                self.context.groupedMarkToBaseAttachments):
            lookup = self._makeMarkLookup(
                f"mark2base{'_' + str(i) if i > 0 else ''}", attachments,
                include)
            if lookup:
                baseLkps.append(lookup)
        ligaLkps = []
        for i, attachments in enumerate(
                self.context.groupedMarkToLigaAttachments):
            lookup = self._makeMarkLookup(
                f"mark2liga{'_' + str(i) if i > 0 else ''}", attachments,
                include)
            if lookup:
                ligaLkps.append(lookup)
        if not baseLkps and not ligaLkps:
            return

        feature = ast.FeatureBlock("mark")
        for baseLkp in baseLkps:
            feature.statements.append(baseLkp)
        for ligaLkp in ligaLkps:
            feature.statements.append(ligaLkp)
        return feature
Ejemplo n.º 3
0
 def write(self, font, feaFile, compiler=None):
     foo = ast.FeatureBlock("FOO ")
     foo.statements.append(
         ast.SingleSubstStatement("a",
                                  "v",
                                  prefix="",
                                  suffix="",
                                  forceChain=None))
     feaFile.statements.append(foo)
Ejemplo n.º 4
0
    def _makeMkmkFeature(self, include):
        feature = ast.FeatureBlock("mkmk")

        for anchorName, attachments in sorted(
                self.context.markToMarkAttachments.items()):
            lkp = self._makeMarkToMarkLookup(anchorName, attachments, include)
            if lkp is not None:
                feature.statements.append(lkp)

        return feature if feature.statements else None
Ejemplo n.º 5
0
    def _makeAbvmOrBlwmFeature(self, tag, include):
        if tag == "abvm":
            marksFilter = self._isAboveMark
        elif tag == "blwm":
            marksFilter = self._isBelowMark
        else:
            raise AssertionError(tag)

        baseLkps = []
        for i, attachments in enumerate(
                self.context.groupedMarkToBaseAttachments):
            lookup = self._makeMarkLookup(
                f"{tag}_mark2base{'_' + str(i) if i > 0 else ''}",
                attachments,
                include=include,
                marksFilter=marksFilter,
            )
            if lookup:
                baseLkps.append(lookup)
        ligaLkps = []
        for i, attachments in enumerate(
                self.context.groupedMarkToLigaAttachments):
            lookup = self._makeMarkLookup(
                f"{tag}_mark2liga{'_' + str(i) if i > 0 else ''}",
                attachments,
                include=include,
                marksFilter=marksFilter,
            )
            if lookup:
                ligaLkps.append(lookup)
        mkmkLookups = []
        for anchorName, attachments in sorted(
                self.context.markToMarkAttachments.items()):
            lkp = self._makeMarkToMarkLookup(
                anchorName,
                attachments,
                include=include,
                marksFilter=marksFilter,
                featureTag=tag,
            )
            if lkp is not None:
                mkmkLookups.append(lkp)

        if not any([baseLkps, ligaLkps, mkmkLookups]):
            return

        feature = ast.FeatureBlock(tag)
        for baseLkp in baseLkps:
            feature.statements.append(baseLkp)
        for ligaLkp in ligaLkps:
            feature.statements.append(ligaLkp)
        feature.statements.extend(mkmkLookups)
        return feature
Ejemplo n.º 6
0
    def _makeMarkFeature(self, include):
        baseLkp = self._makeMarkLookup("mark2base",
                                       self.context.markToBaseAttachments,
                                       include)
        ligaLkp = self._makeMarkLookup("mark2liga",
                                       self.context.markToLigaAttachments,
                                       include)
        if baseLkp is None and ligaLkp is None:
            return

        feature = ast.FeatureBlock("mark")
        if baseLkp:
            feature.statements.append(baseLkp)
        if ligaLkp:
            feature.statements.append(ligaLkp)
        return feature
Ejemplo n.º 7
0
    def _makeMarkFeature(self, markClasses, isMkmk=False):
        """ Return a mark or mkmk FeatureBlock statement, or None if there is
        nothing to generate.
        """
        anchorList = (self.context.mkmkAnchorList
                      if isMkmk else self.context.anchorList)
        if not anchorList and (isMkmk or not self.context.ligaAnchorList):
            # nothing to do, don't write empty feature
            return

        featureName = "mkmk" if isMkmk else "mark"
        lookups = []

        used = self.context.usedMarkClasses
        for i, (anchorName, accentAnchorName) in enumerate(anchorList, 1):
            className = self._generateClassName(accentAnchorName)
            markClass = markClasses[className]
            lookup = self._makeMarkLookup(
                "%s%d" % (featureName, i),
                isMkmk,
                anchorName,
                accentAnchorName,
                markClass,
            )
            if lookup:
                lookups.append(lookup)
                used.add(className)

        if not isMkmk:
            ligaAnchors = self.context.ligaAnchorList
            for i, (anchorName, accentAnchorName) in enumerate(ligaAnchors, 1):
                className = self._generateClassName(accentAnchorName)
                markClass = markClasses[className]
                lookup = self._makeMarkToLigaLookup("mark2liga%d" % i,
                                                    anchorName,
                                                    accentAnchorName,
                                                    markClass)
                if lookup:
                    lookups.append(lookup)
                    used.add(className)

        if lookups:
            feature = ast.FeatureBlock(featureName)
            feature.statements.extend(lookups)
            return feature
Ejemplo n.º 8
0
    def _makeAbvmOrBlwmFeature(self, tag, include):
        if tag == "abvm":
            marksFilter = self._isAboveMark
        elif tag == "blwm":
            marksFilter = self._isBelowMark
        else:
            raise AssertionError(tag)

        baseLkp = self._makeMarkLookup(
            "%s_mark2base" % tag,
            self.context.markToBaseAttachments,
            include=include,
            marksFilter=marksFilter,
        )
        ligaLkp = self._makeMarkLookup(
            "%s_mark2liga" % tag,
            self.context.markToLigaAttachments,
            include=include,
            marksFilter=marksFilter,
        )
        mkmkLookups = []
        for anchorName, attachments in sorted(
            self.context.markToMarkAttachments.items()
        ):
            lkp = self._makeMarkToMarkLookup(
                anchorName,
                attachments,
                include=include,
                marksFilter=marksFilter,
                featureTag=tag,
            )
            if lkp is not None:
                mkmkLookups.append(lkp)

        if not any([baseLkp, ligaLkp, mkmkLookups]):
            return

        feature = ast.FeatureBlock(tag)
        if baseLkp:
            feature.statements.append(baseLkp)
        if ligaLkp:
            feature.statements.append(ligaLkp)
        feature.statements.extend(mkmkLookups)
        return feature