Exemplo n.º 1
0
 def testRoundTripVersion2(self):
     font = NewFont()
     infoObject = font.info
     for attr, value in fontInfoVersion2.items():
         if attr in infoObject._ufoToFLAttrMapping and infoObject._ufoToFLAttrMapping[
                 attr]["nakedAttribute"] is None:
             continue
         setattr(infoObject, attr, value)
         newValue = getattr(infoObject, attr)
         self.assertEqual((attr, newValue), (attr, value))
     font.close()
Exemplo n.º 2
0
 def testRoundTripVersion1(self):
     font = NewFont()
     infoObject = font.info
     for attr, value in fontInfoVersion1.items():
         if attr not in ufoLib.deprecatedFontInfoAttributesVersion2:
             setattr(infoObject, attr, value)
     for attr, expectedValue in fontInfoVersion1.items():
         if attr not in ufoLib.deprecatedFontInfoAttributesVersion2:
             value = getattr(infoObject, attr)
             self.assertEqual((attr, expectedValue), (attr, value))
     font.close()
Exemplo n.º 3
0
 def setUpFont(self,
               doInfo=False,
               doKerning=False,
               doGroups=False,
               doLib=False,
               doFeatures=False):
     self.font = NewFont()
     self.ufoPath = ufoPath1
     self.font.readUFO(ufoPath1,
                       doInfo=doInfo,
                       doKerning=doKerning,
                       doGroups=doGroups,
                       doLib=doLib,
                       doFeatures=doFeatures)
     self.font.update()
Exemplo n.º 4
0
 def testInfo(self):
     self.setUpFont(doInfo=True)
     otherResults = self.compareToUFO(doInfo=False)
     self.assertEqual(otherResults["kerning"], False)
     self.assertEqual(otherResults["groups"], False)
     self.assertEqual(otherResults["features"], False)
     self.assertEqual(otherResults["lib"], False)
     expectedPath = os.path.join(ufoPath2, "fontinfo.plist")
     writtenPath = os.path.join(self.dstDir, "fontinfo.plist")
     expected = readPlist(expectedPath)
     written = readPlist(writtenPath)
     dummyFont = NewFont()
     _ufoToFLAttrMapping = dict(dummyFont.info._ufoToFLAttrMapping)
     dummyFont.close()
     for attr, expectedValue in expected.items():
         # cheat by skipping attrs that aren't supported
         if _ufoToFLAttrMapping[attr]["nakedAttribute"] is None:
             continue
         self.assertEqual((attr, expectedValue), (attr, written[attr]))
     self.tearDownFont()
Exemplo n.º 5
0
 def testVersion1DeprecationRoundTrip(self):
     saveStderr = sys.stderr
     saveStdout = sys.stdout
     tempStderr = StringIO()
     sys.stderr = tempStderr
     sys.stdout = tempStderr
     font = NewFont()
     infoObject = font.info
     requiredWarnings = []
     try:
         for attr, value in fontInfoVersion1.items():
             if attr in ufoLib.deprecatedFontInfoAttributesVersion2:
                 setattr(infoObject, attr, value)
                 v = getattr(infoObject, attr)
                 self.assertEquals((attr, value), (attr, v))
                 s = "DeprecationWarning: The %s attribute has been deprecated." % attr
                 requiredWarnings.append((attr, s))
     finally:
         sys.stderr = saveStderr
         sys.stdout = saveStdout
     tempStderr = tempStderr.getvalue()
     for attr, line in requiredWarnings:
         self.assertEquals((attr, line in tempStderr), (attr, True))
     font.close()
Exemplo n.º 6
0
 def testVersion2UnsupportedGet(self):
     saveStderr = sys.stderr
     saveStdout = sys.stdout
     tempStderr = StringIO()
     sys.stderr = tempStderr
     sys.stdout = tempStderr
     font = NewFont()
     infoObject = font.info
     requiredWarnings = []
     try:
         for attr, value in fontInfoVersion2.items():
             if attr in infoObject._ufoToFLAttrMapping and infoObject._ufoToFLAttrMapping[
                     attr]["nakedAttribute"] is not None:
                 continue
             getattr(infoObject, attr, value)
             s = "The attribute %s is not supported by FontLab." % attr
             requiredWarnings.append((attr, s))
     finally:
         sys.stderr = saveStderr
         sys.stdout = saveStdout
     tempStderr = tempStderr.getvalue()
     for attr, line in requiredWarnings:
         self.assertEquals((attr, line in tempStderr), (attr, True))
     font.close()
