def interpolate(rfonts, master_dir, out_dir, designspace_path, instance_data, italic=False, debug=False): """Create MutatorMath designspace and generate instances. Returns instance UFOs, or unused instance data if debug is True. """ print('>>> Writing masters') for font in rfonts: font.save(os.path.join( master_dir, build_postscript_name( font.info.familyName, font.info.styleName) + '.ufo')) writer = DesignSpaceDocumentWriter(designspace_path) base_family = add_masters_to_writer(writer, rfonts) instance_files = add_instances_to_writer( writer, base_family, instance_data, italic, out_dir) writer.save() print('>>> Building instances') build(designspace_path) instance_ufos = [] for path, data in instance_files: ufo = OpenFont(path) set_custom_params(ufo, data=data) set_redundant_data(ufo) ufo.save() instance_ufos.append(ufo) if debug: return clear_data(instance_data) return instance_ufos
def doit(args): infont = OpenFont(args.ifont) outfont = args.ofont # add try to catch bad input strokewidth = int(args.thickness) expandFont(infont, strokewidth) infont.save(outfont) return infont
def main(): path = re.sub(r"{}+$".format(os.sep), "", sys.argv[1]) font = OpenFont(path) g = font["uni6211"] for con in g: for pt in con.points: pt.x = round(pt.x * XSCALE, 2) pt.y = round(pt.y * YSCALE, 2) g.width = int(g.width * XSCALE) font.save("scaled.ufo")
def doit(args): psffont = UFO.Ufont(args.ifont, params=args.paramsobj) rffont = OpenFont(args.ifont) outfont = args.ofont getParameters(psffont) updateTLPieces(rffont) rebuildTLComps(rffont) rffont.save(outfont) return
def doit(args): psffont = UFO.Ufont(args.ifont, params = args.paramsobj) rffont = OpenFont(args.ifont) outfont = args.ofont getParameters(psffont) updateTLPieces(rffont) rebuildTLComps(rffont) rffont.save(outfont) return
def importUFO(ufoPath, newFile=True, saveFile=True, closeFile=True, doInfo=True, doKerning=True, doGroups=True, doLib=True, doFeatures=True, doHints=False, doMarks=True, doMasks=True, glyphs=None): # get the VFB path vfbPath = os.path.splitext(ufoPath)[0] + ".vfb" if not newFile: font = None for font in AllFonts(): if font.path == vfbPath: break if font is None: if not os.path.exists(vfbPath): Message("Could not find the FontLab file \"%s\"." % os.path.basename(vfbPath)) return font = OpenFont(vfbPath) else: if saveFile: if os.path.exists(vfbPath): vfbPath = _findAvailablePathName(vfbPath) font = NewFont() # make the font the top font in FL fl.ifont = font.fontIndex # read the UFO font.readUFO(ufoPath, doHints=doHints, doInfo=doInfo, doKerning=doKerning, doGroups=doGroups, doLib=doLib, doFeatures=doFeatures, glyphs=glyphs) # load the masks and marks if doMasks or doMarks: for glyph in font: lib = glyph.lib if doMarks: if lib.has_key(MARK_LIB_KEY): glyph.mark = lib[MARK_LIB_KEY] del lib[MARK_LIB_KEY] if doMasks: if lib.has_key(MASK_LIB_KEY): # open a glyph window fl.EditGlyph(glyph.index) # switch to the mask layer fl.CallCommand(fl_cmd.ViewEditMask) # add the mask data instructions = lib[MASK_LIB_KEY] pen = glyph.getPointPen() instructionsDrawPoints(instructions, pen) # switch back to the edit layer fl.CallCommand(fl_cmd.ViewEditMask) # clear the mask data from the glyph lib del lib[MASK_LIB_KEY] # close all glyph windows. sometimes this actually works. fl.CallCommand(fl_cmd.WindowCloseAllGlyphWindows) # load the WWS names if doInfo: info = readPlist(os.path.join(ufoPath, "fontInfo.plist")) if "openTypeNameWWSFamilyName" in info: font.lib[WWS_FAMILY_KEY] = info["openTypeNameWWSFamilyName"] elif "openTypeNameWWSFamilyName" in font.lib: del font.lib[WWS_FAMILY_KEY] if "openTypeNameWWSSubfamilyName" in info: font.lib[WWS_SUBFAMILY_KEY] = info["openTypeNameWWSSubfamilyName"] elif "openTypeNameWWSSubfamilyName" in font.lib: del font.lib[WWS_SUBFAMILY_KEY] # update the font font.update() # save and close if saveFile: font.save(vfbPath) if closeFile: font.close()