diff options
author | Rasmus Andersson <rasmus@notion.se> | 2017-08-22 10:05:20 +0300 |
---|---|---|
committer | Rasmus Andersson <rasmus@notion.se> | 2017-08-22 12:23:08 +0300 |
commit | 3b1fffade1473f20f2558733fbd218f4580fc7c3 (patch) | |
tree | ea4f80b43b08744d493bb86ab646444ec04ddc7f /misc/ufo-color-glyphs.py | |
download | inter-3b1fffade1473f20f2558733fbd218f4580fc7c3.tar.xz |
Initial public commitv1.0
Diffstat (limited to 'misc/ufo-color-glyphs.py')
-rwxr-xr-x | misc/ufo-color-glyphs.py | 105 |
1 files changed, 105 insertions, 0 deletions
diff --git a/misc/ufo-color-glyphs.py b/misc/ufo-color-glyphs.py new file mode 100755 index 000000000..9ec050853 --- /dev/null +++ b/misc/ufo-color-glyphs.py @@ -0,0 +1,105 @@ +#!/usr/bin/env python +# encoding: utf8 +# +# Grab http://www.unicode.org/Public/UCD/latest/ucd/UnicodeData.txt +# +from __future__ import print_function +import os, sys +from argparse import ArgumentParser +from robofab.objects.objectsRF import OpenFont +from unicode_util import parseUnicodeDataFile, MainCategories as UniMainCategories + +lightBlueColor = (0.86, 0.92, 0.97, 1.0) +lightTealColor = (0.8, 0.94, 0.95, 1.0) +lightYellowColor = (0.97, 0.95, 0.83, 1.0) +lightPurpleColor = (0.93, 0.9, 0.98, 1.0) +lightGreyColor = (0.94, 0.94, 0.94, 1.0) +mediumGreyColor = (0.87, 0.87, 0.87, 1.0) +lightGreenColor = (0.89, 0.96, 0.92, 1.0) +mediumGreenColor = (0.77, 0.95, 0.76, 1.0) +lightRedColor = (0.98, 0.89, 0.89, 1.0) +lightOrangeColor = (1.0, 0.89, 0.82, 1.0) +redColor = (1, 0.3, 0.3, 1) + +colorsByGlyphName = [ + (set('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'), lightBlueColor), # light blue 1 +] + +colorsByUCMainCategory = { + # UniMainCategories.Letter: (1, 1, 1, 1), + UniMainCategories.Mark: lightRedColor, + UniMainCategories.Punctuation: lightGreyColor, + UniMainCategories.Format: lightGreyColor, + UniMainCategories.Number: lightGreenColor, + UniMainCategories.Symbol: lightTealColor, + UniMainCategories.Separator: lightPurpleColor, + UniMainCategories.Control: redColor, + UniMainCategories.Surrogate: redColor, + UniMainCategories.PrivateUse: lightYellowColor, + UniMainCategories.Unassigned: lightYellowColor, + UniMainCategories.Other: lightOrangeColor, +} + + +def colorForGlyph(name, unicodes, ucd): + for nameSet, color in colorsByGlyphName: + if name in nameSet: + return color + + for uc in unicodes: + cp = ucd.get(uc) + if cp is None: + continue + return colorsByUCMainCategory.get(cp.mainCategory) + + if len(unicodes) == 0: + if name.find('.cn') != -1: + # pure component + return mediumGreenColor + else: + # precomposed + return mediumGreyColor + + return None + + +def main(): + argparser = ArgumentParser( + description='Set robofont color marks on glyphs based on unicode categories') + + argparser.add_argument( + '-dry', dest='dryRun', action='store_const', const=True, default=False, + help='Do not modify anything, but instead just print what would happen.') + + argparser.add_argument( + '-ucd', dest='ucdFile', metavar='<file>', type=str, + help='UnicodeData.txt file from http://www.unicode.org/') + + argparser.add_argument( + 'fontPaths', metavar='<ufofile>', type=str, nargs='+', help='UFO fonts to update') + + args = argparser.parse_args() + dryRun = args.dryRun + markLibKey = 'com.typemytype.robofont.mark' + + ucd = {} + if args.ucdFile: + ucd = parseUnicodeDataFile(args.ucdFile) + + for fontPath in args.fontPaths: + font = OpenFont(fontPath) + for g in font: + rgba = colorForGlyph(g.name, g.unicodes, ucd) + if rgba is None: + if markLibKey in g.lib: + del g.lib[markLibKey] + else: + g.lib[markLibKey] = [float(n) for n in rgba] + + print('Write', fontPath) + if not dryRun: + font.save() + + +if __name__ == '__main__': + main() |