Download raw (1.7 KB)
#!/usr/bin/env python
#-*- coding: utf-8 -*-
import glob
import sys
import fontforge
from xml.dom.minidom import parse as parseXml
# svg2ufo v0.4
# Copyleft 2014 Christoph Haag and Stéphanie Vilayphiou
#
# BASED ON:
# svg2ttf v0.1
# Copyleft 2008-2009 Ricardo Lafuente
# generates a .ufo file from a set of .svg files autotraced in its centerlines
#
# it then imports the glyph inside the original font file BASE_FONT
#
# you might also want to edit the metadata (title, license, etc.) before
# saving it, or just edit the .ufo file afterwards
#
# finally, change the LETTERS_DIR value to the folder where your .svg
# files are; they ought to be named according to their unicode value
LETTERS_DIR = "./tmp"
FONT_NAME = "%s" % sys.argv[1]
BLANK_FONT = "./utils/blank_unicode.sfd"
#BASE_FONT = "./base_font/%s.sfd" % FONT_NAME
STROKE_FONT = "%s-stroke.ufo" % FONT_NAME
files = glob.glob("%s/*.svg" % LETTERS_DIR)
#original = fontforge.open(BASE_FONT)
font = fontforge.open(BLANK_FONT)
def importGlyph(f, letter, char):
# make new glyph
font.createMappedChar(letter)
font.createChar(char)
# Import outline file
font[char].importOutlines(f)
# Set bearings to 0
font[char].left_side_bearing = 0
font[char].right_side_bearing = 0
for f in files:
letter = f.split("/")[-1].replace(".svg", "")
char = fontforge.unicodeFromName(letter)
if char == -1:
char = letter.replace("&#", "").replace(";", "")
letter = fontforge.nameFromUnicode(int(char))
print "letter: %s" % letter
print "char: %s" % char
importGlyph(f, letter, int(char))
# create the output ufo file
font.generate(STROKE_FONT)