用Prism输出语义代码块

时间:2018-04-20 21:56:28

标签: javascript bash haskell pandoc prismjs

我正在输入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上的

https://github.com/Azure/Azure-Functions/issues/210我正在尝试解决同样问题的其他人。

1 个答案:

答案 0 :(得分:1)

我也使用sed,但作为预处理器。您可以编写如下所示的脚本,并将其命名为#!/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

然后您可以在源代码中使用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,并通过以下方式生成html:

@GetMapping("/_search/codes") @Timed public ResponseEntity<List<CodeDTO>> searchCodes(@RequestParam String query, Pageable pageable) { log.debug("REST request to search for a page of Codes for query {}", query); Page<CodeDTO> page = codeService.search(query, pageable); HttpHeaders headers = PaginationUtil.generateSearchPaginationHttpHeaders(query, page, "/api/_search/codes"); return new ResponseEntity<>(page.getContent(), headers, HttpStatus.OK); } @GetMapping("/codes/currencies") @Timed public ResponseEntity<List<CodeDTO>> getAllByCodeGroupId(Pageable pageable) { QueryBuilder qb = QueryBuilders.termQuery("codeGroupId", 3); return searchCodes(qb.toString(), pageable); }

希望这有帮助。