# Copyright 2015 Google Inc. All Rights Reserved. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. import sys sys.path.insert(0, "%s/scripts/lib" % BASEDIR) from robofab.objects.objectsRF import RPoint from fontTools.misc.transform import Transform from fontbuild.Build import FontProject from fontbuild.mix import Mix, Master from fontbuild.italics import condenseGlyph, transformFLGlyphMembers # Masters rg = Master("%s/src/v2/Roboto_Regular.ufo" % BASEDIR) bd = Master("%s/src/v2/Roboto_Bold.ufo" % BASEDIR) th = Master("%s/src/v2/Roboto_Thin.ufo" % BASEDIR) # build condensed masters lessCondensed = ( "plusminus bracketleft bracketright dieresis macron " "percent multiply degree at i j " "zero one two three four five six seven eight nine " "braceright braceleft").split() uncondensed = ( "tonos breve acute grave quotesingle quotedbl asterisk " "period currency registered copyright bullet ring degree " "dieresis comma bar brokenbar dotaccent dotbelow " "colon semicolon uniFFFC uniFFFD uni0488 uni0489 ringbelow " "estimated").split() moreCondensed = "z Z M W A V".split() def condenseFont(font, scale=.8, stemWidth=185): f = font.copy() xscale = scale CAPS = ("A B C.cn D.cn E F G.cn H I J K L M N O.cn P Q.cn R S T U.cn V W X " "Y Z one two three four five six seven eight nine zero").split() LC = ("a.cn b.cn c.cn d.cn e.cn f g.cn h i j k l m n o.cn p.cn q.cn r s t " "u v w x y z").split() # for g in [f[name] for name in LC]: for g in f: if len(g) > 0: # print g.name if g.name in lessCondensed: scale = xscale * 1.1 if g.name in uncondensed: continue if g.name in moreCondensed: scale = xscale * .90 # g2 = condenseGlyph(g, xscale) # g.clear() # g2.drawPoints(g.getPointPen()) m = Transform(xscale, 0, 0, 1, 20, 0) g.transform(m) transformFLGlyphMembers(g, m, transformAnchors=False) if g.width != 0: g.width += 40 return f proj = FontProject(rg.font, BASEDIR, "res/roboto.cfg", th.ffont) #proj.incrementBuildNumber() # FAMILYNAME = "Roboto 2 DRAFT" # FAMILYNAME = "Roboto2" FAMILYNAME = "Roboto" proj.buildOTF = True #proj.autohintOTF = True proj.buildTTF = True proj.generateFont(th.font, "%s/Thin/Regular/Th"%FAMILYNAME) proj.generateFont(Mix([th, rg], 0.45), "%s/Light/Regular/Lt"%FAMILYNAME) proj.generateFont(Mix([th, rg], RPoint(0.90, 0.92)), "%s/Regular/Regular/Rg"%FAMILYNAME) proj.generateFont(Mix([rg, bd], 0.35), "%s/Medium/Regular/Lt"%FAMILYNAME) proj.generateFont(Mix([rg, bd], RPoint(0.73, 0.73)), "%s/Bold/Bold/Rg"%FAMILYNAME) proj.generateFont(Mix([rg, bd], RPoint(1.125, 1.0)), "%s/Black/Bold/Bk"%FAMILYNAME) proj.generateFont(th.font, "%s/Thin Italic/Italic/Th"%FAMILYNAME, italic=True, stemWidth=80) proj.generateFont(Mix([th, rg], 0.45), "%s/Light Italic/Italic/Lt"%FAMILYNAME, italic=True, stemWidth=120) proj.generateFont(Mix([th, rg], RPoint(0.90, 0.92)), "%s/Italic/Italic/Rg"%FAMILYNAME, italic=True, stemWidth=185) proj.generateFont(Mix([rg, bd], 0.35), "%s/Medium Italic/Italic/Lt"%FAMILYNAME, italic=True, stemWidth=230) proj.generateFont(Mix([rg, bd], RPoint(0.73, 0.73)), "%s/Bold Italic/Bold Italic/Rg"%FAMILYNAME, italic=True, stemWidth=290) proj.generateFont(Mix([rg, bd], RPoint(1.125, 1.0)), "%s/Black Italic/Bold Italic/Bk"%FAMILYNAME, italic=True, stemWidth=290) thcn1 = Master(condenseFont(th.font, .84, 40)) cn1 = Master(rg.ffont.addDiff(thcn1.ffont, th.ffont)) bdcn1 = Master(bd.ffont.addDiff(thcn1.ffont, th.ffont)) proj.generateFont(Mix([thcn1, cn1], RPoint(0.45, 0.47)), "%s Condensed/Light/Regular/Lt"%FAMILYNAME, swapSuffixes=[".cn"]) proj.generateFont(Mix([thcn1, cn1], RPoint(0.9, 0.92)), "%s Condensed/Regular/Regular/Rg"%FAMILYNAME, swapSuffixes=[".cn"]) proj.generateFont(Mix([cn1, bdcn1], RPoint(0.75, 0.75)), "%s Condensed/Bold/Bold/Rg"%FAMILYNAME, swapSuffixes=[".cn"]) proj.generateFont(Mix([thcn1, cn1], RPoint(0.45, 0.47)), "%s Condensed/Light Italic/Italic/Lt"%FAMILYNAME, italic=True, swapSuffixes=[".cn"], stemWidth=120) proj.generateFont(Mix([thcn1, cn1], RPoint(0.9, 0.92)), "%s Condensed/Italic/Italic/Rg"%FAMILYNAME, italic=True, swapSuffixes=[".cn"], stemWidth=185) proj.generateFont(Mix([cn1, bdcn1], RPoint(0.75, 0.75)), "%s Condensed/Bold Italic/Bold Italic/Rg"%FAMILYNAME, italic=True, swapSuffixes=[".cn"], stemWidth=240) sys.exit(0)