diff options
Diffstat (limited to 'scripts/lib/fontbuild/Build.py')
-rw-r--r-- | scripts/lib/fontbuild/Build.py | 150 |
1 files changed, 69 insertions, 81 deletions
diff --git a/scripts/lib/fontbuild/Build.py b/scripts/lib/fontbuild/Build.py index 6afc08f..ed5eed5 100644 --- a/scripts/lib/fontbuild/Build.py +++ b/scripts/lib/fontbuild/Build.py @@ -1,6 +1,5 @@ -from FL import * from fontbuild.mix import Mix,Master,narrowFLGlyph -from fontbuild.instanceNames import setNames +from fontbuild.instanceNames import setNamesRF from fontbuild.italics import italicizeGlyph from fontbuild.convertCurves import glyphCurvesToQuadratic from fontbuild.mitreGlyph import mitreGlyph @@ -10,6 +9,9 @@ from fontbuild.kerning import generateFLKernClassesFromOTString from fontbuild.features import CreateFeaFile from fontbuild.markFeature import GenerateFeature_mark from fontbuild.mkmkFeature import GenerateFeature_mkmk +from fontbuild.decomposeGlyph import decomposeGlyph +from fontbuild.removeGlyphOverlap import removeGlyphOverlap +from fontbuild.sortGlyphs import sortGlyphsByUnicode import ConfigParser import os @@ -67,13 +69,10 @@ class FontProject: if isinstance( mix, Mix): f = mix.generateFont(self.basefont) else: - f = Font(mix) - fl.Add(f) - index = fl.ifont - fl.CallCommand(33239) # Sort glyphs by unicode + f = mix + sortGlyphsByUnicode(f) if italic == True: log(">> Italicizing") - fl.UpdateFont(fl.ifont) tweakAmmount = .085 narrowAmmount = .93 if names.find("Thin") != -1: @@ -81,7 +80,7 @@ class FontProject: if names.find("Condensed") != -1: narrowAmmount = .96 i = 0 - for g in f.glyphs: + for g in f: i += 1 if i % 10 == 0: print g.name @@ -101,61 +100,58 @@ class FontProject: # narrowFLGlyph(g,self.thinfont.getGlyph(g.name),factor=narrowAmmount) if g.name != "eight" or g.name != "Q": - g.RemoveOverlap() - + removeGlyphOverlap(g) + # not sure why FontLab sometimes refuses, seems to work if called twice - - if (g.name in self.lessItalic): - italicizeGlyph(g, 9, stemWidth=stemWidth) + + if g.name in self.lessItalic: + italicizeGlyph(f, g, 9, stemWidth=stemWidth) elif g.name != ".notdef": - italicizeGlyph(g, 10, stemWidth=stemWidth) - g.RemoveOverlap() + italicizeGlyph(f, g, 10, stemWidth=stemWidth) + removeGlyphOverlap(g) g.width += 10 - fl.UpdateGlyph(i-1) - + if swapSuffixes != None: for swap in swapSuffixes: - swapList = [g.name for g in f.glyphs if g.name.endswith(swap)] + swapList = [g.name for g in f if g.name.endswith(swap)] for gname in swapList: print gname swapGlyphs(f, gname.replace(swap,""), gname) for gname in self.predecompose: - g = f[f.FindGlyph(gname)] - if g != None: - g.Decompose() + if f.has_key(gname): + decomposeGlyph(f[gname]) log(">> Generating glyphs") generateGlyphs(f, self.diacriticList) log(">> Copying features") f.ot_classes = self.ot_classes - copyFeatures(self.basefont,f) - fl.UpdateFont(index) + copyFeatures(self.basefont, f) log(">> Decomposing") for gname in self.decompose: - g = f[f.FindGlyph(gname)] - if g != None: - g.Decompose() - g.Decompose() + if f.has_key(gname): + decomposeGlyph(f[gname]) + decomposeGlyph(f[gname]) - setNames(f, n, foundry=self.config.get('main','foundry'), - version=self.config.get('main','version'), - build=self.buildnumber) + setNamesRF(f, n, foundry=self.config.get('main', 'foundry'), + version=self.config.get('main', 'version')) cleanCurves(f) - deleteGlyphs(f,self.deleteList) - - if kern: - log(">> Generating kern classes") - generateFLKernClassesFromOTString(f,self.ot_kerningclasses) - kern = f.MakeKernFeature() - kern_exist = False - for fea_id in range (len(f.features)): - if "kern" == f.features[fea_id].tag: - f.features[fea_id] = kern - kern_exist = True - if (False == kern_exist): - f.features.append(kern) - - directoryName = n[0].replace(" ","") + deleteGlyphs(f, self.deleteList) + +# if kern: +# log(">> Generating kern classes") +# generateFLKernClassesFromOTString(f, self.ot_kerningclasses) +# kern = f.MakeKernFeature() +# kern_exist = False +# for fea_id in range (len(f.features)): +# if "kern" == f.features[fea_id].tag: +# f.features[fea_id] = kern +# kern_exist = True +# if False == kern_exist: +# f.features.append(kern) + + directoryName = n[0].replace(" ", "") + fontName = "%s-%s" % (f.info.familyName.replace(" ", ""), + f.info.styleName.replace(" ", "")) if self.buldVFBandFEA: log(">> Generating VFB files") @@ -169,18 +165,16 @@ class FontProject: directoryPath = "%s/%s/%sTTF"%(self.basedir,self.builddir,directoryName) if not os.path.exists(directoryPath): os.makedirs(directoryPath) - ttfName = "%s/%s.ttf"%(directoryPath,f.font_name) - fl.GenerateFont(fl.ifont,ftTRUETYPE,ttfName) - + ufoName = "%s/%s.ufo" % (directoryPath, fontName) + f.save(ufoName) + if self.buldVFBandFEA: log(">> Generating FEA files") GenerateFeature_mark(f) GenerateFeature_mkmk(f) feaName = "%s/%s.fea"%(directoryPath,f.font_name) CreateFeaFile(f, feaName) - - f.modified = 0 - #fl.Close(index) + def transformGlyphMembers(g, m): g.width = int(g.width * m.a) @@ -204,21 +198,22 @@ def transformGlyphMembers(g, m): def swapGlyphs(f,gName1,gName2): try: - g1 = f.glyphs[f.FindGlyph(gName1)] - g2 = f.glyphs[f.FindGlyph(gName2)] - except IndexError: - log("swapGlyphs failed for %s %s"%(gName1, gName2)) + g1 = f[gName1] + g2 = f[gName2] + except KeyError: + log("swapGlyphs failed for %s %s" % (gName1, gName2)) return - g3 = Glyph(g1) - - g1.Clear() - g1.Insert(g2) - g1.SetMetrics(g2.GetMetrics()) - - g2.Clear() - g2.Insert(g3) - g2.SetMetrics(g3.GetMetrics()) - + g3 = g1.copy() + + g1.clear() + g1.appendGlyph(g2) + g1.width = g2.width + + g2.clear() + g2.appendGlyph(g3) + g2.width = g3.width + + def log(msg): print msg @@ -226,12 +221,8 @@ def log(msg): # f.ot_classes = ot_classes def copyFeatures(f1, f2): - for ft in f1.features: - t = Feature(ft.tag, ft.value) - f2.features.append(t) - #f2.ot_classes = f1.ot_classes - f2.classes = [] - f2.classes = f1.classes + f2.features.text = f2.features.text + def generateGlyphs(f, glyphNames): log(">> Generating diacritics") @@ -242,9 +233,8 @@ def generateGlyphs(f, glyphNames): def cleanCurves(f): log(">> Removing overlaps") - for g in f.glyphs: - g.UnselectAll() - g.RemoveOverlap() + for g in f: + removeGlyphOverlap(g) log(">> Mitring sharp corners") # for g in f.glyphs: @@ -253,11 +243,9 @@ def cleanCurves(f): log(">> Converting curves to quadratic") # for g in f.glyphs: # glyphCurvesToQuadratic(g) - -def deleteGlyphs(f,deleteList): - fl.Unselect() + + +def deleteGlyphs(f, deleteList): for name in deleteList: - glyphIndex = f.FindGlyph(name) - if glyphIndex != -1: - del f.glyphs[glyphIndex] - fl.UpdateFont() + if f.has_key(name): + f.removeGlyph(name) |