建立字体开发系统。
hellbox的Python项目详细描述
Hellbox是一个模块化的、与编辑器无关的构建系统,专为字体开发而设计。Hellbox类似于一些“基于流的编程”环境,由一个由链接的Blackbox组件组成的系统组成。
hellbox正处于开发的早期阶段。本文档与其说是当前实现的文档,不如说是一个路线图。在v1.0之前,不需要通知就可以更改api。
目标
- 一致性hellbox任务不接受设计参数,支持一致的任务输出 1模块应该是可伸缩的和可组合的,同时保持定制工作流的灵活性。
- isolationhellbox任务和包被版本锁定,并与其他项目和python安装隔离
概述
hellbox旨在为定义构建管道提供环境和框架。
hellbox任务由“chutes”模块组成,这些模块对一个或多个文件执行单个操作。滑槽使用>>运算符连接在一起,将一个滑槽的输出链接到下一个滑槽的输入。
fromhellboximportHellboxfromhellbox_generate_otfimportGenerateOtfwithHellbox("build")astask:task.describe("Builds .otf files from .ufo source")task.read("*.ufo")>>GenerateOtf()>>task.write("./otf")
使用上述配置,运行hell run build将从所有ufo源生成otf文件,并将它们写入otf目录。
安装
第一个install hell,用于管理hellbox项目的cli。然后在项目内部运行^ {tT4}$(或者在现有的HELBOX启用项目内^ {TT5}$)。
这将使用pipenv使用python 3建立一个新的虚拟环境,创建用于定义任务的Hellfile.py,并安装hellbox库本身。
滑槽
有两种定义HELBOX滑槽的方法,取决于所需的配置的复杂性和数量。定义自己滑槽的基本设置要求您创建一个新的Chute子类。必须定义一个方法run,该方法接受一个files参数(数组)并返回一个新的修改文件数组。除了run,您还可以在新类上定义您喜欢的任何其他方法。
fromhellbox.chuteimportChuteclassFilterFilesByExt(Chute):def__init__(self,*extensions):self.extensions=extensionsdefrun(self,files):return[fforfinfilesiff.extensioninself.extensions]
然后,您可以在hellfile中使用降落伞:
withHellbox("backup")astask:task.read("build/*")>>FilterFilesByExt("otf","txt")>>task.write("backup")
如果你的降落伞在初始化时不需要参数,你可能更喜欢用函数而不是类来定义它。使用@Chute.createfunction decorator可以使函数定义像降落伞的子类一样:
fromhellbox.chuteimportChute@Chute.createdefGenerateWoff2(files):# do something to files...returnfileswithHellbox("webfonts")astask:task.read("build/*.ttf")>>GenerateWoff2()>>task.write("webfonts")
cli
hellbox附带了一个命令行工具hell,它在pipenv上提供了一个薄层。强烈建议使用cli,因为它使隔离工作变得非常简单。
开发
使用make安装开发依赖项。使用make test运行测试。