可转换的上下文
当 Asciidoctor 转换文档时,它会在遍历文档中的每个节点(块或内联元素)时,将转换委托给转换器来处理(尽管实际上是块的 #content 方法继续遍历其子节点)。然后,Asciidoctor 将所有这些调用的结果组合起来,生成输出文档。
要转换节点,Asciidoctor 会调用转换器上的 convert 方法并将节点传递进去。在某些情况下,它还会传递一个额外的转换值(例如 embedded),以区分同一上下文节点的不同使用场景。当 Asciidoctor 使用扩展 Asciidoctor::Converter::Base 的转换器时,转换器会将调用委托给一个名称以 convert_ 开头,后跟节点上下文的方法(例如 convert_paragraph)。
下表列出了 Asciidoctor 转换的所有内置节点上下文,以及基础转换器将查找的方法名称。扩展可以引入额外的上下文。
| 上下文 | 基础转换器上的转换方法 |
|---|---|
:admonition |
convert_admonition |
:audio |
convert_audio |
:colist |
convert_colist |
:dlist |
convert_dlist |
:document |
convert_document |
:embedded |
convert_embedded |
:example |
convert_example |
:floating_title |
convert_floating_title |
:image |
convert_image |
:inline_anchor |
convert_inline_anchor |
:inline_break |
convert_inline_break |
:inline_button |
convert_inline_button |
:inline_callout |
convert_inline_callout |
:inline_footnote |
convert_inline_footnote |
:inline_image |
convert_inline_image |
:inline_indexterm |
convert_inline_indexterm |
:inline_kbd |
convert_inline_kbd |
:inline_menu |
convert_inline_menu |
:inline_quoted |
convert_inline_quoted |
:listing |
convert_listing |
:literal |
convert_literal |
:olist |
convert_olist |
:open |
convert_open |
:outline |
convert_outline |
:page_break |
convert_page_break |
:paragraph |
convert_paragraph |
:preamble |
convert_preamble |
:quote |
convert_quote |
:section |
convert_section |
:sidebar |
convert_sidebar |
:stem |
convert_stem |
:table |
convert_table |
:thematic_break |
convert_thematic_break |
:toc |
convert_toc |
:ulist |
convert_ulist |
:verse |
convert_verse |
:video |
convert_video |
转换器不会被调用来处理具有 :list_item 或 :table_cell 上下文的节点。相反,转换器需要从父节点访问这些节点并直接转换它们。这是因为列表项和表格单元格不是真正的块,它们具有复合结构,并且通常需要父节点的信息或标记才能正确转换它们。有关如何处理它们的详细信息,请参阅内置转换器。 |
当调用用于转换块的方法时,内联标记尚未解析。解析和后续转换发生在节点上调用 #content 方法时。这也会触发处理器访问该块的子节点。
一些用于转换块的方法需要处理由样式指示的特殊行为。例如,convert_listing 方法还处理源块(具有源样式的列表块)。而 convert_dlist 处理问答列表(具有问答样式的 dlist 块)。
:embedded 不是一个真正的上下文,而是 :document 上下文的一种转换。当文档以嵌入模式加载时(即,处理器上的 :standalone 选项为 false),将调用其转换方法而不是 :document 的方法。