remark-gfm

remark-gfm

支持GitHub风格Markdown的remark插件

remark-gfm是一个remark插件,为Markdown解析器添加GitHub Flavored Markdown (GFM)支持。它可解析和序列化自动链接、脚注、删除线、表格和任务列表等GFM特性。此插件适用于需要兼容GitHub文件和Gist的Markdown语法,并提供灵活配置选项满足不同需求。

remark-gfmMarkdownGitHub插件语法扩展Github开源项目

remark-gfm

[![构建][build-badge]][build] [![覆盖率][coverage-badge]][coverage] ![下载量][downloads-badge] 大小 赞助商 支持者 聊天

remark 插件,用于支持 GFM(自动链接、脚注、删除线、表格、任务列表)。

目录

这是什么?

这个包是一个 unified (remark) 插件,用于启用 GitHub 通过 GFM 添加的 Markdown 扩展:自动链接(www.x.com)、脚注([^1])、删除线(~~stuff~~)、表格(| cell |…)和任务列表(* [x])。你可以使用这个插件来添加对解析和序列化这些扩展的支持。这些由 GitHub 对 CommonMark 的扩展被称为 GFM(GitHub Flavored Markdown)。

这个插件不处理 Markdown 如何转换为 HTML。那是由 remark-rehype 完成的。如果你的内容不是英文且使用了脚注,你应该配置该插件。在生成 HTML 时,你可能还想启用 rehype-slug 来为标题添加 id

另一个插件 remark-frontmatter 添加了对前置元数据的支持。GitHub 支持仓库和 Gist 中文件的 YAML 前置元数据,但它们并不将其视为 GFM 的一部分。

另一个插件 remark-github 添加了对 Markdown 在特定 GitHub 仓库的评论、问题、PR 和发布中如何工作的支持,通过链接引用提交、问题和用户。

还有一个插件 remark-breaks 将软换行(回车)转换为硬换行(<br>)。GitHub 在一些地方(评论、问题、PR 和发布)执行这种操作。

我应该在什么时候使用它?

当你想要支持 GitHub 在仓库文件、Gist 和其他几个地方所支持的相同功能时,这个项目很有用。用户经常认为其中一些扩展,特别是自动链接和表格,是普通 Markdown 的一部分,所以使用 remark-gfm 将有助于使你的实现与他们对 Markdown 的理解相匹配。在一些边缘情况下,GitHub 的实现以意想不到的方式工作,甚至与他们的规范描述不同,所以编写 GFM 并不总是最佳选择。

如果你只是想将 Markdown 转换为 HTML(可能带有一些扩展,如 GFM),我们推荐使用 micromarkmicromark-extension-gfm。如果你不使用插件并且想访问语法树,你可以使用 mdast-util-from-markdownmdast-util-gfm

安装

这个包只支持 ESM。在 Node.js(16+ 版本)中,使用 npm 安装:

npm install remark-gfm

在 Deno 中使用 esm.sh

import remarkGfm from 'https://esm.sh/remark-gfm@4'

在浏览器中使用 esm.sh

<script type="module"> import remarkGfm from 'https://esm.sh/remark-gfm@4?bundle' </script>

使用

假设我们的文档 example.md 包含:

# GFM ## 自动链接 www.example.com, https://example.com, 和 contact@example.com。 ## 脚注 一个注释[^1] [^1]: 大注释。 ## 删除线 ~一个~~~两个~~ 波浪线。 ## 表格 | a | b | c | d | | - | :- | -: | :-: | ## 任务列表 * [ ] 待办 * [x] 已完成

...而我们的模块 example.js 包含:

import rehypeStringify from 'rehype-stringify' import remarkGfm from 'remark-gfm' import remarkParse from 'remark-parse' import remarkRehype from 'remark-rehype' import {read} from 'to-vfile' import {unified} from 'unified' const file = await unified() .use(remarkParse) .use(remarkGfm) .use(remarkRehype) .use(rehypeStringify) .process(await read('example.md')) console.log(String(file))

...那么运行 node example.js 将产生:

<h1>GFM</h1> <h2>自动链接</h2> <p><a href="http://www.example.com">www.example.com</a>, <a href="https://example.com">https://example.com</a>, 和 <a href="mailto:contact@example.com">contact@example.com</a></p> <h2>脚注</h2> <p>一个注释<sup><a href="#user-content-fn-1" id="user-content-fnref-1" data-footnote-ref aria-describedby="footnote-label">1</a></sup></p> <h2>删除线</h2> <p><del>一个</del><del>两个</del> 波浪线。</p> <h2>表格</h2> <table> <thead> <tr> <th>a</th> <th align="left">b</th> <th align="right">c</th> <th align="center">d</th> </tr> </thead> </table> <h2>任务列表</h2> <ul class="contains-task-list"> <li class="task-list-item"><input type="checkbox" disabled> 待办</li> <li class="task-list-item"><input type="checkbox" checked disabled> 已完成</li> </ul> <section data-footnotes class="footnotes"><h2 class="sr-only" id="footnote-label">脚注</h2> <ol> <li id="user-content-fn-1"> <p>大注释。 <a href="#user-content-fnref-1" data-footnote-backref class="data-footnote-backref" aria-label="返回内容"></a></p> </li> </ol> </section>

