Esempio n. 1
0
def getDigests(font):
    digests = {}
    for glyphName in font.keys():
        pen = DigestPointPen()
        font[glyphName].drawPoints(pen)
        digests[glyphName] = pen.getDigest()
    return digests
Esempio n. 2
0
 def __init__(self, glyph, soft=False):
     p = DigestPointPen(ignoreSmoothAndName=True)
     glyph.drawPoints(p)
     self.digest = p.getDigest()
     self.glyph = MathGlyph(glyph)
     self.t = time.time()
     self.name = glyph.name
     self.soft = soft
Esempio n. 3
0
def getDigest(dGlyph):
    """copied from robofab ObjectsBase.py.
	"""
    mp = DigestPointPen()
    dGlyph.drawPoints(mp)
    digest = mp.getDigestPointsOnly(needSort=False)
    # we need to round to int.
    intDigest = digest  #[ (int(p[0]), int(p[1])) for p in digest]
    return intDigest
Esempio n. 4
0
def getDigest(dGlyph):
	"""copied from robofab ObjectsBase.py.
	"""
	mp = DigestPointPen()
	dGlyph.drawPoints(mp)
	digest = mp.getDigestPointsOnly(needSort=False)
	# we need to round to int.
	intDigest = digest #[ (int(p[0]), int(p[1])) for p in digest]
	return intDigest
Esempio n. 5
0
def Glyph2String(glyph):
	from robofab.pens.digestPen import DigestPointPen
	import pickle
	p = DigestPointPen(glyph)
	glyph.drawPoints(p)
	info = {}
	info['name'] = glyph.name
	info['width'] = glyph.width
	info['points'] = p.getDigest()
	return str(pickle.dumps(info))
Esempio n. 6
0
	def testSegmentPenInterface(self):
		for glyph in self.font:
			digestPen = DigestPointPen(ignoreSmoothAndName=True)
			pen = SegmentToPointPen(digestPen)
			glyph.draw(pen)
			digest1 = digestPen.getDigest()
			digestPen = DigestPointPen(ignoreSmoothAndName=True)
			glyph.drawPoints(digestPen)
			digest2 = digestPen.getDigest()
			self.assertEqual(digest1, digest2, "%r not the same for gl.draw() and gl.drawPoints()" % glyph.name)
Esempio n. 7
0
def Glyph2String(glyph):
    from robofab.pens.digestPen import DigestPointPen
    import pickle
    p = DigestPointPen(glyph)
    glyph.drawPoints(p)
    info = {}
    info['name'] = glyph.name
    info['width'] = glyph.width
    info['points'] = p.getDigest()
    return str(pickle.dumps(info))
Esempio n. 8
0
	def _doTest(self, shapeFunc, shapeName):
		pen = DigestPointPen(ignoreSmoothAndName=True)
		shapeFunc(pen)
		digest1 = pen.getDigest()

		digestPen = DigestPointPen(ignoreSmoothAndName=True)
		pen = PointToSegmentPen(SegmentToPointPen(digestPen))
		shapeFunc(pen)
		digest2 = digestPen.getDigest()
		self.assertEqual(digest1, digest2, "%r failed round tripping" % shapeName)
Esempio n. 9
0
	def testFabPenCompatibility(self):
		for glyph in self.font:
			digestPen = DigestPointPen(ignoreSmoothAndName=True)
			pen = FabToFontToolsPenAdapter(SegmentToPointPen(digestPen))
			glyph.draw(pen)
			digest1 = digestPen.getDigest()
			digestPen = DigestPointPen(ignoreSmoothAndName=True)
			glyph.drawPoints(digestPen)
			digest2 = digestPen.getDigest()
			self.assertEqual(digest1, digest2, "%r not the same for gl.draw() and gl.drawPoints()" % glyph.name)
Esempio n. 10
0
	def testReversContourFromGlyphSet(self):
		glyphSet = GlyphSet(getDemoFontGlyphSetPath())
		digestPen = DigestPointPen()
		glyphSet["testglyph1"].drawPoints(digestPen)
		digest1 = digestPen.getDigest()
		digestPen = DigestPointPen()
		pen = ReverseContourPointPen(digestPen)
		glyphSet["testglyph1.reversed"].drawPoints(pen)
		digest2 = digestPen.getDigest()
		self.assertEqual(digest1, digest2)
