问题描述
我有一个 Markdown 文件,其中包含一些 HTML 标签,特别是 <br>
标签,我想在使用 pandoc 转换为 HTML 时替换它。问题是我想用 <br />
替换它,因为与一些抱怨 <br>
的旧渲染器存在兼容性问题。我在运行转换时确实尝试了以下 Lua 过滤器,但它没有做任何事情:
filter.lua
:
function LineBreak (elem)
return {
pandoc.RawInline('html','<br />')
}
end
我正在使用 Pandoc 版本 2.13
,并通过以下测试文件运行以下命令:
Test.md
:
## Testing
Hello <br> World!
pandoc --lua-filter filter.lua --to html5 Test.md
我也尝试指定 --to html4
但输出仍然相同。有没有办法用 Lua 过滤器做到这一点?
解决方法
为了调试这个,我们可以先运行 pandoc --to=native Test.md
来查看输入是如何被解析为 pandoc 的内部文档表示的。这产生了
[Header 2 ("testing",[],[]) [Str "Testing"],Para [Str "Hello",Space,RawInline (Format "html") "<br>",Str "World!"]]
有趣的部分是 <br>
被解析为 RawInline (Format "html") "<br>"
,而不是换行符。所以我们可以修改过滤器以匹配它:
function RawInline (raw)
if raw.format == 'html' and raw.text == '<br>' then
return pandoc.RawInline('html','<br />')
end
end
这给出了想要的结果:
$ pandoc --lua-filter filter.lua --to html5 Test.md
<h2 id="testing">Testing</h2>
<p>Hello <br /> World!</p>