有没有一种方法可以改变 Pandoc 解析 markdown 文档中的 HTML 方式?

我正在使用 Pandoc 将 Markdown 转换为 HTML。我的 Markdown 文件中也包含一些原始的 HTML。在例子中,我将使用<mark><u>

假设我想将每个<mark>替换为<u>标签。我们将输入作为 HTML 解析并查看 AST 结构。

$ echo '<u>foo</u> & <mark>bar</mark>' | pandoc --from=html --to native
[Plain [Underline [Str "foo"],Space,Str "&",Space,Span ("", ["mark"],[]) [Str "bar"]]]

对于这个结构,我们可以使用一个简单的过滤器,将代表<mark>标签的Span元素替换为Underline元素。

function Span(elem)
    if elem.classes[1]:gmatch('mark') then
        return pandoc.Underline(elem.content)
    end
end
[Plain [Underline [Str "foo"],Space,Str "&",Space,Underline [Str "bar"]]]

这很好。但是,如果我们将相同的输入解析为 Markdown,则会得到一个不太方便的结构。

$ echo '<u>foo</u> & <mark>bar</mark>' | pandoc --from=markdown+raw_html --to native
[Para [RawInline (Format "html") "<u>",Str "foo",RawInline (Format "html") "</u>",Space,Str "&",Space,RawInline (Format "html") "<mark>",Str "bar",RawInline (Format "html") "</mark>"]]

如果我们有一些附加的条件,要将<mark>替换为<u>(例如内容),我们就必须确定开放和关闭的RawInline元素。

我想知道是否有任何解决这个问题的好方法?是否有一种方法可以将 markdown 中的 HTML 解析为通常解析 HTML 的方式?或者是否有一种在 Lua 过滤器中解决这个问题的方法,而不需要编写一些解析代码?

点赞