首页  >  问答  >  正文

找不到与节点类型对应的渲染器:League\Commonmark + Drupal

我正在尝试使用 League\Commonmark 2.3.8 和 Drupal 中的扩展来渲染 markdown,当我尝试使用扩展进行渲染时,出现以下错误:

无法找到节点类型对应的渲染器 League\CommonMark\Node\Block\Document

这是我的代码:

class FilterMarkdown extends FilterBase {

  /**
   * @var array The private config array.
   *
   * https://commonmark.thephpleague.com/2.3/configuration/.
   */
  private array $config = [
    // Allow because only the admin has markdown access.
    'html_input' => 'allow',
    'allow_unsafe_links' => false,
  ];

  /**
   * {@inheritdoc}
   */
  public function process($text, $langcode): FilterProcessResult {
    $converter = new MarkdownConverter($this->createEnvironment());

    $converted_text = $converter->convert($text);

    return new FilterProcessResult("$converted_text");
  }

  /**
   * Generate an environment with all the extensions we need.
   */
  private function createEnvironment(): Environment {
    $environment = new Environment($this->config);
    $environment->addExtension(new ExternalLinkExtension());
    $environment->addExtension(new HeadingPermalinkExtension());
    $environment->addExtension(new StrikethroughExtension());
    $environment->addExtension(new TableExtension());

    return $environment;
  }

}

问题与我创建环境的方式有关。我知道这一点是因为我重写了 process() 如下,并且降价转换按预期工作:

public function process($text, $langcode): FilterProcessResult {
    $converter = new CommonMarkConverter($this->config);

    $converted_text = $converter->convert($text);

    return new FilterProcessResult("$converted_text");
  }

我还删除了所有 addExtension 行并得到了相同的错误,所以问题是 new Environment($this->config)

然后我尝试在没有配置的情况下进行初始化:new Environment([]),但我仍然遇到相同的错误。

那么我做错了什么?

(Drupal 有一个 markdown 模块,但我无法使用它,因为我要将网站迁移到 Drupal 10 并且该模块不兼容。)

P粉144705065P粉144705065251 天前395

全部回复(1)我来回复

  • P粉642920522

    P粉6429205222024-01-17 10:19:19

    您还需要添加 CommonMarkCoreExtensionInlinesOnlyExtension,因为它们为 Document 等内容提供解析器和渲染器>段落文本 节点。 (或者,如果您需要更多地控制要包含或排除的语法,您可以自己手动注册各个解析器和渲染器)。

    回复
    0
  • 取消回复