Esempio n. 11
0
	def testMoveGlyph(self):
		for glyph in self.font:
			pen = DigestPointPen()
			glyph.drawPoints(pen)
			digest1 = pen.getDigest()
			glyph.move((100, 200))
			glyph.move((-100, -200))
			pen = DigestPointPen()
			glyph.drawPoints(pen)
			digest2 = pen.getDigest()
			self.assertEqual(digest1, digest2, "%r not the same after moving twice" % glyph.name)
Esempio n. 12
0
	def testScaleGlyph(self):
		for glyph in self.font:
			pen = DigestPointPen()
			glyph.drawPoints(pen)
			digest1 = pen.getDigest()
			glyph.scale((2, 2))
			glyph.scale((.5, .5))
			pen = DigestPointPen()
			glyph.drawPoints(pen)
			digest2 = pen.getDigest()
			self.assertEqual(digest1, digest2, "%r not the same after scaling twice" % glyph.name)
Esempio n. 13
0
	def testGuessSmoothPen(self):
		glyphSet = GlyphSet(getDemoFontGlyphSetPath())
		for name in glyphSet.keys():
			digestPen = DigestPointPen()
			glyphSet[name].drawPoints(digestPen)
			digest1 = digestPen.getDigest()
			digestPen = DigestPointPen()
			pen = GuessSmoothPointPen(digestPen)
			glyphSet[name].drawPoints(pen)
			digest2 = digestPen.getDigest()
			self.assertEqual(digest1, digest2)
Esempio n. 14
0
	def testAppendSegment(self):
		for glyph in self.font:
			pen = DigestPointPen()
			glyph.drawPoints(pen)
			digest1 = pen.getDigest()
			for contour in glyph:
				contour.insertSegment(2, "curve", [(100, 100), (200, 200), (300, 300)])
				contour.removeSegment(2)
			pen = DigestPointPen()
			glyph.drawPoints(pen)
			digest2 = pen.getDigest()
			self.assertEqual(digest1, digest2, "%r not the same after inserting and removing segment" % glyph.name)
Esempio n. 15
0
	def testStartSegment(self):
		for glyph in self.font:
			pen = DigestPointPen()
			glyph.drawPoints(pen)
			digest1 = pen.getDigest()
			for contour in glyph:
				contour.setStartSegment(2)
				contour.setStartSegment(-2)
			pen = DigestPointPen()
			glyph.drawPoints(pen)
			digest2 = pen.getDigest()
			self.assertEqual(digest1, digest2, "%r not the same after seting start segment twice" % glyph.name)
Esempio n. 16
0
	def testReverseContour(self):
		for glyph in self.font:
			pen = DigestPointPen()
			glyph.drawPoints(pen)
			digest1 = pen.getDigest()
			for contour in glyph:
				contour.reverseContour()
				contour.reverseContour()
			pen = DigestPointPen()
			glyph.drawPoints(pen)
			digest2 = pen.getDigest()
			self.assertEqual(digest1, digest2, "%r not the same after reversing twice" % glyph.name)
def testDigestGlyph(glyph):
    from robofab.pens.digestPen import DigestPointPen
    pen = DigestPointPen()
    glyph.draw(pen)
    return (
            glyph.name,
            glyph.width,
            glyph.unicode,
            glyph.mark,
            glyph.note,
            pen.getDigest()
        )
Esempio n. 18
0
	def testCopyGlyph(self):
		for glyph in self.font:
			pen = DigestPointPen()
			glyph.drawPoints(pen)
			digest1 = pen.getDigest()
			copy = glyph.copy()
			pen = DigestPointPen()
			copy.drawPoints(pen)
			digest2 = pen.getDigest()
			self.assertEqual(digest1, digest2, "%r not the same after copying" % glyph.name)
			self.assertEqual(glyph.lib, copy.lib, "%r's lib not the same after copying" % glyph.name)
			self.assertEqual(glyph.width, copy.width, "%r's width not the same after copying" % glyph.name)
			self.assertEqual(glyph.unicodes, copy.unicodes, "%r's unicodes not the same after copying" % glyph.name)
Esempio n. 19
0
	def testReverseContourOpenPath(self):
		digestPen = DigestPointPen()
		TestShapes.openPath(digestPen)
		d1 = digestPen.getDigest()
		digestPen = DigestPointPen()
		pen = ReverseContourPointPen(digestPen)
		pen.beginPath()
		pen.addPoint((600, 100), "move")
		pen.addPoint((600, 600), "line")
		pen.addPoint((100, 600), "line")
		pen.addPoint((100, 100), "line")
		pen.endPath()
		d2 = digestPen.getDigest()
		self.assertEqual(d1, d2)
