本文档描述了 Markdown Here 扩展中的 Markdown 渲染管道。该管道负责将电子邮件编辑器中的原始 Markdown 内容转换为格式化的 HTML,反之亦然。它解释了 Markdown 如何在您的电子邮件撰写窗口中渲染成精美 HTML 的过程流、关键组件和技术实现细节。
有关 Markdown 切换功能如何在不同平台工作的更多信息,请参阅Markdown 切换功能。有关 HTML 如何转换回 Markdown 的详细信息,请参阅HTML 到 Markdown 转换。
Markdown 渲染管道将用户编写的 Markdown 语法转换为格式正确且样式化的 HTML,适用于电子邮件客户端和其他撰写环境。该过程包括检测要渲染的内容、解析 Markdown、对代码块应用语法高亮、渲染数学表达式(如果启用),并仔细保留原始内容以备后续“取消渲染”。
来源: src/common/markdown-here.js570-646 src/common/markdown-render.js28-101
当用户触发 Markdown Here 切换操作时,渲染过程开始。让我们详细了解每个阶段。
当用户触发 Markdown 切换时,系统首先通过检查选区或光标位置中是否存在现有的 Markdown Here 包装器来确定是渲染还是取消渲染内容。
来源: src/common/markdown-here.js570-646 src/common/markdown-here.js60-106 src/common/markdown-here.js410-427
从 Markdown 到 HTML 的核心转换由 markdownRender 函数处理,该函数使用 marked.js 库处理原始 Markdown。
来源: src/common/markdown-render.js28-101 src/common/marked.js1153-1229
该管道的一个关键方面是保留原始 Markdown 内容,以便后续能够取消渲染。这通过创建一个包含 base64 编码的原始内容的隐藏元素的包装器结构来实现。
来源: src/common/markdown-here.js483-534 src/common/utils.js542-547
电子邮件客户端通常会删除外部样式块,因此 Markdown Here 会显式地将样式应用于元素以确保正确渲染。
来源: src/common/markdown-here.js280-336 src/common/default.css1-202
当用户再次切换时,取消渲染过程会将已渲染内容转换回其原始 Markdown 形式。
来源: src/common/markdown-here.js536-552 src/common/markdown-here.js359-394
下表列出了 Markdown 渲染管道的关键组件及其职责
| 组件 | 文件 | 职责 |
|---|---|---|
markdownHere | markdown-here.js | 入口点函数,用于确定是渲染还是取消渲染内容 |
renderMarkdown | markdown-here.js | 协调渲染过程,包括包装和样式处理 |
unrenderMarkdown | markdown-here.js | 提取并恢复原始 Markdown 内容 |
markdownRender | markdown-render.js | 使用 marked.js 将 Markdown 转换为 HTML 的核心函数 |
makeStylesExplicit | markdown-here.js | 通过将样式移至行内来确保样式得以保留 |
marked | marked.js | 将 Markdown 解析为 HTML 的第三方库 |
来源: src/common/markdown-here.js483-534 src/common/markdown-render.js28-101 src/common/markdown-here.js536-552
下图展示了从输入到最终输出的完整渲染管道中的数据流
来源: src/common/markdown-here.js483-534 src/common/markdown-render.js28-101 src/common/markdown-here.js536-552
渲染管道可以通过多个影响输出的配置选项进行自定义
传递给 markdownRender 的 userprefs 对象控制着渲染的各个方面
| 偏好设置 | 描述 | 默认 |
|---|---|---|
math-enabled | 启用 LaTeX 数学渲染 | false |
math-value | 数学渲染模板 | 可变 |
header-anchors-enabled | 为标题添加锚点链接 | false |
gfm-line-breaks-enabled | 启用 GitHub 风格的 Markdown 换行符 | true |
marked.js 渲染器经过定制以提供额外功能
来源: src/common/markdown-render.js28-101 src/common/test/markdown-render-test.js18-183
该管道包含多项安全措施以优雅地处理错误
来源: src/common/markdown-here.js515-530 src/common/markdown-here.js611-626 src/common/utils.js75-107
多项优化确保了渲染管道的良好性能
来源: src/common/markdown-here.js280-336 src/common/markdown-here.js121-167
渲染管道旨在跨多个浏览器和电子邮件客户端工作,并针对客户端特定问题提供了解决方案
来源: src/common/markdown-here.js60-106 src/common/utils.js124-157
刷新此 Wiki
最后索引时间2025 年 4 月 18 日(a7dd5c)