# EnhancedMarkdown v3.5.3

Typecho 增强版 Markdown 解析器插件，基于 **Parsedown + ParsedownExtra** 解析引擎。

完全替换系统默认 HyperDown 解析器，从根本上解决语法支持不足和显示故障问题。

## 支持语法

### 标准 Markdown
- 标题（# H1 ~ ###### H6）、加粗、斜体、链接、图片
- 代码（行内 \`code\` 和代码块）、列表、引用、分割线

### GFM 扩展
- **表格**：完整支持 GFM 表格语法（对齐、合并）
- **删除线**：`~~删除线~~` → ~~删除线~~
- **任务列表**：`- [x]` 已完成 / `- [ ]` 未完成

### Markdown Extra 扩展
- **脚注**：`[^1]` + `[^1]: 说明文字`
- **定义列表**：`术语\n: 定义`
- **缩写词**：`*[HTML]: Hyper Text Markup Language`

### 自定义扩展
| 语法 | 效果 | 说明 |
|------|------|------|
| `^text^` | <sup>text</sup> | 上标 |
| `~text~` | <sub>text</sub> | 下标（单个波浪线） |
| `==text==` | <mark>text</mark> | 高亮标记 |
| `[toc]` | 自动生成目录 | TOC 目录树 |
| `![alt](url =WxH)` | 带尺寸图片 | 支持宽高设定 |
| `:::type\n内容\n:::` | 容器/提示块 | 见下方说明 |

### 数学公式（KaTeX）

使用 KaTeX 前端渲染，支持行内和块级 LaTeX 公式：

```markdown
行内公式：$E = mc^2$

块级公式：
$$
\sum_{i=1}^{n} x_i^2
$$
```

### Mermaid 图表

使用 Mermaid.js 前端渲染，支持流程图、时序图、甘特图等：

````
```mermaid
graph TD
    A[开始] --> B{判断}
    B -->|是| C[执行]
    B -->|否| D[结束]
```
````

### 容器/提示块类型
```
:::tip 提示标题
提示内容
:::
```
支持类型：`tip` `info` `warning` `danger` `note` `success` `details` `quote`

## 安装

1. 将 `EnhancedMarkdown` 文件夹上传至 `usr/plugins/` 目录
2. 登录 Typecho 后台 → 插件管理 → 启用 **EnhancedMarkdown**
3. 在插件设置中按需开关各项功能

## 文件结构

```
EnhancedMarkdown/
├── Plugin.php          # 插件主入口（Hook注册、配置、CSS/JS注入）
├── Parser.php          # 增强解析器（基于 Parsedown 扩展）
├── Parsedown.php       # Parsedown 核心引擎
├── ParsedownExtra.php  # Parsedown Extra 扩展
├── katex/              # KaTeX 数学公式渲染库
│   ├── katex.min.js
│   ├── katex.min.css
│   ├── auto-render.min.js
│   └── fonts/          # KaTeX 字体文件（仅 WOFF2 格式）
├── mermaid.min.js      # Mermaid 图表渲染库
└── README.md           # 说明文档
```

## 配置项

所有功能均可通过后台插件设置独立开关：
- TOC 目录支持
- 标题锚点 ID 格式（Slug 格式 / 数字格式，仅在 TOC 启用时生效）
- 任务列表支持
- 上标语法 ^text^
- 下标语法 ~text~
- 高亮标记 ==text==
- 容器/提示块 :::type
- 图片尺寸 ![alt](url =WxH)
- 数学公式 $...$ 和 $$...$$（KaTeX）
- Mermaid 图表 ```mermaid

## 更新日志

### v3.5.3 (2026-05-27)
- **修复**：PHP 8.2+ 环境下产生 `Deprecated: Creation of dynamic property` 弃用警告——`Parser.php` 构造函数中 `$this->BreaksEnabled`（大写 B）与父类 `Parsedown::$breaksEnabled`（小写 b）大小写不一致，改用父类官方 API `setBreaksEnabled(true)`
- **修复**：GFM 自动换行功能（单个换行符 → `<br>`）此前实际未生效（`breaksEnabled` 未被正确赋值）

### v3.5.2 (2026-05-27)
- **修复**：标题锚点 ID 使用不可预测的 `toc-N` 数字格式，主题 JS 无法构建有效锚点链接——新增 `generateSlug()` 方法生成可读 slug ID（如 `hello-world`、`安装步骤`），支持中文、去重
- **新增**：插件设置新增「标题锚点 ID 格式」配置项，支持 Slug 格式（推荐）和旧版数字格式（toc-N）切换，仅在 TOC 启用时生效
- **新增**：脚注样式（`.footnotes`、`.footnote-ref`、`.footnote-backref`），确保任何主题下脚注都有可读样式
- **兼容性**：与 Docusaurus 主题等第三方主题的 TOC、SmoothScroll、代码块功能兼容性修复

