创建保留HTML注释的Lua过滤器失效,求排查问题原因
Pandoc Lua过滤器无法保留HTML注释的问题排查与修复
问题背景
我尝试编写一个仅保留HTML注释(不保留其他HTML元素)的Lua过滤器,代码基于Stack Overflow上的答案实现:
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}}
执行命令:
pandoc -f html+raw_html from.html -o to.md -t gfm --lua-filter preserve-comments.lua
但该过滤器未生效,无法保留HTML注释。
问题原因
- 匹配字符串错误:启用
html+raw_html扩展后,Pandoc会直接将HTML注释解析为原始内联元素,存储的是原始的<!--而非转义后的<!--,导致判断条件不匹配。 - 覆盖范围不全:原代码只处理了行内RawInline元素,未处理块级的HTML注释;同时没有明确移除其他非注释元素,可能导致其他内容残留。
修复方案
修改后的Lua过滤器代码
local function starts_with(start, str) return str:sub(1, #start) == start end -- 保留行内HTML注释,移除其他行内原始元素 function RawInline(el) if starts_with('<!--', el.text) then return el else return nil end end -- 保留块级HTML注释,移除其他块级原始元素 function RawBlock(el) if starts_with('<!--', el.text) then return el else return nil end end -- 移除所有非原始内联元素 function Inline(el) return nil end -- 移除所有非原始块级元素 function Block(el) return nil end return { {RawInline = RawInline}, {RawBlock = RawBlock}, {Inline = Inline}, {Block = Block} }
验证命令
保持原命令不变,确保输入文件from.html包含有效HTML注释,且过滤器路径正确:
pandoc -f html+raw_html from.html -o to.md -t gfm --lua-filter preserve-comments.lua
内容的提问来源于stack exchange,提问作者user22996855
相关产品推荐
相关产品推荐

