Пример #1
0
    def _convertPath(self,
                     path,
                     destDir,
                     saveOTF=True,
                     saveTTF=True,
                     saveWOFF=True,
                     saveWOFFFormat=WOFF_TTF_FORMAT,
                     saveWOFF2=True,
                     saveWOFF2Format=WOFF_TTF_FORMAT,
                     saveEOT=True,
                     saveSVG=False,
                     suffix="",
                     report=None,
                     preserveTTFhints=False):
        fileName = os.path.basename(path)
        fileName, ext = os.path.splitext(fileName)
        ext = ext.lower()

        if ext in [".ttf", ".otf"]:
            font = CompositorFont(path)
        else:
            font = RFont(path, document=False, showInterface=False)

        familyName = font.info.familyName
        styleName = font.info.styleName

        if not self.controller.keepFileNames():
            fileName = "%s-%s" % (familyName, styleName)
        fileName += suffix
        fileName = fileName.replace(" ", "_")

        if self.controller.exportInFolders():
            fontDir = os.path.join(destDir, familyName.replace(" ", ""),
                                   styleName.replace(" ", ""))
        else:
            fontDir = destDir

        otfPath = os.path.join(fontDir, fileName + ".otf")
        ttfPath = os.path.join(fontDir, fileName + ".ttf")
        woffPath = os.path.join(fontDir, fileName + ".woff")
        woff2Path = os.path.join(fontDir, fileName + ".woff2")
        eotPath = os.path.join(fontDir, fileName + ".eot")
        svgPath = os.path.join(fontDir, fileName + ".svg")

        # save otf
        if saveOTF:
            report.writeTitle("Build OTF", "'")
            report.indent()
            report.write("path: %s" % otfPath)
            buildTree(fontDir)
            temp = self._getTempOTF(path,
                                    report=report,
                                    preserveTTFhints=preserveTTFhints)
            shutil.copyfile(temp, otfPath)
            report.dedent()
            report.newLine()

        # save ttf
        if saveTTF:
            report.writeTitle("Build TTF", "'")
            report.indent()
            report.write("path: %s" % ttfPath)
            buildTree(fontDir)
            temp = self._getTempTTF(path,
                                    report=report,
                                    preserveTTFhints=preserveTTFhints)
            shutil.copyfile(temp, ttfPath)
            report.dedent()
            report.newLine()

        # convert to woff
        if saveWOFF:
            if saveWOFFFormat == WOFF_TTF_FORMAT:
                func = self._getTempTTF
                reportFormat = "TTF"
            elif saveWOFFFormat == WOFF_OTF_FORMAT:
                func = self._getTempOTF
                reportFormat = "OTF"
            report.writeTitle("Build WOFF (%s)" % reportFormat, "'")
            report.indent()
            report.write("path: %s" % woffPath)
            buildTree(fontDir)
            temp = func(path, report=report, preserveTTFhints=preserveTTFhints)
            convertToWoff(temp, woffPath)
            report.dedent()
            report.newLine()

        # convert to woff2
        if saveWOFF2:
            if saveWOFFFormat == WOFF_TTF_FORMAT:
                func = self._getTempTTF
                reportFormat = "TTF"
            elif saveWOFFFormat == WOFF_OTF_FORMAT:
                func = self._getTempOTF
                reportFormat = "OTF"
            report.writeTitle("Build WOFF2 (%s)" % reportFormat, "'")
            report.indent()
            report.write("path: %s" % woff2Path)
            buildTree(fontDir)
            temp = func(path, report=report, preserveTTFhints=preserveTTFhints)
            convertToWoff2(temp, woff2Path)
            report.dedent()
            report.newLine()

        # convert to eot
        if saveEOT:
            report.writeTitle("Build EOT", "'")
            report.indent()
            report.write("path: %s" % eotPath)
            buildTree(fontDir)
            temp = self._getTempTTF(path,
                                    report=report,
                                    preserveTTFhints=preserveTTFhints)
            convertToEot(temp, eotPath)
            report.dedent()
            report.newLine()

        # convert to svg
        if saveSVG:
            report.writeTitle("Build SVG", "'")
            report.indent()
            report.write("path: %s" % svgPath)
            buildTree(fontDir)
            convertToSVG(path, svgPath)
            report.dedent()
            report.newLine()

        self._removeTempFiles()

        self._writeHTMLPreview(report.html, report.css, fileName, familyName,
                               styleName, saveTTF, saveWOFF, saveWOFF2,
                               saveEOT, saveSVG)
