在 Markdown 中稳健地生成锚点

亚历克斯·哈维

我有一些 Ruby 代码可以在 GitHub Flavored Markdown 中自动生成目录。如果存在与此问题相关的差异,那么了解其他版本的 Markdown 也会很好。

目前,我的代码在 99% 的情况下都可以正常工作:

  def header_to_anchor
    @header
      .downcase
      .gsub(/[^a-z\d\- ]+/, "")
      .gsub(/ /, "-")
  end

这是基于我在此处的 GitHub 评论中找到的注释它写道:

创建锚点的代码在这里:https : //github.com/jch/html-pipeline/blob/master/lib/html/pipeline/toc_filter.rb

  1. 它使字符串小写
  2. 删除不是字母、数字、空格或连字符的任何内容(有关如何处理 Unicode,请参阅源代码)
  3. 将任何空格更改为连字符。
  4. 如果这不是唯一的,请添加“-1”、“-2”、“-3”...以使其唯一

就我的目的而言,我不需要解决唯一性问题。

这很好,直到我发现另一个失败的边缘案例,即我在降价文档中有一个标题:

### shunit2/_shared.sh

我的代码生成了一个锚点:

* [shunit2/_shared.sh](#shunit2sharedsh)

并创建另一个断开的链接,至少就 GitHub Flavored Markdown 而言。

我也在这里看到了这个答案,但是那里指定的那些规则似乎也不太可靠。

有没有人知道解释生成这些锚点的规则的权威文档?

亚历克斯·哈维

好吧,这里的混淆似乎1是 GitHub 评论中提到的代码中的 Ruby 正则表达式与评论所说的有些不同。代码使用这个正则表达式:

PUNCTUATION_REGEXP = RUBY_VERSION > '1.9' ? /[^\p{Word}\- ]/u : /[^\w\- ]/

删除“标点符号”。此处记录Ruby 正则表达式

同时,\p{Word}实际上是指字母数字加下划线

因此,GitHub 问题中的评论“删除不是字母、数字、空格或连字符的任何内容(请参阅 Unicode 处理方式的来源) ”是对代码的误读。

正确的规则应该是:

  1. 它使字符串小写
  2. 删除不是字母、数字、空格、下划线或连字符的任何内容(有关如何处理 Unicode,请参阅源代码)
  3. 将任何空格更改为连字符。
  4. 如果这不是唯一的,请添加“-1”、“-2”、“-3”...以使其唯一

1当然,假设toc_filter.rbGitHub 问题中提到文件确实是“事实来源”,而不是其他地方定义的规则的实现。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Vim中的Markdown列表

来自分类Dev

安全地解析Markdown样式链接

来自分类Dev

R markdown错误:无法生成HTML文件

来自分类Dev

如何访问包中存储的R markdown

来自分类Dev

在div中显示markdown内容

来自分类Dev

R Markdown中的TikZ

来自分类Dev

在GitLab Flavored Markdown中创建外部链接

来自分类Dev

使用Python从Markdown提取URL和锚文本

来自分类Dev

R Markdown中的矩阵

来自分类Dev

Github markdown中的Unicode

来自分类Dev

GitHub Enterprise中markdown文件中的图像

来自分类Dev

Spyder IDE中的Markdown

来自分类Dev

R Markdown中的内联dplyr

来自分类Dev

如何增加R Markdown中项目符号点之间的距离?

来自分类Dev

在Markdown部分中添加锚点会导致呈现的Markdown中部分标题中的HTML片段不完整

来自分类Dev

使用R Markdown中的citation()自动生成R包的书目

来自分类Dev

Django在Markdown中包含模板

来自分类Dev

Markdown链接到Sphinx中的reStructuredText锚点

来自分类Dev

在GitHub Markdown中显示PDF

来自分类Dev

使用Twig生成Markdown,如何缩进Twig中的块?

来自分类Dev

安全地解析Markdown样式链接

来自分类Dev

在Slim中为Markdown生成语法突出显示

来自分类Dev

在markdown中添加本地引用

来自分类Dev

Android TextView中的Markdown支持

来自分类Dev

在 Rstudio 中卸载 R Markdown

来自分类Dev

Markdown 未在 Messenger 中呈现

来自分类Dev

如何通过 shell 优雅地解析 Markdown 中的 URL?

来自分类Dev

R Markdown 中的 glmer 问题

来自分类Dev

gedit 中的 Markdown 预览