在代码围栏上的markdown中添加类的正确方法是什么



我的用例专门针对PrismJS,它需要代码标记中的某些类来实现一些额外的代码突出显示功能,如line-numbers显示行号,match-braces突出显示匹配的大括号等等。我在博客中使用HUGO,在markdown文件中,我可以使用以下语法显示一些突出显示的代码块:

``jsconsole.log("Hello World!"(;```

我搜索了很多,但找不到正确的方法将类添加到如上所示的代码围栏中,所以我这样做:

``js 行号 匹配大括号console.log("Hello World!"(;```

这很管用,但在使用代码围栏时,在markdown中添加类的正确方法是什么?

使用代码围栏时,在markdown中添加类的正确方法是什么?

无论哪种黑客攻击恰好与您正在使用的实现一起工作。

首先,fenced代码块只是部分标准化的。它们不在最初的规则中。然而,它们最近被添加到了Commonmark规范中,该规范只提供了一个指定语言的类。除此之外,规范规定:

可以在打开代码栏后提供一个信息字符串。虽然这个规范没有强制要求对信息字符串进行任何特殊处理,第一个单词通常用于指定代码的语言块在HTML输出中,通常通过添加类转换为由language-和语言名称。

规范中的一个示例显示了定义的多个项目:

~~~~    ruby startline=3 $%@#$

然而,在输出中,只有第一个单词保留下来。其他一切都失去了。

<pre><code class="language-ruby">

如上所述,fenced代码块是Commonmark规范中最近添加的一个代码块。在指定它们之前,大多数实现已经在不同程度上支持了它们。因此,在处理第一个单词以外的内容时有很多不同的方法。您需要检查文档以了解您正在使用的具体实现。

当您使用[hugo]对此进行标记时,我查看了Hugo的文档,其中的示例表明,语言识别只支持一个单词。Hugo的文档还指出,他们在引擎盖下使用Goldmark来进行Markdown解析。Goldmark给自己贴上了";符合标准";Commonmark实现,这表明它将按照规范中的文档进行操作。但是,它确实支持第三方扩展。有人总是可以在围栏代码块的信息字符串中创建一个支持更多功能的扩展。

除了第三方扩展之外,您还需要使用一些技巧来欺骗解析器将多个类视为一个单词。

最新更新