mistralys / markdown-renderer
PHP的CommonMark Markdown渲染器,具有预处理器和后处理器。
1.0.1
2024-08-04 11:36 UTC
Requires
- league/commonmark: >=2.4.1
- mistralys/application-localization: >=1.4.1
- mistralys/application-utils-core: >=2.2.4
Requires (Dev)
- phpunit/phpunit: >=11.2.9
- roave/security-advisories: dev-latest
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内容保持易于阅读,并且添加的语法不会干扰文档的阅读,我就不介意。