Пример #1
1
def convertToOTF(ttfPath, dest, report):
    temp = tempfile.mkstemp(suffix=".otf")[1]

    font = RFont(ttfPath, document=False, showInterface=False)
    font.kerning.clear()
    for attr in font.info.asDict().keys():
        if attr not in defaultFontInfoAttributes:
            setattr(font.info, attr, None)

    result = font.generate(path=temp, format="otf", decompose=False, checkOutlines=False, autohint=False, releaseMode=True, glyphOrder=font.glyphOrder)
    if not font.hasInterface():
        font.close()
    report.write(result)

    sourceFont = TTFont(temp)
    sourceFontWithTables = TTFont(ttfPath)
    for table in ["loca", "OS/2", "cmap", "name", "GSUB", "GPOS", "GDEF", "kern"]:
        if table in sourceFontWithTables:
            sourceFont[table] = sourceFontWithTables[table]

    sourceFont.save(dest)

    result = OTFAutohint(dest)
    report.writeItems(result)

    os.remove(temp)
Пример #2
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, showUI=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
Пример #3
0
def convertToOTF(ttfPath, dest, report):
    temp = tempfile.mkstemp(suffix=".otf")[1]

    font = RFont(ttfPath, document=False, showInterface=False)
    font.kerning.clear()
    for attr in font.info.asDict().keys():
        if attr not in defaultFontInfoAttributes:
            setattr(font.info, attr, None)

    result = font.generate(path=temp,
                           format="otf",
                           decompose=False,
                           checkOutlines=False,
                           autohint=False,
                           releaseMode=True,
                           glyphOrder=font.glyphOrder)
    if not font.hasInterface():
        font.close()
    report.write(result)

    sourceFont = TTFont(temp)
    sourceFontWithTables = TTFont(ttfPath)
    for table in [
            "loca", "OS/2", "cmap", "name", "GSUB", "GPOS", "GDEF", "kern"
    ]:
        if table in sourceFontWithTables:
            sourceFont[table] = sourceFontWithTables[table]

    sourceFont.save(dest)

    result = OTFAutohint(dest)
    report.writeItems(result)

    os.remove(temp)
Пример #4
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
Пример #5
0
def generateOTF(ufoPath, dest, report):
    font = RFont(ufoPath, document=False, showInterface=False)

    result = font.generate(path=dest, format="otf", decompose=False, checkOutlines=True, autohint=False, releaseMode=True, glyphOrder=font.glyphOrder)
    if not font.hasInterface():
        font.close()
    report.write(result)

    result = OTFAutohint(dest)
    report.writeItems(result)
Пример #6
0
def generateOTF(ufoPath, dest, report):
    font = RFont(ufoPath, document=False, showInterface=False)

    result = font.generate(path=dest,
                           format="otf",
                           decompose=False,
                           checkOutlines=True,
                           autohint=False,
                           releaseMode=True,
                           glyphOrder=font.glyphOrder)
    if not font.hasInterface():
        font.close()
    report.write(result)

    result = OTFAutohint(dest)
    report.writeItems(result)
Пример #7
0
def generateTTF(ufoPath, dest, report):
    tempDest = tempfile.mkstemp(suffix=".ttf")[1]

    font = RFont(ufoPath, document=False, showInterface=False)
    font.lib[shouldAddPointsInSplineConversionLibKey] = 1

    result = font.generate(path=tempDest, format="ttf", decompose=False, checkOutlines=True, autohint=False, releaseMode=True, glyphOrder=font.glyphOrder)
    if not font.hasInterface():
        font.close()
    report.write(result)

    autohintOptions = getExtensionDefault(settingsIdentifier, defaultOptions)
    result = TTFAutohint(tempDest, dest, autohintOptions)
    report.writeItems(result)

    os.remove(tempDest)
Пример #8
0
def convertToTTF(otfPath, dest, report):
    temp = tempfile.mkstemp(suffix=".ttf")[1]
    tempDest = tempfile.mkstemp(suffix=".ttf")[1]

    font = RFont(otfPath, document=False, showInterface=False)
    font.lib[shouldAddPointsInSplineConversionLibKey] = 1
    font.kerning.clear()

    for attr in font.info.asDict().keys():
        if attr not in defaultFontInfoAttributes:
            setattr(font.info, attr, None)

    result = font.generate(path=temp,
                           format="ttf",
                           decompose=False,
                           checkOutlines=False,
                           autohint=False,
                           releaseMode=True,
                           glyphOrder=font.glyphOrder)
    if not font.hasInterface():
        font.close()
    report.write(result)

    sourceFont = TTFont(temp)
    sourceFontWithTables = TTFont(otfPath)

    for table in [
            "loca", "OS/2", "cmap", "name", "GSUB", "GPOS", "GDEF", "kern"
    ]:
        if table in sourceFontWithTables:
            sourceFont[table] = sourceFontWithTables[table]
    fixMetrics(sourceFont)
    sourceFont.save(tempDest)

    sourceFont.close()
    del sourceFont
    sourceFontWithTables.close()
    del sourceFontWithTables

    autohintOptions = getExtensionDefault(settingsIdentifier, defaultOptions)
    result = TTFAutohint(tempDest, dest, autohintOptions)
    report.writeItems(result)

    os.remove(temp)
    os.remove(tempDest)
