TreeRewriteStage

Pipeline stage that rewrites the AST after function call expansion to apply user-defined extensions to Markdown primitives.

Primitive nodes that implement com.quarkdown.core.ast.attributes.primitive.PrimitiveFunctionBackedNode (e.g. headings) are wrapped into a com.quarkdown.core.ast.quarkdown.FunctionCallNode whenever their backing function has been wrapped via .extend, then immediately expanded so the wrapper output replaces the original primitive. This is the mechanism that lets .extend {heading} affect both .heading {...} calls and plain # Markdown syntax.

As an optimization, the rewrite is skipped entirely when no extension is registered in the context, which is the common case.

See also

for the underlying traversal logic

Properties

Link copied to clipboard
open override val hook: KProperty1<PipelineHooks, Pipeline.(AstRoot) -> Unit>

A hook function that is invoked after the stage completes processing.

Functions

Link copied to clipboard
open fun execute(input: AstRoot, data: SharedPipelineData): AstRoot

Executes this pipeline stage with the given input and shared data.

Link copied to clipboard

Utility function to execute a pipeline stage that takes Unit as input.

Link copied to clipboard
open fun invokeHook(data: SharedPipelineData, input: AstRoot, output: AstRoot)

Invokes the hook function for this stage, if one is defined.

Link copied to clipboard
open override fun process(input: AstRoot, data: SharedPipelineData): AstRoot

Processes the input I and produces an output O.

Link copied to clipboard
infix fun <A, B, C> PipelineStage<A, B>.then(next: PipelineStage<B, C>): PipelineStage<A, C>

Chains two pipeline stages together to form a new pipeline stage.

Link copied to clipboard

Conditionally chains this pipeline stage with next if it is not null.