当Asciidoctor转换一个文档时,它会委托转换器按文档顺序访问每个节点(块或内联元素)时转换每个节点(尽管是块的`#content`方法继续对其子节点的遍历)。然后,Asciidoctor结合所有这些调用的结果来生成输出文档。

为了转换一个节点,Asciidoctor会调用转换器上的`convert`方法,并传入节点。在某些情况下,它还会传入一个额外的转换值(例如,embedded),以区分相同上下文的节点的不同使用情况。当Asciidoctor使用扩展了`Asciidoctor::Converter::Base`的转换器时,转换器会将调用委托给一个方法,该方法的名称以`convert_`开头,后面跟着节点的上下文(例如,convert_paragraph)。

以下表格列出了Asciidoctor转换的所有内置节点的上下文,以及基础转换器将要查找的方法名称。扩展可以引入额外的上下文。

Table 1. 由转换器转换的节点内建的上下文环境
Context Convert method on base converter

: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 方法处理问答列表(具有问答样式的定义列表块)。

:embedded` 不是一个真正的上下文,而是 :document 上下文的一个转换。当文档以嵌入式模式加载(即处理器的 :standalone 选项为 false)时,会调用它的转换方法,而不是 :document 的。