扩展是 AsciiDoc 成功的关键,因为它们使得这种语言能够应对新的使用案例。Asciidoctor 提供了一个[扩展 API^]{url-api-gems}/asciidoctor/{release-version}/Asciidoctor/Extensions,它提供了一组超集的扩展点。因此,Asciidoctor 中的扩展既容易编写,又强大,而且分发简单。
Asciidoctor 还允许使用完整的编程语言(无论是 Ruby、Java、Groovy 还是 JavaScript)编写扩展。你无需为了获得你想要的功能而去做无谓的工作,而且你可以使用像 gems 或 JARs 这样的事实标准包装机制来分发扩展。
可用扩展点
Asciidoctor 提供了以下扩展点:
- 预处理器
-
处理原始源代码行,在它们被传递给解析器之前。参见preprocessor.html。
- 树处理器
-
解析完成后处理[.class]Asciidoctor::Document(抽象语法树)。请参阅tree-processor.html。
- 后处理器
-
在文档转换后处理输出,但在写入磁盘之前。请参阅postprocessor.html。
- 文档信息处理器
-
在生成的文档的头部或尾部区域添加额外的内容。参见docinfo-processor.html。
- 块处理器
-
处理用自定义区块样式(比如
[custom]
)标记的内容块。(类似于AsciiDoc过滤器)请参见block-processor.html。 - 复合块处理器
-
注册一个名为`collapsible`的自定义块,它可以将一个列表块转换成一个复合块。参见 compound-block-processor.html。
- 块宏处理器
-
注册一个自定义的块宏并处理它(例如,
gist::12345[]
)。参见block-macro-processor.html。 - 内联宏处理器
-
注册一个自定义的内联宏并处理它(例如,
btn:[Save]
)。请参阅inline-macro-processor.html。 - 包括处理器
-
处理
include::<filename>[]
指令。参见 include-processor.html。
在https://github.com/asciidoctor/asciidoctor-extensions-lab[Asciidoctor扩展实验室^]中有更多的扩展示例。