summaryrefslogtreecommitdiffstats
path: root/examples/ffchangeglyphnames.py
diff options
context:
space:
mode:
Diffstat (limited to 'examples/ffchangeglyphnames.py')
-rwxr-xr-xexamples/ffchangeglyphnames.py65
1 files changed, 65 insertions, 0 deletions
diff --git a/examples/ffchangeglyphnames.py b/examples/ffchangeglyphnames.py
new file mode 100755
index 0000000..a7cb2e3
--- /dev/null
+++ b/examples/ffchangeglyphnames.py
@@ -0,0 +1,65 @@
+#!/usr/bin/env python3
+from __future__ import unicode_literals
+'''Update glyph names in a font based on csv file
+ - Using FontForge rather than UFOlib so it can work with ttf (or sfd) files'''
+__url__ = 'https://github.com/silnrsi/pysilfont'
+__copyright__ = 'Copyright (c) 2016 SIL International (https://www.sil.org)'
+__license__ = 'Released under the MIT License (https://opensource.org/licenses/MIT)'
+__author__ = 'David Raymond'
+
+from silfont.core import execute
+
+''' This will need updating, since FontForge is no longer supported as a tool by execute() So:
+- ifont and ofont will need to be changed to have type 'filename'
+- ifont will then need to be opened using fontforge.open
+- The font will need to be saved with font.save
+- execute will need to be called with the tool set to None instead of "FF"
+'''
+
+argspec = [
+ ('ifont',{'help': 'Input ttf font file'}, {'type': 'infont'}),
+ ('ofont',{'help': 'Output font file','nargs': '?' }, {'type': 'outfont'}),
+ ('-i','--input',{'help': 'Mapping csv file'}, {'type': 'incsv', 'def': 'psnames.csv'}),
+ ('-l','--log',{'help': 'Log file'}, {'type': 'outfile', 'def': '_setPostNames.log'}),
+ ('--reverse',{'help': 'Change names in reverse', 'action': 'store_true', 'default': False},{})]
+
+def doit(args) :
+ logger = args.paramsobj.logger
+
+ font = args.ifont
+
+ # Process csv
+ csv = args.input
+ csv.numfields = 2
+ newnames={}
+ namescheck=[]
+ missingnames = False
+ for line in csv :
+ if args.reverse :
+ newnames[line[1]] = line[0]
+ namescheck.append(line[1])
+ else :
+ newnames[line[0]] = line[1]
+ namescheck.append(line[0])
+
+ for glyph in font.glyphs():
+ gname = glyph.glyphname
+ if gname in newnames :
+ namescheck.remove(gname)
+ glyph.glyphname = newnames[gname]
+ else:
+ missingnames = True
+ logger.log(gname + " in font but not csv file","W")
+
+ if missingnames : logger.log("Font glyph names missing from csv - see log for details","E")
+
+ for name in namescheck : # Any names left in namescheck were in csv but not ttf
+ logger.log(name + " in csv but not in font","W")
+
+ if namescheck != [] : logger.log("csv file names missing from font - see log for details","E")
+
+ return font
+
+def cmd() : execute("FF",doit,argspec)
+if __name__ == "__main__": cmd()
+