Genre-specific traversal.
The traversal pass is where cross-references are resolved. The traversal pass repeatedly applies a genre-specific stateful computation until a fixed point is reached, both with respect to the state and the document. Traversal may update the state or rewrite parts of the document.
The methods part, block, and inline provide effects to be carried out before traversing the
given level of the AST, and part allows the part's metadata to be updated.
genrePart is carried out after part. It allows genre-specific rewriting of the entire part based
on genre-specific metadata. This is typically used to construct a table of contents or permalinks,
but it can in principle arbitrarily rewrite the part. inPart is used to locally transform the
genre's traversal context along the lines of withReader, and can be used to keep track of e.g. the
current position in the table of contents.
genreBlock and genreInline are invoked when traversal encounters Block.other and
Inline.other. It may rewrite them, or have state effects.
Instance Constructor
Verso.Doc.Traverse.mk
Methods
part : [MonadReader g.TraverseContext m] → [MonadState g.TraverseState m] → Doc.Part g → m (Option g.PartMetadata)
The effects carried out before traversing a Part.
block : [MonadReader g.TraverseContext m] → [MonadState g.TraverseState m] → Doc.Block g → m Unit
The effects carried out before traversing a Block.
inline : [MonadReader g.TraverseContext m] → [MonadState g.TraverseState m] → Doc.Inline g → m Unit
The effects carried out before traversing an Inline.
genrePart : [MonadReader g.TraverseContext m] → [MonadState g.TraverseState m] → g.PartMetadata → Doc.Part g → m (Option (Doc.Part g))
Operations carried out after part, when a part has metadata. It allows genre-specific rewriting
of the entire part based on genre-specific metadata. This is typically used to construct a table
of contents or permalinks, but it can in principle arbitrarily rewrite the part. If it returns
none, then no rewrite is performed.
genreBlock : [MonadReader g.TraverseContext m] → [MonadState g.TraverseState m] → g.Block → Array (Doc.Block g) → m (Option (Doc.Block g))
The traversal of genre-specific block values. If it returns none, then no rewrite is performed.
genreInline : [MonadReader g.TraverseContext m] → [MonadState g.TraverseState m] → g.Inline → Array (Doc.Inline g) → m (Option (Doc.Inline g))
The traversal of genre-specific inline values. If it returns none, then no rewrite is performed.