Пример #9
0
def generateTTF(ufoPath, dest, report):
    tempDest = tempfile.mkstemp(suffix=".ttf")[1]

    font = RFont(ufoPath, document=False, showInterface=False)
    font.lib[shouldAddPointsInSplineConversionLibKey] = 1

    result = font.generate(path=tempDest,
                           format="ttf",
                           decompose=False,
                           checkOutlines=True,
                           autohint=False,
                           releaseMode=True,
                           glyphOrder=font.glyphOrder)
    if not font.hasInterface():
        font.close()
    report.write(result)

    autohintOptions = getExtensionDefault(settingsIdentifier, defaultOptions)
    result = TTFAutohint(tempDest, dest, autohintOptions)
    report.writeItems(result)

    os.remove(tempDest)
Пример #10
0
def convertToTTF(otfPath, dest, report):
    temp = tempfile.mkstemp(suffix=".ttf")[1]
    tempDest = tempfile.mkstemp(suffix=".ttf")[1]

    font = RFont(otfPath, document=False, showInterface=False)
    font.lib[shouldAddPointsInSplineConversionLibKey] = 1
    font.kerning.clear()

    for attr in font.info.asDict().keys():
        if attr not in defaultFontInfoAttributes:
            setattr(font.info, attr, None)

    result = font.generate(path=temp, format="ttf", decompose=False, checkOutlines=False, autohint=False, releaseMode=True, glyphOrder=font.glyphOrder)
    if not font.hasInterface():
        font.close()
    report.write(result)

    sourceFont = TTFont(temp)
    sourceFontWithTables = TTFont(otfPath)

    for table in ["loca", "OS/2", "cmap", "name", "GSUB", "GPOS", "GDEF", "kern"]:
        if table in sourceFontWithTables:
            sourceFont[table] = sourceFontWithTables[table]
    fixMetrics(sourceFont)
    sourceFont.save(tempDest)

    sourceFont.close()
    del sourceFont
    sourceFontWithTables.close()
    del sourceFontWithTables

    autohintOptions = getExtensionDefault(settingsIdentifier, defaultOptions)
    result = TTFAutohint(tempDest, dest, autohintOptions)
    report.writeItems(result)

    os.remove(temp)
    os.remove(tempDest)
Пример #11
0
    def run(self, destDir, progress, report=None):
        paths = self.controller.get()

        decompose = self.decompose.get()
        removeOverlap = self.remove_overlap.get()
        autohint = self.autohint.get()
        releaseMode = self.release_mode.get()
        suffix = self.generateSuffix.get()
        suffix = time.strftime(suffix)

        formats = [i for i in doodleSupportedExportFileTypes if getattr(self, i).get()]

        if report is None:
            report = Report()
        report.writeTitle("Batch Generated Fonts:")
        report.newLine()

        progress.update("Collecting Data...")

        fonts = []
        for path in paths:
            font = RFont(path, document=False, showInterface=False)
            # check font info
            requiredFontInfo = dict(descender=-250, xHeight=500, ascender=750, capHeight=750, unitsPerEm=1000)
            for attr, value in requiredFontInfo.items():
                existingValue = getattr(font.info, attr)
                if existingValue is None:
                    setattr(font.info, attr, value)
            fonts.append(font)

        if decompose:
            report.writeTitle("Decompose:")
            report.indent()
            progress.update("Decompose...")
            progress.setTickCount(len(fonts))
            for font in fonts:
                report.write("%s %s" % (font.info.familyName, font.info.styleName))
                progress.update()
                font.decompose()
            progress.setTickCount(None)
            report.dedent()
            report.newLine()
            decompose = False

            if removeOverlap:
                report.writeTitle("Remove Overlap:")
                progress.update("Remove Overlap...")
                report.indent()
                progress.setTickCount(len(fonts))
                for font in fonts:
                    report.write("%s %s" % (font.info.familyName, font.info.styleName))
                    progress.update()
                    font.removeOverlap()
                progress.setTickCount(None)
                report.dedent()
                report.newLine()
                removeOverlap = False

        report.writeTitle("Generate:")
        exportPaths = []
        for index, font in enumerate(fonts):
            report.writeTitle((os.path.basename(paths[index])))
            report.newLine()
            report.write("source: %s" % paths[index])
            report.newLine()
            for format in formats:
                report.writeTitle("Generate %s" % format, "'")
                report.indent()
                familyName = font.info.familyName or "familyName-%s" % index
                familyName = familyName.replace(" ", "")
                styleName = font.info.styleName or "styleName-%s" % index
                styleName = styleName.replace(" ", "")
                if not self.controller.keepFileNames():
                    fileName = "%s-%s%s.%s" % (familyName, styleName, suffix, format)
                else:
                    fileName = os.path.basename(paths[index])
                    fileName, _ = os.path.splitext(fileName)
                    fileName = "%s%s.%s" % (fileName, suffix, format)
                progress.update("Generating ... %s" % fileName)
                if self.controller.exportInFolders():
                    fontDir = os.path.join(destDir, format)
                else:
                    fontDir = destDir
                buildTree(fontDir)
                path = os.path.join(fontDir, fileName)
                report.write("path: %s" % path)
                result = font.generate(path=path, format=format,
                              decompose=decompose,
                              checkOutlines=removeOverlap,
                              autohint=autohint,
                              releaseMode=releaseMode,
                              progressBar=progress,
                              glyphOrder=font.glyphOrder)
                report.indent()
                report.write(result)
                report.dedent()
                exportPaths.append(path)
                report.dedent()
                report.newLine()
            if not font.hasInterface():
                font.close()
        reportPath = os.path.join(destDir, "Batch Generate Report.txt")
        report.save(reportPath)
        return exportPaths