def glyphs2ufo(options): """Converts a Glyphs.app source file into UFO masters and a designspace file.""" if options.output_dir is None: options.output_dir = os.path.dirname(options.glyphs_file) if options.designspace_path is None: options.designspace_path = os.path.join( options.output_dir, os.path.basename(os.path.splitext(options.glyphs_file)[0]) + ".designspace", ) # If options.instance_dir is None, instance UFO paths in the designspace # file will either use the value in customParameter's FULL_FILENAME_KEY or be # made relative to "instance_ufos/". glyphsLib.build_masters( options.glyphs_file, options.output_dir, options.instance_dir, designspace_path=options.designspace_path, minimize_glyphs_diffs=options.no_preserve_glyphsapp_metadata, propagate_anchors=options.propagate_anchors, normalize_ufos=options.no_normalize_ufos, create_background_layers=options.create_background_layers, )
def glyphs2ufo(options): """Converts a Glyphs.app source file into UFO masters and a designspace file.""" if options.output_dir is None: options.output_dir = os.path.dirname(options.glyphs_file) or "." if options.designspace_path is None: options.designspace_path = os.path.join( options.output_dir, os.path.basename(os.path.splitext(options.glyphs_file)[0]) + ".designspace", ) # If options.instance_dir is None, instance UFO paths in the designspace # file will either use the value in customParameter's UFO_FILENAME_CUSTOM_PARAM or # be made relative to "instance_ufos/". glyphsLib.build_masters( options.glyphs_file, options.output_dir, options.instance_dir, designspace_path=options.designspace_path, minimize_glyphs_diffs=options.no_preserve_glyphsapp_metadata, propagate_anchors=options.propagate_anchors, normalize_ufos=options.normalize_ufos, create_background_layers=options.create_background_layers, generate_GDEF=options.generate_GDEF, store_editor_state=not options.no_store_editor_state, write_skipexportglyphs=options.write_public_skip_export_glyphs, )
def main(args=None): opt = parse_options(args) if opt.glyphs is not None: if opt.instances is None: glyphsLib.build_masters(opt.glyphs, opt.masters) else: glyphsLib.build_instances(opt.glyphs, opt.masters, opt.instances)
def main(): parser = argparse.ArgumentParser( "Translate all .glyphs files into UFO+designspace in the specified directories." ) parser.add_argument( "-o", "--out", metavar="OUTPUT_DIR", default="ufos", help="Output directory" ) parser.add_argument("directories", nargs="*") args = parser.parse_args() for directory in args.directories: files = glyphs_files(directory) for filename in files: try: # Code for glyphsLib with roundtrip from glyphsLib.builder import to_designspace font = glyphsLib.GSFont(filename) designspace = to_designspace(font) dsname = font.familyName.replace(" ", "") + ".designspace" designspace.write(os.path.join(args.out, dsname)) except ImportError: # This is the version that works with glyphsLib 2.1.0 glyphsLib.build_masters( filename, master_dir=args.out, designspace_instance_dir=args.out )
def test_designspace_generation_on_disk(datadir, tmpdir): glyphsLib.build_masters(str(datadir.join("BraceTestFont.glyphs")), str(tmpdir)) ufo_paths = list(tmpdir.visit(fil="*.ufo")) assert len(ufo_paths) == 4 # Source layers should not be written to disk. for ufo_path in ufo_paths: ufo = defcon.Font(str(ufo_path)) # Check that all glyphs have contours (brace layers are in "b" only, writing # the brace layer to disk would result in empty other glyphs). for layer in ufo.layers: for glyph in layer: if glyph.name == "space": assert not glyph else: assert glyph
def build_master_ufos(self, glyphs_path, family_name=None): """Build UFOs and MutatorMath designspace from Glyphs source.""" import glyphsLib master_dir = self._output_dir('ufo') instance_dir = self._output_dir('ufo', is_instance=True) return glyphsLib.build_masters( glyphs_path, master_dir, designspace_instance_dir=instance_dir, family_name=family_name)
def build_ufos(self, glyphs_path, interpolate=False): """Build UFOs from Glyphs source.""" master_dir = self._output_dir('ufo') instance_dir = self._output_dir('ufo', is_instance=True) if interpolate: return build_instances(glyphs_path, master_dir, instance_dir) else: return build_masters(glyphs_path, master_dir, designspace_instance_dir=instance_dir)
def build_master_ufos(self, glyphs_path, family_name=None): """Build UFOs and MutatorMath designspace from Glyphs source.""" import glyphsLib master_dir = self._output_dir('ufo') instance_dir = self._output_dir('ufo', is_instance=True) return glyphsLib.build_masters(glyphs_path, master_dir, designspace_instance_dir=instance_dir, family_name=family_name)
def build_master_ufos(self, glyphs_path, family_name=None, mti_source=None): """Build UFOs and MutatorMath designspace from Glyphs source.""" import glyphsLib master_dir = self._output_dir('ufo') instance_dir = self._output_dir('ufo', is_instance=True) masters, designspace_path, instances = glyphsLib.build_masters( glyphs_path, master_dir, designspace_instance_dir=instance_dir, family_name=family_name) if mti_source: self.add_mti_features_to_master_ufos(mti_source, masters) return designspace_path, instances
def build_ufos( self, glyphs_path, interpolate=False, masters_as_instances=False, family_name=None): """Build UFOs from Glyphs source.""" master_dir = self._output_dir('ufo') instance_dir = self._output_dir('ufo', is_instance=True) ufos = [] if not interpolate or masters_as_instances: ufos.extend(build_masters( glyphs_path, master_dir, designspace_instance_dir=instance_dir, family_name=family_name)) if interpolate: ufos.extend(build_instances( glyphs_path, master_dir, instance_dir, family_name=family_name)) return ufos
def convertion(self): if not os.path.exists(self.destination): os.makedirs(self.destination) self.ufos, self.designspace_path = glyphsLib.build_masters( self.sourcePath, self.destination) self.cleanedUfos = self.cleanUfos() self.addSkipExport2designspace() for i in os.listdir(self.destination): if i.endswith(".designspace") and "-" in i: old = os.path.abspath(os.path.join(self.destination, i)) new = os.path.abspath( os.path.join( self.destination, i.split(".")[0].replace("MM", "").strip("-") + ".designspace")) if "Regular" in new: new = new.replace("-Regular", "") os.rename(old, new) return self.designspace_path, self.cleanUfos
def main(): parser = argparse.ArgumentParser(description="Build Reem Kufi fonts.") parser.add_argument("file", metavar="FILE", help="input font to process") parser.add_argument("--out-file", metavar="FILE", help="output font to write", required=True) args = parser.parse_args() with TemporaryDirectory() as tempdir: ufos, designspace = build_masters(args.file, tempdir, tempdir) doc = DesignSpaceDocument() doc.read(designspace) doc.instances = [i for i in doc.instances if i.styleName == "Regular"] assert len(doc.instances) == 1 instance = doc.instances[0] instance.location = dict(Weight=108) instance.path = args.out_file doc.write(designspace) build(designspace, outputUFOFormatVersion=3)
import glyphsLib master_dir = "master_ufos" ufos, designspace_path = glyphsLib.build_masters("Lexend.glyphs", master_dir)
import glyphsLib glyphsLib.build_masters('mono.glyphs', './')