【问题标题】:Output semantic code blocks with Prism使用 Prism 输出语义代码块
【发布时间】:2018-04-20 21:56:27
【问题描述】:

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

但是,Prism 要求 codepre 在类名中包含 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",这将解决问题。

Pandoc GitHub 上的Here is a link 为其他与我尝试解决的相同问题的人分享。

【问题讨论】:

  • 你就不能sed '/s/class="php"/class="language-php"/' 吗?
  • 使用pandoc filter 会比sed 更健壮...
  • 这将非常有用,谢谢!

标签: javascript bash haskell pandoc prismjs


【解决方案1】:

我也支持使用 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

希望这会有所帮助。

【讨论】:

  • 太棒了!非常感谢,这很好用!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-11-09
  • 2014-09-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-29
  • 1970-01-01
相关资源
最近更新 更多