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



我有一个markdown文件,其中包含一些HTML标记,特别是一个,当使用pandoc转换为HTML时,我想替换的<br>标记。问题是,由于与一些抱怨<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>

相关内容

  • 没有找到相关文章

最新更新