blob: b29e3a15c8facbb2c301419235b15213ca3d5cac [file] [log] [blame]
"""Miscellaneous helpers for our test suite."""
import os
from fontTools.ufoLib.utils import numberTypes
def getDemoFontPath():
"""Return the path to Data/DemoFont.ufo/."""
testdata = os.path.join(os.path.dirname(__file__), "testdata")
return os.path.join(testdata, "DemoFont.ufo")
def getDemoFontGlyphSetPath():
"""Return the path to Data/DemoFont.ufo/glyphs/."""
return os.path.join(getDemoFontPath(), "glyphs")
# GLIF test tools
class Glyph:
def __init__(self):
self.name = None
self.width = None
self.height = None
self.unicodes = None
self.note = None
self.lib = None
self.image = None
self.guidelines = None
self.anchors = None
self.outline = []
def _writePointPenCommand(self, command, args, kwargs):
args = _listToString(args)
kwargs = _dictToString(kwargs)
if args and kwargs:
return f"pointPen.{command}(*{args}, **{kwargs})"
elif len(args):
return f"pointPen.{command}(*{args})"
elif len(kwargs):
return f"pointPen.{command}(**{kwargs})"
else:
return "pointPen.%s()" % command
def beginPath(self, **kwargs):
self.outline.append(self._writePointPenCommand("beginPath", [], kwargs))
def endPath(self):
self.outline.append(self._writePointPenCommand("endPath", [], {}))
def addPoint(self, *args, **kwargs):
self.outline.append(self._writePointPenCommand("addPoint", args, kwargs))
def addComponent(self, *args, **kwargs):
self.outline.append(self._writePointPenCommand("addComponent", args, kwargs))
def drawPoints(self, pointPen):
if self.outline:
py = "\n".join(self.outline)
exec(py, {"pointPen": pointPen})
def py(self):
text = []
if self.name is not None:
text.append('glyph.name = "%s"' % self.name)
if self.width:
text.append("glyph.width = %r" % self.width)
if self.height:
text.append("glyph.height = %r" % self.height)
if self.unicodes is not None:
text.append(
"glyph.unicodes = [%s]" % ", ".join([str(i) for i in self.unicodes])
)
if self.note is not None:
text.append('glyph.note = "%s"' % self.note)
if self.lib is not None:
text.append("glyph.lib = %s" % _dictToString(self.lib))
if self.image is not None:
text.append("glyph.image = %s" % _dictToString(self.image))
if self.guidelines is not None:
text.append("glyph.guidelines = %s" % _listToString(self.guidelines))
if self.anchors is not None:
text.append("glyph.anchors = %s" % _listToString(self.anchors))
if self.outline:
text += self.outline
return "\n".join(text)
def _dictToString(d):
text = []
for key, value in sorted(d.items()):
if value is None:
continue
key = '"%s"' % key
if isinstance(value, dict):
value = _dictToString(value)
elif isinstance(value, list):
value = _listToString(value)
elif isinstance(value, tuple):
value = _tupleToString(value)
elif isinstance(value, numberTypes):
value = repr(value)
elif isinstance(value, str):
value = '"%s"' % value
text.append(f"{key} : {value}")
if not text:
return ""
return "{%s}" % ", ".join(text)
def _listToString(l):
text = []
for value in l:
if isinstance(value, dict):
value = _dictToString(value)
elif isinstance(value, list):
value = _listToString(value)
elif isinstance(value, tuple):
value = _tupleToString(value)
elif isinstance(value, numberTypes):
value = repr(value)
elif isinstance(value, str):
value = '"%s"' % value
text.append(value)
if not text:
return ""
return "[%s]" % ", ".join(text)
def _tupleToString(t):
text = []
for value in t:
if isinstance(value, dict):
value = _dictToString(value)
elif isinstance(value, list):
value = _listToString(value)
elif isinstance(value, tuple):
value = _tupleToString(value)
elif isinstance(value, numberTypes):
value = repr(value)
elif isinstance(value, str):
value = '"%s"' % value
text.append(value)
if not text:
return ""
return "(%s)" % ", ".join(text)
def stripText(text):
new = []
for line in text.strip().splitlines():
line = line.strip()
if not line:
continue
new.append(line)
return "\n".join(new)
# font info values used by several tests
fontInfoVersion1 = {
"familyName": "Some Font (Family Name)",
"styleName": "Regular (Style Name)",
"fullName": "Some Font-Regular (Postscript Full Name)",
"fontName": "SomeFont-Regular (Postscript Font Name)",
"menuName": "Some Font Regular (Style Map Family Name)",
"fontStyle": 64,
"note": "A note.",
"versionMajor": 1,
"versionMinor": 0,
"year": 2008,
"copyright": "Copyright Some Foundry.",
"notice": "Some Font by Some Designer for Some Foundry.",
"trademark": "Trademark Some Foundry",
"license": "License info for Some Foundry.",
"licenseURL": "http://somefoundry.com/license",
"createdBy": "Some Foundry",
"designer": "Some Designer",
"designerURL": "http://somedesigner.com",
"vendorURL": "http://somefoundry.com",
"unitsPerEm": 1000,
"ascender": 750,
"descender": -250,
"capHeight": 750,
"xHeight": 500,
"defaultWidth": 400,
"slantAngle": -12.5,
"italicAngle": -12.5,
"widthName": "Medium (normal)",
"weightName": "Medium",
"weightValue": 500,
"fondName": "SomeFont Regular (FOND Name)",
"otFamilyName": "Some Font (Preferred Family Name)",
"otStyleName": "Regular (Preferred Subfamily Name)",
"otMacName": "Some Font Regular (Compatible Full Name)",
"msCharSet": 0,
"fondID": 15000,
"uniqueID": 4000000,
"ttVendor": "SOME",
"ttUniqueID": "OpenType name Table Unique ID",
"ttVersion": "OpenType name Table Version",
}
fontInfoVersion2 = {
"familyName": "Some Font (Family Name)",
"styleName": "Regular (Style Name)",
"styleMapFamilyName": "Some Font Regular (Style Map Family Name)",
"styleMapStyleName": "regular",
"versionMajor": 1,
"versionMinor": 0,
"year": 2008,
"copyright": "Copyright Some Foundry.",
"trademark": "Trademark Some Foundry",
"unitsPerEm": 1000,
"descender": -250,
"xHeight": 500,
"capHeight": 750,
"ascender": 750,
"italicAngle": -12.5,
"note": "A note.",
"openTypeHeadCreated": "2000/01/01 00:00:00",
"openTypeHeadLowestRecPPEM": 10,
"openTypeHeadFlags": [0, 1],
"openTypeHheaAscender": 750,
"openTypeHheaDescender": -250,
"openTypeHheaLineGap": 200,
"openTypeHheaCaretSlopeRise": 1,
"openTypeHheaCaretSlopeRun": 0,
"openTypeHheaCaretOffset": 0,
"openTypeNameDesigner": "Some Designer",
"openTypeNameDesignerURL": "http://somedesigner.com",
"openTypeNameManufacturer": "Some Foundry",
"openTypeNameManufacturerURL": "http://somefoundry.com",
"openTypeNameLicense": "License info for Some Foundry.",
"openTypeNameLicenseURL": "http://somefoundry.com/license",
"openTypeNameVersion": "OpenType name Table Version",
"openTypeNameUniqueID": "OpenType name Table Unique ID",
"openTypeNameDescription": "Some Font by Some Designer for Some Foundry.",
"openTypeNamePreferredFamilyName": "Some Font (Preferred Family Name)",
"openTypeNamePreferredSubfamilyName": "Regular (Preferred Subfamily Name)",
"openTypeNameCompatibleFullName": "Some Font Regular (Compatible Full Name)",
"openTypeNameSampleText": "Sample Text for Some Font.",
"openTypeNameWWSFamilyName": "Some Font (WWS Family Name)",
"openTypeNameWWSSubfamilyName": "Regular (WWS Subfamily Name)",
"openTypeOS2WidthClass": 5,
"openTypeOS2WeightClass": 500,
"openTypeOS2Selection": [3],
"openTypeOS2VendorID": "SOME",
"openTypeOS2Panose": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
"openTypeOS2FamilyClass": [1, 1],
"openTypeOS2UnicodeRanges": [0, 1],
"openTypeOS2CodePageRanges": [0, 1],
"openTypeOS2TypoAscender": 750,
"openTypeOS2TypoDescender": -250,
"openTypeOS2TypoLineGap": 200,
"openTypeOS2WinAscent": 750,
"openTypeOS2WinDescent": 250,
"openTypeOS2Type": [],
"openTypeOS2SubscriptXSize": 200,
"openTypeOS2SubscriptYSize": 400,
"openTypeOS2SubscriptXOffset": 0,
"openTypeOS2SubscriptYOffset": -100,
"openTypeOS2SuperscriptXSize": 200,
"openTypeOS2SuperscriptYSize": 400,
"openTypeOS2SuperscriptXOffset": 0,
"openTypeOS2SuperscriptYOffset": 200,
"openTypeOS2StrikeoutSize": 20,
"openTypeOS2StrikeoutPosition": 300,
"openTypeVheaVertTypoAscender": 750,
"openTypeVheaVertTypoDescender": -250,
"openTypeVheaVertTypoLineGap": 200,
"openTypeVheaCaretSlopeRise": 0,
"openTypeVheaCaretSlopeRun": 1,
"openTypeVheaCaretOffset": 0,
"postscriptFontName": "SomeFont-Regular (Postscript Font Name)",
"postscriptFullName": "Some Font-Regular (Postscript Full Name)",
"postscriptSlantAngle": -12.5,
"postscriptUniqueID": 4000000,
"postscriptUnderlineThickness": 20,
"postscriptUnderlinePosition": -200,
"postscriptIsFixedPitch": False,
"postscriptBlueValues": [500, 510],
"postscriptOtherBlues": [-250, -260],
"postscriptFamilyBlues": [500, 510],
"postscriptFamilyOtherBlues": [-250, -260],
"postscriptStemSnapH": [100, 120],
"postscriptStemSnapV": [80, 90],
"postscriptBlueFuzz": 1,
"postscriptBlueShift": 7,
"postscriptBlueScale": 0.039625,
"postscriptForceBold": True,
"postscriptDefaultWidthX": 400,
"postscriptNominalWidthX": 400,
"postscriptWeightName": "Medium",
"postscriptDefaultCharacter": ".notdef",
"postscriptWindowsCharacterSet": 1,
"macintoshFONDFamilyID": 15000,
"macintoshFONDName": "SomeFont Regular (FOND Name)",
}
fontInfoVersion3 = {
"familyName": "Some Font (Family Name)",
"styleName": "Regular (Style Name)",
"styleMapFamilyName": "Some Font Regular (Style Map Family Name)",
"styleMapStyleName": "regular",
"versionMajor": 1,
"versionMinor": 0,
"year": 2008,
"copyright": "Copyright Some Foundry.",
"trademark": "Trademark Some Foundry",
"unitsPerEm": 1000,
"descender": -250,
"xHeight": 500,
"capHeight": 750,
"ascender": 750,
"italicAngle": -12.5,
"note": "A note.",
"openTypeGaspRangeRecords": [
dict(rangeMaxPPEM=10, rangeGaspBehavior=[0]),
dict(rangeMaxPPEM=20, rangeGaspBehavior=[1]),
dict(rangeMaxPPEM=30, rangeGaspBehavior=[2]),
dict(rangeMaxPPEM=40, rangeGaspBehavior=[3]),
dict(rangeMaxPPEM=50, rangeGaspBehavior=[0, 1, 2, 3]),
dict(rangeMaxPPEM=0xFFFF, rangeGaspBehavior=[0]),
],
"openTypeHeadCreated": "2000/01/01 00:00:00",
"openTypeHeadLowestRecPPEM": 10,
"openTypeHeadFlags": [0, 1],
"openTypeHheaAscender": 750,
"openTypeHheaDescender": -250,
"openTypeHheaLineGap": 200,
"openTypeHheaCaretSlopeRise": 1,
"openTypeHheaCaretSlopeRun": 0,
"openTypeHheaCaretOffset": 0,
"openTypeNameDesigner": "Some Designer",
"openTypeNameDesignerURL": "http://somedesigner.com",
"openTypeNameManufacturer": "Some Foundry",
"openTypeNameManufacturerURL": "http://somefoundry.com",
"openTypeNameLicense": "License info for Some Foundry.",
"openTypeNameLicenseURL": "http://somefoundry.com/license",
"openTypeNameVersion": "OpenType name Table Version",
"openTypeNameUniqueID": "OpenType name Table Unique ID",
"openTypeNameDescription": "Some Font by Some Designer for Some Foundry.",
"openTypeNamePreferredFamilyName": "Some Font (Preferred Family Name)",
"openTypeNamePreferredSubfamilyName": "Regular (Preferred Subfamily Name)",
"openTypeNameCompatibleFullName": "Some Font Regular (Compatible Full Name)",
"openTypeNameSampleText": "Sample Text for Some Font.",
"openTypeNameWWSFamilyName": "Some Font (WWS Family Name)",
"openTypeNameWWSSubfamilyName": "Regular (WWS Subfamily Name)",
"openTypeNameRecords": [
dict(nameID=1, platformID=1, encodingID=1, languageID=1, string="Name Record."),
dict(nameID=2, platformID=1, encodingID=1, languageID=1, string="Name Record."),
],
"openTypeOS2WidthClass": 5,
"openTypeOS2WeightClass": 500,
"openTypeOS2Selection": [3],
"openTypeOS2VendorID": "SOME",
"openTypeOS2Panose": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
"openTypeOS2FamilyClass": [1, 1],
"openTypeOS2UnicodeRanges": [0, 1],
"openTypeOS2CodePageRanges": [0, 1],
"openTypeOS2TypoAscender": 750,
"openTypeOS2TypoDescender": -250,
"openTypeOS2TypoLineGap": 200,
"openTypeOS2WinAscent": 750,
"openTypeOS2WinDescent": 250,
"openTypeOS2Type": [],
"openTypeOS2SubscriptXSize": 200,
"openTypeOS2SubscriptYSize": 400,
"openTypeOS2SubscriptXOffset": 0,
"openTypeOS2SubscriptYOffset": -100,
"openTypeOS2SuperscriptXSize": 200,
"openTypeOS2SuperscriptYSize": 400,
"openTypeOS2SuperscriptXOffset": 0,
"openTypeOS2SuperscriptYOffset": 200,
"openTypeOS2StrikeoutSize": 20,
"openTypeOS2StrikeoutPosition": 300,
"openTypeVheaVertTypoAscender": 750,
"openTypeVheaVertTypoDescender": -250,
"openTypeVheaVertTypoLineGap": 200,
"openTypeVheaCaretSlopeRise": 0,
"openTypeVheaCaretSlopeRun": 1,
"openTypeVheaCaretOffset": 0,
"postscriptFontName": "SomeFont-Regular (Postscript Font Name)",
"postscriptFullName": "Some Font-Regular (Postscript Full Name)",
"postscriptSlantAngle": -12.5,
"postscriptUniqueID": 4000000,
"postscriptUnderlineThickness": 20,
"postscriptUnderlinePosition": -200,
"postscriptIsFixedPitch": False,
"postscriptBlueValues": [500, 510],
"postscriptOtherBlues": [-250, -260],
"postscriptFamilyBlues": [500, 510],
"postscriptFamilyOtherBlues": [-250, -260],
"postscriptStemSnapH": [100, 120],
"postscriptStemSnapV": [80, 90],
"postscriptBlueFuzz": 1,
"postscriptBlueShift": 7,
"postscriptBlueScale": 0.039625,
"postscriptForceBold": True,
"postscriptDefaultWidthX": 400,
"postscriptNominalWidthX": 400,
"postscriptWeightName": "Medium",
"postscriptDefaultCharacter": ".notdef",
"postscriptWindowsCharacterSet": 1,
"macintoshFONDFamilyID": 15000,
"macintoshFONDName": "SomeFont Regular (FOND Name)",
"woffMajorVersion": 1,
"woffMinorVersion": 0,
"woffMetadataUniqueID": dict(id="string"),
"woffMetadataVendor": dict(name="Some Foundry", url="http://somefoundry.com"),
"woffMetadataCredits": dict(
credits=[
dict(name="Some Designer"),
dict(name=""),
dict(name="Some Designer", url="http://somedesigner.com"),
dict(name="Some Designer", url=""),
dict(name="Some Designer", role="Designer"),
dict(name="Some Designer", role=""),
dict(name="Some Designer", dir="ltr"),
dict(name="rengiseD emoS", dir="rtl"),
{"name": "Some Designer", "class": "hello"},
{"name": "Some Designer", "class": ""},
]
),
"woffMetadataDescription": dict(
url="http://somefoundry.com/foo/description",
text=[
dict(text="foo"),
dict(text=""),
dict(text="foo", language="bar"),
dict(text="foo", language=""),
dict(text="foo", dir="ltr"),
dict(text="foo", dir="rtl"),
{"text": "foo", "class": "foo"},
{"text": "foo", "class": ""},
],
),
"woffMetadataLicense": dict(
url="http://somefoundry.com/foo/license",
id="foo",
text=[
dict(text="foo"),
dict(text=""),
dict(text="foo", language="bar"),
dict(text="foo", language=""),
dict(text="foo", dir="ltr"),
dict(text="foo", dir="rtl"),
{"text": "foo", "class": "foo"},
{"text": "foo", "class": ""},
],
),
"woffMetadataCopyright": dict(
text=[
dict(text="foo"),
dict(text=""),
dict(text="foo", language="bar"),
dict(text="foo", language=""),
dict(text="foo", dir="ltr"),
dict(text="foo", dir="rtl"),
{"text": "foo", "class": "foo"},
{"text": "foo", "class": ""},
]
),
"woffMetadataTrademark": dict(
text=[
dict(text="foo"),
dict(text=""),
dict(text="foo", language="bar"),
dict(text="foo", language=""),
dict(text="foo", dir="ltr"),
dict(text="foo", dir="rtl"),
{"text": "foo", "class": "foo"},
{"text": "foo", "class": ""},
]
),
"woffMetadataLicensee": dict(name="Some Licensee"),
"woffMetadataExtensions": [
dict(
# everything
names=[
dict(text="foo"),
dict(text=""),
dict(text="foo", language="bar"),
dict(text="foo", language=""),
dict(text="foo", dir="ltr"),
dict(text="foo", dir="rtl"),
{"text": "foo", "class": "hello"},
{"text": "foo", "class": ""},
],
items=[
# everything
dict(
id="foo",
names=[
dict(text="foo"),
dict(text=""),
dict(text="foo", language="bar"),
dict(text="foo", language=""),
dict(text="foo", dir="ltr"),
dict(text="foo", dir="rtl"),
{"text": "foo", "class": "hello"},
{"text": "foo", "class": ""},
],
values=[
dict(text="foo"),
dict(text=""),
dict(text="foo", language="bar"),
dict(text="foo", language=""),
dict(text="foo", dir="ltr"),
dict(text="foo", dir="rtl"),
{"text": "foo", "class": "hello"},
{"text": "foo", "class": ""},
],
),
# no id
dict(names=[dict(text="foo")], values=[dict(text="foo")]),
],
),
# no names
dict(
items=[dict(id="foo", names=[dict(text="foo")], values=[dict(text="foo")])]
),
],
"guidelines": [
# ints
dict(x=100, y=200, angle=45),
# floats
dict(x=100.5, y=200.5, angle=45.5),
# edges
dict(x=0, y=0, angle=0),
dict(x=0, y=0, angle=360),
dict(x=0, y=0, angle=360.0),
# no y
dict(x=100),
# no x
dict(y=200),
# name
dict(x=100, y=200, angle=45, name="foo"),
dict(x=100, y=200, angle=45, name=""),
# identifier
dict(x=100, y=200, angle=45, identifier="guide1"),
dict(x=100, y=200, angle=45, identifier="guide2"),
dict(x=100, y=200, angle=45, identifier="\x20"),
dict(x=100, y=200, angle=45, identifier="\x7E"),
# colors
dict(x=100, y=200, angle=45, color="0,0,0,0"),
dict(x=100, y=200, angle=45, color="1,0,0,0"),
dict(x=100, y=200, angle=45, color="1,1,1,1"),
dict(x=100, y=200, angle=45, color="0,1,0,0"),
dict(x=100, y=200, angle=45, color="0,0,1,0"),
dict(x=100, y=200, angle=45, color="0,0,0,1"),
dict(x=100, y=200, angle=45, color="1, 0, 0, 0"),
dict(x=100, y=200, angle=45, color="0, 1, 0, 0"),
dict(x=100, y=200, angle=45, color="0, 0, 1, 0"),
dict(x=100, y=200, angle=45, color="0, 0, 0, 1"),
dict(x=100, y=200, angle=45, color=".5,0,0,0"),
dict(x=100, y=200, angle=45, color="0,.5,0,0"),
dict(x=100, y=200, angle=45, color="0,0,.5,0"),
dict(x=100, y=200, angle=45, color="0,0,0,.5"),
dict(x=100, y=200, angle=45, color=".5,1,1,1"),
dict(x=100, y=200, angle=45, color="1,.5,1,1"),
dict(x=100, y=200, angle=45, color="1,1,.5,1"),
dict(x=100, y=200, angle=45, color="1,1,1,.5"),
],
}
expectedFontInfo1To2Conversion = {
"familyName": "Some Font (Family Name)",
"styleMapFamilyName": "Some Font Regular (Style Map Family Name)",
"styleMapStyleName": "regular",
"styleName": "Regular (Style Name)",
"unitsPerEm": 1000,
"ascender": 750,
"capHeight": 750,
"xHeight": 500,
"descender": -250,
"italicAngle": -12.5,
"versionMajor": 1,
"versionMinor": 0,
"year": 2008,
"copyright": "Copyright Some Foundry.",
"trademark": "Trademark Some Foundry",
"note": "A note.",
"macintoshFONDFamilyID": 15000,
"macintoshFONDName": "SomeFont Regular (FOND Name)",
"openTypeNameCompatibleFullName": "Some Font Regular (Compatible Full Name)",
"openTypeNameDescription": "Some Font by Some Designer for Some Foundry.",
"openTypeNameDesigner": "Some Designer",
"openTypeNameDesignerURL": "http://somedesigner.com",
"openTypeNameLicense": "License info for Some Foundry.",
"openTypeNameLicenseURL": "http://somefoundry.com/license",
"openTypeNameManufacturer": "Some Foundry",
"openTypeNameManufacturerURL": "http://somefoundry.com",
"openTypeNamePreferredFamilyName": "Some Font (Preferred Family Name)",
"openTypeNamePreferredSubfamilyName": "Regular (Preferred Subfamily Name)",
"openTypeNameCompatibleFullName": "Some Font Regular (Compatible Full Name)",
"openTypeNameUniqueID": "OpenType name Table Unique ID",
"openTypeNameVersion": "OpenType name Table Version",
"openTypeOS2VendorID": "SOME",
"openTypeOS2WeightClass": 500,
"openTypeOS2WidthClass": 5,
"postscriptDefaultWidthX": 400,
"postscriptFontName": "SomeFont-Regular (Postscript Font Name)",
"postscriptFullName": "Some Font-Regular (Postscript Full Name)",
"postscriptSlantAngle": -12.5,
"postscriptUniqueID": 4000000,
"postscriptWeightName": "Medium",
"postscriptWindowsCharacterSet": 1,
}
expectedFontInfo2To1Conversion = {
"familyName": "Some Font (Family Name)",
"menuName": "Some Font Regular (Style Map Family Name)",
"fontStyle": 64,
"styleName": "Regular (Style Name)",
"unitsPerEm": 1000,
"ascender": 750,
"capHeight": 750,
"xHeight": 500,
"descender": -250,
"italicAngle": -12.5,
"versionMajor": 1,
"versionMinor": 0,
"copyright": "Copyright Some Foundry.",
"trademark": "Trademark Some Foundry",
"note": "A note.",
"fondID": 15000,
"fondName": "SomeFont Regular (FOND Name)",
"fullName": "Some Font Regular (Compatible Full Name)",
"notice": "Some Font by Some Designer for Some Foundry.",
"designer": "Some Designer",
"designerURL": "http://somedesigner.com",
"license": "License info for Some Foundry.",
"licenseURL": "http://somefoundry.com/license",
"createdBy": "Some Foundry",
"vendorURL": "http://somefoundry.com",
"otFamilyName": "Some Font (Preferred Family Name)",
"otStyleName": "Regular (Preferred Subfamily Name)",
"otMacName": "Some Font Regular (Compatible Full Name)",
"ttUniqueID": "OpenType name Table Unique ID",
"ttVersion": "OpenType name Table Version",
"ttVendor": "SOME",
"weightValue": 500,
"widthName": "Medium (normal)",
"defaultWidth": 400,
"fontName": "SomeFont-Regular (Postscript Font Name)",
"fullName": "Some Font-Regular (Postscript Full Name)",
"slantAngle": -12.5,
"uniqueID": 4000000,
"weightName": "Medium",
"msCharSet": 0,
"year": 2008,
}