函数名称:CommonMark\Interfaces\IVisitor::enter()
适用版本:该函数是一个接口方法,因此可用于支持 CommonMark 解析器的所有版本。
用法:函数用于访问解析器中的节点前通过执行特定操作准备该节点。这个函数是解析器遍历 Markdown 文档树时调用的一个回调函数。
示例:
<?php
use CommonMark\Interfaces\IVisitor;
use CommonMark\Node\Heading;
use CommonMark\Node\Block\Paragraph;
// 定义一个自定义的访问者类
class CustomVisitor implements IVisitor {
// 实现 IVisitor 接口的 enter() 方法
public function enter($node)
{
// 可以在这里根据节点类型执行特定的操作
if ($node instanceof Heading) {
// 如果节点是标题节点,则打印标题级别
echo 'Entering heading with level: ' . $node->getLevel() . PHP_EOL;
} elseif ($node instanceof Paragraph) {
// 如果节点是段落节点,则打印段落文本
echo 'Entering paragraph with text: ' . $node->getStringContent() . PHP_EOL;
}
}
}
// 创建一个新的解析器实例
$parser = new CommonMark\Parser();
// 解析 Markdown 文档
$document = $parser->parse('# Hello World!' . PHP_EOL . 'This is a paragraph.');
// 创建一个自定义的访问者实例
$visitor = new CustomVisitor();
// 遍历文档树并调用 enter() 方法
$document->accept($visitor);
?>
在上面的示例中,我们首先定义了一个实现 CommonMark\Interfaces\IVisitor 接口的自定义访问者类 CustomVisitor。然后,我们创建了一个 CommonMark\Parser 实例,并使用它解析了一个包含标题和段落的 Markdown 文档。
接下来,我们创建了 CustomVisitor 的实例,并调用文档的 accept() 方法,该方法会遍历文档树并依次调用自定义访问者的 enter() 方法。在我们的 enter() 方法中,我们检查节点的类型并执行相应的操作。在这个例子中,我们根据节点的类型打印了标题的级别和段落的文本。
请注意,这只是一个简单的示例,您可以根据自己的需求定制访问者类,执行任意操作。