benjaminhoegh / parsedown-toc
为 Parsedown 的目录表扩展。
v1.5.4
2024-07-14 04:55 UTC
Requires
- php: >=7.4
- erusev/parsedown: ^1.7
Requires (Dev)
- phpunit/phpunit: 9.6.16
- vimeo/psalm: >=5.21.1
README
ParsedownToc
ParsedownToc 是 Parsedown 和 ParsedownExtra 的一个扩展,为处理 Markdown 的开发者引入了高级功能。它基于 @KEINOS toc 扩展
注意
尚未包含 ParsedownExtended v1.2.0 的最新更改
功能
- 速度: 极快的处理。
- 可配置性: 适用于不同用例的轻松自定义。
- 自定义标题 ID: 完全支持自定义标题 ID。
先决条件
- 需要 Parsedown 1.7.4 或更高版本。
安装
请确保您的系统已安装 Composer。
-
使用 Composer 安装 ParsedownToc 包
composer require benjaminhoegh/ParsedownToc
-
或者,您可以下载 最新版本 并将
Parsedown.php
包含到您的项目中。
用法
基本示例
<?php require 'vendor/autoload.php'; // autoload $content = file_get_contents('sample.md'); // Sample Markdown with '[toc]' tag $ParsedownToc = new ParsedownToc(); $html = $ParsedownToc->text($content); // Parses '[toc]' tag to ToC if exists echo $html;
分离正文和目录表
<?php $content = file_get_contents('sample.md'); $ParsedownToc = new \ParsedownToc(); $body = $ParsedownToc->body($content); $toc = $ParsedownToc->contentsList(); echo $toc; // ToC in <ul> list echo $body; // Main content
配置
ParsedownToc->setOptions(array $options)
方法允许您配置主要类。以下列出了可用的选项及其默认值和描述
方法
ParsedownToc 类提供了几个用于不同功能的方法
- text(string $text): 返回解析后的内容和
[toc]
标签。 - body(string $text): 返回不包含
[toc]
标签的解析后的内容。 - contentsList([string $type_return='html']): 返回目录表为 HTML、JSON 或数组。
- 可选: 指定返回类型为
html
、json
或array
。
- 可选: 指定返回类型为
- setTocSelectors(array $array): 允许您设置特定选择器。
- setTocDelimiter(string $delimiter): 定义自定义分隔符。
- setTocLimit(int $limit): 设置目录表的限制。
- setTocLowercase(bool $boolean): 选择输出是否应为小写。
- setTocReplacements(array $replacements): 为特定内容提供替换。
- setTocTransliterate(bool $boolean): 指定是否进行转写。
- setTocUrlencode(bool $boolean): 决定是否使用 PHP 内置的
urlencode
。 - setTocBlacklist(array $blacklist): 将特定 ID 从标题锚点生成中列入黑名单。
- setTocUrl(string $url): 为锚点设置特定的 URL 前缀。
- setTocTag(string $tag='[tag]'): 设置自定义目录表 Markdown 标签。
- setTocId(string $id): 设置目录表的自定义 ID。
自定义锚点
如果您想为标题创建自己的逻辑,可以通过使用 setCreateAnchorIDCallback
来实现。
使用 cocur 的 slugify 的示例
$ParsedownToc->setCreateAnchorIDCallback(function($text, $level) { $slugify = new Slugify(); return $slugify->slugify($text); });