def run(self, destDir, progress):
        paths = self.controller.get(["ufo"])

        report = Report()

        tempDir = os.path.join(destDir, "temp")
        if not os.path.exists(tempDir):
            os.makedirs(tempDir)
        tempExportPaths = self._generateCallback(tempDir, progress, report)

        progress.update("Merging Tables...")
        report.writeTitle("Merged Fonts:")
        report.newLine()

        tableNames = [item["tableName"] for item in self.tableList if item["add"]]

        for fontIndex, path in enumerate(paths):
            font = RFont(path, document=False, showInterface=False)
            binarySourcepath = font.lib.get("com.typemytype.robofont.binarySource")
            tempExportPath = tempExportPaths[fontIndex]
            if binarySourcepath:
                binaryIs
                Type = os.path.splitext(binarySourcepath)[1].lower() in [".ttf", ".otf"]
                tempIsOpenType = os.path.splitext(tempExportPath)[1].lower() in [".ttf", ".otf"]
                if binaryIsOpenType and tempIsOpenType:
                    if os.path.exists(binarySourcepath) and os.path.exists(tempExportPath):
                        binarySource = TTFont(binarySourcepath)
                        tempFont = TTFont(tempExportPath)
                        fileName = os.path.basename(tempExportPath)
                        if not self.controller.keepFileNames():
                            fileName = "%s-%s%s" % (font.info.familyName, font.info.styleName, os.path.splitext(tempExportPath)[1])
                        path = os.path.join(destDir, fileName)
                        report.writeTitle(os.path.basename(path), "'")
                        report.write("source: %s" % tempExportPath)
                        report.write("binary source: %s" % binarySourcepath)
                        report.newLine()
                        report.indent()
                        for table in tableNames:
                            if table in binarySource:
                                report.write("merge %s table" % table)
                                tempFont[table] = binarySource[table]
                        report.write("save to %s" % path)
                        tempFont.save(path)
                        report.dedent()
                        report.newLine()
                        tempFont.close()
                        binarySource.close()
            if not font.hasInterface():
                font.close()

        reportPath = os.path.join(destDir, "Binary Merge Report.txt")
        report.save(reportPath)

        if not getDefault("Batch.Debug", False):
            if os.path.exists(tempDir):
                shutil.rmtree(tempDir)
Esempio n. 2
0
    def run(self, destDir, progress, report=None):
        paths = self.controller.get(supportedExtensions=["designspace"],
                                    flattenDesignSpace=False)

        autohint = self.autohint.get()
        fitToExtremes = self.interpolate_to_fit_axes_extremes.get()

        if report is None:
            report = Report()

        report.writeTitle("Batch Generated Variable Fonts:")
        report.newLine()

        for path in paths:
            fileName = os.path.basename(path)
            outputPath = os.path.join(destDir,
                                      "%s.ttf" % os.path.splitext(fileName)[0])
            report.write("source: %s" % path)
            report.write("path: %s" % outputPath)
            report.indent()

            progress.update("Generating design space ... %s" % fileName)

            desingSpace = BatchDesignSpaceProcessor(path, ufoVersion)
            desingSpace.generateVariationFont(outputPath,
                                              autohint=autohint,
                                              releaseMode=True,
                                              fitToExtremes=fitToExtremes,
                                              report=report)
            report.dedent()

        reportPath = os.path.join(destDir,
                                  "Batch Generated Variable Fonts Report.txt")
        report.save(reportPath)
    def run(self, destDir, progress, report=None):
        paths = self.controller.get(supportedExtensions=["designspace"], flattenDesignSpace=False)

        autohint = self.autohint.get()
        fitToExtremes = self.interpolate_to_fit_axes_extremes.get()

        if report is None:
            report = Report()

        report.writeTitle("Batch Generated Variable Fonts:")
        report.newLine()

        for path in paths:
            fileName = os.path.basename(path)
            outputPath = os.path.join(destDir, "%s.ttf" % os.path.splitext(fileName)[0])
            report.write("source: %s" % path)
            report.write("path: %s" % outputPath)
            report.indent()

            progress.update("Generating design space ... %s" % fileName)

            desingSpace = BatchDesignSpaceProcessor(path, ufoVersion)
            desingSpace.generateVariationFont(outputPath, autohint=autohint, releaseMode=True, fitToExtremes=fitToExtremes, report=report)
            report.dedent()

        reportPath = os.path.join(destDir, "Batch Generated Variable Fonts Report.txt")
        report.save(reportPath)
    def run(self, destDir, progress):
        progress.update("Converting...")

        paths = self.controller.get()

        report = Report()
        report.css = CSSWriter()
        report.html = HTMLWriter(cssFileName="font.css", style=getExtensionDefault("%s.globalCSSPreview" % settingsIdentifier, ""))

        report.writeTitle("Web Fonts:")
        report.newLine()

        saveOTF = self.save_otf.get()
        saveTTF = self.save_ttf.get()
        saveWOFF = self.save_woff.get()
        saveWOFFFormat = self.save_woff_format.get()
        saveWOFF2 = self.save_woff2.get()
        saveWOFF2Format = self.save_woff2_format.get()
        saveEOT = self.save_eot.get()
        saveSVG = self.save_svg.get()
        suffix = self.webSuffix.get()
        suffix = time.strftime(suffix)

        preserveTTFhints = self.preserveTTFhints.get()

        progress.setTickCount(len(paths))

        for path in paths:
            txt = os.path.basename(path)
            progress.update(txt)
            report.writeTitle(os.path.basename(path), "-")
            report.write("source: %s" % path)
            report.newLine()
            try:
                self._convertPath(path, destDir=destDir, saveOTF=saveOTF, saveTTF=saveTTF, saveWOFF=saveWOFF, saveWOFFFormat=saveWOFFFormat, saveWOFF2=saveWOFF2, saveWOFF2Format=saveWOFF2Format, saveEOT=saveEOT, saveSVG=saveSVG, suffix=suffix, report=report, preserveTTFhints=preserveTTFhints)
            except:
                import traceback
                message = traceback.format_exc()
                report.write("Failed:")
                report.write(message)
                report.indent(0)
            report.newLine()

        report.newLine()
        report.writeTitle("TTFAutohint options:")
        autohintOptions = getExtensionDefault(settingsIdentifier, defaultOptions)
        report.writeDict(autohintOptions)

        reportPath = os.path.join(destDir, "WebFonts Report.txt")
        report.save(reportPath)

        if self.generateHTML.get():
            cssPath = os.path.join(destDir, "font.css")
            report.css.save(cssPath)

            htmlPath = os.path.join(destDir, "preview.html")
            report.html.save(htmlPath)
