Update [kern] feature with Python in FL

Primary tabs

6 posts / 0 new
Last post
Marten Thavenius's picture
Joined: 15 Apr 2002 - 4:21pm
Update [kern] feature with Python in FL
0

Is it possible to execute the FontLab 5 “Update [kern] feature” command with Python using some of the FL/Python methods or a MenuCommand from Python?

When generating class kerned instances from a MM design it is kind of boring to go into the Kerning Assistance dialog and push the “Update [kern] feature” button for all instances each time you build a new version of a family to be tested.

Any other recommendations to optimize this workflow if there is no Python way?

Karsten Luecke's picture
Offline
Joined: 6 Aug 2005 - 8:41am
0

Yes you can. The font object has a method

.MakeKernFeature()

But then, you may also consider using AFDKO's function for generating the kern feature. I think it is in a separate module which you could call from your script.

Karsten Luecke's picture
Offline
Joined: 6 Aug 2005 - 8:41am
0

It seems that .MakeKernFeature() does not add a kern feature to the font directly. Rather, it returns a Feature object which needs to be added to the font's feature list in an additional step:

    f = fl.font
    kernFeature = f.MakeKernFeature()
    # delete existing kern feature:
    for feaIdx in range(len(f.features)-1,-1,-1):
        if features[feaIdx].tag == "kern":
              del features[feaIdx]
      # append new kern feature to feature list:
      f.features.append(kernFeature)
      fl.UpdateFont(fl.ifont)

Karsten

Paul van der Laan's picture
Joined: 4 Mar 2007 - 8:56am
0

Thanks, that's very helpful Karsten.

Is there also a method for compiling the OpenType features in FontLab?

Or is there documentation of all the Python objects in FontLab 5 somewhere online? Sadly the unofficial FontLab 4.5 Python reference hasn't been updated for ages...

-Paul

www.type-invaders.com

Karsten Luecke's picture
Offline
Joined: 6 Aug 2005 - 8:41am
0

Hello! Recently I found OTCompile in the reference, so you could try using this by way of fl.CallCommand(). But I have not tried it yet. (I remember problems when reading fl.output in FLS5/Mac, so could not check if there are compilation errors.)

Best wishes, Karsten

Miguel Sousa's picture
Offline
Joined: 18 May 2003 - 8:30pm
0

In case you don't care about updating the 'kern' feature in the VFB file, but still want to have the OTF fonts generated with an up-to-date 'kern' feature, an alternative approach is to play around with the FontLab's Preferences (a.k.a. Options) via Python scripting. Here's the code snippet,

# Start the script by checking if the option 'Generate
# OpenType "kern" feature if it is undefined or outdated'
# is turned on. Turn it on if it's currently off.
revertPreferences = False
if (Options().TTEWriteKernFeature == 0):
    Options().TTEWriteKernFeature = 1
    revertPreferences = True

# Here make the script do whatever it needs to do,
# including generating the OT font(s)

# Finalize the script by reverting the option,
# in case it has been changed
if (revertPreferences == True):
    Options().TTEWriteKernFeature = 0