Convertible Contexts

When Asciidoctor converts a document, it delegates to the converter to convert each node (block or inline element) in the document as it visits each node in document order (though it’s the #content method on a block that continues the traversal of its child nodes). Asciidoctor then combines the result of all those calls to produce the output document.

To convert a node, Asciidoctor calls the convert method on the converter and passes in the node. In some cases, it also passes in an extra transform value (e.g., embedded) to differentiate between different uses cases for a node of the same context. When Asciidoctor is using a converter that extends Asciidoctor::Converter::Base, the converter will delegate the call to a method whose name starts with convert_ and is followed by the context of the node (e.g., convert_paragraph).

The following table lists the contexts for all the built-in nodes that Asciidoctor converts, along when the name of the method the base converter will look for. Extensions can introduce additional contexts.

The built-in contexts of nodes that are converted by the converter
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

The converter is not called to handle nodes with the :list_item or :table_cell contexts. Instead, it’s up to the converter to access these nodes from the parent node and convert them directly.

When a method to convert a block is called, the inline markup has not yet been parsed. That parsing and subsequent conversion happens when the #content method is called on the node. This is also what triggers the processor to visit the child nodes of that block.

Some methods for converting blocks have to handle the specialized behavior as indicated by the style. For example, the convert_listing method also handles source blocks (listing blocks with the source style). And convert_dlist handles qanda lists (dlist blocks with the qanda style).

:embedded is not a true context, but rather a transform of the :document context. It’s convert method is called instead of the one for :document when the document is loaded in embedded mode (i.e., the :standalone option on the processor is false).