diff options
author | Rasmus Andersson <rasmus@notion.se> | 2018-09-03 22:55:49 +0300 |
---|---|---|
committer | Rasmus Andersson <rasmus@notion.se> | 2018-09-03 22:55:49 +0300 |
commit | c833e252c925e8dd68108660710ca835d95daa6f (patch) | |
tree | 6b2e28264ed45efd7f054e453b622098d0d875b8 /misc/pylib/robofab/tools/toolsAll.py | |
parent | 8c1a4c181ef12000179dfec541f1af87e9b03122 (diff) | |
download | inter-c833e252c925e8dd68108660710ca835d95daa6f.tar.xz |
Major overhaul, moving from UFO2 to Glyphs and UFO3, plus a brand new and much simpler fontbuild
Diffstat (limited to 'misc/pylib/robofab/tools/toolsAll.py')
-rwxr-xr-x | misc/pylib/robofab/tools/toolsAll.py | 145 |
1 files changed, 0 insertions, 145 deletions
diff --git a/misc/pylib/robofab/tools/toolsAll.py b/misc/pylib/robofab/tools/toolsAll.py deleted file mode 100755 index d729fe770..000000000 --- a/misc/pylib/robofab/tools/toolsAll.py +++ /dev/null @@ -1,145 +0,0 @@ -"""A collection of non-environment specific tools""" - - -import sys -import os -from robofab.objects.objectsRF import RInfo - -if sys.platform == "darwin" and sys.version_info[:3] == (2, 2, 0): - # the Mac support of Jaguar's Python 2.2 is broken - have_broken_macsupport = 1 -else: - have_broken_macsupport = 0 - - -def readGlyphConstructions(): - """read GlyphConstruction and turn it into a dict""" - from robofab.tools.glyphConstruction import _glyphConstruction - data = _glyphConstruction.split("\n") - glyphConstructions = {} - for i in data: - if len(i) == 0: continue - if i[0] != '#': - name = i.split(': ')[0] - construction = i.split(': ')[1].split(' ') - build = [construction[0]] - for c in construction[1:]: - accent = c.split('.')[0] - position = c.split('.')[1] - build.append((accent, position)) - glyphConstructions[name] = build - return glyphConstructions - -# -# -# glyph.unicode: ttFont["cmap"].getcmap(3, 1) -# -# - -def guessFileType(fileName): - if not os.path.exists(fileName): - return None - base, ext = os.path.splitext(fileName) - ext = ext.lower() - if not have_broken_macsupport: - try: - import MacOS - except ImportError: - pass - else: - cr, tp = MacOS.GetCreatorAndType(fileName) - if tp in ("sfnt", "FFIL"): - return "TTF" - if tp == "LWFN": - return "Type 1" - if ext == ".dfont": - return "TTF" - if ext in (".otf", ".ttf"): - return "TTF" - if ext in (".pfb", ".pfa"): - return "Type 1" - return None - -def extractTTFFontInfo(font): - # UFO.info attribute name / index. - # name table entries index according to http://www.microsoft.com/typography/otspec/name.htm - attrs = [ - ('copyright', 0), - ('familyName', 1), - ('styleMapStyleName', 2), - ('postscriptFullName', 4), - ('trademark', 7), - ('openTypeNameDesigner', 9), - ('openTypeNameLicenseURL', 14), - ('openTypeNameDesignerURL', 12), - ] - info = RInfo() - names = font['name'] - info.ascender = font['hhea'].ascent - info.descender = font['hhea'].descent - info.unitsPerEm = font['head'].unitsPerEm - for name, index in attrs: - entry = font["name"].getName(index, 3, 1, 0x409) - if entry is not None: - try: - value = unicode(entry.string, "utf_16_be") - if name == "styleMapStyleName": - value = value.lower() - setattr(info, name, value) - except Exception, e: - print "Error importing value %s: %s: %s"%(str(name), value, e.message) - return info - -def extractT1FontInfo(font): - info = RInfo() - src = font.font['FontInfo'] - factor = font.font['FontMatrix'][0] - assert factor > 0 - info.unitsPerEm = int(round(1/factor, 0)) - # assume something for ascender descender - info.ascender = (info.unitsPerEm / 5) * 4 - info.descender = info.ascender - info.unitsPerEm - info.versionMajor = font.font['FontInfo']['version'] - info.fullName = font.font['FontInfo']['FullName'] - info.familyName = font.font['FontInfo']['FullName'].split("-")[0] - info.notice = unicode(font.font['FontInfo']['Notice'], "macroman") - info.italicAngle = font.font['FontInfo']['ItalicAngle'] - info.uniqueID = font['UniqueID'] - return info - -def fontToUFO(src, dst, fileType=None): - from robofab.ufoLib import UFOWriter - from robofab.pens.adapterPens import SegmentToPointPen - if fileType is None: - fileType = guessFileType(src) - if fileType is None: - raise ValueError, "Can't determine input file type" - ufoWriter = UFOWriter(dst) - if fileType == "TTF": - from fontTools.ttLib import TTFont - font = TTFont(src, 0) - elif fileType == "Type 1": - from fontTools.t1Lib import T1Font - font = T1Font(src) - else: - assert 0, "unknown file type: %r" % fileType - inGlyphSet = font.getGlyphSet() - outGlyphSet = ufoWriter.getGlyphSet() - for glyphName in inGlyphSet.keys(): - print "-", glyphName - glyph = inGlyphSet[glyphName] - def drawPoints(pen): - pen = SegmentToPointPen(pen) - glyph.draw(pen) - outGlyphSet.writeGlyph(glyphName, glyph, drawPoints) - outGlyphSet.writeContents() - if fileType == "TTF": - info = extractTTFFontInfo(font) - elif fileType == "Type 1": - info = extractT1FontInfo(font) - ufoWriter.writeInfo(info) - -if __name__ == "__main__": - print readGlyphConstructions() - -
\ No newline at end of file |