使用 API 加载和转换字符串

本页介绍如何使用 API 加载和转换 AsciiDoc 字符串。字符串是原始的 AsciiDoc 内容(通常是文件的内容)。

加载 AsciiDoc 字符串

要将 AsciiDoc 字符串解析为文档对象模型,请使用

doc = Asciidoctor.load '*This* is Asciidoctor.'

您也可以从文件读取 AsciiDoc 并将其传递给 load 方法

asciidoc = File.read 'document.adoc', mode: 'r:utf-8'
doc = Asciidoctor.load asciidoc, safe: :safe

加载文档后,可以通过调用 convert 方法将其转换为

doc.convert

但是,如果您只对使用 API 时转换 AsciiDoc 源代码感兴趣,那么最好使用 convert 入口点。

转换 AsciiDoc 字符串

要直接将 AsciiDoc 字符串转换为 HTML,请使用

puts Asciidoctor.convert '*This* is Asciidoctor.'

您将看到的输出如下

<div class="paragraph">
<p><strong>This</strong> is Asciidoctor.</p>
</div>

您也可以从文件读取 AsciiDoc 并将其传递给 convert 方法

asciidoc = File.read 'document.adoc', mode: 'r:utf-8'
html = Asciidoctor.convert asciidoc, safe: :safe

转换字符串时,Asciidoctor 默认*不*输出独立文档。相反,它会生成嵌入式输出。让我们了解原因以及如何控制它。

嵌入式输出

当您将 AsciiDoc 字符串传递给 Asciidoctor.convert 以将其转换为后端格式(如 HTML)时,:standalone 选项默认设置为 false。这意味着此方法仅返回转换后的内容。此内容不包括独立文档中的内容框架(即页眉和页脚)。换句话说,它创建了一个*嵌入式*文档。选择此默认值是为了使 Asciidoctor 与 Markdown 等其他轻量级标记处理器保持一致。

嵌入式文档中包含以下内容

  • 如果设置了 showtitle 属性,则包含文档标题

  • 如果设置了 toc 属性且其值不是 preamble,则包含目录

  • 转换后的文档正文

  • 页脚(除非设置了 nofootnotes 属性)

作者和修订信息从不在嵌入式文档中显示。如果您需要显示这些信息,可以使用属性引用,例如 {author}{revnumber}

嵌入式文档旨在包含在模板中,例如静态站点生成器提供的模板。该模板负责提供内容正确呈现所需的样式和库集成。

独立输出

您仍然可以在转换字符串时生成独立文档。要将 AsciiDoc 字符串转换为独立输出文档,您需要显式将 :standalone 选项设置为 true

puts Asciidoctor.convert '*This* is Asciidoctor.', standalone: true

现在您将获得一个完整的 HTML 文件。独立输出提供了内容周围的框架,其中包括样式以及内容正确呈现所需的所有库集成(例如,默认样式表、MathJax 等)。如果您不将 :standalone 选项设置为 true,您将只获得嵌入式文档(即正文内容)。

当输入或输出是文件时,:standalone 选项默认启用。因此,要指示 Asciidoctor 从 AsciiDoc 字符串将独立 HTML 写入文件,:to_file 选项是强制性的。

Asciidoctor.convert '*This* is Asciidoctor.', to_file: 'out.html'

如果您想在以文件开始时生成嵌入式输出,请将 :standalone 选项设置为 false。但是,大多数时候您会在转换文件时生成独立文档(这就是为什么它是默认设置)。

转换字符串时,默认情况下仅在使用 :standalone 选项时(如上所示,无论是隐式还是显式启用)才包含 TOC。但是,您可以通过将 toc 属性设置为 macro 并使用字符串本身的 toc::[] 宏来强制包含它,而不包含页眉和页脚。

仅转换内联标记

如果您只想返回内联标记,请将 :doctype 选项设置为 'inline'

puts Asciidoctor.convert '*This* is Asciidoctor.', doctype: 'inline'

在此模式下,Asciidoctor 将只处理文档中的第一个块(例如,段落)并忽略其余部分。

转换为 DocBook

您可以通过将 :backend 选项设置为 'docbook' 来生成 DocBook 5.0。由于嵌入式 DocBook 作用不大,我们还通过将 :standalone 选项设置为 true 来启用独立文档(即页眉和页脚)。

puts Asciidoctor.convert '*This* is Asciidoctor.', standalone: true, backend: 'docbook'