Asciidoctor的HTML5转换器内置了一个用于生成HTML目录(TOC)的方法。这个TOC生成器也可以作为通用API使用。这个逻辑通过HTML5转换器上的`convert_outline`方法可用(这是`outline`节点的转换方法)。
使用方法
convert_outline` 方法接受一个 Document 对象以及一个可选的选项的散列表,它返回 HTML。可以使用以下代码片段以通用方法的形式解析和调用它:
document = Asciidoctor.load_file 'document-with-sections.adoc', safe: :safe html_toc = (Asciidoctor::Converter.create 'html5').convert_outline document puts html_toc
这是这个方法生成的一个例子:
<ul class="sectlevel1">
<li><a href="#_section_a">Section A</a></li>
<li><a href="#_section_b">Section B</a>
<ul class="sectlevel2">
<li><a href="#_subsection">Subsection</a></li>
</ul>
</li>
<li><a href="#_section_c">Section C</a></li>
</ul>
您也可以通过文档 API 的方式,访问转换器实例上的 convert_outline
方法。
document = Asciidoctor.load_file 'document-with-sections.adoc', safe: :safe html_toc = document.converter.convert_outline document
如果你在使用一个复合转换器,你可以使用通用的 convert
方法来确保调用会经过转换器链。为此,调用 convert
方法,并传入 Document 对象和节点名 outline
。这将依次在链中对此方法有响应的转换器上调用 convert_outline
方法。
document = Asciidoctor.load_file 'document-with-sections.adoc', safe: :safe html_doc = document.converter.convert document, 'outline'
您也可以在任何转换器模板(例如,Slim、Haml或ERB)内使用这种方法来生成和嵌入目录:
= 转换器.转换 文档, '大纲'
选项
convert_outline` 方法接受以下选项:
- 段落数量级别
-
段落数量级的编号(默认为`sectnumlevels`属性的值)。
- 目录级别
-
TOC的深度(默认为`toclevels`属性的值)
这是一个如何为之前加载的文档生成深度限制为1的HTML目录的示例:
html_toc = document.converter.convert_outline document, toclevels: 1