/youki

The Eido Evoluted.

Primary LanguageJavaScriptMIT LicenseMIT

[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]|
				// 于是你就可以在这里放源码了