函数名称:leave()
适用版本:CommonMark 0.18.1
用法:leave() 函数用于在 CommonMark 解析过程中对节点进行离开操作的回调。
示例:
use CommonMark\Interfaces\IVisitor;
class MyVisitor implements IVisitor
{
public function leave(IVisitable $node)
{
if ($node instanceof \CommonMark\Block\Element\AbstractBlock) {
// 在离开块级元素时执行的操作
// 例如,可以在这里处理代码块、段落等
// $node 是当前离开的块级元素对象
// 示例:将代码块转换成 HTML 的 <pre><code></code></pre> 标签
if ($node instanceof \CommonMark\Block\Element\FencedCode) {
$infoWords = explode(" ", $node->getInfoWords());
$language = htmlspecialchars($infoWords[0]);
$code = htmlspecialchars($node->getStringContent());
$html = '<pre><code class="language-' . $language . '">' . $code . '</code></pre>';
echo $html;
}
}
if ($node instanceof \CommonMark\Inline\Element\AbstractInline) {
// 在离开行内元素时执行的操作
// 例如,可以在这里处理链接、加粗、斜体等
// $node 是当前离开的行内元素对象
// 示例:将链接转换成 HTML 的 <a></a> 标签
if ($node instanceof \CommonMark\Inline\Element\Link) {
$url = htmlspecialchars($node->getUrl());
$title = htmlspecialchars($node->getTitle());
$label = htmlspecialchars($node->getLabel());
$html = '<a href="' . $url . '" title="' . $title . '">' . $label . '</a>';
echo $html;
}
}
}
}
// 使用 MyVisitor 进行解析
$parser = new \League\CommonMark\Parser\MarkdownParser();
$document = $parser->parse('<p>Hello, [CommonMark](https://commonmark.org/)!</p>');
$visitor = new MyVisitor();
$document->accept($visitor);
在上述示例中,我们自定义了一个 MyVisitor 类,实现了 IVisitor 接口的 leave() 方法。该方法根据节点类型执行不同的操作,例如将代码块转换成 HTML 的 <pre><code></code></pre>
标签,将链接转换成 HTML 的 <a></a>
标签。最后,我们使用 MyVisitor 来解析并访问 CommonMark 文档中的节点,实现相应的操作。