diff options
Diffstat (limited to 'scripts/lib/fontbuild/instanceNames.py')
-rwxr-xr-x | scripts/lib/fontbuild/instanceNames.py | 184 |
1 files changed, 184 insertions, 0 deletions
diff --git a/scripts/lib/fontbuild/instanceNames.py b/scripts/lib/fontbuild/instanceNames.py new file mode 100755 index 0000000..96827c8 --- /dev/null +++ b/scripts/lib/fontbuild/instanceNames.py @@ -0,0 +1,184 @@ +from datetime import date +import re +from random import randint +import string + +class InstanceNames: + "Class that allows easy setting of FontLab name fields. TODO: Add proper italic flags" + + foundry = "" + build = "0000" + version = "1.0" + year = date.today().year + designer = "Christian Robertson" + license = "Licensed under the Apache License, Version 2.0" + licenseURL = "http://www.apache.org/licenses/LICENSE-2.0" + + def __init__(self,names): + if type(names) == type(" "): + names = names.split("/") + + self.longfamily = names[0] + self.longstyle = names[1] + self.shortstyle = names[2] + self.subfamilyAbbrev = names[3] + + self.width = self._getWidth() + self.italic = self._getItalic() + self.weight = self._getWeight() + self.fullname = "%s %s" %(self.longfamily, self.longstyle) + self.postscript = re.sub(' ','', self.longfamily) + "-" + re.sub(' ','',self.longstyle) + + # if self.subfamilyAbbrev != "" and self.subfamilyAbbrev != None and self.subfamilyAbbrev != "Rg": + # self.shortfamily = "%s %s" %(self.longfamily, self.subfamilyAbbrev) + # else: + # self.shortfamily = self.longfamily + self.shortfamily = self.longfamily + + def setRFNames(self,f, version=1, versionMinor=0): + f.info.familyName = self.longfamily + f.info.styleName = self.longstyle + f.info.styleMapFamilyName = self.shortfamily + f.info.styleMapStyleName = self.shortstyle.lower() + f.info.versionMajor = version + f.info.versionMinor = versionMinor + f.info.year = self.year + f.info.copyright = "Font data copyright %s %s" %(self.foundry, self.year) + f.info.trademark = "%s is a trademark of %s." %(self.longfamily, self.foundry) + + f.info.openTypeNameDesigner = "Christian Robertson" + f.info.openTypeNameDesignerURL = self.foundry + ".com" + f.info.openTypeNameManufacturer = self.foundry + f.info.openTypeNameManufacturerURL = self.foundry + ".com" + f.info.openTypeNameLicense = self.license + f.info.openTypeNameLicenseURL = self.licenseURL + f.info.openTypeNameVersion = "%i.%i" %(version,versionMinor) + f.info.openTypeNameUniqueID = "%s:%s:%s" %(self.foundry, self.longfamily, self.year) + # f.info.openTypeNameDescription = "" + # f.info.openTypeNameCompatibleFullName = "" + # f.info.openTypeNameSampleText = "" + if (self.subfamilyAbbrev != "Rg"): + f.info.openTypeNamePreferredFamilyName = self.longfamily + f.info.openTypeNamePreferredSubfamilyName = self.longstyle + + f.info.macintoshFONDName = re.sub(' ','',self.longfamily) + " " + re.sub(' ','',self.longstyle) + + + def setFLNames(self,flFont): + + from FL import NameRecord + + flFont.family_name = self.shortfamily + flFont.mac_compatible = self.fullname + flFont.style_name = self.longstyle + flFont.full_name = self.fullname + flFont.font_name = self.postscript + flFont.font_style = self._getStyleCode() + flFont.menu_name = self.shortfamily + flFont.apple_name = re.sub(' ','',self.longfamily) + " " + re.sub(' ','',self.longstyle) + flFont.fond_id = randint(1000,9999) + flFont.pref_family_name = self.longfamily + flFont.pref_style_name = self.longstyle + flFont.weight = self.weight + flFont.weight_code = self._getWeightCode(self.weight) + flFont.width = self.width + + fn = flFont.fontnames + fn.clean() + fn.append(NameRecord(0,1,0,0, "Font data copyright %s %s" %(self.foundry, self.year) )) + fn.append(NameRecord(0,3,1,1033, "Font data copyright %s %s" %(self.foundry, self.year) )) + fn.append(NameRecord(1,1,0,0, self.longfamily )) + fn.append(NameRecord(1,3,1,1033, self.shortfamily )) + fn.append(NameRecord(2,1,0,0, self.longstyle )) + fn.append(NameRecord(2,3,1,1033, self.longstyle )) + fn.append(NameRecord(3,1,0,0, "%s:%s:%s" %(self.foundry, self.longfamily, self.year) )) + fn.append(NameRecord(3,3,1,1033, "%s:%s:%s" %(self.foundry, self.longfamily, self.year) )) + fn.append(NameRecord(4,1,0,0, self.fullname )) + fn.append(NameRecord(4,3,1,1033, self.fullname )) + fn.append(NameRecord(5,1,0,0, "Version %s%s; %s" %(self.version, self.build, self.year) )) + fn.append(NameRecord(5,3,1,1033, "Version %s%s; %s" %(self.version, self.build, self.year) )) + fn.append(NameRecord(6,1,0,0, self.postscript )) + fn.append(NameRecord(6,3,1,1033, self.postscript )) + fn.append(NameRecord(7,1,0,0, "%s is a trademark of %s." %(self.longfamily, self.foundry) )) + fn.append(NameRecord(7,3,1,1033, "%s is a trademark of %s." %(self.longfamily, self.foundry) )) + fn.append(NameRecord(9,1,0,0, self.foundry )) + fn.append(NameRecord(9,3,1,1033, self.foundry )) + fn.append(NameRecord(11,1,0,0, self.foundry + ".com" )) + fn.append(NameRecord(11,3,1,1033, self.foundry + ".com" )) + fn.append(NameRecord(12,1,0,0, self.designer )) + fn.append(NameRecord(12,3,1,1033, self.designer )) + fn.append(NameRecord(13,1,0,0, self.license )) + fn.append(NameRecord(13,3,1,1033, self.license )) + fn.append(NameRecord(14,1,0,0, self.licenseURL )) + fn.append(NameRecord(14,3,1,1033, self.licenseURL )) + if (self.subfamilyAbbrev != "Rg"): + fn.append(NameRecord(16,3,1,1033, self.longfamily )) + fn.append(NameRecord(17,3,1,1033, self.longstyle)) + #else: + #fn.append(NameRecord(17,3,1,1033,"")) + #fn.append(NameRecord(18,1,0,0, re.sub("Italic","It", self.fullname))) + + def _getSubstyle(self, regex): + substyle = re.findall(regex, self.longstyle) + if len(substyle) > 0: + return substyle[0] + else: + return "" + + def _getItalic(self): + return self._getSubstyle(r"Italic|Oblique|Obliq") + + def _getWeight(self): + w = self._getSubstyle(r"Extrabold|Superbold|Super|Fat|Bold|Semibold|Demibold|Medium|Light|Thin") + if w == "": + w = "Regular" + return w + + def _getWidth(self): + w = self._getSubstyle(r"Condensed|Extended|Narrow|Wide") + if w == "": + w = "Normal" + return w + + def _getStyleCode(self): + styleCode = 0 + if self.shortstyle == "Bold": + styleCode = 32 + if self.shortstyle == "Italic": + styleCode = 1 + if self.shortstyle == "Bold Italic": + styleCode = 33 + if self.longstyle == "Regular": + styleCode = 64 + return styleCode + + def _getWeightCode(self,weight): + if weight == "Thin": + return 250 + elif weight == "Light": + return 300 + elif weight == "Bold": + return 700 + elif weight == "Medium": + return 500 + elif weight == "Semibold": + return 600 + elif weight == "Black": + return 800 + elif weight == "Fat": + return 900 + + return 400 + +def setNames(f,names,foundry="",version="1.0",build="0000"): + InstanceNames.foundry = foundry + InstanceNames.version = version + InstanceNames.build = build + i = InstanceNames(names) + i.setFLNames(f) + +def setNamesRF(f,names,foundry=""): + InstanceNames.foundry = foundry + i = InstanceNames(names) + i.setRFNames(f) +
\ No newline at end of file |