Esempio n. 5
0
    def run(self, destDir, progress):
        paths = self.controller.get(["ufo"])

        report = Report()
        tempDir = tempfile.mkdtemp()
        tempExportPaths = self._generateCallback(tempDir, progress, report)

        progress.update("Merging Tables...")
        report.writeTitle("Merged Fonts:")
        report.newLine()

        tableNames = [
            item["tableName"] for item in self.tableList if item["add"]
        ]

        for fontIndex, path in enumerate(paths):
            font = OpenFont(path, showUI=False)
            binarySourcepath = font.lib.get(
                "com.typemytype.robofont.binarySource")
            tempExportPath = tempExportPaths[fontIndex]
            if binarySourcepath:
                binaryIsOpenType = os.path.splitext(
                    binarySourcepath)[1].lower() in [".ttf", ".otf"]
                tempIsOpenType = os.path.splitext(
                    tempExportPath)[1].lower() in [".ttf", ".otf"]
                if binaryIsOpenType and tempIsOpenType:
                    binarySource = TTFont(binarySourcepath)
                    tempFont = TTFont(tempExportPath)
                    fileName = os.path.basename(tempExportPath)
                    if not self.controller.keepFileNames():
                        fileName = "%s-%s" % (font.info.familyName,
                                              font.info.styleName)
                    path = os.path.join(destDir, fileName)
                    report.writeTitle(os.path.basename(path), "'")
                    report.write("source: %s" % path)
                    report.write("binary source: %s" % binarySource)
                    report.newLine()
                    report.indent()
                    for table in tableNames:
                        if table in binarySource:
                            report.write("merge %s table" % table)
                            tempFont[table] = binarySource[table]
                    report.dedent()
                    report.newLine()
                    tempFont.save(path)
                    tempFont.close()
                    binarySource.close()
            font.close()

        reportPath = os.path.join(destDir, "Binary Merge Report.txt")
        report.save(reportPath)

        if os.path.exists(tempDir):
            shutil.rmtree(tempDir)
Esempio n. 6
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
Esempio n. 7
0
    def run(self, destDir, progress):
        progress.update("Converting...")

        paths = self.controller.get()

        report = Report()
        report.css = CSSWriter()
        report.html = HTMLWriter(cssFileName="font.css",
                                 style=getExtensionDefault(
                                     "%s.globalCSSPreview" %
                                     settingsIdentifier, ""))

        report.writeTitle("Web Fonts:")
        report.newLine()

        saveOTF = self.save_otf.get()
        saveTTF = self.save_ttf.get()
        saveWOFF = self.save_woff.get()
        saveWOFFFormat = self.save_woff_format.get()
        saveWOFF2 = self.save_woff2.get()
        saveWOFF2Format = self.save_woff2_format.get()
        saveEOT = self.save_eot.get()
        saveSVG = self.save_svg.get()
        suffix = self.webSuffix.get()
        suffix = time.strftime(suffix)

        preserveTTFhints = self.preserveTTFhints.get()

        progress.setTickCount(len(paths))

        for path in paths:
            txt = os.path.basename(path)
            progress.update(txt)
            report.writeTitle(os.path.basename(path), "-")
            report.write("source: %s" % path)
            report.newLine()
            try:
                self._convertPath(path,
                                  destDir=destDir,
                                  saveOTF=saveOTF,
                                  saveTTF=saveTTF,
                                  saveWOFF=saveWOFF,
                                  saveWOFFFormat=saveWOFFFormat,
                                  saveWOFF2=saveWOFF2,
                                  saveWOFF2Format=saveWOFF2Format,
                                  saveEOT=saveEOT,
                                  saveSVG=saveSVG,
                                  suffix=suffix,
                                  report=report,
                                  preserveTTFhints=preserveTTFhints)
            except:
                import traceback
                message = traceback.format_exc()
                report.write("Failed:")
                report.write(message)
                report.indent(0)
            report.newLine()

        report.newLine()
        report.writeTitle("TTFAutohint options:")
        autohintOptions = getExtensionDefault(settingsIdentifier,
                                              defaultOptions)
        report.writeDict(autohintOptions)

        reportPath = os.path.join(destDir, "WebFonts Report.txt")
        report.save(reportPath)

        if self.generateHTML.get():
            cssPath = os.path.join(destDir, "font.css")
            report.css.save(cssPath)

            htmlPath = os.path.join(destDir, "preview.html")
            report.html.save(htmlPath)