Esempio n. 20
0
 def testDuplicateContours(self, glyph):
     """
     Contours shouldn't be duplicated on each other.
     """
     contours = {}
     for index, contour in enumerate(glyph):
         contour = contour.copy()
         contour.autoStartSegment()
         pen = DigestPointPen()
         contour.drawPoints(pen)
         digest = pen.getDigest()
         if digest not in contours:
             contours[digest] = []
         contours[digest].append(index)
     duplicateContours = []
     for digest, indexes in contours.items():
         if len(indexes) > 1:
             duplicateContours.append(indexes[0])
             glyph.mark = (1, 0, 0, 0.6)
Esempio n. 21
0
def testDuplicateContours(glyph):
    """
    Contours shouldn't be duplicated on each other.
    """
    contours = {}
    for index, contour in enumerate(glyph):
        contour = contour.copy()
        contour.autoStartSegment()
        pen = DigestPointPen()
        contour.drawPoints(pen)
        digest = pen.getDigest()
        if digest not in contours:
            contours[digest] = []
        contours[digest].append(index)
    duplicateContours = []
    for digest, indexes in contours.items():
        if len(indexes) > 1:
            duplicateContours.append(indexes[0])
    return duplicateContours
Esempio n. 22
0
    def test_duplicate_contours(self):
        """ One or more contours are duplicated. """
        font = robofab.world.OpenFont(self.operator.path)

        for glyph in font:
            contours = {}
            for index, contour in enumerate(glyph):
                contour = contour.copy()
                contour.autoStartSegment()
                pen = DigestPointPen()
                contour.drawPoints(pen)
                digest = pen.getDigest()
                if digest not in contours:
                    contours[digest] = []
                contours[digest].append(index)
            duplicateContours = []
            for digest, indexes in contours.items():
                if len(indexes) > 1:
                    duplicateContours.append(indexes[0])
            if duplicateContours:
                self.fail('{0} has duplicated contours {1}'.format(glyph.name, duplicateContours))
Esempio n. 23
0
	def _doTest(self, shapeFunc, shapeName):
		pen = DigestPointPen(ignoreSmoothAndName=True)
		shapeFunc(pen)
		digest1 = pen.getDigest()

		digestPen = DigestPointPen(ignoreSmoothAndName=True)
		pen = PointToSegmentPen(SegmentToPointPen(digestPen))
		shapeFunc(pen)
		digest2 = digestPen.getDigest()
		self.assertEqual(digest1, digest2, "%r failed round tripping" % shapeName)
Esempio n. 24
0
 def testReversContourFromGlyphSet(self):
     glyphSet = GlyphSet(getDemoFontGlyphSetPath())
     digestPen = DigestPointPen()
     glyphSet["testglyph1"].drawPoints(digestPen)
     digest1 = digestPen.getDigest()
     digestPen = DigestPointPen()
     pen = ReverseContourPointPen(digestPen)
     glyphSet["testglyph1.reversed"].drawPoints(pen)
     digest2 = digestPen.getDigest()
     self.assertEqual(digest1, digest2)
Esempio n. 25
0
 def testGuessSmoothPen(self):
     glyphSet = GlyphSet(getDemoFontGlyphSetPath())
     for name in glyphSet.keys():
         digestPen = DigestPointPen()
         glyphSet[name].drawPoints(digestPen)
         digest1 = digestPen.getDigest()
         digestPen = DigestPointPen()
         pen = GuessSmoothPointPen(digestPen)
         glyphSet[name].drawPoints(pen)
         digest2 = digestPen.getDigest()
         self.assertEqual(digest1, digest2)
Esempio n. 26
0
 def testMoveGlyph(self):
     for glyph in self.font:
         pen = DigestPointPen()
         glyph.drawPoints(pen)
         digest1 = pen.getDigest()
         glyph.move((100, 200))
         glyph.move((-100, -200))
         pen = DigestPointPen()
         glyph.drawPoints(pen)
         digest2 = pen.getDigest()
         self.assertEqual(digest1, digest2,
                          "%r not the same after moving twice" % glyph.name)
