benjaminhoegh/parsedown-toc

为 Parsedown 的目录表扩展。

v1.5.4 2024-07-14 04:55 UTC

This package is auto-updated.

Last update: 2024-08-26 22:26:12 UTC


README

ParsedownToc

ParsedownToc

GitHub release GitHub

ParsedownToc 是 Parsedown 和 ParsedownExtra 的一个扩展,为处理 Markdown 的开发者引入了高级功能。它基于 @KEINOS toc 扩展

注意

尚未包含 ParsedownExtended v1.2.0 的最新更改

功能

  • 速度: 极快的处理。
  • 可配置性: 适用于不同用例的轻松自定义。
  • 自定义标题 ID: 完全支持自定义标题 ID。

先决条件

  • 需要 Parsedown 1.7.4 或更高版本。

安装

请确保您的系统已安装 Composer。

  1. 使用 Composer 安装 ParsedownToc 包

    composer require benjaminhoegh/ParsedownToc
  2. 或者,您可以下载 最新版本 并将 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 或数组。
    • 可选: 指定返回类型为 htmljsonarray
  • 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);
});