pandoc 代码块中的用户定义语言
User defined language in pandoc code-block
我正在尝试在 pandoc
.
中的 Coq
(长话短说 :))中编写代码块
$ pandoc --list-highlight-languages | grep coq | wc -l
0
因为它不存在,我想知道是否有一个选项可以编写我自己的用户定义代码块语言?
可以使用自定义过滤器扩展 pandoc
可执行文件:https://pandoc.org/filters.html
而对于直接在 Haskell 中转换 Pandoc
文档(不经过过滤器),一个有用的东西是遍历 Text.Pandoc.Walk.walkM
和 pandoc-types
中的其他相关函数。
例如,我在 hakyll-alectryon
中使用它在 Hakyll 中使用 pandoc 处理 Coq 代码块。
答案在一定程度上取决于目标输出格式。最通用的解决方案是定义语法定义。 Pandoc 可以为 Kate 编辑器解析 XML 语法定义,有关格式的更多信息,请参阅 https://docs.kde.org/stable5/en/kate/katepart/highlight.html。如果你有这样一个 XML 文件,然后通过 --syntax-definition
命令行选项将它传递给 pandoc。
如果输出格式是 LaTeX(或通过 LaTeX 的 PDF),那么使用带有 --listing
选项的 pandoc 应该可以,尤其是。结合此处提到的提示时:
https://tex.stackexchange.com/q/434523/
同样,minted 可用于突出显示,请参阅 minted.lua 过滤器。
最后但同样重要的是,可以通过过滤器使用外部语法荧光笔。 Lua filters 非常适合该任务,因为它们不需要安装额外的 tool-chain。
出于完整性原因,我正在为从 markdown 文件html 幻灯片 生成的最小 xml
语法文件 与 pandoc。它是为任何编写 dsl and wants to easily mark specific words in a code block. See here 许多完整语法示例
的人准备的框架
<?xml version="1.0" encoding="UTF-8"?>
<language name="coq" extensions="*.v" indenter="haskell">
<highlighting>
<list name="kw_major">
<item>induction</item>
<item>Fixpoint</item>
<item>Theorem</item>
<item>Qed</item>
</list>
<list name="kw_minor">
<item>exists</item>
<item>forall</item>
<item>nat</item>
</list>
<contexts>
<context name="Normal" attribute="Normal" lineEndContext="#stay">
<keyword attribute="KwMajor" context="#stay" String="kw_major" />
<keyword attribute="KwMinor" context="#stay" String="kw_minor" />
<Int attribute="Decimal" context="#stay" />
<DetectChar attribute="String" context="String" char=""" />
</context>
<context name="String" attribute="String" lineEndContext="StringSyntaxError" >
<DetectChar attribute="String" context="#pop" char=""" />
<RegExpr attribute="String" context="#stay" String="[^"]*" />
</context>
</contexts>
<itemDatas>
<itemData name="KwMajor" defStyleNum="dsDataType"/>
<itemData name="KwMinor" defStyleNum="dsKeyword"/>
<itemData name="Decimal" defStyleNum="dsDecVal"/>
<itemData name="String" defStyleNum="dsString"/>
</itemDatas>
</highlighting>
<general><keywords casesensitive="1" /></general>
</language>
我正在尝试在 pandoc
.
Coq
(长话短说 :))中编写代码块
$ pandoc --list-highlight-languages | grep coq | wc -l
0
因为它不存在,我想知道是否有一个选项可以编写我自己的用户定义代码块语言?
可以使用自定义过滤器扩展 pandoc
可执行文件:https://pandoc.org/filters.html
而对于直接在 Haskell 中转换 Pandoc
文档(不经过过滤器),一个有用的东西是遍历 Text.Pandoc.Walk.walkM
和 pandoc-types
中的其他相关函数。
例如,我在 hakyll-alectryon
中使用它在 Hakyll 中使用 pandoc 处理 Coq 代码块。
答案在一定程度上取决于目标输出格式。最通用的解决方案是定义语法定义。 Pandoc 可以为 Kate 编辑器解析 XML 语法定义,有关格式的更多信息,请参阅 https://docs.kde.org/stable5/en/kate/katepart/highlight.html。如果你有这样一个 XML 文件,然后通过 --syntax-definition
命令行选项将它传递给 pandoc。
如果输出格式是 LaTeX(或通过 LaTeX 的 PDF),那么使用带有 --listing
选项的 pandoc 应该可以,尤其是。结合此处提到的提示时:
https://tex.stackexchange.com/q/434523/
同样,minted 可用于突出显示,请参阅 minted.lua 过滤器。
最后但同样重要的是,可以通过过滤器使用外部语法荧光笔。 Lua filters 非常适合该任务,因为它们不需要安装额外的 tool-chain。
出于完整性原因,我正在为从 markdown 文件html 幻灯片 生成的最小 xml
语法文件 与 pandoc。它是为任何编写 dsl and wants to easily mark specific words in a code block. See here 许多完整语法示例
<?xml version="1.0" encoding="UTF-8"?>
<language name="coq" extensions="*.v" indenter="haskell">
<highlighting>
<list name="kw_major">
<item>induction</item>
<item>Fixpoint</item>
<item>Theorem</item>
<item>Qed</item>
</list>
<list name="kw_minor">
<item>exists</item>
<item>forall</item>
<item>nat</item>
</list>
<contexts>
<context name="Normal" attribute="Normal" lineEndContext="#stay">
<keyword attribute="KwMajor" context="#stay" String="kw_major" />
<keyword attribute="KwMinor" context="#stay" String="kw_minor" />
<Int attribute="Decimal" context="#stay" />
<DetectChar attribute="String" context="String" char=""" />
</context>
<context name="String" attribute="String" lineEndContext="StringSyntaxError" >
<DetectChar attribute="String" context="#pop" char=""" />
<RegExpr attribute="String" context="#stay" String="[^"]*" />
</context>
</contexts>
<itemDatas>
<itemData name="KwMajor" defStyleNum="dsDataType"/>
<itemData name="KwMinor" defStyleNum="dsKeyword"/>
<itemData name="Decimal" defStyleNum="dsDecVal"/>
<itemData name="String" defStyleNum="dsString"/>
</itemDatas>
</highlighting>
<general><keywords casesensitive="1" /></general>
</language>