Hi,
I have a script that adds mark positioning (plus kerning) to the font when it's being generated. But I have to revert the features to what it was before after the compile. This will make the font dirty. Is it possible to change the features during the compilation without leaving a trace?
Here is the script:
from vanilla import *
from AppKit import NSApp
from mojo.events import addObserver, removeObserver
from ufo2ft.featureCompiler import FeatureCompiler
from collections import OrderedDict
"""
Postprocessor for font generating font in RoboFont. This one adds mark and
kerning to the OTF before the font is generated
"""
debug = True
class addMarkKernOnGenerate():
def __init__(self):
windowname = 'Mark Kern UFO2FT'
self._featuresBuffer = ""
if debug:
self.w = Window((500, 50), windowname)
self.w.bind("close", self._windowClosed)
for window in [w for w in NSApp().orderedWindows() if w.isVisible()]:
if window.title() == windowname:
window.close()
self.w.open()
addObserver(self, "_fontDidGenerate", "fontDidGenerate")
addObserver(self, "_fontWillGenerate", "fontWillGenerate")
def _windowClosed(self, sender):
removeObserver(self, "fontDidGenerate")
removeObserver(self, "fontWillGenerate")
print('removing Observer')
def _fontWillGenerate(self, info):
f = info["font"]
self._featuresBuffer = f.features.text # keep the features in the buffer and revert it back after the generate
skipExport = f.lib.get("public.skipExportGlyphs", [])
glyphOrder = (gn for gn in f.glyphOrder if gn not in skipExport)
featureCompiler = FeatureCompiler(f)
featureCompiler.glyphSet = OrderedDict((gn, f[gn]) for gn in glyphOrder)
featureCompiler.compile()
f.features.text = featureCompiler.features
path = info["path"]
print(f"{path}: GPOS added using ufo2ft")
def _fontDidGenerate(self, info):
f = info["font"]
f.features.text = self._featuresBuffer
addMarkKernOnGenerate()
As you can see I keep the font original features in the _featuresBuffer attribute to revert it after the font has been compiled.
Many Thanks!