Download raw (1.8 KB)
#!/usr/bin/env python
#-*- coding: utf-8 -*-
import fontforge
import glob
import sys
LETTERS_DIR = "./tmp"
FONT_NAME = "%s" % sys.argv[1].replace(" ", "-")
BASE_FONT = "./base_font/%s.sfd" % FONT_NAME
FONT = "%s-stroke.ufo" % FONT_NAME
BASE_NAME = sys.argv[2]
WEIGHT = int(sys.argv[3])
def expand(char, WEIGHT=200):
font[char].stroke("circular", WEIGHT, "round", "round", "cleanup")
font[char].removeOverlap()
# Gets original font bearings
left = original[char].left_side_bearing
right = original[char].right_side_bearing
# Sets current bearings to 0
font[char].left_side_bearing = 0
font[char].right_side_bearing = 0
# Gets drawing width
width = font[char].width
# Resize the width with original bearings
font[char].width = left + width + right
font[char].left_side_bearing = left
font[char].right_side_bearing = right
font = fontforge.open(FONT)
original = fontforge.open(BASE_FONT)
#letters = "kK"
letters = glob.glob("%s/*.svg" % LETTERS_DIR)
for letter in letters:
letter = letter.split("/")[-1].replace(".svg", "")
print letter
try:
# Convert HTML entity to unicode name
char = letter.replace("&#", "").replace(";", "")
char = fontforge.nameFromUnicode(int(char))
print char
expand(char, WEIGHT)
except TypeError:
# In case it still doesn't work, it passes. i.e: €
print "%s was not expanded." % char
pass
# Gets space character from original font
font.createMappedChar("space")
font["space"].width = original["space"].width
font.familyname = "%s" % (BASE_NAME)
font.fontname = "%s-%s" % (BASE_NAME, WEIGHT)
font.fullname = "%s %s" % (BASE_NAME, WEIGHT)
font.weight = "%d" % WEIGHT
font.os2_width = int(sys.argv[4])
font.generate("%s-%s.otf" % (BASE_NAME, WEIGHT))