Download raw (3.7 KB)
#!/usr/bin/env python
#-*- coding: utf-8 -*-
# Copyright (C) 2014 OSP (Stéphanie Vilayphiou) and Christoph Haag.
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
import sys
import subprocess, shlex
import fontforge
font_file = sys.argv[1]
convert = sys.argv[2]
tmp_dir = "tmp"
# Gets list of wanted glyphs
f = open("glyphs.test.txt", "r")
glyphs = f.read().splitlines()
f.close()
# Gets fontname out of font file
font = fontforge.open(font_file)
fontname = font.familyname
print fontname
Yshift = 35
def makeSVG(fontname, Yshift, tmp_dir, glyph):
f = open("%s/%s.svg" % (tmp_dir, glyph), "w")
svg = """<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg width="4000" height="4500" id="svg" version="1.1"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
>
<g inkscape:label="letter" inkscape:groupmode="layer" id="X">
<flowRoot xml:space="preserve" id="flowRoot"
style="font-size:4000px;
font-style:normal;
font-variant:normal;
font-weight:normal;
font-stretch:normal;
text-align:center;
line-height:100%%;
letter-spacing:0px;
word-spacing:0px;
writing-mode:lr-tb;
text-anchor:middle;
fill:#000000;
fill-opacity:1;
stroke:none;
font-family: %s;
-inkscape-font-specification: %s"
>
<flowRegion id="flowRegion">
<rect id="rect" width="4000" height="4500" x="0" y="-%d" />
</flowRegion><flowPara id="flowPara">%s</flowPara></flowRoot>
</g>
</svg> """ % (fontname, fontname, Yshift, glyph)
f.write(svg)
f.close()
for glyph in glyphs:
basename = "%s/%s" % (tmp_dir, glyph)
makeSVG(fontname, Yshift, tmp_dir, glyph)
print "Export SVG into PNG"
format = "png"
inkscape = "inkscape --export-png=%s.png --export-background=#ffffff --export-width=4000 %s.svg" % (basename, basename)
p = subprocess.call(shlex.split(inkscape))
# This is only for Steph's machine which fails on autotracing png, but it makes the script super slow
if convert == "convert":
print "Convert PNG to GIF"
imagemagick = "convert %s.png %s.gif" % (basename, basename)
p = subprocess.call(shlex.split(imagemagick))
format = "gif"
print "Vectorize bitmap with stroke"
autotrace = "autotrace -centerline -color-count=2 -background-color=ffffff -output-file=%s.svg %s.%s" % (basename, basename, format)
p = subprocess.call(shlex.split(autotrace))
# Setting "stroke" to "none" forces stroke import in Fontforge
style = "style=\"stroke:none;fill:none;\""
# Apply stroke style
sed = "sed -i 's/style=\"[^\"]*\"/%s/g' %s.svg" % (style, basename)
p = subprocess.call(shlex.split(sed))
print "Launching svg2ufo"
svg2ufo = "python svg2ufo.py %s" % fontname
p = subprocess.call(shlex.split(svg2ufo))
print "Attempt to open closed paths"
ufoclean = "python openClosedPaths.py %s-stroke.ufo" % fontname
p = subprocess.call(shlex.split(ufoclean))