当Asciidoctor转换一个文档时,它会委托转换器按文档顺序访问每个节点(块或内联元素)时转换每个节点(尽管是块的`#content`方法继续对其子节点的遍历)。然后,Asciidoctor结合所有这些调用的结果来生成输出文档。
为了转换一个节点,Asciidoctor会调用转换器上的`convert`方法,并传入节点。在某些情况下,它还会传入一个额外的转换值(例如,embedded
),以区分相同上下文的节点的不同使用情况。当Asciidoctor使用扩展了`Asciidoctor::Converter::Base`的转换器时,转换器会将调用委托给一个方法,该方法的名称以`convert_`开头,后面跟着节点的上下文(例如,convert_paragraph
)。
以下表格列出了Asciidoctor转换的所有内置节点的上下文,以及基础转换器将要查找的方法名称。扩展可以引入额外的上下文。
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
的。