adds --style option to misc/tools/rename.py
This commit is contained in:
parent
c1e1f765bc
commit
82b1a2ac6c
1 changed files with 30 additions and 11 deletions
|
|
@ -6,13 +6,14 @@ from fontTools.ttLib import TTFont
|
||||||
WINDOWS_ENGLISH_IDS = 3, 1, 0x409
|
WINDOWS_ENGLISH_IDS = 3, 1, 0x409
|
||||||
MAC_ROMAN_IDS = 1, 0, 0
|
MAC_ROMAN_IDS = 1, 0, 0
|
||||||
|
|
||||||
LEGACY_FAMILY = 1
|
LEGACY_FAMILY = 1
|
||||||
TRUETYPE_UNIQUE_ID = 3
|
SUBFAMILY_NAME = 2
|
||||||
FULL_NAME = 4
|
TRUETYPE_UNIQUE_ID = 3
|
||||||
POSTSCRIPT_NAME = 6
|
FULL_NAME = 4
|
||||||
PREFERRED_FAMILY = 16
|
POSTSCRIPT_NAME = 6
|
||||||
SUBFAMILY_NAME = 17
|
PREFERRED_FAMILY = 16
|
||||||
WWS_FAMILY = 21
|
TYPO_SUBFAMILY_NAME = 17
|
||||||
|
WWS_FAMILY = 21
|
||||||
|
|
||||||
|
|
||||||
FAMILY_RELATED_IDS = set([
|
FAMILY_RELATED_IDS = set([
|
||||||
|
|
@ -31,12 +32,12 @@ def removeWhitespace(s):
|
||||||
return whitespace_re.sub("", s)
|
return whitespace_re.sub("", s)
|
||||||
|
|
||||||
|
|
||||||
def setFullName(font, fullName):
|
def set_full_name(font, fullName, fullNamePs):
|
||||||
nameTable = font["name"]
|
nameTable = font["name"]
|
||||||
nameTable.setName(fullName, FULL_NAME, 1, 0, 0) # mac
|
nameTable.setName(fullName, FULL_NAME, 1, 0, 0) # mac
|
||||||
nameTable.setName(fullName, FULL_NAME, 3, 1, 0x409) # windows
|
nameTable.setName(fullName, FULL_NAME, 3, 1, 0x409) # windows
|
||||||
nameTable.setName(fullName, POSTSCRIPT_NAME, 1, 0, 0) # mac
|
nameTable.setName(fullNamePs, POSTSCRIPT_NAME, 1, 0, 0) # mac
|
||||||
nameTable.setName(fullName, POSTSCRIPT_NAME, 3, 1, 0x409) # windows
|
nameTable.setName(fullNamePs, POSTSCRIPT_NAME, 3, 1, 0x409) # windows
|
||||||
|
|
||||||
|
|
||||||
def getFamilyName(font):
|
def getFamilyName(font):
|
||||||
|
|
@ -78,7 +79,7 @@ def renameStylesGoogleFonts(font):
|
||||||
# fixup e.g. "ExtraBoldItalic" -> "ExtraBold Italic"
|
# fixup e.g. "ExtraBoldItalic" -> "ExtraBold Italic"
|
||||||
s = s[:len(s) - len("Italic")] + " Italic"
|
s = s[:len(s) - len("Italic")] + " Italic"
|
||||||
rec.string = s.strip()
|
rec.string = s.strip()
|
||||||
if rid in (SUBFAMILY_NAME,) or rid in vfInstanceSubfamilyNameIds:
|
if rid in (SUBFAMILY_NAME, TYPO_SUBFAMILY_NAME) or rid in vfInstanceSubfamilyNameIds:
|
||||||
s = removeWhitespace(rec.toUnicode())
|
s = removeWhitespace(rec.toUnicode())
|
||||||
if s != "Italic" and s.endswith("Italic"):
|
if s != "Italic" and s.endswith("Italic"):
|
||||||
# fixup e.g. "ExtraBoldItalic" -> "ExtraBold Italic"
|
# fixup e.g. "ExtraBoldItalic" -> "ExtraBold Italic"
|
||||||
|
|
@ -87,6 +88,18 @@ def renameStylesGoogleFonts(font):
|
||||||
# else: ignore standard names unrelated to style
|
# else: ignore standard names unrelated to style
|
||||||
|
|
||||||
|
|
||||||
|
def setStyleName(font, newStyleName):
|
||||||
|
newFullName = getFamilyName(font).strip() + " " + newStyleName
|
||||||
|
newFullNamePs = removeWhitespace(newFullName)
|
||||||
|
set_full_name(font, newFullName, newFullNamePs)
|
||||||
|
|
||||||
|
nameTable = font["name"]
|
||||||
|
for rec in nameTable.names:
|
||||||
|
rid = rec.nameID
|
||||||
|
if rid in (SUBFAMILY_NAME, TYPO_SUBFAMILY_NAME):
|
||||||
|
rec.string = newStyleName
|
||||||
|
|
||||||
|
|
||||||
def setFamilyName(font, nextFamilyName):
|
def setFamilyName(font, nextFamilyName):
|
||||||
prevFamilyName = getFamilyName(font)
|
prevFamilyName = getFamilyName(font)
|
||||||
if prevFamilyName == nextFamilyName:
|
if prevFamilyName == nextFamilyName:
|
||||||
|
|
@ -136,6 +149,8 @@ def main():
|
||||||
help='Output font file. Defaults to input file (overwrite)')
|
help='Output font file. Defaults to input file (overwrite)')
|
||||||
a('--family', metavar='<name>',
|
a('--family', metavar='<name>',
|
||||||
help='Rename family to <name>')
|
help='Rename family to <name>')
|
||||||
|
a('--style', metavar='<name>',
|
||||||
|
help='Rename style to <name>')
|
||||||
a('--google-style', action='store_true',
|
a('--google-style', action='store_true',
|
||||||
help='Rename style names to Google Fonts standards')
|
help='Rename style names to Google Fonts standards')
|
||||||
a('input', metavar='<file>',
|
a('input', metavar='<file>',
|
||||||
|
|
@ -152,6 +167,10 @@ def main():
|
||||||
editCount += 1
|
editCount += 1
|
||||||
setFamilyName(font, args.family)
|
setFamilyName(font, args.family)
|
||||||
|
|
||||||
|
if args.style:
|
||||||
|
editCount += 1
|
||||||
|
setStyleName(font, args.style)
|
||||||
|
|
||||||
if args.google_style:
|
if args.google_style:
|
||||||
editCount += 1
|
editCount += 1
|
||||||
renameStylesGoogleFonts(font)
|
renameStylesGoogleFonts(font)
|
||||||
|
|
|
||||||
Reference in a new issue