可转换的上下文

当 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 的方法。