Scriban 模板语言
# Scriban 模板语言
# 目录
- 【翻译】Scriban是一种快速、强大、安全和轻量级的文本模板语言和.NET引擎,具有解析liquid模板的兼容模式 (opens new window)
- 【翻译】 Scriban language( 待完成)
- 【翻译】Scriban runtime( 待完成)
# 原文Github:https://github.com/lunet-io/scriban#readme
(opens new window) (opens new window) (opens new window)
Scriban是一种快速、强大、安全和轻量级的文本模板语言和.NET引擎,具有解析liquid
模板的兼容模式
// Parse a scriban template
var template = Template.Parse("Hello {{name}}!");
var result = template.Render(new { Name = "World" }); // => "Hello World!"
2
3
使用Liquid语言解析Liquid模板:
// Parse a liquid template
var template = Template.ParseLiquid("Hello {{name}}!");
var result = template.Render(new { Name = "World" }); // => "Hello World!"
2
3
语言非常通用,易于阅读和使用,类似于liquid (opens new window) 模板:
var template = Template.Parse(@"
<ul id='products'>
{{ for product in products }}
<li>
<h2>{{ product.name }}</h2>
Price: {{ product.price }}
{{ product.description | string.truncate 15 }}
</li>
{{ end }}
</ul>
");
var result = template.Render(new { Products = this.ProductList });
2
3
4
5
6
7
8
9
10
11
12
注意
默认情况下, .NET对象的属性和方法会自动以小写和
_
命名,这意味着像MyMethodIsNice
这样的属性将被公开为my_method_is_nice
.这是默认约定,最初是为了匹配liquid
模板的行为。 如果要改变此行为,则需要使用MemberRenamer
委托
# 特性
- 非常高效,快速 解析器和轻量级的运行时. 对CPU和垃圾收集器友好. 查看
- benchmarks (opens new window)获取更多细节.
- 由Lexer / Parser提供一个完整的抽象语法树,fast, versatile and robust(快速,通用且强大), 比基于regex的解析器更高效
- 错误报告:能提供精确的源代码位置 ,包括(path, column and line)
- 将AST写入脚本文本的形式, 使用
Template.ToText
(opens new window), 可以操作内存中的脚本并将其重新保存到磁盘, 对于 roundtrip(往返)的脚本更新方案是有用的
- 兼容
liquid
模板 可使用Template.ParseLiquid
方法- 虽然
liquid
语言不如scriban
强大, 但该模式从liquid
则更容易地迁移至scriban
- 在 AST to text (opens new window) 模式下,将对模板
Template.ParseLiquid
进行解析,替换成Template.ToText
,即可将liquid
脚本 转换成scriban
脚本 - 由于 liquid 语言没有严格定义 并且它有着不同版本的liquid语法,在使用scriban的liquid模板时会有一些限制, 查看此文档了解详情 liquid support in scriban (opens new window)
- 虽然
- 可扩展的运行时 提供许多扩展点
- 支持
async
/await
的脚本支持 (e.gTemplate.RenderAsync
) - 精确控制空白文本输出 (opens new window)
- 完整的语言特性 (opens new window) 包括
if
/else
/for
/while
, expressions (x = 1 + 2
), conditions... etc. - 函数调用和管道 (opens new window) (
myvar | string.capitalize
)- 自定义函数 (opens new window) 通过
func
语句直接将函数自定义到语言中 通过alias @ directive
可使用function pointers/delegates - 从runtime API绑定 .NET自定义函数 (opens new window),并提供许多与.NET对象接口的选项 (opens new window) 。
- 自定义函数 (opens new window) 通过
- Complex objects (复杂对象) (javascript/json like objects
x = {mymember: 1}
) and arrays (opens new window) (e.gx = [1,2,3,4]
) - 通常由
wrap
语句使用可以将 a block of statements (语句块) (opens new window) 传递给函数, - 一些内置函数 (opens new window):
- Multi-line statements 多行语句 (opens new window) 不必在每行都使用
{{...}}
- Safe parser (opens new window) and safe runtime (opens new window), 使您可以控制公开哪些对象和功能
# Syntax Coloring(语法着色)
您可以安装 Scriban Extension for Visual Studio Code (opens new window) 获取 scriban 脚本 (without HTML) 和 scriban html文件的语法颜色提示
# 文档
- 有关语言语法 (opens new window)的说明,请参阅语言文档。
- 内置函数见文档内置函数 (opens new window)列表。
- 有关编译和运行模板的.NET运行时API的说明,请参阅运行时 (opens new window)文档。
- 有关支持liquid模板的更多详细信息,请参阅[Liquid support]文档。
- 请参阅我的博客文章"实现.NET的文本模板引擎 (opens new window)",了解一些幕后细节。
# 二进制包
Scriban提供一个可获取的 NuGet 包: (opens new window)
兼容以下 .NET framework 版本:
- .NET Framework 3.5
- .NET Framework 4.0
- .NET Framework 4.5+ (supports asynchronous code and timeouts for regular expressions)
- .NET Standard1.1+ (some features are not available)
- .NET Standard1.3+ (which means .NET Core, Xamarin, UWP, Unity etc.)
还有提供签名的NuGet包 Scriban.Signed (opens new window)
# Benchmarks(基准测试)
Scriban 速度极快! 更多细节, 你可以查看此文档 benchmarks(基准测试) 文档 (opens new window).
# License
该软件是在BSD-Clause 2 license (opens new window)协议下发布的
# 相关项目
- dotliquid (opens new window): Liquid模板语言的.NET端口。
- Fluid (opens new window) .NET liquid 模板引擎
- Nustache (opens new window): .NET 无逻辑模板(Logic-less templates for .NET)
- Handlebars.Net (opens new window): .NET port of handlebars.js
# 在线示例
- (https://scribanonline.azurewebsites.net/): ASP.NET Core Sample.
# Credits
Adapted logo Puzzle
by Andrew Doane (opens new window) from the Noun Project
# 作者
Alexandre Mutel aka xoofx (opens new window).