Exemplo n.º 7
0
"""
Remove overlap on all glyphs in a .ufo font.

This script sis more than a little silly, but it
demonstrates how objectsRF and objectsFL can
work hand in hand.
"""

from robofab.objects.objectsRF import OpenFont
from robofab.objects.objectsFL import NewFont
from robofab.interface.all.dialogs import ProgressBar

ufoFont = OpenFont(note="Select a .ufo")
if ufoFont:
	bar = ProgressBar('Removing Overlap...', len(ufoFont))
	flFont = NewFont()
	flGlyph = flFont.newGlyph('OverlapRemover')
	for ufoGlyph in ufoFont:
		flPen = flGlyph.getPointPen()
		ufoGlyph.drawPoints(flPen)
		flGlyph.removeOverlap()
		ufoPen = ufoGlyph.getPointPen()
		ufoGlyph.clear()
		flGlyph.drawPoints(ufoPen)
		flGlyph.clear()
		bar.tick()
	flFont.close(save=0)
	bar.close()
	ufoFont.save(doProgress=True)
Exemplo n.º 8
0
 def compareToUFO(self,
                  doInfo=True,
                  doKerning=True,
                  doGroups=True,
                  doLib=True,
                  doFeatures=True):
     readerExpected = UFOReader(ufoPath2)
     readerWritten = UFOReader(self.dstDir)
     results = {}
     if doInfo:
         matches = True
         expectedPath = os.path.join(ufoPath2, "fontinfo.plist")
         writtenPath = os.path.join(self.dstDir, "fontinfo.plist")
         if not os.path.exists(writtenPath):
             matches = False
         else:
             dummyFont = NewFont()
             _ufoToFLAttrMapping = dict(dummyFont.info._ufoToFLAttrMapping)
             dummyFont.close()
             expected = readPlist(expectedPath)
             written = readPlist(writtenPath)
             for attr, expectedValue in expected.items():
                 # cheat by skipping attrs that aren't supported
                 if _ufoToFLAttrMapping[attr]["nakedAttribute"] is None:
                     continue
                 if expectedValue != written[attr]:
                     matches = False
                     break
         results["info"] = matches
     if doKerning:
         matches = True
         expectedPath = os.path.join(ufoPath2, "kerning.plist")
         writtenPath = os.path.join(self.dstDir, "kerning.plist")
         if not os.path.exists(writtenPath):
             matches = False
         else:
             matches = readPlist(expectedPath) == readPlist(writtenPath)
         results["kerning"] = matches
     if doGroups:
         matches = True
         expectedPath = os.path.join(ufoPath2, "groups.plist")
         writtenPath = os.path.join(self.dstDir, "groups.plist")
         if not os.path.exists(writtenPath):
             matches = False
         else:
             matches = readPlist(expectedPath) == readPlist(writtenPath)
         results["groups"] = matches
     if doFeatures:
         matches = True
         expectedPath = os.path.join(ufoPath2, "features.fea")
         writtenPath = os.path.join(self.dstDir, "features.fea")
         if not os.path.exists(writtenPath):
             matches = False
         else:
             f = open(expectedPath, "r")
             expectedText = f.read()
             f.close()
             f = open(writtenPath, "r")
             writtenText = f.read()
             f.close()
             # FontLab likes to add lines to the features, so skip blank lines.
             expectedText = [
                 line for line in expectedText.splitlines() if line
             ]
             writtenText = [
                 line for line in writtenText.splitlines() if line
             ]
             matches = "\n".join(expectedText) == "\n".join(writtenText)
         results["features"] = matches
     if doLib:
         matches = True
         expectedPath = os.path.join(ufoPath2, "lib.plist")
         writtenPath = os.path.join(self.dstDir, "lib.plist")
         if not os.path.exists(writtenPath):
             matches = False
         else:
             # the test file doesn't have the glyph order
             # so purge it from the written
             writtenLib = readPlist(writtenPath)
             del writtenLib["org.robofab.glyphOrder"]
             matches = readPlist(expectedPath) == writtenLib
         results["lib"] = matches
     return results