예제 #1
0
 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
예제 #2
0
 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)
예제 #3
0
 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'
예제 #4
0
 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
예제 #5
0
 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'
예제 #6
0
 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)
예제 #7
0
 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)
예제 #8
0
 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)
예제 #9
0
 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
예제 #10
0
 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"
예제 #12
0
 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
예제 #13
0
    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 []
예제 #14
0
 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"
예제 #15
0
 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)
예제 #16
0
 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
예제 #17
0
 def woffs(self):
     '''Return a list of all .woff files in project.'''
     return walk(self.paths['woffs'], 'woff')
예제 #18
0
 def masters(self):
     """Return a list of all masters in project."""
     try:
         return walk(self.paths["ufos"], "ufo")
     except:
         return []
예제 #19
0
 def vfbs(self):
     '''Return a list of all .vfb files in project.'''
     return walk(self.paths['vfbs'], 'vfb')
예제 #20
0
 def instances(self):
     """Return a list of all instances in project."""
     try:
         return walk(self.paths["instances"], "ufo")
     except:
         return []
예제 #21
0
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()
예제 #22
0
 def otfs(self):
     '''Return a list of all .otf files in project.'''
     return walk(self.paths['otfs'], 'otf')
예제 #23
0
 def otfs(self):
     """Return a list of all ``.otf`` files in project."""
     return walk(self.paths["otfs"], "otf")
예제 #24
0
 def otfs_test(self):
     """Return a list of all ``.otfs`` in the project's ``Adobe/fonts/`` folder."""
     return walk(self.paths['otfs_test'], 'otf')
예제 #25
0
 def woffs(self):
     """Return a list of all ``.woff`` files in project."""
     return walk(self.paths['woffs'], 'woff')
예제 #26
0
 def instances(self):
     """Return a list of all instances in project."""
     try:
         return walk(self.paths['instances'], 'ufo')
     except:
         return []
예제 #27
0
 def otfs(self):
     """Return a list of all ``.otf`` files in project."""
     return walk(self.paths['otfs'], 'otf')
예제 #28
0
 def ttxs(self):
     """Return a list of all ``.ttx`` files in project."""
     return walk(self.paths["ttx"], "ttx")
예제 #29
0
 def masters(self):
     """Return a list of all masters in project."""
     try:
         return walk(self.paths['ufos'], 'ufo')
     except:
         return []
예제 #30
0
 def woffs(self):
     """Return a list of all ``.woff`` files in project."""
     return walk(self.paths["woffs"], "woff")
예제 #31
0
 def otfs_test(self):
     '''Return a list project .otfs in `Adobe/fonts` folder.'''
     return walk(self.paths['otfs_test'], 'otf')
예제 #32
0
 def vfbs(self):
     """Return a list of all ``.vfb`` files in project."""
     return walk(self.paths['vfbs'], 'vfb')
예제 #33
0
 def masters_interpol(self):
     '''Return a list of all interpolation masters in project.'''
     try:
         return walk(self.paths['interpol'], 'ufo')
     except:
         return []
예제 #34
0
 def vfbs(self):
     """Return a list of all ``.vfb`` files in project."""
     return walk(self.paths["vfbs"], "vfb")