layout: default title: 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.
DocumentThe root node of the AST will always be a Document object. You can obtain this node a few different ways:
parse() method on the DocParsergetDocument() method on either the DocumentPreParsedEvent or DocumentParsedEvent see the (Event Dispatcher documentation)The following methods can be used to traverse the AST:
previous()next()parent()firstChild()lastChild()children()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 NodeWalkerEvents 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.
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)DocumentParsedEventThe best way to access and manipulate the AST is by adding an event listener for the DocumentParsedEvent.