【翻译】Scriban README 文本模板语言和.NET引擎
scriban
Scriban是一种快速、强大、安全和轻量级的文本模板语言和.NET引擎,具有解析liquid模板的兼容模式
Github
目录
- 【翻译】Scriban是一种快速、强大、安全和轻量级的文本模板语言和.NET引擎,具有解析liquid模板的兼容模式
- 【翻译】 Scriban language
- 【翻译】Scriban runtime
// Parse a scriban template
var template = Template.Parse("Hello {{name}}!");
var result = template.Render(new { Name = "World" }); // => "Hello World!"
使用Liquid语言解析Liquid模板:
// Parse a liquid template
var template = Template.ParseLiquid("Hello {{name}}!");
var result = template.Render(new { Name = "World" }); // => "Hello World!"
语言非常通用,易于阅读和使用,类似于liquid 模板:
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 });
注意
默认情况下, .NET对象的属性和方法会自动以小写和
_命名,这意味着像MyMethodIsNice这样的属性将被公开为my_method_is_nice.这是默认约定,最初是为了匹配liquid模板的行为。
如果要改变此行为,则需要使用MemberRenamer委托
特性
- 非常高效,快速 解析器和轻量级的运行时. 对CPU和垃圾收集器友好. 查看 benchmarks获取更多细节.
- 由Lexer / Parser提供一个完整的抽象语法树,fast, versatile and robust(快速,通用且强大), 比基于regex的解析器更高效
- 错误报告:能提供精确的源代码位置 ,包括(path, column and line)
- 将AST写入脚本文本的形式, 使用
Template.ToText, 可以操作内存中的脚本并将其重新保存到磁盘, 对于 roundtrip(往返)的脚本更新方案是有用的
- 兼容
liquid模板 可使用Template.ParseLiquid方法- 虽然
liquid语言不如scriban强大, 但该模式从liquid则更容易地迁移至scriban - 在 AST to text 模式下,将对模板
Template.ParseLiquid进行解析,替换成Template.ToText,即可将liquid脚本 转换成scriban脚本 - 由于 liquid 语言没有严格定义 并且它有着不同版本的liquid语法,在使用scriban的liquid模板时会有一些限制, 查看此文档了解详情 liquid support in scriban
- 虽然
- 可扩展的运行时 提供许多扩展点
- 支持
async/await的脚本支持 (e.gTemplate.RenderAsync) - 精确控制空白文本输出
- 完整的语言特性 包括
if/else/for/while, expressions (x = 1 + 2), conditions... etc. - 函数调用和管道 (
myvar | string.capitalize) - Complex objects (复杂对象) (javascript/json like objects
x = {mymember: 1}) and arrays (e.gx = [1,2,3,4]) - 通常由
wrap语句使用可以将 a block of statements (语句块) 传递给函数, - 一些内置函数:
- Multi-line statements(多行语句) 不必在每行都使用
{{...}} - Safe parser and safe runtime, 使您可以控制公开哪些对象和功能
Syntax Coloring(语法着色)
您可以安装 Scriban Extension for Visual Studio Code 获取 scriban 脚本 (without HTML) 和 scriban html文件的语法颜色提示
文档
- 有关语言语法的说明,请参阅语言文档。
- 内置函数见文档内置函数列表。
- 有关编译和运行模板的.NET运行时API的说明,请参阅运行时文档。
- 有关支持liquid模板的更多详细信息,请参阅[Liquid support]文档。
- 请参阅我的博客文章"实现.NET的文本模板引擎",了解一些幕后细节。
二进制包
Scriban提供一个可获取的 NuGet 包:
兼容以下 .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
Benchmarks(基准测试)
Scriban 速度极快! 更多细节, 你可以查看此文档 benchmarks(基准测试) 文档.
License
该软件是在BSD-Clause 2 license协议下发布的
相关项目
- dotliquid: Liquid模板语言的.NET端口。
- Fluid .NET liquid 模板引擎
- Nustache: .NET 无逻辑模板(Logic-less templates for .NET)
- Handlebars.Net: .NET port of handlebars.js
在线示例
- (https://scribanonline.azurewebsites.net/): ASP.NET Core Sample.
Credits
Adapted logo Puzzle by Andrew Doane from the Noun Project
作者
Alexandre Mutel aka xoofx.
【翻译】Scriban README 文本模板语言和.NET引擎的更多相关文章
- 使用DOT语言和Graphviz绘图(翻译)
Casa Taloyum About Me Blog Archives 使用DOT语言和Graphviz绘图(翻译) Date Wed 26 November 2014 Tags graphviz / ...
- C语言和C++篇
C语言和C++篇 基本上所有主流的编程语言都有String的标准库,因为字符串操作是我们每个程序员几乎每天都要遇到的.想想我们至今的代码,到底生成和使用了多少String!标题上所罗列的语言,可以看成 ...
- 从C,C++,JAVA和C#看String库的发展(一)----C语言和C++篇
转自: http://www.cnblogs.com/wenjiang/p/3266305.html 基本上所有主流的编程语言都有String的标准库,因为字符串操作是我们每个程序员几乎每天都要遇到的 ...
- CHENGDU1-Python编程语言和PEP8规范
CHENGDU1-Python编程语言和PEP8规范 PEP8规范6条? 答:PEP8规范说白了就是一种规范,可以遵守,也可以不遵守,遵守PEP8可以让代码的可读性更高. 代码编排:---缩进,4个空 ...
- 聊聊C语言和ABAP
这个公众号之前的文章,分享的都是Jerry和SAP成都研究院的同事在工作中学到的一些知识和感受.而今天这篇文章,写作的由来是因为最近我又参与了SAP成都数字创新空间应聘者的面试,和一些朋友聊了一些关于 ...
- 关于C#中文本模板(.tt)的简单应用
这两天做项目突遇 .tt文件,之前没有接触过,so查询学习做笔记,帮助记忆和后来者. 在项目添加中点击选择文本模板 下面贴出代码,做了简单的注释 <#@ template debug=" ...
- T4 文本模板编写准则
如果要在 Visual Studio 中生成程序代码或其他应用程序资源,遵守以下一般准则可能非常有帮助. 它们并不是一成不变的规则. 设计时 T4 模板准则 设计时 T4 模板是在设计时在 Visua ...
- 使用 T4 文本模板生成设计时代码
使用设计时 T4 文本模板,您可以在 Visual Studio 项目中生成程序代码和其他文件. 通常,您编写一些模板,以便它们根据来自模型的数据来改变所生成的代码. 模型是包含有关应用程序要求的 ...
- C语言和C++中动态申请内存
在C语言和C++的动态内存的使用方法是不同的,在C语言中要使用动态内存要包含一个头文件即 #include<malloc.h> 或者是#include<stdlib.h> ...
随机推荐
- IDEA+Maven+Tomcat构建Web项目的三种方法
[本文版权归微信公众号"代码艺术"(ID:onblog)所有,若是转载请务必保留本段原创声明,违者必究.若是文章有不足之处,欢迎关注微信公众号私信与我进行交流!] 本文将介绍三种方 ...
- linux 上设置mysql开机自启
此方式是通过安装包安装的,如果是yum安装的rpm包,可参考yum安装MySQL8.0 三个月之前安装的mysql,记得是设置了开机自启,但是今天再次进入的时候发现,无法登录,报错如下 原因是mysq ...
- JavaWeb网上图书商城完整项目--day03-1.图书模块功能介绍及相关类创建
1 前两天我们学习了user用户模块和图书的分类模块,接下来我们学习图书模块 图书模块的功能主要是下面的功能: 2 接下来我们创建对应的包 我们来看看对应的数据库表t_book CREATE TABL ...
- SSH网上商城二
1.实现的功能如下 当用户登陆成功之后,在首页显示所有的一级分类 显示热门商品 显示最新商品 当用户点击某个一级分类的菜单选项的时候,显示当前一级分类菜单项下所有的二级分类,并且按照分页的形式显示该二 ...
- java scoket Blocking 阻塞IO socket通信四
记住NIO在jdk1.7版本之前是同步非阻塞的,以前的inputsream是同步阻塞的,上面学习完成了Buffer现在我们来学习channel channel书双向的,以前阻塞的io的inputstr ...
- 【WPF】DataGrid多表头的样式设计
需求 在使用WPF开发时,使用DataGrid列表显示数据时,有些字段可以进行分组显示,用于更好的表达它们之间存在的某种关系,因此就考虑到要对DataGrid的表头进行扩展,可以显示多行表头,让这些有 ...
- P2220 [HAOI2012]容易题【快速幂】
题目描述 为了使得大家高兴,小Q特意出个自认为的简单题(easy)来满足大家,这道简单题是描述如下: 有一个数列A已知对于所有的A[i]都是1~n的自然数,并且知道对于一些A[i]不能取哪些值,我们定 ...
- 什么是JSTL标签库?
什么是JSTL? JSTL(JSP Standard Tag Library,JSP标准标签库)是一个不断完善的开放源代码的JSP标签库,是由apache的jakarta小组来维护的. 有什么作用? ...
- HTML5(四)Drag and Drop
HTML5 拖放(Drag 和 Drop) 拖放 拖放是一种常见的特性,即抓取对象以后拖到另一个位置. 在 HTML5 中,拖放是标准的一部分,任何元素都能够拖放. 设置元素为可拖放 首先,为了使元素 ...
- Flv.js文档使用随记
关键字:Flv.js | Flv js | Flv-js | HTML5 FLV Player | 0x001: 前言以下涉及到 flv.js 所有内容均是V1.5.0版本内的,如方法.属性.常量.监 ...