在AsciiDoc中,一个限定块是一个内容区域,它被一对内容相同的行界定符所包围。限定块被用来包含其他块(例如,多个段落)或设置内容模型(例如,逐字记录)。限定块是AsciiDoc所有块类型中的一个子集。
概述
"分隔块是使用结构容器来定义的,这些容器是AsciiDoc语法中固定的一套可识别的块封闭结构。下面是文字块的结构容器:"
.... This text will be treated as verbatim content. ....
一个结构性容器有一个起始界定符和一个结束界定符。起始界定符跟随在区块元数据后面,如果有的话。结构性容器中的首尾空行并不被认为有意义,会被自动移除。剩余的行定义了一个区块的内容。
这些封闭不仅界定了区块内容的边界,而且也意味着一种内容模型(例如,逐字内容或子树)。在某些情况下,它们提供了嵌套区块的机制。然而,限定的区块不能交错在一起。
一个定界块具有独特的能力,可以通过AsciiDoc语法的内置映射和扩展定义的自定义块映射来重新定位。要理解定界块是如何工作的,重要的是要理解结构容器、它们的逐行分隔符、它们的默认上下文以及它们的预期内容模型,以及块嵌套和伪装。
行分隔符
一个定界的块由一对相同的行级定界符特征定义。开头和结尾的定界符必须完全相同,无论是长度还是字符序列。这些定界符,有时被称为围栏,包围内容并明确标示其边界。在定界块的边界内,你可以输入任何内容或空行。块不会结束,直到找到结束定界符。块元数据(块属性和锚点行)位于开头定界符的上方(因此在定界区域之外)。
这是一个限定示例块的例子:
==== 这是一个示例块的例子。 那太元了。 ====
通常,分隔符使用最小允许长度(4个字符)编写,开放区块的分隔符除外,目前它有一个固定长度的2个字符。分隔符行的长度可以变化,以适应嵌套的区块。
用于定义界定块的有效分隔符集合,以及它们所具有的含义,是由接下来将介绍的可用结构容器所定义的。
结构容器
结构容器是AsciiDoc语言定义的一组固定的已识别的块封闭结构(限定区域)。这些封闭结构在AsciiDoc语法中提供了一个可重用的构建块。通过评估结构容器和块元数据,处理器将确定制作哪种类型的块。
每个结构容器都有一个预期的内容模型。对于内置的块,它的上下文决定了内容模型,尽管大多数内置块都遵循预期的内容模型。自定义块有能力指定内容模型。即便在这些情况下,选择内容模型也应该尊重结构容器的语义。
一些结构容器被用于不同的用途,比如用于引用块的结构容器被用于诗歌块。
结构容器概要
下表列出了结构容器,记录了每个容器的名称、默认上下文和分隔线。
类型 | 默认上下文 | 内容模型(预期的) | 最小分隔符 |
---|---|---|---|
注释 |
|
不适用 |
//// |
例子 |
|
复合物 |
==== |
listing |
|
verbatim |
---- |
literal |
|
verbatim |
.... |
打开 |
|
复合 |
—— |
sidebar |
|
compound |
**** |
table |
|
table |
|=== ,=== :=== !=== |
pass |
|
raw |
++++ |
引用 |
|
复合 |
____ |
你可能会注意到缺少源代码块。这是因为源代码不是一种容器类型。实际上,它是由块风格指定的列表(或字面)容器的特殊化。诗歌和警告块也明显缺失。那是因为它们分别重新利用了引用和示例块的结构容器。
当没有明确的块样式存在时,默认上下文被假定。
目前,表格是一种特殊的结构容器,不能作为自定义块进行列举。
与其他结构容器不同,注释块在解析的文档中不会被保留,因此没有上下文或内容模型。
Tip
|
在创建自定义块时,选择提供正确内容模型的结构容器非常重要。这可以让文本编辑器理解如何解析这个块,并在扩展未加载时提供合理的后备选项。 |
结构容器用于定义有界限的区块。结构容器提供了默认的上下文和预期的内容模型,但实际的上下文和内容模型则是在考虑了区块上的元数据(特别是声明的区块内容)之后确定的。
嵌套块
使用分隔块,您可以将一个块嵌套在另一个块内部。(块也可以嵌套在章节、列表项和表格单元格内,这是一个单独的话题)。
首先,父块必须具有复合内容模型。复合内容模型意味着块的内容是由零个或多个块组成的序列。
当嵌套一个使用与父容器不同的结构容器的块时,只需确保子块完全位于父块内部。界定的块不能交错放置。
====
这里是一个示例AsciiDoc文档:
====
----
= 文件标题
作者姓名
内容在这里。 ----
文档头部是有用的,但不是必需的。 ====
当嵌套使用相同结构容器的分隔块时,有必要改变分隔线的长度(即,使子块的分隔线长度与父块的分隔线长度不同)。改变分隔线的长度可以让解析器区分不同的块。
这里是你的选项: .Red Pill [%collapsible] ====== Escape into the real world. ====== .Blue Pill [%collapsible] ====== 生活在模拟的现实中,没有渴望或恐惧。 ====== ====
嵌套的结构性容器的分隔符长度可以比父容器短也可以长。这是个人风格的选择。