English | 简体中文 | 繁體中文
查询

CommonMark\Interfaces\IVisitor::leave()函数—用法及示例

「 在 CommonMark 解析过程中对节点进行离开操作的回调 」


函数名称: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 文档中的节点,实现相应的操作。

补充纠错
热门PHP函数
分享链接