Abstract Syntax Tree
This library uses a doubly-linked list Abstract Syntax Tree (AST) to represent the parsed block and inline elements. All such elements extend from the Node
class.
Document
¶
The root node of the AST will always be a Document
object. You can obtain this node a few different ways:
- By calling the
parse()
method on theDocParser
- By calling the
getDocument()
method on either theDocumentPreParsedEvent
orDocumentParsedEvent
see the (Event Dispatcher documentation)
Traversal¶
The following methods can be used to traverse the AST:
previous()
next()
parent()
firstChild()
lastChild()
children()
Iteration / Walking the Tree¶
If you’d like to iterate through all the nodes, use the walker()
method to obtain an instance of NodeWalker
. This will walk through the entire tree, emitting NodeWalkerEvent
s along the way.
use League\CommonMark\Node\NodeWalker;
/** @var NodeWalker $walker */
$walker = $document->walker();
while ($event = $walker->next()) {
echo 'I am ' . ($event->isEntering() ? 'entering' : 'leaving') . ' a ' . get_class($event->getNode()) . ' node' . "\n";
}
This walker doesn’t use recursion, so you won’t blow the stack when working with deeply-nested nodes.
Modification¶
The following methods can be used to modify the AST:
insertAfter(Node $sibling)
insertBefore(Node $sibling)
replaceWith(Node $replacement)
detach()
appendChild(Node $child)
prependChild(Node $child)
detachChildren()
replaceChildren(Node[] $children)
DocumentParsedEvent
¶
The best way to access and manipulate the AST is by adding an event listener for the DocumentParsedEvent
.