Esempio n. 27
0
 def testSegmentPenInterface(self):
     for glyph in self.font:
         digestPen = DigestPointPen(ignoreSmoothAndName=True)
         pen = SegmentToPointPen(digestPen)
         glyph.draw(pen)
         digest1 = digestPen.getDigest()
         digestPen = DigestPointPen(ignoreSmoothAndName=True)
         glyph.drawPoints(digestPen)
         digest2 = digestPen.getDigest()
         self.assertEqual(
             digest1, digest2,
             "%r not the same for gl.draw() and gl.drawPoints()" %
             glyph.name)
Esempio n. 28
0
 def testFabPenCompatibility(self):
     for glyph in self.font:
         digestPen = DigestPointPen(ignoreSmoothAndName=True)
         pen = FabToFontToolsPenAdapter(SegmentToPointPen(digestPen))
         glyph.draw(pen)
         digest1 = digestPen.getDigest()
         digestPen = DigestPointPen(ignoreSmoothAndName=True)
         glyph.drawPoints(digestPen)
         digest2 = digestPen.getDigest()
         self.assertEqual(
             digest1, digest2,
             "%r not the same for gl.draw() and gl.drawPoints()" %
             glyph.name)
Esempio n. 29
0
 def testScaleGlyph(self):
     for glyph in self.font:
         pen = DigestPointPen()
         glyph.drawPoints(pen)
         digest1 = pen.getDigest()
         glyph.scale((2, 2))
         glyph.scale((.5, .5))
         pen = DigestPointPen()
         glyph.drawPoints(pen)
         digest2 = pen.getDigest()
         self.assertEqual(
             digest1, digest2,
             "%r not the same after scaling twice" % glyph.name)
Esempio n. 30
0
 def testReverseContour(self):
     for glyph in self.font:
         pen = DigestPointPen()
         glyph.drawPoints(pen)
         digest1 = pen.getDigest()
         for contour in glyph:
             contour.reverseContour()
             contour.reverseContour()
         pen = DigestPointPen()
         glyph.drawPoints(pen)
         digest2 = pen.getDigest()
         self.assertEqual(
             digest1, digest2,
             "%r not the same after reversing twice" % glyph.name)
Esempio n. 31
0
 def testReverseContourOpenPath(self):
     digestPen = DigestPointPen()
     TestShapes.openPath(digestPen)
     d1 = digestPen.getDigest()
     digestPen = DigestPointPen()
     pen = ReverseContourPointPen(digestPen)
     pen.beginPath()
     pen.addPoint((600, 100), "move")
     pen.addPoint((600, 600), "line")
     pen.addPoint((100, 600), "line")
     pen.addPoint((100, 100), "line")
     pen.endPath()
     d2 = digestPen.getDigest()
     self.assertEqual(d1, d2)
Esempio n. 32
0
 def testStartSegment(self):
     for glyph in self.font:
         pen = DigestPointPen()
         glyph.drawPoints(pen)
         digest1 = pen.getDigest()
         for contour in glyph:
             contour.setStartSegment(2)
             contour.setStartSegment(-2)
         pen = DigestPointPen()
         glyph.drawPoints(pen)
         digest2 = pen.getDigest()
         self.assertEqual(
             digest1, digest2,
             "%r not the same after seting start segment twice" %
             glyph.name)
Esempio n. 33
0
 def testAppendSegment(self):
     for glyph in self.font:
         pen = DigestPointPen()
         glyph.drawPoints(pen)
         digest1 = pen.getDigest()
         for contour in glyph:
             contour.insertSegment(2, "curve", [(100, 100), (200, 200),
                                                (300, 300)])
             contour.removeSegment(2)
         pen = DigestPointPen()
         glyph.drawPoints(pen)
         digest2 = pen.getDigest()
         self.assertEqual(
             digest1, digest2,
             "%r not the same after inserting and removing segment" %
             glyph.name)
Esempio n. 34
0
 def testCopyGlyph(self):
     for glyph in self.font:
         pen = DigestPointPen()
         glyph.drawPoints(pen)
         digest1 = pen.getDigest()
         copy = glyph.copy()
         pen = DigestPointPen()
         copy.drawPoints(pen)
         digest2 = pen.getDigest()
         self.assertEqual(digest1, digest2,
                          "%r not the same after copying" % glyph.name)
         self.assertEqual(
             glyph.lib, copy.lib,
             "%r's lib not the same after copying" % glyph.name)
         self.assertEqual(
             glyph.width, copy.width,
             "%r's width not the same after copying" % glyph.name)
         self.assertEqual(
             glyph.unicodes, copy.unicodes,
             "%r's unicodes not the same after copying" % glyph.name)
