Tuxedo 1.0.1

Tuxedo 1.0.1

Laszlo Teveli维护。



Tuxedo 1.0.1

Tuxedo

Travis CI status Framework version Swift version Code Test Coverage Platforms Lincese

依赖管理器

CocoaPods compatible Swift Package Manager compatible Carthage compatible


👨🏻‍💻 关于

Tuxedo是一个Swift的模板语言。它可以让您将应用的业务逻辑与UI和渲染层分开。与原始数据结合的智能模板允许前端与其他应用部分分别处理和开发,因此可以简单地在模板格式中定义输出处理、布局和格式化。

为什么这个名字?因为它使用控制语句和高级运算符,用优雅的动态模板修饰了静态输出。

该项目是在我的轻量级解释器框架Eval之上构建的,并作为此评估器的示例应用。

很快,这个模板语言示例证明了一个非常有用的独立项目,所以我将其提取出来,作为一个独立的库使用,尽可能让更多的项目使用。我认为在服务器端Swift项目中应用程序最有价值,但模板解析非常适合很多其他领域。

该项目尽管其大部分功能已经可用,但仍处于起步阶段,需要在开源活动方面做大量工作,例如CI、贡献指南和详尽文档。在此阶段,如果您对现有的功能感兴趣,欢迎您查看单元测试并了解那里的用例,直到文档准备就绪。或者,您可以查看下面的示例。请持续关注更新!

该项目灵感来自于优秀的PHP模板引擎Twig,以及Swift语言和平台上尚不存在足够全面的模板库。

👀入门指南

您可以评估基础表达式...

let result = Tuxedo().evaluate("Hello {{ name }}!", variables: ["name": "Tuxedo"]) // Hello Tuxedo!

...或复杂的表达式...

let result = Tuxedo().evaluate("""
The results are: 
	{% for item in results.sort.reverse %}
		{% if item is not first %}, {% endif %}
		{% if item is last %} and {% endif %}
		{{ item * 2 }}
	{% endfor %}
""", variables: ["results": [3, 1, 2]]) // The results are: 6, 4 and 2

...定义宏...

let templateEngine = Tuxedo()
let _ = templateEngine.evaluate("{% macro concat(a, b) %}a + b{% endmacro %}")
let result = templateEngine.evaluate("{{ concat('Hello ', 'World!') }}") // Hello World!

...或块...

let templateEngine = Tuxedo()
let result = templateEngine.evaluate("""
<html>
	<head>
		<title>
			{% block title %}Website{% endblock %}
		</title>
	</head>
	<body>
		{% block body %}{% endblock %}
	</body>
</html>
""")

...稍后可以覆盖它们...

{% block title %} {{ parent() }} - Subpage {% endblock %}
{% block body %} Content {% endblock %}

Tuxedo可以处理您能想到的所有类型的表达式。它适用于数字类型、字符串、布尔值、日期、数组和字典。

您可以使用函数和运算符执行各种操作,如数值和逻辑操作、字符串处理、日期格式化、高级数组和字典操作等。

它既适用于硬编码的字符串输入,也适用于从磁盘写入的模板文件。

🙋贡献

欢迎任何人为这个伟大的项目做出贡献!只需发起问题或Pull Request,开始对话!

👤作者

我是Laszlo Teveli,软件工程师,iOS布道师。在业余时间,我喜欢做我的兴趣爱好项目并将它们开源。😉

您可以通过tevelee [at] gmail [dot] com@tevelee在Twitter上随时联系我。

⚖️许可证

Tuxedo遵守Apache 2.0许可规则。有关更多信息,请参阅许可证文件。