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.
Document
The root node of the AST will always be a Document
object. You can obtain this node a few different ways:
parse()
method on the DocParser
getDocument()
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 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.
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
.