使用 Pandoc Lua 过滤器替换从 markdown 转换为 HTML 时的 HTML 标记

我有一个包含一些 HTML 标记的 markdown 文件,其中一个标记 <br>,我想在使用 pandoc 转换为 HTML 时将其替换为 <br />,因为某些旧渲染器会抱怨 <br>。 运行转换时我尝试以下 Lua 过滤器,但它没有做任何事情:

filter.lua

function LineBreak (elem)
    return {
        pandoc.RawInline('html', '<br />')
    }
end

我使用 Pandoc 版本为 2.13,使用以下测试文件运行以下命令:

Test.md:

## 测试

Hello <br> World!

pandoc --lua-filter filter.lua --to html5 Test.md

我还尝试指定 --to html4,但输出仍然相同。 是否有一种方法可以使用 Lua 过滤器来解决这个问题?

点赞
用户2425163
用户2425163

为了进行调试,我们可以先运行pandoc --to=native Test.md来查看输入是如何解析成pandoc内部文档表征的。这将得到:

[Header 2 ("testing",[],[]) [Str "Testing"]
,Para [Str "Hello",Space,RawInline (Format "html") "<br>",Space,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>
2021-05-19 18:32:22