mistralys/markdown-renderer

PHP的CommonMark Markdown渲染器,具有预处理器和后处理器。

1.0.1 2024-08-04 11:36 UTC

This package is auto-updated.

Last update: 2024-09-04 11:47:08 UTC


README

PHP的CommonMark Markdown渲染器,可以自定义预处理器和后处理器语法。

使用方法

从Markdown字符串

use Mistralys\Markdown\MarkdownRenderer;

$markdown = <<<MD
# Markdown test

Some text with **formatting**.
MD;

echo Renderer::factory($markdown)->render();

从Markdown文件

use Mistralys\Markdown\MarkdownRenderer;
use \AppUtils\FileHelper\FileInfo;

$file = FileInfo::factory('/path/to/markdown.md');

echo Renderer::factory($file)->render();

添加处理器

可以使用addProcessor()方法添加任意数量的处理器。它们将以添加的顺序执行。

示例:添加捆绑的视频处理器。

use Mistralys\Markdown\MarkdownRenderer;
use Mistralys\MarkdownRenderer\Processors\Bundled\VideosProcessor;

$file = FileInfo::factory('/path/to/markdown.md');

echo Renderer::factory($file)
    ->addProcessor(new VideosProcessor($renderer))
    ->render();

自定义语法

该库基于一个简单的语法来定义自定义命令,它们遵循以下模式,类似于伪HTML属性

{commandName: "value" name="named value" property}

这些命令的解析由库自动处理,并且可以通过辅助类轻松访问这些属性来渲染匹配的内容。

添加自定义处理器

如果您想进行自己的语法解析,创建一个基于BaseProcessor的类。如果您想使用库的命令语法(最容易实现),请使用BaseCommandBasedProcessor类。只需实现所有抽象方法,您就可以开始了。

每个抽象方法都有关于您应该做什么的文档。

您可以在项目的任何位置创建处理器类,并使用addProcessor()方法将其添加到渲染器中。

use Mistralys\Markdown\MarkdownRenderer;
use My\Custom\CommandProcessor;

$file = FileInfo::factory('/path/to/markdown.md');

echo Renderer::factory($file)
    ->addProcessor(new CommandProcessor($renderer))
    ->render();

起源

我在几个个人和职业项目中创建了类似的Markdown过滤器。每个项目对语法和内容的要求都足够不同,而且足够容易实现,所以我长时间没有将公共功能移动到单独的库中。

另一个最近的项目让我迈出了这一步。就像经常发生的那样,我被不得不创建正则表达式来解析命令所烦恼,所以我决定正确地处理它。

哲学

我阅读了相当多的关于Markdown文件应包含哪些信息的讨论。图片宽度是社区存在分歧的一个方面。我同意图片宽度是布局信息,而不是内容。然而,这个要求是真实的,并且对我来说经常出现,所以我采取了实用主义的方法。

我的哲学是,只要Markdown内容保持易于阅读,并且添加的语法不会干扰文档的阅读,我就不介意。