### v3.5.1 (2026-05-26)
- **修正**：纯 HTML 内容（`<div>` 内无 Markdown 语法）被错误包裹为 `<pre><code>` 转义输出——新增 `containsMarkdownSyntax()` 检测方法，纯 HTML 内容跳过 `text()` 递归调用，避免 HTML 实体编码异常
- **影响**：`<div style="...">文本</div><audio>...</audio>` 等 HTML 标签恢复正常渲染

### v3.5.0 (2026-05-26)
- **修正**：HTML 块级元素（`<center>`、`<details>`、`<div>` 等）内的 Markdown 语法不渲染——新增 `blockMarkupComplete()` 方法，对白名单标签自动解析内部 Markdown
- **修正**：代码块标题不显示——新增 `blockFencedCode()` 提取 `title="..."` 参数，`blockFencedCodeComplete()` 渲染标题栏
- **修正**：容器方括号标题语法不支持（`:::note[自定义标题]`）——扩展 `blockContainer()` 正则，兼容 Docusaurus Admonition 语法

### v3.4.2 (2026-05-26)
- **修正**：`:::type` 容器内容不显示——`blockContainerComplete()` 中 `text` 与 `rawHtml` 属性冲突，Parsedown 渲染时 `isset($Element['text'])` 优先于 `rawHtml`，导致容器 div 为空
- **修正**：容器语法（`:::info`）紧跟段落时被 ParsedownExtra 的 `blockDefinitionList` 错误拦截——将 Container 注册为 `:` 字符最高优先级处理器（`array_unshift`），确保三冒号语法优先匹配

### v3.4.1 (2026-05-26)
- **修正**：Mermaid 图表 `blockFencedCodeComplete()` 数组路径错误（`element.text` → `element.element`），导致 Mermaid 转换从未执行，图表始终显示为代码块
- **修正**：数学公式 `postprocessMath()` 输出缺少 KaTeX 定界符（`\[...\]` / `\(...\)`），导致 auto-render 无法识别公式内容，公式始终显示为纯文本
- **移除**：Mermaid div 元素的冗余 `text` 属性，避免与 `rawHtml` 冲突导致双重输出

### v3.4.0 (2026-05-26)
- **优化**：KaTeX 和 Mermaid 资源改为按需加载，仅当页面实际包含公式/图表时才加载对应库
- **优化**：KaTeX CSS 移至 `<head>` 中按需输出，避免公式闪烁（FOUC）
- **优化**：KaTeX 字体精简为 WOFF2 格式，字体体积从 1.2MB 减至 300KB
- **影响**：纯文字文章页面不再加载任何额外资源（优化前 ~4.5MB → 0KB）

### v3.3.0 (2026-05-26)
- **新增**：数学公式语法支持（`$...$` 行内 / `$$...$$` 块级），基于 KaTeX 前端渲染
- **新增**：Mermaid 图表语法支持（` ```mermaid ` 代码块），基于 Mermaid.js 前端渲染
- **新增**：footer hook 注入 KaTeX/Mermaid JS 脚本（按需加载）
- **新增**：数学公式预处理器/后处理器，保护公式内容不被 Markdown 解析干扰
- **新增**：Mermaid 代码块处理器，自动将 `language-mermaid` 转为 `<div class="mermaid">`
- **新增**：插件配置新增「数学公式」和「Mermaid 图表」开关

### v3.2.0 (2026-05-26)
- **修正**：`lang-` 前缀兼容正则扩展为 `[\w-]+`，支持含连字符的语言标识（如 objective-c）
- **修正**：统一 README 与 Plugin.php 版本号
- **改进**：所有增强语法基于 Parsedown 原生扩展机制，不再使用正则后处理
- **改进**：CSS 样式补充完善

### v3.0.0 (2026-05-26)
- **重大升级**：解析引擎从 HyperDown 切换为 Parsedown + ParsedownExtra
- **修复**：彻底解决占位符冲突导致的显示故障
- **新增**：完整 GFM 表格支持（对齐、合并）
- **新增**：脚注语法 [^1]
- **新增**：定义列表语法
- **新增**：缩写词语法 *[ABBR]: definition
- **改进**：所有增强语法基于 Parsedown 原生扩展机制，不再使用正则后处理
- **改进**：CSS 样式补充完善

### v2.0.0
- 初始版本，基于 HyperDown 扩展

## 许可证

BSD License