API

这个包不导出任何标识符。默认导出是 remarkGfm

unified().use(remarkGfm[, options])

添加对 GFM(自动链接、脚注、删除线、表格、任务列表)的支持。

参数
  • options (Options, 可选) — 配置
返回值

无 (undefined)。

Options

配置(TypeScript 类型)。

字段
  • stringLength (((value: string) => number), 默认值: d => d.length) — 检测表格单元格的大小,用于对齐单元格
  • singleTilde (boolean, 默认值: true) — 是否支持单个波浪线的删除线; 单个波浪线在 github.com 上有效,但在技术上被 GFM 禁止; 你始终可以使用 2 个或更多波浪线进行删除线
  • tablePipeAlign (boolean, 默认值: true) — 是否对齐表格管道符
  • tableCellPadding (boolean, 默认值: true) — 是否在表格管道符和单元格之间添加一个空格作为填充

示例

示例:singleTilde

要关闭对单波浪线解析删除线的支持,传入 singleTilde: false

// … const file = await unified() .use(remarkParse) .use(remarkGfm, {singleTilde: false}) .use(remarkRehype) .use(rehypeStringify) .process('~one~ and ~~two~~') console.log(String(file))

生成结果:

<p>~one~ and <del>two</del></p>

示例:stringLength

可以根据单元格的视觉宽度对表格进行对齐。 首先,让我们展示问题所在:

import {remark} from 'remark' import remarkGfm from 'remark-gfm' const input = `| Alpha | Bravo | | - | - | | 中文 | Charlie | | 👩‍❤️‍👩 | Delta |` const file = await remark().use(remarkGfm).process(input) console.log(String(file))

上面的代码展示了如何使用 remark 来格式化 markdown。 输出结果如下:

| Alpha | Bravo | | -------- | ------- | | 中文 | Charlie | | 👩‍❤️‍👩 | Delta |

为了改善这些全角字符和表情符号的对齐,传入一个计算单元格视觉宽度的 stringLength 函数。 一种这样的算法是 string-width。 它可以这样使用:

