从降价转换为 HTML 时,使用 Pandoc Lua 过滤器替换 HTML 标签

Replace HTML tags using Pandoc Lua filter when converting from markdown to HTML

我有一个降价文件,其中包含一些 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>",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>