1

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

```js
  console.log('Hello World!');
```

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

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

这可以解决问题,但是在markdown使用代码围栏时添加类的正确方法是什么?

4

1 回答 1

0

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

无论哪种 hack 恰好适用于您正在使用的实现。

首先,围栏代码块只是部分标准化。它们不在原来的规则中。但是,它们最近被添加到Commonmark 规范中,该规范仅提供一个类来指定一种语言。除此之外,规范指出:

可以在打开代码围栏之后提供信息字符串。尽管此规范没有要求对信息字符串进行任何特殊处理,但第一个单词通常用于指定代码块的语言。在 HTML 输出中,语言通常通过在代码元素中添加一个类来指示,该代码元素由language-后跟语言名称组成。

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

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

但是,在输出中只有第一个单词存在。其他一切都丢失了。

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

如上所述,防护代码块是 Commonmark 规范的最新成员。大多数实现在指定它们之前已经在不同程度上支持它们。因此,处理第一个单词以外的任何内容的方式多种多样。您需要检查您正在使用的特定实现的文档。

当您用 标记此内容时[hugo],我检查了Hugo 的文档,其中示例表明语言识别仅支持一个单词。Hugo 的文档还指出,他们在后台使用Goldmark进行 Markdown 解析。Goldmark 将自己标记为“符合标准”的 Commonmark 实现,这表明它将按照规范中记录的方式运行。但是,它确实支持第三方扩展。有人总是可以创建一个扩展,它支持围栏代码块的信息字符串中的更多功能。

在第三方扩展之外,您将需要使用 hack 来欺骗解析器将多个类视为一个单词。

于 2020-08-11T17:30:46.893 回答