Nodejs版Cirru项目介绍,一套基于缩进的语法
Nodejs版Cirru项目介绍,一套基于缩进的语法
Cirru 是我的个人项目, 定义了一套基于缩进的语法, 然后这个语法很容易解析到语法树, 就可以用来玩和做一些比较有趣的事情, 但是我发现最有用的功能是用 Cirru 来替代 HTML 语法生成 HTML
比如这样一段 HTML, 不考虑缩进的话:
<meta charset="utf-8">
<div class="demo-a demo-b" data="root node">demo of text
<span>nothing</span>plain text</div>
<div id="entry" class="c demo"></div>
<div class="demo"></div>
<div id="demo">content</div>
<div class="class-a"></div>
我可以在 Cirru 的语法上加上一些特殊符号, 写成这样:
meta (:charset utf-8)
div (:class demo-a demo-b)
= demo of text
:data root node
span $ = nothing
= plain text
#entry.demo (:class c)
div.demo
div#demo $ = content
.class-a
主页刚刚更新 http://cirru.org/ GitHub 主页是 https://github.com/cirru 一个 Twitter 帐号 https://twitter.com/cirrulang
页面上都是抓子项目 README 生成的文档, 都是英文的… 相关的项目有下面这些… 都是很小的项目, 但是数量看起来, 呵呵:
- Parser
- Cirru Parser in CoffeeScript
- Cirru Parser in Go
- Evaluater
- Evaluater in Go
- Evaluater in CoffeeScript
- Cirru Shell
- Cirru Table: concept of debugging
- Converter
- Convert JSON to Cirru
- Convert Cirru to Mustache
- HTML templating in Cirru
- Write JavaScrip AST with Cirru
- Editor Support
- Sublime Text Package
- Cirru Editor
- Brackets Package
- CodeMorror support
- Ace Editor support
- Atom Editor support
- Highlighting
- Rainbow Plugin
- Highlight.js fork with Cirru syntax
- Pygments fork with Cirru syntax
- Custom-made Syntax Highlighting
又一个jade么?性能呢
我的功能少了一个数量级, 所以还没想过去测试性能… 要不给的 case 我用 Cirru HTML 写对应的看看?
是有多不想直接写HTML啊。。。
说到关键了, 但还可以再深入一点, 我造这个语法的原因, 花括号和尖括号这类语法, 一来干扰视线, 二来干扰思考代码的流程, 不能忍
生成html的话让我想起了jade
高大上的东西, 这个不好搞呀, 加油
看起来比较酷, 不过不前搞的没涉及深层的知识, 暂时还可以
特别好
看来有很多人不喜欢括号啊,甚至都有点极端了,
嗯, 做出来可以不用, 但是应该有人去做.
Nodejs 版 Cirru 项目提供了一种基于缩进的语法来简化编写结构化文本(如 HTML)的过程。这种语法可以轻松地被解析成语法树,并用于各种有趣的应用。
例如,我们可以使用 Cirru 语法来简化 HTML 的编写:
示例 HTML:
<meta charset="utf-8">
<div class="demo-a demo-b" data="root node">demo of text
<span>nothing</span>plain text
</div>
<div id="entry" class="c demo"></div>
<div class="demo"></div>
<div id="demo">content</div>
<div class="class-a"></div>
相应的 Cirru 语法:
meta (:charset utf-8)
div (:class demo-a demo-b)
= demo of text
:data root node
span $ = nothing
= plain text
#entry.demo (:class c)
div.demo
div#demo $ = content
.class-a
解释:
(:charset utf-8)
对应<meta charset="utf-8">
div (:class demo-a demo-b)
对应<div class="demo-a demo-b">
:data root node
对应data="root node"
span $ = nothing
对应<span>nothing</span>
#entry.demo (:class c)
对应<div id="entry" class="c demo"></div>
如何使用 Nodejs 处理 Cirru 语法?
你可以使用 JavaScript 和 Nodejs 解析 Cirru 语法。下面是一个简单的示例:
const parseCirru = require('cirru-parser');
const cirruCode = `
meta (:charset utf-8)
div (:class demo-a demo-b)
= demo of text
:data root node
span $ = nothing
= plain text
`;
const ast = parseCirru(cirruCode);
console.log(ast);
这段代码会将 Cirru 语法解析为一个抽象语法树(AST),便于进一步处理和转换。
总结
Nodejs 版 Cirru 项目提供了一种更简洁、更易读的方式来编写结构化文本,如 HTML。通过解析器将其转换为 AST,可以方便地进行后续处理或生成最终的输出。