[load-library [path/join directories/loader "youki-article"]] [define [template article aux] [util/trace { [html5-doctype] [tags/html { [tags/head { [tags/meta [html-attributes [charset "utf-8"]]] [tags/title article/title] }] [tags/body [tags/article { [tags/h1 article/title] [= article/body] }]] }] }]] [define [template/inject s] [begin [define [s/title content] [setf s/current-article/title content]] ]] [[macro template article [invoke youki-article template article '[= 333]]] template]:: [title {Youki · 有纪}] Youki 是一个文档生成语言,其具备完整的编程特性和完备的宏特性,使之可作任意复杂的文章。Youki 是完全开放源码的,依照 MIT 协议发布。 [section {目录}]: # 文法 # 章句 # 算式 # 抄录 # 它们的组合 # 预定义函数和宏 # 基础 # 高级 # 有纪华章 [section "文法"]: Youki 文章是由许多种元素组合而成,主要的是**章句**、**算式**和**抄录**。它们可以相互穿插嵌套,这也是 Youki 强大能力的来源。 [section {章句}]: Youki 使用章句以表示文字。一段章句用花括弧围住,形如: [pre]| {这样。} 当然也可以更复杂,比如包含若干个段落,类似 [pre]| { 这里的情形。 章句中的段落用空行分隔,一个段落可以包含多行,方便 组织比较复杂的文字。 同一份章句中的段落必须相同缩进,每一行也是如此。 不过你可以通过花括弧来组织缩进。花括弧 { 里面是另一份章句,对于外面来说只相当于一个字。 在花括弧里的段落可以增加缩进,只要其中的内容缩进保持一致即可。 { 其实也可以减少缩进 :) } }。 } 在章句里也可以包含列表,它们 [pre]| - 由一系列的项目组成 - 每一项占据一行 + 列表表头可以是加号、减号或者井号 + 表头相同的算作同一个列表 # 使用井号可以得到有数字编号的列表 + 列表的每一项只能有一行 + 不过可以 - 包含子列表 - 子列表 # 可以有很多层 # 很多内容 + 当然,任何时候都可以通过 { 花 括 弧 } 来包含更复杂的内容 不过只有段落和列表,对于生成文章来说仍然远远不够,因此 Youki 支持一种基于缩进的格式,可以插入任意复杂的模式。要使用它,你需要 [pre]| [一个算式调用]: 后面加上冒号 然后就是缩进了的章句节。 Youki 中绝大多数更复杂的文章组件都是用这种方式提供的,例如, [pre]| [blockquote]: 使用 `[blockquote]:` 就可以创建引文区段 程序员有时候会需要在文章中添加代码块,这些东西都是预先排版好的文字块,我们不想把它当成段落或者列表排版。为了处理这种情形,Youki 的做法是将上面那种「算式-冒号」中的冒号 `:` 替换成竖线 `|`,之后被缩进的地方保持原样,类似 [pre]| [pre]| 这个样子。 [highlight javascript]| // 于是你就可以在这里放源码了