summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRasmus Andersson <rasmus@notion.se>2018-09-04 05:08:46 +0300
committerRasmus Andersson <rasmus@notion.se>2018-09-04 05:08:46 +0300
commitb1858682033ad8cb4de60a16d67c6e8197d1cf24 (patch)
tree4a2c91bcf19457f33c1c0db2446aba9229c4baae
parentfabb2241daf18b6ebce1624d2b6f72a60fc4e520 (diff)
downloadinter-b1858682033ad8cb4de60a16d67c6e8197d1cf24.tar.xz
fontbuild: adjustments to name generation
-rwxr-xr-xmisc/fontbuild61
1 files changed, 41 insertions, 20 deletions
diff --git a/misc/fontbuild b/misc/fontbuild
index 7a6a57d67..337c28a5b 100755
--- a/misc/fontbuild
+++ b/misc/fontbuild
@@ -19,7 +19,11 @@ from glyphsLib.interpolation import apply_instance_data
from mutatorMath.ufo.document import DesignSpaceDocumentReader
-subfamily_re = re.compile(r'^\s*([^\s]+)(?:\s*italic|)\s*$', re.I | re.U)
+stripItalic_re = re.compile(r'(?:^|\b)italic(?:\b|$)', re.I | re.U)
+
+
+def stripItalic(name):
+ return stripItalic_re.sub('', name.strip())
def sighandler(signum, frame):
@@ -62,6 +66,8 @@ def setFontInfo(font, weight, updateCreated=True):
font.info.version = version
font.info.versionMajor = versionMajor
font.info.versionMinor = versionMinor
+ font.info.woffMajorVersion = versionMajor
+ font.info.woffMinorVersion = versionMinor
font.info.year = now.year
font.info.openTypeNameVersion = "%s;%s" % (version, buildtag)
font.info.openTypeNameUniqueID = "%s %s:%d:%s" % (family, style, now.year, buildtag)
@@ -74,30 +80,43 @@ def setFontInfo(font, weight, updateCreated=True):
# name ID 16 "Typographic Family name"
font.info.openTypeNamePreferredFamilyName = family
-
+
# name ID 17 "Typographic Subfamily name"
- subfamily = subfamily_re.sub('\\1', style) # "A Italic" => "A", "A" => "A"
- if len(subfamily) == 0 or subfamily.strip().lower() == 'italic':
+ font.info.openTypeNamePreferredSubfamilyName = style
+
+ # name ID 1 "Family name" (legacy, but required)
+ # Restriction:
+ # "shared among at most four fonts that differ only in weight or style"
+ # So we map as follows:
+ # - Regular => "Family", ("regular" | "italic" | "bold" | "bold italic")
+ # - Medium => "Family Medium", ("regular" | "italic")
+ # - Black => "Family Black", ("regular" | "italic")
+ # and so on.
+ subfamily = stripItalic(style) # "A Italic" => "A", "A" => "A"
+ if len(subfamily) == 0:
subfamily = "Regular"
- font.info.openTypeNamePreferredSubfamilyName = subfamily
-
- # Legacy family name (full name except "italic")
subfamily_lc = subfamily.lower()
- if subfamily_lc != "regular" and subfamily_lc != "bold":
- font.info.styleMapFamilyName = "%s %s" % (family, subfamily)
- else:
+ if subfamily_lc == "regular" or subfamily_lc == "bold":
font.info.styleMapFamilyName = family
-
- # Legacy style name. Must be one of these case-sensitive strings:
- # "regular", "italic", "bold", "bold italic"
- font.info.styleMapStyleName = "regular"
- if style.strip().lower().find('bold') != -1:
+ # name ID 2 "Subfamily name" (legacy, but required)
+ # Value must be one of: "regular", "italic", "bold", "bold italic"
+ if subfamily_lc == "regular":
+ if isitalic:
+ font.info.styleMapStyleName = "italic"
+ else:
+ font.info.styleMapStyleName = "regular"
+ else: # bold
+ if isitalic:
+ font.info.styleMapStyleName = "bold italic"
+ else:
+ font.info.styleMapStyleName = "bold"
+ else:
+ font.info.styleMapFamilyName = family + ' ' + subfamily
+ # name ID 2 "Subfamily name" (legacy, but required)
if isitalic:
- font.info.styleMapStyleName = "bold italic"
+ font.info.styleMapStyleName = "italic"
else:
- font.info.styleMapStyleName = "bold"
- elif isitalic:
- font.info.styleMapStyleName = "italic"
+ font.info.styleMapStyleName = "regular"
class Main(object):
@@ -196,7 +215,8 @@ class Main(object):
project.run_from_ufos(
[args.ufo],
output_dir=self.tmpdir,
- output=formats
+ output=formats,
+ subroutinize=True
)
# run through ots-sanitize
@@ -207,6 +227,7 @@ class Main(object):
try:
otssan_res = subprocess.check_output(
['ots-sanitize', tmpfile, filename],
+ # ['cp', tmpfile, filename],
shell=False
).strip()
# Note: ots-sanitize does not exit with an error in many cases where