interitty / markdown
支持 Nette 框架和模板系统 Latte 的 Markdown 语言。
Requires
- php: ~8.3
- dg/composer-cleaner: ~2.2
- interitty/di: ~1.0
- latte/latte: ~3.0
Requires (Dev)
- interitty/code-checker: ~1.0
- interitty/phpunit: ~1.0
- league/commonmark: ~2.5
- michelf/php-markdown: ~2.0
- nette/application: ~3.2
- nette/bootstrap: ~3.2
- nette/caching: ~3.3
- texy/texy: ~3.2
Suggests
- league/commonmark: Highly-extensible PHP Markdown parser which fully supports the CommonMark spec and GitHub-Flavored Markdown (GFM)
- michelf/php-markdown: PHP Markdown
- texy/texy: Markdown-like parser with broad typography support
README
支持在 Markdown 语言 中使用 Nette 框架 和模板系统 Latte。
要求
安装
安装 interitty/markdown 的最佳方式是使用 Composer
composer require interitty/markdown
此包不直接依赖于特定的 Markdown 解析器实现。它允许使用专用适配器统一地与不同的库一起工作。当选定的选项不再适合或不可用时的当前 PHP 版本,请在配置中选取另一个合适的选项。
目前支持以下 Composer 包。可以同时选择和安装一个或多个。
composer require league/commonmark
composer require michelf/php-markdown
然后,在 Nette 配置文件 中注册扩展。
# app/config/config.neon
extensions:
markdown: Interitty\Markdown\Nette\DI\MarkdownExtension
用法
可以在任何 Latte 模板中使用 filter 和 tag。
内联支持
Web 应用的 HTML 模板和 mock 通常包含一个预格式化的文档,其中需要添加翻译。这默认使用 {_...} 符号完成。随着时间的推移,以文本更改和高亮显示的形式进行一些小的修正。为此,提供有限的 markdown 语言 支持非常有用,这样就可以在不更改应用程序代码的情况下使用 md 过滤器或标签。
<p>{_'**Markdown** text content'|md}</p>
当然,也可以在不翻译的情况下使用此功能。
<p>{md '**Markdown** text content'}</p>
默认情况下,以下 HTML 标签在 "内联" 模式下受支持:a、abbr、b、br、cite、code、command、del、dfn、em、i、ins、kbd、mark、meter、progress、q、s、samp、small、span、strong、sub、sup、time、u、var、wbr。所有其他标签都将从结果字符串中删除。可以在配置项 allowedTagsInline 中更改允许的 HTML 标签列表。
# app/config/config.neon
markdown:
allowedTagsInline: [b, i, u]
块支持
有时需要将整个 Markdown 文档无限制地转换。为此,有一个 "块" 模式,它具有 mdb 过滤器和标签辅助器。
{block|mdb}
## Headline
**Markdown** text content
{/block}
{capture $markdownText}
## Headline
**Markdown** text content
{/capture}
{md $markdownText}
独立使用
有时可以单独转换 Markdown 文本,而不使用模板系统。这可以通过从依赖注入容器中获取的 Interitty\Markdown\Markdown 对象来完成。
<?php
declare(strict_types=1);
namespace App\Models;
use Interitty\Markdown\Markdown;
class FooService
{
public function __construct(
protected Markdown $markdown
) {
}
public function processMarkdown(string $markdown): string
{
return $this->markdown->processMarkdown($markdown);
}
}
配置
扩展被设计成默认情况下无需设置任何东西。当前安装的解析器用作 latte 过滤器 md。然而,在另一个标识符、不同的服务或仅支持严格的 Markdown 的情况下使用它可能是有用的。
# app/config/config.neon
markdown:
adapter: null # Can be one of `commonMark`, `githubFlavoured`, `markdown`, `markdownExtra`, `texy` or one of `@service`
allowedTagsInline: null # Or array of strings with allowed HTML tags for "inline" filter and tag.
extended: true # false for strict markdown syntax only
helper: `mdb` # Any string like `parsedown` to be compatible with previous markdown support implementation
helperInline: `md` # Any string
事件
Markdown服务还包含可以在处理过程中修改文本输入和输出的事件。这非常有用,例如,用于Markdown适配器本身不直接支持的额外排版编辑。
可用的事件有onBeforeProcess、onAfterProcess和onAfterInlineProcess。
extensions:
markdown: Interitty\Markdown\Nette\DI\MarkdownExtension
services:
markdown.markdown:
class: Interitty\Markdown\Markdown
setup:
- $onAfterProcess:
- strtolower