Files
argon-theme/commit-msg-final.txt
nanhaoluo 29bfd284e0 feat: 实现 Mermaid 代码块魔改支持
- 添加 convertMermaidCodeblocks() 函数,在代码高亮前拦截 mermaid 代码块
- 支持标准 Markdown 代码块 (\\\mermaid) 渲染
- 更新 detectMermaidBlocks() 添加 mermaid-from-codeblock 选择器
- 更新 extractMermaidCode() 支持新容器类型
- 创建测试文件 test-codeblock-magic.html
- 更新用户文档、开发者文档和 FAQ
- 完全绕过代码高亮和 WordPress 格式化
- 支持 PJAX 页面切换
- 特殊字符和换行符正确保留
2026-01-24 21:35:12 +08:00

70 lines
2.6 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
feat: 添加 Markdown 容器语法支持,修复 WPMD 代码提取问题
问题描述:
- WP-Markdown 插件将 Markdown 代码块转换为特殊格式
- 传统标记方式会被 WPMD 套上代码高亮窗口,导致嵌套结构
- 某些字符被自动转义,导致渲染失败
- 之前的正则表达式只能提取到第一个单词
解决方案:
添加 Markdown 容器语法支持(::: mermaid ... :::
- 符合 Markdown 扩展规范VuePress、Docusaurus 等使用相同语法)
- 不会被 WPMD 当作代码块处理,避免嵌套问题
- 语法简洁,易于编写和阅读
- 易于迁移到其他平台
修复内容:
1. 改进正则表达式为 ([\s\S]*?),匹配包括换行在内的所有字符
2. 添加三层降级方案:
- 方案1: 匹配 document.write("...")
- 方案2: 直接提取引号内容
- 方案3: 纯文本提取
3. 增加详细的调试日志(原始内容、提取长度、最终代码)
4. 优化解码顺序(先 HTML 实体,后转义字符)
5. 添加容器语法检测逻辑TreeWalker
代码变更:
- functions.php:
* argon_has_mermaid_content(): 添加容器语法检测
- argontheme.js:
* detectMermaidBlocks(): 添加容器语法检测
* detectContainerBlocks(): 新增函数,检测 ::: mermaid 容器
* extractContainerContent(): 新增函数,提取容器内容
* extractMermaidCode(): 支持容器语法的代码提取
- tests/test-wp-markdown-format.html:
* 添加 7 种测试场景
* 包含容器语法和标准格式测试
- docs/mermaid-usage-guide.md:
* 详细说明容器语法使用方法
* 提供使用示例和最佳实践
* 包含故障排除指南
支持的标记格式(按优先级):
1. ::: mermaid ... ::: - Markdown 容器语法 ⭐(推荐)
2. <div class="mermaid"> - 标准格式WPMD 生成)
3. <pre><code class="language-mermaid"> - Markdown 格式
4. <pre data-lang="mermaid"> - 自定义属性格式
5. <code class="mermaid"> - 简化格式
推荐使用方式:
::: mermaid
flowchart TD
A[开始] --> B[处理]
B --> C[结束]
:::
测试方法:
1. 访问测试页面https://blog.cartol.top/wp-content/themes/argon/tests/test-wp-markdown-format.html
2. 查看控制台日志,确认所有测试用例都能正确提取和渲染
3. 在文章中使用推荐的容器语法
4. 如果还有问题,查看控制台的详细日志
注意事项:
- 强烈推荐使用 Markdown 容器语法,避免 WPMD 处理
- 传统 Markdown 代码块仍然支持,但可能有嵌套问题
- 所有标记方式都会自动解码 HTML 实体和转义字符
- 容器语法符合现代 Markdown 扩展规范,易于迁移