是否可以为pandoc编写器自定义元素输出?
给定reStructuredText输入
.. topic:: Topic Title
Content in the topic
使用HTML编写器,Pandoc将生成
<div class="topic">
<p><strong>Topic Title</strong></p>
<p>Content in the topic</p>
</div>
是否有支持的方法来更改html输出?比如<strong>
到<mark>
。或者添加另一个类,即父<div>
。
edit:我认为格式化是作者的责任,但也有可能是在创建AST时决定的。
这就是pandoc过滤器的作用。可能最简单的方法是使用Lua过滤器,因为这些过滤器内置在pandoc中,不需要安装额外的软件。
基本思想是,您将在根据输入创建的AST元素上进行匹配,并为目标格式生成原始输出。因此,如果所有的Strong
元素都要在HTML中输出为<mark>
,那么您应该编写
function Strong (element)
-- the result will be the element's contents, which will no longer be 'strong'
local result = element.content
-- wrap contents in `<mark>` element
result:insert(1, pandoc.RawInline('html', '<mark>'))
result:insert(pandoc.RawInline('html', '</mark>'))
return result
end
您通常希望通过运行pandoc --to=native YOUR_FILE.rst
来检查pandoc的内部表示。这样可以更容易地编写筛选器。
pandoc讨论邮件列表上也有类似的问题;它处理LaTeX输出,但也处理自定义rst元素。你可能会觉得它很有指导意义。
Nota-bene:以上内容可以通过使用pandoc的一个功能来缩短,该功能输出带有一类已知HTML元素的跨度和div:
function Strong (element)
return pandoc.Span(element.content, {class = 'mark'})
end
但我认为先看一般情况更容易。