summaryrefslogtreecommitdiff
path: root/misc/tools/gen-glyphinfo.py
diff options
context:
space:
mode:
Diffstat (limited to 'misc/tools/gen-glyphinfo.py')
-rwxr-xr-xmisc/tools/gen-glyphinfo.py65
1 files changed, 36 insertions, 29 deletions
diff --git a/misc/tools/gen-glyphinfo.py b/misc/tools/gen-glyphinfo.py
index 94cdb8927..877bbbdd4 100755
--- a/misc/tools/gen-glyphinfo.py
+++ b/misc/tools/gen-glyphinfo.py
@@ -41,16 +41,18 @@ def localDateTimeToUTCStr(localstr, pattern='%Y/%m/%d %H:%M:%S'):
return time.strftime('%Y-%m-%dT%H:%M:%SZ', time.localtime(ts))
-def processGlyph(g, ucd, seenGlyphnames):
- name = g.name
- if name in seenGlyphnames:
- return None
- seenGlyphnames.add(name)
-
- # not exported?
+def include_glyph(g):
if 'com.schriftgestaltung.Glyphs.Export' in g.lib:
if not g.lib['com.schriftgestaltung.Glyphs.Export']:
- return None
+ return False
+ return True
+
+
+NAME_TO_ID_RE = re.compile(r'([A-Z_])')
+
+
+def processGlyph(g, ucd):
+ name = g.name
# color
color = None
@@ -62,6 +64,8 @@ def processGlyph(g, ucd, seenGlyphnames):
if not g.bounds or g.bounds[3] == 0:
isEmpty = 1
+ id = NAME_TO_ID_RE.sub(r'\1_', name).lower()
+
# name, isEmpty, unicode, unicodeName, color
glyph = None
ucs = g.unicodes
@@ -72,27 +76,30 @@ def processGlyph(g, ucd, seenGlyphnames):
# ucName = '[private use %04X]' % uc
ucstr = '%04X' % uc
if color:
- glyph = [name, isEmpty, ucstr, ucName, color]
+ glyph = [id, name, isEmpty, ucstr, ucName, color]
elif ucName:
- glyph = [name, isEmpty, ucstr, ucName]
+ glyph = [id, name, isEmpty, ucstr, ucName]
else:
- glyph = [name, isEmpty, ucstr]
+ glyph = [id, name, isEmpty, ucstr]
+ break
else:
if color:
- glyph = [name, isEmpty, None, None, color]
+ glyph = [id, name, isEmpty, None, None, color]
else:
- glyph = [name, isEmpty]
+ glyph = [id, name, isEmpty]
return glyph
+
def glyphSortFun(g):
- if len(g) > 2 and g[2] is not None:
- return g[2]
+ if len(g) > 3 and g[3] is not None:
+ return g[3]
elif len(g) > 0:
- return g[0]
+ return g[1]
else:
return ""
+
def main():
argparser = ArgumentParser(
description='Generate info on name, unicodes and color mark for all glyphs')
@@ -111,23 +118,23 @@ def main():
ucd = parseUnicodeDataFile(args.ucdFile)
glyphs = [] # contains final glyph data printed as JSON
- seenGlyphnames = set()
-
+ unorderedGlyphs = []
+ seenGlyphs = set()
for name in font.lib['public.glyphOrder']:
+ if name not in font:
+ print(f'warning: glyph "{name}" (in public.glyphOrder) does not exist',
+ file=sys.stderr)
+ continue
g = font[name]
- glyph = processGlyph(g, ucd, seenGlyphnames)
- if glyph is not None:
- glyphs.append(glyph)
-
- unorderedGlyphs = []
+ seenGlyphs.add(g)
+ if include_glyph(g):
+ glyphs.append(processGlyph(g, ucd))
for g in font:
- glyph = processGlyph(g, ucd, seenGlyphnames)
- if glyph is not None:
- unorderedGlyphs.append(glyph)
+ if include_glyph(g) and g not in seenGlyphs:
+ unorderedGlyphs.append(processGlyph(g, ucd))
- if unorderedGlyphs:
- # sort by unicode
- glyphs = glyphs + sorted(unorderedGlyphs, key=glyphSortFun)
+ # append unorderedGlyphs, sorted by unicode
+ glyphs = glyphs + sorted(unorderedGlyphs, key=glyphSortFun)
print('{"glyphs":[')
prefix = ' '