Lua 过滤器保留 HTML 注释

问题描述 投票:0回答:1

我尝试创建一个 Lua 过滤器来保留 HTML 注释(但不保留任何其他 HTML 元素)。

local function starts_with(start, str)
  return str:sub(1, #start) == start
end

function RawInline(el)
  if starts_with('<!--', el.text) then
    return el
  else
    return nil
  end
end

return {{Inline = RawInline}}

(基于 mb21 的答案:从 HTML 到 Markdwon:尽可能干净的 Markdown 标记,并保留 HTML 注释。)

目前无法使用。可能是什么问题?

pandoc -f html+raw_html from.html -o to.md -t gfm --lua-filter preserve-comments.lua
lua pandoc
1个回答
0
投票

有两个小问题导致该过滤器无法工作。我在下面列出了它们,并包括每个的解释和解决方案。

  1. 主要问题是

    return {{Inline = RawInline}}
    。这会导致为
    all
    内联元素调用 RawInline 函数,例如 StrEmphSpace 等。这会导致问题,因为某些元素没有
    .text
    属性,并使用
    starts_with
    作为第二个参数调用
    nil
    会触发错误。

    此问题的解决方案是使用

    return {{RawInline = RawInline}}
    ,或者完全不使用该线。如果没有返回显式过滤器表,则由于 pandoc 从全局函数构造过滤器的方式,这两种解决方案是等效的。

  2. RawInline
    函数不执行任何操作,因为在这种情况下,
    return el
    return nil
    执行相同的操作。不从过滤器函数返回任何内容会导致 pandoc 保持对象不变。通过返回
    {}
    可以删除对象。

总而言之,这应该有效:

local function starts_with(start, str)
  return str:sub(1, #start) == start
end

function RawInline(el)
  if not starts_with('<!--', el.text) then
    return {}
  end
end
© www.soinside.com 2019 - 2024. All rights reserved.