Esempio n. 35
0
def makeGlyph(glyphList, font, message, mark, saveBackup):
	# Initialize the progress bar
	tickCount = len(glyphList)
	bar = ProgressBar(message, tickCount)
	tick = 0
	
	testingFont = _RFont()
	
	for item in glyphList:
		glyphName, advanceWidth, components = item
		
		# If the font has the glyph, lots of checking is required to see if changes have been made
		if font.has_key(glyphName):
			glyph = font[glyphName]
			
			#Build new glyph for comparisons
			testingFont.newGlyph(glyphName, clear=True)
			newGlyph = testingFont[glyphName]
			newGlyphCount = 0
			while newGlyphCount < len(components):
				component, x, y = components[newGlyphCount]
				newGlyph.appendComponent(component, offset=(x,y))
				newGlyphCount = newGlyphCount+1			
			newGlyph.width = advanceWidth
			newGlyph.round()
			
			# Make digest of the new glyph
			pointPen = DigestPointPen()
			newGlyph.drawPoints(pointPen)
			newDigest = pointPen.getDigest()
			
			# Make digest of the old glyph
			pointPen = DigestPointPen()
			glyph.drawPoints(pointPen)
			oldDigest = pointPen.getDigest()
			
			# Check the advance width
			if glyph.width != advanceWidth:
				glyph.width = advanceWidth
				if mark == 1:
					glyph.mark = 200
			
			# If the digests don't match, rebuild components
			if oldDigest != newDigest:
				if saveBackup == 1:
					backupName = glyph.name + '.bkup'
					font.insertGlyph(glyph, as=backupName)
					font[backupName].update()
				glyph.clearComponents()
				count = 0
				while count < len(components):
					component, x, y = components[count]
					glyph.appendComponent(component, offset=(x,y))
					count = count+1
				if mark == 1:
					glyph.mark = 200
			
			# Clean up things
			glyph.update()
			bar.tick(tick)
			tick = tick+1
		
		# If the glyph is not in the font, build a new glyph
		else:
			font.newGlyph(glyphName, clear=True)
			glyph = font[glyphName]
			glyph.width = advanceWidth
			count = 0
			while count < len(components):
				component, x, y = components[count]
				glyph.appendComponent(component, offset=(x,y))
				count = count+1
			if mark == 1:
				glyph.mark = 300
			glyph.update()
			bar.tick(tick)
			tick = tick+1
	
	font.update()
	testingFont.close()
	bar.close()
    f1_glyphset = set(f1.keys())
    f2_glyphset = set(f2.keys())

    commonGlyphs = list(f1_glyphset.intersection(f2_glyphset))
    notSameGlyphsList = []
    sameGlyphsList = []
    blankGlyphsList = []
    blankGlyphsString = ""
    notSameGlyphsString = ""
    sameGlyphsString = ""

    for g in commonGlyphs:
        g1 = f1[g]
        g2 = f2[g]

        p1 = DigestPointPen()
        g1.drawPoints(p1)
        d1 = p1.getDigest()

        p2 = DigestPointPen()
        g2.drawPoints(p2)
        d2 = p2.getDigest()

        if d1 != d2:
            notSameGlyphsList += [str(g)]
            if d1 == () or d2 == ():
                blankGlyphsList += [str(g)]
        else:
            sameGlyphsList += [str(g)]

    # Sort the lists
Esempio n. 37
0
base = os.path.split(os.path.split(__file__)[0])[0]
masterPath = os.path.join(base, 'sources/2-build')

paths = []

for filename in os.listdir(masterPath):
    if filename.endswith('.ufo'):
        paths.append(os.path.join(masterPath, filename))

srcPath = os.path.join(masterPath, 'Decovar-Regular24.ufo')
src = OpenFont(srcPath, showUI=False)

for path in paths:
    f = OpenFont(path, showUI=False)
    for g in f:
        if src.has_key(g.name):

            destPen = DigestPointPen()
            g.drawPoints(destPen)
            destDigest = destPen.getDigest()

            srcPen = DigestPointPen()
            src[g.name].drawPoints(srcPen)
            srcDigest = srcPen.getDigest()

            if destDigest == srcDigest:
                g.mark = (0, .5, 1, .5)
    f.save()
    f.close()