Пример #2
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
Пример #3
0
    def _convertPath(self, path, destDir, saveOTF=True, saveTTF=True, saveWOFF=True, saveWOFFFormat=WOFF_TTF_FORMAT, saveWOFF2=True, saveWOFF2Format=WOFF_TTF_FORMAT, saveEOT=True, saveSVG=False, suffix="", report=None, preserveTTFhints=False):
        fileName = os.path.basename(path)
        fileName, ext = os.path.splitext(fileName)
        ext = ext.lower()

        if ext in [".ttf", ".otf"]:
            font = CompositorFont(path)
        else:
            font = RFont(path, document=False, showInterface=False)

        familyName = font.info.familyName
        styleName = font.info.styleName

        if not self.controller.keepFileNames():
            fileName = "%s-%s" % (familyName, styleName)
        fileName += suffix
        fileName = fileName.replace(" ", "_")

        if self.controller.exportInFolders():
            fontDir = os.path.join(destDir, familyName.replace(" ", ""), styleName.replace(" ", ""))
        else:
            fontDir = destDir

        otfPath = os.path.join(fontDir, fileName + ".otf")
        ttfPath = os.path.join(fontDir, fileName + ".ttf")
        woffPath = os.path.join(fontDir, fileName + ".woff")
        woff2Path = os.path.join(fontDir, fileName + ".woff2")
        eotPath = os.path.join(fontDir, fileName + ".eot")
        svgPath = os.path.join(fontDir, fileName + ".svg")

        # save otf
        if saveOTF:
            report.writeTitle("Build OTF", "'")
            report.indent()
            report.write("path: %s" % otfPath)
            buildTree(fontDir)
            temp = self._getTempOTF(path, report=report, preserveTTFhints=preserveTTFhints)
            shutil.copyfile(temp, otfPath)
            report.dedent()
            report.newLine()

        # save ttf
        if saveTTF:
            report.writeTitle("Build TTF", "'")
            report.indent()
            report.write("path: %s" % ttfPath)
            buildTree(fontDir)
            temp = self._getTempTTF(path, report=report, preserveTTFhints=preserveTTFhints)
            shutil.copyfile(temp, ttfPath)
            report.dedent()
            report.newLine()

        # convert to woff
        if saveWOFF:
            if saveWOFFFormat == WOFF_TTF_FORMAT:
                func = self._getTempTTF
                reportFormat = "TTF"
            elif saveWOFFFormat == WOFF_OTF_FORMAT:
                func = self._getTempOTF
                reportFormat = "OTF"
            report.writeTitle("Build WOFF (%s)" % reportFormat, "'")
            report.indent()
            report.write("path: %s" % woffPath)
            buildTree(fontDir)
            temp = func(path, report=report, preserveTTFhints=preserveTTFhints)
            convertToWoff(temp, woffPath)
            report.dedent()
            report.newLine()

        # convert to woff2
        if saveWOFF2:
            if saveWOFFFormat == WOFF_TTF_FORMAT:
                func = self._getTempTTF
                reportFormat = "TTF"
            elif saveWOFFFormat == WOFF_OTF_FORMAT:
                func = self._getTempOTF
                reportFormat = "OTF"
            report.writeTitle("Build WOFF2 (%s)" % reportFormat, "'")
            report.indent()
            report.write("path: %s" % woff2Path)
            buildTree(fontDir)
            temp = func(path, report=report, preserveTTFhints=preserveTTFhints)
            convertToWoff2(temp, woff2Path)
            report.dedent()
            report.newLine()

        # convert to eot
        if saveEOT:
            report.writeTitle("Build EOT", "'")
            report.indent()
            report.write("path: %s" % eotPath)
            buildTree(fontDir)
            temp = self._getTempTTF(path, report=report, preserveTTFhints=preserveTTFhints)
            convertToEot(temp, eotPath)
            report.dedent()
            report.newLine()

        # convert to svg
        if saveSVG:
            report.writeTitle("Build SVG", "'")
            report.indent()
            report.write("path: %s" % svgPath)
            buildTree(fontDir)
            convertToSVG(path, svgPath)
            report.dedent()
            report.newLine()

        self._removeTempFiles()

        self._writeHTMLPreview(report.html, report.css, fileName, familyName, styleName, saveTTF, saveWOFF, saveWOFF2, saveEOT, saveSVG)