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.
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
).