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