fonttools/Tests/ufoLib/testSupport.py

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

656 lines
24 KiB
Python
Raw Permalink Normal View History

"""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
2022-12-13 11:26:36 +00:00
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])
2022-12-13 11:26:36 +00:00
)
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)
2019-09-09 22:24:59 +01:00
elif isinstance(value, str):
value = '"%s"' % value
text.append(f"{key} : {value}")
if not text:
return ""
return "{%s}" % ", ".join(text)
2022-12-13 11:26:36 +00:00
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)
2019-09-09 22:24:59 +01:00
elif isinstance(value, str):
value = '"%s"' % value
text.append(value)
if not text:
return ""
return "[%s]" % ", ".join(text)
2022-12-13 11:26:36 +00:00
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)
2019-09-09 22:24:59 +01:00
elif isinstance(value, str):
value = '"%s"' % value
text.append(value)
if not text:
return ""
return "(%s)" % ", ".join(text)
2022-12-13 11:26:36 +00:00
def stripText(text):
new = []
for line in text.strip().splitlines():
line = line.strip()
if not line:
continue
new.append(line)
return "\n".join(new)
2022-12-13 11:26:36 +00:00
# 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": ""},
]
2022-12-13 11:26:36 +00:00
),
"woffMetadataLicensee": dict(name="Some Licensee"),
"woffMetadataExtensions": [
2022-12-13 11:26:36 +00:00
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": ""},
],
2022-12-13 11:26:36 +00:00
items=[
# everything
2022-12-13 11:26:36 +00:00
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": ""},
],
2022-12-13 11:26:36 +00:00
),
# 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"),
2015-11-05 09:03:19 +00:00
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,
}