strokify
clone your own copy | download snapshot

Snapshots | iceberg

Inside this repository

openClosedPaths.py
text/x-python

Download raw (2.7 KB)

#!/usr/bin/env python
#-*- coding: utf-8 -*-

from xml.dom.minidom import parse as parseXml
import sys
import glob
import fontforge



# Gets list of wanted glyphs
f = open("glyphs.test.txt", "r")
letters = f.read().splitlines()
f.close()

#STROKE_FONT = "%s-stroke.ufo" % sys.argv[1].replace(" ", "-")
#STROKE_FONT = "%s-stroke.ufo" % sys.argv[1]
STROKE_FONT = "%s" % sys.argv[1]
GLYPH_DIR = "%s/glyphs/" % STROKE_FONT

for letter in letters:
    letter = letter.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


    # Gets the XML of the glyph
    try: 
        letter = letter.replace("&#", "").replace(";", "")
        letter = fontforge.nameFromUnicode(int(char))
        # In UFO, capital characters have an underscore in their name: "A" -> "A_.glif"
        if letter[0].isupper(): 
            if len(letter) == 1:
                letter = letter + "_"
            elif len(letter) == 2:
                letter = letter[0] + "_" + letter[1] + "_"
            else:
                letter = letter[0] + "_" + letter[1:]
            #letter = letter.lower()
        if letter[0:3] == "uni": 
            continue
            #letter = "uni" + letter[3:].upper() + "_"



        glyph = parseXml("%s%s.glif" % (GLYPH_DIR, letter))
        # Gets contours descriptions of the glyph
        contours = glyph.getElementsByTagName("contour")

        for contour in contours:
            print contour.childNodes[1]
            try:
                # Checks type of first node of the countour
                type= contour.childNodes[1].attributes["type"].value
                if type == "move":
                    # Should be ok already
                    pass
                elif type == "line":
                    # Changing type "line" to "move"
                    contour.childNodes[1].attributes["type"].value = "move"
                elif type == "curve":
                    # Putting curve point at the end of the contour
                    contour.appendChild(contour.childNodes[1])
                    # Changing first "line" to "move"
                    contour.childNodes[2].attributes["type"].value = "move"
            except KeyError:
                print "Did not work. KeyError"
                pass


        # Saves XML
        f = open("%s%s.glif" % (GLYPH_DIR, letter), "w")
        f.write(glyph.toxml())
        f.close()
    except IOError:
        # In case it still doesn't work, it passes. i.e: €
        print "%s did not work. IOError" % char
        pass