@@ -1,5 +1,6 @@ import {remark} from 'remark' import remarkGfm from 'remark-gfm' +import stringWidth from 'string-width' @@ -10,7 +11,7 @@ async function main() { | 👩‍❤️‍👩 | Delta |` -const file = await remark().use(remarkGfm).process(input) +const file = await remark() + .use(remarkGfm, {stringLength: stringWidth}) + .process(input) console.log(String(file))

进行这些更改后,我们代码的输出如下:

| Alpha | Bravo | | ----- | ------- | | 中文 | Charlie | | 👩‍❤️‍👩 | Delta |

错误

关于 GFM 中存在但这里不存在的错误,或其他支持的特殊情况,请参阅每个相应的自述文件:

编写

关于如何编写 GFM 的建议,请参阅每个相应的自述文件:

HTML

此插件不处理 markdown 如何转换为 HTML。 关于如何实现以及如何更改,请参阅 remark-rehype

CSS

关于 GitHub 如何对这些功能进行样式设置的信息,请参阅每个相应的自述文件:

语法

关于这些功能的语法信息,请参阅每个相应的自述文件:

语法树

关于这些功能的语法树信息,请参阅每个相应的自述文件:

类型

此包使用 TypeScript 进行完全类型化。 它导出了额外的类型 Options

默认情况下,@types/mdast 支持节点类型。

兼容性

unified 集体维护的项目与维护版本的 Node.js 兼容。

当我们发布新的主要版本时,我们会放弃对不再维护的 Node.js 版本的支持。 这意味着我们尽量保持当前发布线 remark-gfm@^4 与 Node.js 16 兼容。

此插件适用于 remark-parse 11+ 版本(remark 15+ 版本)。 之前的版本(v3)适用于 remark-parse 10 版本(remark 14 版本)。 在此之前,v2 适用于 remark-parse 9 版本(remark 13 版本)。 remark-parseremark 的早期版本有一个默认为 true 的 gfm 选项,启用了此功能。

安全

使用 remark-frontmatter 不涉及 rehypehast)或用户内容,因此不存在 跨站脚本攻击(XSS) 的漏洞。

相关

贡献

查看 remarkjs/.github 中的 contributing.md 以了解参与方式。 查看 support.md 以获取帮助的方法。

本项目有一个 行为准则。 通过与此仓库、组织或社区进行交互,您同意遵守其条款。

许可证

MIT © Titus Wormer [downloads-badge]: https://img.shields.io/npm/dm/remark-gfm.svg

编辑推荐精选

讯飞智文

讯飞智文

一键生成PPT和Word,让学习生活更轻松

讯飞智文是一个利用 AI 技术的项目,能够帮助用户生成 PPT 以及各类文档。无论是商业领域的市场分析报告、年度目标制定,还是学生群体的职业生涯规划、实习避坑指南,亦或是活动策划、旅游攻略等内容,它都能提供支持,帮助用户精准表达,轻松呈现各种信息。

AI办公办公工具AI工具讯飞智文AI在线生成PPTAI撰写助手多语种文档生成AI自动配图热门
讯飞星火

讯飞星火

深度推理能力全新升级,全面对标OpenAI o1

科大讯飞的星火大模型,支持语言理解、知识问答和文本创作等多功能,适用于多种文件和业务场景,提升办公和日常生活的效率。讯飞星火是一个提供丰富智能服务的平台,涵盖科技资讯、图像创作、写作辅助、编程解答、科研文献解读等功能,能为不同需求的用户提供便捷高效的帮助,助力用户轻松获取信息、解决问题,满足多样化使用场景。

热门AI开发模型训练AI工具讯飞星火大模型智能问答内容创作多语种支持智慧生活
Spark-TTS

Spark-TTS

一种基于大语言模型的高效单流解耦语音令牌文本到语音合成模型

Spark-TTS 是一个基于 PyTorch 的开源文本到语音合成项目,由多个知名机构联合参与。该项目提供了高效的 LLM(大语言模型)驱动的语音合成方案,支持语音克隆和语音创建功能,可通过命令行界面(CLI)和 Web UI 两种方式使用。用户可以根据需求调整语音的性别、音高、速度等参数,生成高质量的语音。该项目适用于多种场景,如有声读物制作、智能语音助手开发等。

Trae

Trae

字节跳动发布的AI编程神器IDE

Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。

AI工具TraeAI IDE协作生产力转型热门
咔片PPT

咔片PPT

AI助力,做PPT更简单!

咔片是一款轻量化在线演示设计工具,借助 AI 技术,实现从内容生成到智能设计的一站式 PPT 制作服务。支持多种文档格式导入生成 PPT,提供海量模板、智能美化、素材替换等功能,适用于销售、教师、学生等各类人群,能高效制作出高品质 PPT,满足不同场景演示需求。

讯飞绘文

讯飞绘文

选题、配图、成文,一站式创作,让内容运营更高效

讯飞绘文,一个AI集成平台,支持写作、选题、配图、排版和发布。高效生成适用于各类媒体的定制内容,加速品牌传播,提升内容营销效果。

热门AI辅助写作AI工具讯飞绘文内容运营AI创作个性化文章多平台分发AI助手
材料星

材料星

专业的AI公文写作平台,公文写作神器

AI 材料星,专业的 AI 公文写作辅助平台,为体制内工作人员提供高效的公文写作解决方案。拥有海量公文文库、9 大核心 AI 功能,支持 30 + 文稿类型生成,助力快速完成领导讲话、工作总结、述职报告等材料,提升办公效率,是体制打工人的得力写作神器。

openai-agents-python

openai-agents-python

OpenAI Agents SDK,助力开发者便捷使用 OpenAI 相关功能。

openai-agents-python 是 OpenAI 推出的一款强大 Python SDK,它为开发者提供了与 OpenAI 模型交互的高效工具,支持工具调用、结果处理、追踪等功能,涵盖多种应用场景,如研究助手、财务研究等,能显著提升开发效率,让开发者更轻松地利用 OpenAI 的技术优势。

Hunyuan3D-2

Hunyuan3D-2

高分辨率纹理 3D 资产生成

Hunyuan3D-2 是腾讯开发的用于 3D 资产生成的强大工具,支持从文本描述、单张图片或多视角图片生成 3D 模型,具备快速形状生成能力,可生成带纹理的高质量 3D 模型,适用于多个领域,为 3D 创作提供了高效解决方案。

3FS

3FS

一个具备存储、管理和客户端操作等多种功能的分布式文件系统相关项目。

3FS 是一个功能强大的分布式文件系统项目,涵盖了存储引擎、元数据管理、客户端工具等多个模块。它支持多种文件操作,如创建文件和目录、设置布局等,同时具备高效的事件循环、节点选择和协程池管理等特性。适用于需要大规模数据存储和管理的场景,能够提高系统的性能和可靠性,是分布式存储领域的优质解决方案。

下拉加载更多