Python Scripting¶
I assume you have a working knowledge of Python.
FontForge implements two Python modules – one great huge one called fontforge
which provides access to as much of FontForge’s functionality as I’ve had
time to write, and one tiny one called psMat
which provides quick
access to some useful transformations expressed as PostScript matrices.
In python terms fontforge embeds python. It is possible to build fontforge so that it is also a python extension.
FontForge Modules¶
- fontforge
- Module attributes
- Module functions
getPrefs()
setPrefs()
hasSpiro()
savePrefs()
loadPrefs()
defaultOtherSubrs()
readOtherSubrsFile()
loadEncodingFile()
loadNamelist()
loadNamelistDir()
preloadCidmap()
printSetup()
nameFromUnicode()
UnicodeAnnotationFromLib()
UnicodeBlockCountFromLib()
UnicodeBlockEndFromLib()
UnicodeBlockNameFromLib()
UnicodeBlockStartFromLib()
unicodeFromName()
UnicodeNameFromLib()
UnicodeNamesListVersion()
UnicodeNames2FromLib()
scriptFromUnicode()
SpiroVersion()
version()
loadPlugins()
getPluginInfo()
configurePlugins()
runInitScripts()
scriptPath()
fonts()
activeFont()
activeGlyph()
activeLayer()
fontsInFile()
open()
parseTTInstrs()
unParseTTInstrs()
unitShape()
registerGlyphSeparationHook()
- User Interface Module Functions
- Point
- Contour
contour
contour.is_quadratic
contour.closed
contour.name
contour.spiros
contour.dup()
contour.isEmpty()
contour.boundingBox()
contour.getSplineAfterPoint()
contour.draw()
contour.__reduce__()
contour.__iter__()
contour.moveTo()
contour.lineTo()
contour.cubicTo()
contour.quadraticTo()
contour.insertPoint()
contour.makeFirst()
contour.isClockwise()
contour.reverseDirection()
contour.similar()
contour.xBoundsAtY()
contour.yBoundsAtX()
contour.addExtrema()
contour.cluster()
contour.merge()
contour.round()
contour.selfIntersects()
contour.simplify()
contour.transform()
contour.addInflections()
contour.balance()
contour.harmonize()
- Layer
layer
layer.is_quadratic()
layer.__iter__()
layer.__reduce__()
layer.dup()
layer.isEmpty()
layer.addExtrema()
layer.cluster()
layer.correctDirection()
layer.export()
layer.exclude()
layer.intersect()
layer.removeOverlap()
layer.interpolateNewLayer()
layer.round()
layer.selfIntersects()
layer.similar()
layer.simplify()
layer.stemControl()
layer.stroke()
layer.transform()
layer.nltransform()
layer.boundingBox()
layer.xBoundsAtY()
layer.yBoundsAtX()
layer.draw()
layer.addInflections()
layer.balance()
layer.harmonize()
- Glyph Pen
- Glyph
glyph
glyph.activeLayer
glyph.altuni
glyph.anchorPoints
glyph.anchorPointsWithSel
glyph.background
glyph.changed
glyph.color
glyph.comment
glyph.dhints
glyph.encoding
glyph.font
glyph.foreground
glyph.glyphclass
glyph.glyphname
glyph.hhints
glyph.horizontalComponents
glyph.horizontalComponentItalicCorrection
glyph.horizontalVariants
glyph.isExtendedShape
glyph.italicCorrection
glyph.layer_cnt
glyph.layers
glyph.layerrefs
glyph.lcarets
glyph.left_side_bearing
glyph.manualHints
glyph.mathKern.bottomLeft
glyph.mathKern.bottomRight
glyph.mathKern.topLeft
glyph.mathKern.topRight
glyph.originalgid
glyph.persistent
glyph.references
glyph.right_side_bearing
glyph.script
glyph.temporary
glyph.texheight
glyph.texdepth
glyph.topaccent
glyph.ttinstrs
glyph.unicode
glyph.unlinkRmOvrlpSave
glyph.user_decomp
glyph.userdata
glyph.vhints
glyph.validation_state
glyph.verticalComponents
glyph.verticalComponentItalicCorrection
glyph.verticalVariants
glyph.width
glyph.vwidth
glyph.addAnchorPoint()
glyph.addExtrema()
glyph.addReference()
glyph.addHint()
glyph.addPosSub()
glyph.appendAccent()
glyph.autoHint()
glyph.autoInstr()
glyph.autoTrace()
glyph.boundingBox()
glyph.build()
glyph.canonicalContours()
glyph.canonicalStart()
glyph.changeWeight()
glyph.condenseExtend()
glyph.clear()
glyph.cluster()
glyph.correctDirection()
glyph.doUndoLayer()
glyph.exclude()
glyph.export()
glyph.genericGlyphChange()
glyph.getPosSub()
glyph.importOutlines()
glyph.intersect()
glyph.isWorthOutputting()
glyph.preserveLayerAsUndo()
glyph.removeOverlap()
glyph.removePosSub()
glyph.round()
glyph.selfIntersects()
glyph.setLayer()
glyph.simplify()
glyph.stroke()
glyph.transform()
glyph.nltransform()
glyph.unlinkRef()
glyph.unlinkThisGlyph()
glyph.useRefsMetrics()
glyph.validate()
glyph.draw()
glyph.glyphPen()
glyph.addInflections()
glyph.balance()
glyph.harmonize()
- Selection
- Private
- Math
math.ScriptPercentScaleDown
math.ScriptScriptPercentScaleDown
math.DelimitedSubFormulaMinHeight
math.DisplayOperatorMinHeight
math.MathLeading
math.MathLeadingDeviceTable
math.AxisHeight
math.AxisHeightDeviceTable
math.AccentBaseHeight
math.AccentBaseHeightDeviceTable
math.FlattenedAccentBaseHeight
math.FlattenedAccentBaseHeightDeviceTable
math.SubscriptShiftDown
math.SubscriptShiftDownDeviceTable
math.SubscriptTopMax
math.SubscriptTopMaxDeviceTable
math.SubscriptBaselineDropMin
math.SubscriptBaselineDropMinDeviceTable
math.SuperscriptShiftUp
math.SuperscriptShiftUpDeviceTable
math.SuperscriptShiftUpCramped
math.SuperscriptShiftUpCrampedDeviceTable
math.SuperscriptBottomMin
math.SuperscriptBottomMinDeviceTable
math.SuperscriptBaselineDropMax
math.SuperscriptBaselineDropMaxDeviceTable
math.SubSuperscriptGapMin
math.SubSuperscriptGapMinDeviceTable
math.SuperscriptBottomMaxWithSubscript
math.SuperscriptBottomMaxWithSubscriptDeviceTable
math.SpaceAfterScript
math.SpaceAfterScriptDeviceTable
math.UpperLimitGapMin
math.UpperLimitGapMinDeviceTable
math.UpperLimitBaselineRiseMin
math.UpperLimitBaselineRiseMinDeviceTable
math.LowerLimitGapMin
math.LowerLimitGapMinDeviceTable
math.LowerLimitBaselineDropMin
math.LowerLimitBaselineDropMinDeviceTable
math.StackTopShiftUp
math.StackTopShiftUpDeviceTable
math.StackTopDisplayStyleShiftUp
math.StackTopDisplayStyleShiftUpDeviceTable
math.StackBottomShiftDown
math.StackBottomShiftDownDeviceTable
math.StackBottomDisplayStyleShiftDown
math.StackBottomDisplayStyleShiftDownDeviceTable
math.StackGapMin
math.StackGapMinDeviceTable
math.StackDisplayStyleGapMin
math.StackDisplayStyleGapMinDeviceTable
math.StretchStackTopShiftUp
math.StretchStackTopShiftUpDeviceTable
math.StretchStackBottomShiftDown
math.StretchStackBottomShiftDownDeviceTable
math.StretchStackGapAboveMin
math.StretchStackGapAboveMinDeviceTable
math.StretchStackGapBelowMin
math.StretchStackGapBelowMinDeviceTable
math.FractionNumeratorShiftUp
math.FractionNumeratorShiftUpDeviceTable
math.FractionNumeratorDisplayStyleShiftUp
math.FractionNumeratorDisplayStyleShiftUpDeviceTable
math.FractionDenominatorShiftDown
math.FractionDenominatorShiftDownDeviceTable
math.FractionDenominatorDisplayStyleShiftDown
math.FractionDenominatorDisplayStyleShiftDownDeviceTable
math.FractionNumeratorGapMin
math.FractionNumeratorGapMinDeviceTable
math.FractionNumeratorDisplayStyleGapMin
math.FractionNumeratorDisplayStyleGapMinDeviceTable
math.FractionRuleThickness
math.FractionRuleThicknessDeviceTable
math.FractionDenominatorGapMin
math.FractionDenominatorGapMinDeviceTable
math.FractionDenominatorDisplayStyleGapMin
math.FractionDenominatorDisplayStyleGapMinDeviceTable
math.SkewedFractionHorizontalGap
math.SkewedFractionHorizontalGapDeviceTable
math.SkewedFractionVerticalGap
math.SkewedFractionVerticalGapDeviceTable
math.OverbarVerticalGap
math.OverbarVerticalGapDeviceTable
math.OverbarRuleThickness
math.OverbarRuleThicknessDeviceTable
math.OverbarExtraAscender
math.OverbarExtraAscenderDeviceTable
math.UnderbarVerticalGap
math.UnderbarVerticalGapDeviceTable
math.UnderbarRuleThickness
math.UnderbarRuleThicknessDeviceTable
math.UnderbarExtraDescender
math.UnderbarExtraDescenderDeviceTable
math.RadicalVerticalGap
math.RadicalVerticalGapDeviceTable
math.RadicalDisplayStyleVerticalGap
math.RadicalDisplayStyleVerticalGapDeviceTable
math.RadicalRuleThickness
math.RadicalRuleThicknessDeviceTable
math.RadicalExtraAscender
math.RadicalExtraAscenderDeviceTable
math.RadicalKernBeforeDegree
math.RadicalKernBeforeDegreeDeviceTable
math.RadicalKernAfterDegree
math.RadicalKernAfterDegreeDeviceTable
math.RadicalDegreeBottomRaisePercent
math.MinConnectorOverlap
math.exists()
math.clear()
- Font
font
font.activeLayer
font.ascent
font.bitmapSizes
font.capHeight
font.changed
font.cidcopyright
font.cidfamilyname
font.cidfontname
font.cidfullname
font.cidordering
font.cidregistry
font.cidsubfont
font.cidsubfontcnt
font.cidsubfontnames
font.cidsupplement
font.cidversion
font.cidweight
font.comment
font.copyright
font.cvt
font.default_base_filename
font.descent
font.design_size
font.em
font.encoding
font.familyname
font.fondname
font.fontlog
font.fontname
font.fullname
font.gasp
font.gasp_version
font.gpos_lookups
font.gsub_lookups
font.guide
font.hasvmetrics
font.head_optimized_for_cleartype
font.hhea_ascent
font.hhea_ascent_add
font.hhea_descent
font.hhea_descent_add
font.hhea_linegap
font.horizontalBaseline
font.is_cid
font.is_quadratic
font.isnew
font.italicangle
font.macstyle
font.layer_cnt
font.layers
font.loadState
font.maxp_FDEFs
font.maxp_IDEFs
font.maxp_maxStackDepth
font.maxp_storageCnt
font.maxp_twilightPtCnt
font.maxp_zones
font.multilayer
font.onlybitmaps
font.os2_capheight
font.os2_codepages
font.os2_family_class
font.os2_fstype
font.os2_panose
font.os2_strikeypos
font.os2_strikeysize
font.os2_stylemap
font.os2_subxoff
font.os2_subxsize
font.os2_subyoff
font.os2_subysize
font.os2_supxoff
font.os2_supxsize
font.os2_supyoff
font.os2_supysize
font.os2_typoascent
font.os2_typoascent_add
font.os2_typodescent
font.os2_typodescent_add
font.os2_typolinegap
font.os2_unicoderanges
font.os2_use_typo_metrics
font.os2_vendor
font.os2_version
font.os2_weight
font.os2_weight_width_slope_only
font.os2_width
font.os2_winascent
font.os2_winascent_add
font.os2_windescent
font.os2_windescent_add
font.os2_xheight
font.path
font.persistent
font.math
font.private
font.privateState
font.selection
font.sfd_path
font.sfnt_names
font.sfntRevision
font.size_feature
font.strokedfont
font.strokewidth
font.style_set_names
font.temporary
font.texparameters
font.uniqueid
font.upos
font.userdata
font.uwidth
font.version
font.verticalBaseline
font.vertical_origin
font.vhea_linegap
font.weight
font.woffMajor
font.woffMinor
font.woffMetadata
font.xHeight
font.__iter__()
font.__contains__()
font.__len__()
font.__getitem__()
font.addAnchorClass()
font.addKerningClass()
font.addLookup()
font.addLookupSubtable()
font.addContextualSubtable()
font.addSmallCaps()
font.alterKerningClass()
font.autoKern()
font.appendSFNTName()
font.buildOrReplaceAALTFeatures()
font.cidConvertByCMap()
font.cidConvertTo()
font.cidFlatten()
font.cidFlattenByCMap()
font.cidInsertBlankSubFont()
font.cidRemoveSubFont()
font.close()
font.compareFonts()
font.createChar()
font.createInterpolatedGlyph()
font.createMappedChar()
font.find()
font.findEncodingSlot()
font.glyphs()
font.generate()
font.generateTtc()
font.generateFeatureFile()
font.genericGlyphChange()
font.getKerningClass()
font.getLookupInfo()
font.getLookupSubtables()
font.getLookupSubtableAnchorClasses()
font.getLookupOfSubtable()
font.getSubtableOfAnchor()
font.importBitmaps()
font.importLookups()
font.interpolateFonts()
font.isKerningClass()
font.isVerticalKerning()
font.italicize()
font.lookupSetFeatureList()
font.lookupSetFlags()
font.lookupSetStoreLigatureInAfm()
font.mergeFonts()
font.mergeFeature()
font.mergeKern()
font.mergeLookups()
font.mergeLookupSubtables()
font.printSample()
font.randomText()
font.reencode()
font.regenBitmaps()
font.removeAnchorClass()
font.removeLookup()
font.removeLookupSubtable()
font.removeGlyph()
font.replaceAll()
font.revert()
font.revertFromBackup()
font.save()
font.saveNamelist()
font.getTableData()
font.setTableData()
font.validate()
font.addExtrema()
font.addInflections()
font.autoHint()
font.autoInstr()
font.autoWidth()
font.autoTrace()
font.build()
font.canonicalContours()
font.canonicalStart()
font.changeWeight()
font.condenseExtend()
font.clear()
font.cluster()
font.copy()
font.copyReference()
font.correctDirection()
font.correctReferences()
font.cut()
font.paste()
font.intersect()
font.pasteInto()
font.removeOverlap()
font.replaceWithReference()
font.round()
font.simplify()
font.stroke()
font.transform()
font.nltransform()
font.unlinkReferences()
- psMat
Command line convenience¶
For convenience, Python commands given as a -c
argument on the
command line have the following code prepended:
from sys import argv; from fontforge import *
Hence, the trivial script to convert a font can be written:
fontforge -c 'open(argv[1]).generate(argv[2])'
Trivial example¶
import fontforge #Load the module
amb=fontforge.open("Ambrosia.sfd") #Open a font
amb.selection.select(("ranges",None),"A","Z") #select A-Z
amb.copy() #Copy those glyphs into the clipboard
n=fontforge.font() #Create a new font
n.selection.select(("ranges",None),"A","Z") #select A-Z of it
n.paste() #paste the glyphs above in
print n["A"].foreground #test to see that something
# actually got pasted
n.fontname="NewFont" #Give the new font a name
n.save("NewFont.sfd") #and save it.
FontForge as a python extension¶
In addition to embedding Python, FontForge typically installs a Python
module accessible to the system’s python
executable, which can be
accessed using:
>>> import fontforge