print 'done'
Esempio n. 38
0
def testDigestGlyph(glyph):
    from robofab.pens.digestPen import DigestPointPen
    pen = DigestPointPen()
    glyph.draw(pen)
    return (glyph.name, glyph.width, glyph.unicode, glyph.mark, glyph.note,
            pen.getDigest())
Esempio n. 39
0
def getDigest(dGlyph):
	"""copied from robofab ObjectsBase.py.
	"""
	mp = DigestPointPen()
	dGlyph.drawPoints(mp)
	return mp.getDigestPointsOnly(needSort=True)
Esempio n. 40
0
    f1_glyphset = set(f1.keys())
    f2_glyphset = set(f2.keys())

    commonGlyphs = list(f1_glyphset.intersection(f2_glyphset))
    notSameGlyphsList = []
    sameGlyphsList = []
    blankGlyphsList = []
    blankGlyphsString = ""
    notSameGlyphsString = ""
    sameGlyphsString = ""

    for g in commonGlyphs:
        g1 = f1[g]
        g2 = f2[g]

        p1 = DigestPointPen()
        g1.drawPoints(p1)
        d1 = p1.getDigest()

        p2 = DigestPointPen()
        g2.drawPoints(p2)
        d2 = p2.getDigest()

        if d1 != d2:
            notSameGlyphsList += [g]
            if d1 == () or d2 == ():
                blankGlyphsList += [g]
        else:
            sameGlyphsList += [g]

    blankGlyphsString = '/{0}'.format('/'.join(blankGlyphsList))
Esempio n. 41
0
# robofab manual
# Usepens howto
# attribute examples

from robofab.world import OpenFont
from robofab.pens.digestPen import DigestPointPen

f = OpenFont()

myPen = DigestPointPen()
f['period'].drawPoints(myPen)

print myPen.getDigest()
Esempio n. 42
0
# robofab manual
# 	Usepens howto
#	attribute examples


from robofab.world import OpenFont
from robofab.pens.digestPen import DigestPointPen

f = OpenFont()
myPen = DigestPointPen()

f['period'].drawPoints(myPen)
print myPen.getDigest()

Esempio n. 43
0
from robofab.world import SelectFont, NewFont
from robofab.pens.digestPen import DigestPointPen
from sets import Set
 
font1 = SelectFont("Select base font")
font2 = SelectFont("Select alternate font")
 
font1Names = Set(font1.keys())
font2Names = Set(font2.keys())
 
commonNames = font1Names & font2Names
uncommonNames = font2Names - font1Names
 
for glyphName in commonNames:
    glyph1 = font1[glyphName]
    pointPen = DigestPointPen()
    glyph1.drawPoints(pointPen)
    digest1 = pointPen.getDigest()
    
    glyph2 = font2[glyphName]
    pointPen = DigestPointPen()
    glyph2.drawPoints(pointPen)
    digest2 = pointPen.getDigest()
    
    if digest1 != digest2:
        print '> alt >', glyphName
        glyph3 = font1.insertGlyph(glyph2, name=glyphName+'.alt')
        glyph3.mark = 1
        glyph3.update()
 
for glyphName in uncommonNames:
Esempio n. 44
0
from robofab.world import SelectFont, NewFont
from robofab.pens.digestPen import DigestPointPen
from sets import Set

font1 = SelectFont("Select base font")
font2 = SelectFont("Select alternate font")

font1Names = Set(font1.keys())
font2Names = Set(font2.keys())

commonNames = font1Names & font2Names
uncommonNames = font2Names - font1Names

for glyphName in commonNames:
    glyph1 = font1[glyphName]
    pointPen = DigestPointPen()
    glyph1.drawPoints(pointPen)
    digest1 = pointPen.getDigest()

    glyph2 = font2[glyphName]
    pointPen = DigestPointPen()
    glyph2.drawPoints(pointPen)
    digest2 = pointPen.getDigest()

    if digest1 != digest2:
        print '> alt >', glyphName
        # note: as of robofab svn version 200, the "as" argument in insertGlyph has changed to "name"
        glyph3 = font1.insertGlyph(glyph2, name=glyphName + '.alt')
        glyph3.mark = 1
        glyph3.update()