def scripts(self): """Return a list of all ``.py`` files in project.""" scripts = {} # collect RoboFont scripts RF_folder = self.paths["python_robofont"] if os.path.exists(RF_folder): scripts["RoboFont"] = [] for script_path in walk(RF_folder, "py"): # script_name = os.path.split(script_path)[1] # script_name = script_name.split('.')[0] # script_name = script_name.replace('-', ' ') scripts["RoboFont"].append(script_path) # collect NodeBox scripts NB_folder = self.paths["python_nodebox"] if os.path.exists(NB_folder): scripts["NodeBox"] = [] for script_path in walk(NB_folder, "py"): scripts["NodeBox"].append(script_path) # collect DrawBot scripts DB_folder = self.paths["python_drawbot"] if os.path.exists(DB_folder): scripts["DrawBot"] = [] for script_path in walk(DB_folder, "py"): scripts["DrawBot"].append(script_path) # done return scripts
def button_apply_callback(self, sender): if self.otfs_folder is not None: _otfs_paths = walk(self.otfs_folder, 'otf') if len(_otfs_paths) > 0: # set ufos folder if self.ufos_folder is None: self.ufos_folder = self.otfs_folder # print settings boolstring = ["False", "True"] print('batch generating ufos for all otfs in folder...\n') print('\totfs folder: %s' % self.otfs_folder) print('\tufos folder: %s' % self.ufos_folder) print() # batch convert self.w.bar.start() for otf_path in _otfs_paths: print('\tcreating ufo from %s...' % os.path.split(otf_path)[1]) otf = OpenFont(otf_path, showUI=True) # does not work without UI ufo_file = os.path.splitext(os.path.split(otf_path)[1])[0] + '.ufo' ufo_path = os.path.join(self.ufos_folder, ufo_file) otf.save(ufo_path) # close otf.close() print('\t\tufo path: %s' % ufo_path) print('\t\tconversion sucessful? %s\n' % os.path.exists(ufo_path)) # done self.w.bar.stop() print() print('...done.\n') # no font in folder else: print(no_font_in_folder)
def button_apply_callback(self, sender): _otfs_folder = self.w.otfs_folder_value.get() _ufos_folder = self.w.ufos_folder_value.get() if _otfs_folder != None: _otfs_paths = walk(_otfs_folder, 'otf') if len(_otfs_paths) > 0: # set ufos folder if _ufos_folder == None: _ufos_folder = _otfs_folder # print settings boolstring = ("False", "True") print 'batch generating .ufos for all .otfs in folder...\n' print '\totfs folder: %s' % _otfs_folder print '\tufos folder: %s' % _ufos_folder print # batch convert self.w.bar.start() for otf_path in _otfs_paths: print '\tsaving .ufo for %s...' % os.path.split(otf_path)[1] otf = OpenFont(otf_path, showUI=True) ufo_file = os.path.splitext(os.path.split(otf_path)[1])[0] + '.ufo' ufo_path = os.path.join(_ufos_folder, ufo_file) otf.save(ufo_path) # close otf.close() print '\t\tufo path: %s' % ufo_path print '\t\tconversion sucessful? %s\n' % os.path.exists(ufo_path) # done self.w.bar.stop() print print '...done.\n'
def button_apply_callback(self, sender): if self.otfs_folder is not None: _otfs_paths = walk(self.otfs_folder, 'otf') if len(_otfs_paths) > 0: # set ufos folder if self.ufos_folder is None: self.ufos_folder = self.otfs_folder # print settings boolstring = ["False", "True"] print 'batch generating ufos for all otfs in folder...\n' print '\totfs folder: %s' % self.otfs_folder print '\tufos folder: %s' % self.ufos_folder print # batch convert self.w.bar.start() for otf_path in _otfs_paths: print '\tcreating ufo from %s...' % os.path.split(otf_path)[1] otf = OpenFont(otf_path, showUI=True) # does not work without UI ufo_file = os.path.splitext(os.path.split(otf_path)[1])[0] + '.ufo' ufo_path = os.path.join(self.ufos_folder, ufo_file) otf.save(ufo_path) # close otf.close() print '\t\tufo path: %s' % ufo_path print '\t\tconversion sucessful? %s\n' % os.path.exists(ufo_path) # done self.w.bar.stop() print print '...done.\n' # no font in folder else: print no_font_in_folder
def apply_callback(self, sender): ufo_paths = walk(self._ufos_folder, 'ufo') if len(ufo_paths) > 0: print 'transforming all fonts in folder...\n' self.w.bar.start() for ufo_path in ufo_paths: font = RFont(ufo_path, showUI=False) print '\ttransforming %s...' % get_full_name(font) if self._round: print '\t\trounding points...' font.round() if self._decompose: print '\t\tdecomposing...' decompose(font) if self._overlaps: print '\t\tremoving overlaps...' font.removeOverlap() if self._order: print '\t\tauto contour order...' auto_contour_order(font) if self._direction: print '\t\tauto contour direction...' auto_contour_direction(font) if self._extremes: print '\t\tadding extreme points...' add_extremes(font) if self._save: print '\t\tsaving font...' font.save() print '\t...done.\n' self.w.bar.stop() print '...done.\n' # no font open else: print 'the selected directory contains no .ufo font.\n'
def delete_woffs(self): """Delete all ``.woffs`` in project.""" woff_paths = self.woffs() delete_files(woff_paths) # delete temporary otf webfonts temp_otfs = walk(self.paths["woffs"], "otf") delete_files(temp_otfs)
def _get_folder_fonts(self): '''collect all .ufo fonts in the selected folder''' # get font paths self._folder_font_paths = walk(self._folder, 'ufo') # open fonts for font_path in self._folder_font_paths: font = RFont(font_path, showUI=False) if font not in self._folder_fonts: self._folder_fonts.append(font)
def _get_folder_fonts(self): """collect all .ufo fonts in the selected folder""" # get font paths self._folder_font_paths = walk(self._folder, 'ufo') # open fonts for font_path in self._folder_font_paths: font = RFont(font_path, showUI=False) if font not in self._folder_fonts: self._folder_fonts.append(font)
def scripts(self): """Return a list of all ``.py`` files in project.""" scripts = {} # collect RoboFont scripts RF_folder = self.paths['python_robofont'] if os.path.exists(RF_folder): scripts['RoboFont'] = [] for script_path in walk(RF_folder, 'py'): # script_name = os.path.split(script_path)[1] # script_name = script_name.split('.')[0] # script_name = script_name.replace('-', ' ') scripts['RoboFont'].append(script_path) # collect NodeBox scripts NB_folder = self.paths['python_nodebox'] if os.path.exists(NB_folder): scripts['NodeBox'] = [] for script_path in walk(NB_folder, 'py'): scripts['NodeBox'].append(script_path) # done return scripts
def button_apply_callback(self, sender): _ufos_folder = self.w.ufos_folder_value.get() _otfs_folder = self.w.otfs_folder_value.get() if _ufos_folder != None: _ufo_paths = walk(_ufos_folder, 'ufo') if len(_ufo_paths) > 0: # set otfs folder if _otfs_folder == None: _otfs_folder = _ufos_folder # get parameters _decompose = self.w._decompose.get() _overlaps = self.w._overlaps.get() _autohint = self.w._autohint.get() _release_mode = self.w._release_mode.get() # print settings boolstring = ("False", "True") print 'batch generating .otfs for all fonts in folder...\n' print '\tufos folder: %s' % _ufos_folder print '\totfs folder: %s' % _otfs_folder print '\tremove overlaps: %s' % boolstring[_overlaps] print '\tdecompose: %s' % boolstring[_decompose] print '\tautohint: %s' % boolstring[_autohint] print '\trelease mode: %s' % boolstring[_release_mode] print # batch generate self.w.bar.start() for ufo_path in _ufo_paths: print '\tgenerating .otf for %s...' % os.path.split( ufo_path)[1] ufo = RFont(ufo_path, showUI=True) # generate otf otf_file = os.path.splitext( os.path.split(ufo_path)[1])[0] + '.otf' otf_path = os.path.join(_otfs_folder, otf_file) ufo.generate(otf_path, 'otf', decompose=_decompose, autohint=_autohint, checkOutlines=_overlaps, releaseMode=_release_mode, glyphOrder=[]) # close ufo.close() print '\t\totf path: %s' % otf_path print '\t\tgeneration sucessful? %s\n' % os.path.exists( otf_path) # done self.w.bar.stop() print '...done.\n'
def button_apply_callback(self, sender): _ufos_folder = self.w.ufos_folder_value.get() _otfs_folder = self.w.otfs_folder_value.get() if _ufos_folder != None: _ufo_paths = walk(_ufos_folder, "ufo") if len(_ufo_paths) > 0: # set otfs folder if _otfs_folder == None: _otfs_folder = _ufos_folder # get parameters _decompose = self.w._decompose.get() _overlaps = self.w._overlaps.get() _autohint = self.w._autohint.get() _release_mode = self.w._release_mode.get() # print settings boolstring = ("False", "True") print "batch generating .otfs for all fonts in folder...\n" print "\tufos folder: %s" % _ufos_folder print "\totfs folder: %s" % _otfs_folder print "\tremove overlaps: %s" % boolstring[_overlaps] print "\tdecompose: %s" % boolstring[_decompose] print "\tautohint: %s" % boolstring[_autohint] print "\trelease mode: %s" % boolstring[_release_mode] print # batch generate self.w.bar.start() for ufo_path in _ufo_paths: print "\tgenerating .otf for %s..." % os.path.split(ufo_path)[1] ufo = RFont(ufo_path, showUI=True) # generate otf otf_file = os.path.splitext(os.path.split(ufo_path)[1])[0] + ".otf" otf_path = os.path.join(_otfs_folder, otf_file) ufo.generate( otf_path, "otf", decompose=_decompose, autohint=_autohint, checkOutlines=_overlaps, releaseMode=_release_mode, glyphOrder=[], ) # close ufo.close() print "\t\totf path: %s" % otf_path print "\t\tgeneration sucessful? %s\n" % os.path.exists(otf_path) # done self.w.bar.stop() print "...done.\n"
def button_apply_callback(self, sender): if self.ufos_folder is not None: _ufo_paths = walk(self.ufos_folder, 'ufo') if len(_ufo_paths) > 0: # set otfs folder if self.otfs_folder is None: self.otfs_folder = self.ufos_folder # get parameters _decompose = self.w._decompose.get() _overlaps = self.w._overlaps.get() _autohint = self.w._autohint.get() _release_mode = self.w._release_mode.get() # print settings boolstring = ("False", "True") print 'batch generating .otfs for all fonts in folder...\n' print '\tufos folder: %s' % self.ufos_folder print '\totfs folder: %s' % self.otfs_folder print '\tdecompose: %s' % boolstring[_decompose] print '\tremove overlaps: %s' % boolstring[_overlaps] print '\tautohint: %s' % boolstring[_autohint] print '\trelease mode: %s' % boolstring[_release_mode] print # batch generate self.w.bar.start() for ufo_path in _ufo_paths: print '\tgenerating .otf for %s...' % os.path.split(ufo_path)[1] ufo = RFont(ufo_path, showInterface=False) # generate otf otf_file = os.path.splitext(os.path.split(ufo_path)[1])[0] + '.otf' otf_path = os.path.join(self.otfs_folder, otf_file) ufo.generate(otf_path, 'otf', decompose=_decompose, autohint=_autohint, checkOutlines=_overlaps, releaseMode=_release_mode) # close ufo.close() print '\t\totf path: %s' % otf_path print '\t\tgeneration sucessful? %s\n' % os.path.exists(otf_path) # done self.w.bar.stop() print '...done.\n' # no font in folder else: print no_font_in_folder
def masters_interpol(self): """Return a list of all 'super masters' in project. >>> from hTools2.objects import hProject >>> p = hProject('Publica') >>> for master in p.masters_interpol(): print master /_fonts/_Publica/_ufos/_interpol/Publica_Black-Compressed.ufo /_fonts/_Publica/_ufos/_interpol/Publica_Black.ufo /_fonts/_Publica/_ufos/_interpol/Publica_Compressed.ufo /_fonts/_Publica/_ufos/_interpol/Publica_Regular.ufo /_fonts/_Publica/_ufos/_interpol/Publica_UltraLight-Compressed.ufo /_fonts/_Publica/_ufos/_interpol/Publica_UltraLight.ufo """ try: return walk(self.paths['interpol'], 'ufo') except: return []
def upload_css(self, verbose=True): """Upload the project's ``.css`` files to the project's fonts folder in the FTP server.""" woffs_folder = self.paths["woffs"] css_files = walk(woffs_folder, "css") for css_file in css_files: if verbose: print "uploading %s to ftp server..." % css_file, # get ftp parameters url = self.world.settings.hDict["ftp"]["url"] login = self.world.settings.hDict["ftp"]["login"] password = self.world.settings.hDict["ftp"]["password"] folder = self.ftp_path() # connect to ftp F = connect_to_server(url, login, password, folder, verbose=False) upload_file(css_file, F) F.quit() # done if verbose: print "done.\n"
def apply_callback(self, sender): ufo_paths = walk(self.ufos_folder, 'ufo') if len(ufo_paths) > 0: print('transforming all fonts in folder...\n') self.w.bar.start() for ufo_path in ufo_paths: font = RFont(ufo_path, showUI=False) print('\ttransforming %s...' % get_full_name(font)) if self.round: print('\t\trounding points...') font.round() if self.decompose: print('\t\tdecomposing...') decompose(font) if self.overlaps: print('\t\tremoving overlaps...') font.removeOverlap() if self.order: print('\t\tauto contour order...') auto_contour_order(font) if self.direction: print('\t\tauto contour direction...') auto_contour_direction(font) if self.extremes: print('\t\tadding extreme points...') add_extremes(font) if self.remove_features: print('\t\tremoving all OpenType features...') clear_features(font) if self.save: print('\t\tsaving font...') font.save() print('\t...done.\n') self.w.bar.stop() print('...done.\n') # no font in folder else: print(no_font_in_folder)
def apply_callback(self, sender): ufo_paths = walk(self.ufos_folder, 'ufo') if len(ufo_paths) > 0: print 'transforming all fonts in folder...\n' self.w.bar.start() for ufo_path in ufo_paths: font = RFont(ufo_path, showUI=False) print '\ttransforming %s...' % get_full_name(font) if self.round: print '\t\trounding points...' font.round() if self.decompose: print '\t\tdecomposing...' decompose(font) if self.overlaps: print '\t\tremoving overlaps...' font.removeOverlap() if self.order: print '\t\tauto contour order...' auto_contour_order(font) if self.direction: print '\t\tauto contour direction...' auto_contour_direction(font) if self.extremes: print '\t\tadding extreme points...' add_extremes(font) if self.remove_features: print '\t\tremoving all OpenType features...' clear_features(font) if self.save: print '\t\tsaving font...' font.save() print '\t...done.\n' self.w.bar.stop() print '...done.\n' # no font in folder else: print no_font_in_folder
def woffs(self): '''Return a list of all .woff files in project.''' return walk(self.paths['woffs'], 'woff')
def masters(self): """Return a list of all masters in project.""" try: return walk(self.paths["ufos"], "ufo") except: return []
def vfbs(self): '''Return a list of all .vfb files in project.''' return walk(self.paths['vfbs'], 'vfb')
def instances(self): """Return a list of all instances in project.""" try: return walk(self.paths["instances"], "ufo") except: return []
import os from hTools2.modules.fileutils import walk from hTools2.modules.fontutils import decompose, autoContourOrderDirection # settings ufos_folder = u"/Users/gferreira0/Desktop/_Guarana/_ufos/" _remove_overlaps = True _decompose = True _auto_order_direction = True # transform fonts ufo_paths = walk(ufos_folder, 'ufo') print 'batch transforming fonts...\n' for ufo_path in ufo_paths: ufo = RFont(ufo_path, showUI=False) print '\ttransforming %s %s...' % (ufo.info.familyName, ufo.info.styleName) if _decompose: print '\t\tdecomposing...' decompose(ufo) if _remove_overlaps: print '\t\tremoving overlaps...' ufo.removeOverlap() if _auto_order_direction: print '\t\tsetting auto contour order & direction...' autoContourOrderDirection(ufo) ufo.save() ufo.close()
def otfs(self): '''Return a list of all .otf files in project.''' return walk(self.paths['otfs'], 'otf')
def otfs(self): """Return a list of all ``.otf`` files in project.""" return walk(self.paths["otfs"], "otf")
def otfs_test(self): """Return a list of all ``.otfs`` in the project's ``Adobe/fonts/`` folder.""" return walk(self.paths['otfs_test'], 'otf')
def woffs(self): """Return a list of all ``.woff`` files in project.""" return walk(self.paths['woffs'], 'woff')
def instances(self): """Return a list of all instances in project.""" try: return walk(self.paths['instances'], 'ufo') except: return []
def otfs(self): """Return a list of all ``.otf`` files in project.""" return walk(self.paths['otfs'], 'otf')
def ttxs(self): """Return a list of all ``.ttx`` files in project.""" return walk(self.paths["ttx"], "ttx")
def masters(self): """Return a list of all masters in project.""" try: return walk(self.paths['ufos'], 'ufo') except: return []
def woffs(self): """Return a list of all ``.woff`` files in project.""" return walk(self.paths["woffs"], "woff")
def otfs_test(self): '''Return a list project .otfs in `Adobe/fonts` folder.''' return walk(self.paths['otfs_test'], 'otf')
def vfbs(self): """Return a list of all ``.vfb`` files in project.""" return walk(self.paths['vfbs'], 'vfb')
def masters_interpol(self): '''Return a list of all interpolation masters in project.''' try: return walk(self.paths['interpol'], 'ufo') except: return []
def vfbs(self): """Return a list of all ``.vfb`` files in project.""" return walk(self.paths["vfbs"], "vfb")