From b47572cc059881874cb1e4229748fea4c6eb84c2 Mon Sep 17 00:00:00 2001 From: Rasmus Andersson Date: Sun, 24 Sep 2017 19:38:30 -0700 Subject: Improve misc/gen-glyphinfo.py and gen-metrics-and-svgs.py by ignoring glyphs listed in "delete" of fontbuild.cfg --- Makefile | 4 ++-- misc/gen-glyphinfo.py | 21 +++++++++++++++++++-- misc/gen-metrics-and-svgs.py | 31 +++++++++++++++++++++++-------- 3 files changed, 44 insertions(+), 12 deletions(-) diff --git a/Makefile b/Makefile index d36269b1a..ee905febd 100644 --- a/Makefile +++ b/Makefile @@ -151,11 +151,11 @@ glyphinfo: docs/lab/glyphinfo.json docs/glyphs/metrics.json src/glyphorder.txt: src/Inter-UI-Regular.ufo/lib.plist src/Inter-UI-Black.ufo/lib.plist src/diacritics.txt misc/gen-glyphorder.py misc/gen-glyphorder.py src/Inter-UI-*.ufo > src/glyphorder.txt -docs/lab/glyphinfo.json: _local/UnicodeData.txt src/glyphorder.txt misc/gen-glyphinfo.py +docs/lab/glyphinfo.json: _local/UnicodeData.txt src/glyphorder.txt src/fontbuild.cfg misc/gen-glyphinfo.py misc/gen-glyphinfo.py -ucd _local/UnicodeData.txt \ src/Inter-UI-*.ufo > docs/lab/glyphinfo.json -docs/glyphs/metrics.json: src/glyphorder.txt misc/gen-metrics-and-svgs.py $(Regular_ufo_d) +docs/glyphs/metrics.json: src/glyphorder.txt src/fontbuild.cfg misc/gen-metrics-and-svgs.py $(Regular_ufo_d) misc/gen-metrics-and-svgs.py -f src/Inter-UI-Regular.ufo diff --git a/misc/gen-glyphinfo.py b/misc/gen-glyphinfo.py index 0a426389b..4fdf73fae 100755 --- a/misc/gen-glyphinfo.py +++ b/misc/gen-glyphinfo.py @@ -9,6 +9,10 @@ from argparse import ArgumentParser from robofab.objects.objectsRF import OpenFont from collections import OrderedDict from unicode_util import parseUnicodeDataFile +from ConfigParser import RawConfigParser + + +BASEDIR = os.path.abspath(os.path.join(os.path.dirname(__file__), os.pardir)) # Regex matching "default" glyph names, like "uni2043" and "u01C5" @@ -156,6 +160,17 @@ def main(): args = argparser.parse_args() markLibKey = 'com.typemytype.robofont.mark' + srcDir = os.path.join(BASEDIR, 'src') + + # load fontbuild config + config = RawConfigParser(dict_type=OrderedDict) + configFilename = os.path.join(srcDir, 'fontbuild.cfg') + config.read(configFilename) + deleteNames = set() + for sectionName, value in config.items('glyphs'): + if sectionName == 'delete': + deleteNames = set(value.split()) + fontPaths = [] for fontPath in args.fontPaths: fontPath = fontPath.rstrip('/ ') @@ -166,8 +181,8 @@ def main(): fonts = [OpenFont(fontPath) for fontPath in args.fontPaths] - agl = loadAGL('src/glyphlist.txt') # { 2126: 'Omega', ... } - diacriticComps = loadGlyphCompositions('src/diacritics.txt') + agl = loadAGL(os.path.join(srcDir, 'glyphlist.txt')) # { 2126: 'Omega', ... } + diacriticComps = loadGlyphCompositions(os.path.join(srcDir, 'diacritics.txt')) uc2names, name2ucs, allNames = loadLocalNamesDB(fonts, agl, diacriticComps) ucd = {} @@ -189,6 +204,8 @@ def main(): for font in fonts: for name, v in glyphorder.iteritems(): + if name in deleteNames: + continue if name in visitedGlyphNames: continue diff --git a/misc/gen-metrics-and-svgs.py b/misc/gen-metrics-and-svgs.py index 51ea0d510..ac100eb1c 100755 --- a/misc/gen-metrics-and-svgs.py +++ b/misc/gen-metrics-and-svgs.py @@ -9,6 +9,10 @@ from math import ceil, floor from robofab.objects.objectsRF import OpenFont from collections import OrderedDict from fontbuild.generateGlyph import generateGlyph +from ConfigParser import RawConfigParser + + +BASEDIR = os.path.abspath(os.path.join(os.path.dirname(__file__), os.pardir)) font = None # RFont ufopath = '' @@ -337,6 +341,17 @@ argparser.add_argument('glyphs', metavar='', type=str, nargs='*', args = argparser.parse_args() +srcDir = os.path.join(BASEDIR, 'src') + +# load fontbuild config +config = RawConfigParser(dict_type=OrderedDict) +configFilename = os.path.join(srcDir, 'fontbuild.cfg') +config.read(configFilename) +deleteNames = set() +for sectionName, value in config.items('glyphs'): + if sectionName == 'delete': + deleteNames = set(value.split()) + if len(args.scale): scale = float(args.scale) @@ -345,26 +360,26 @@ ufopath = args.ufopath.rstrip('/') font = OpenFont(ufopath) effectiveAscender = max(font.info.ascender, font.info.unitsPerEm) -srcdir = os.path.abspath(os.path.join(__file__, '..', '..')) - # print('\n'.join(font.keys())) # sys.exit(0) -agl = loadAGL(os.path.join(srcdir, 'src', 'glyphlist.txt')) # { 2126: 'Omega', ... } +agl = loadAGL(os.path.join(srcDir, 'glyphlist.txt')) # { 2126: 'Omega', ... } + +deleteNames.add('.notdef') +deleteNames.add('.null') -ignoreGlyphs = set(['.notdef', '.null']) glyphnames = args.glyphs if len(args.glyphs) else font.keys() glyphnameSet = set(glyphnames) generatedGlyphNames = set() -diacriticComps = loadGlyphCompositions(os.path.join(srcdir, 'src', 'diacritics.txt')) +diacriticComps = loadGlyphCompositions(os.path.join(srcDir, 'diacritics.txt')) for glyphName, comp in diacriticComps.iteritems(): if glyphName not in glyphnameSet: generatedGlyphNames.add(glyphName) glyphnames.append(glyphName) glyphnameSet.add(glyphName) -glyphnames = [gn for gn in glyphnames if gn not in ignoreGlyphs] +glyphnames = [gn for gn in glyphnames if gn not in deleteNames] glyphnames.sort() nameToIdMap, idToNameMap = genGlyphIDs(glyphnames) @@ -387,7 +402,7 @@ for glyphname in glyphnames: svgtext = '\n'.join(svgLines) # print(svgtext) -glyphsHtmlFilename = os.path.join(srcdir, 'docs', 'glyphs', 'index.html') +glyphsHtmlFilename = os.path.join(BASEDIR, 'docs', 'glyphs', 'index.html') html = '' with open(glyphsHtmlFilename, 'r') as f: @@ -425,7 +440,7 @@ with open(glyphsHtmlFilename, 'w') as f: f.write(html) # JSON -jsonFilename = os.path.join(srcdir, 'docs', 'glyphs', 'metrics.json') +jsonFilename = os.path.join(BASEDIR, 'docs', 'glyphs', 'metrics.json') jsonFilenameRel = os.path.relpath(jsonFilename, os.getcwd()) print('write', jsonFilenameRel) with open(jsonFilename, 'w') as f: -- cgit v1.2.3