使用 Prism 输出语义代码块

Output semantic code blocks with Prism

我正在使用 Pandoc 输入降价数据并输出 HTML 文件。使用 --no-highlight 标志,我可以在没有内置基本语法突出显示的情况下获取要输出的语法,并使用 Prism.js 来突出显示代码,这更加健壮。

但是,Prism 要求 codepre 在 class 名称中包含 language-*。以php为例,Pandoc输出<pre class="php">。我已经设法通过使用来破解它:

```language-php

作为每个代码块的开始。但是,当我想导出与 EPUB 相同的代码时,它无法识别能够使用内置语法突出显示的语言。

这是我用于 EPUB 和 HTML 输出的命令:

# epub output
pandoc assets/metadata.yaml chapters/*.md -o build/book.epub

# html output
pandoc assets/metadata.yaml chapters/*.md -s --toc --no-highlight  --css ../assets/style.css -A assets/template/footer.html -o build/book.html

我的问题:

我希望能够写作

```php

作为我的代码块的开始,而不是

```language-php

所以 Prism.js 和内置的语法荧光笔都可以用,我的 EPUB 和 HTML 一代。

如果我能让 Pandoc 将“```php”解释为 class="language-php",这将解决问题。

Here is a link 在 Pandoc GitHub 上,其他人遇到了我正在尝试解决的相同问题。

我也赞成使用 sed,但作为预处理器。您可以编写如下所示的脚本,并将其命名为 pre-process:

#!/bin/bash -e

derived_dir=derived
rm -fr ${derived_dir} && mkdir -p ${derived_dir}
for file in $*
do
    cat ${file} | sed 's/```php/```language-php/g' > ${derived_dir}/$(basename ${file})
done
echo "${derived_dir}/*"

然后您可以在源代码中使用 ```php,并通过以下方式生成 html:

pandoc assets/metadata.yaml $(pre-process chapters/*.md) -s --toc --no-highlight --css ../assets/style.css -A assets/template/footer.html -o build/book.html

希望对您有所帮助。