如何为Markdown中的原始HTML块包裹Hugo rawhtml短代码
完全可以通过pandoc过滤器实现,比正则表达式方案更稳定可靠,不会出现HTML边界匹配错误的问题。
推荐方案:内置Lua过滤器(无额外依赖)
pandoc原生支持Lua过滤器,不需要安装任何额外依赖,只需几行代码即可实现需求:
- 新建Lua脚本
wrap-html.lua,内容如下:
function RawBlock(el) -- 仅识别原始HTML块 if el.format == 'html' then return pandoc.RawBlock('markdown', '{{< rawhtml >}}\n' .. el.text .. '\n{{< /rawhtml >}}') end end
- 执行pandoc转换时添加过滤器参数即可:
pandoc 输入文件.md -o 输出文件.md --lua-filter wrap-html.lua
替代方案:Python过滤器
如果你更习惯用Python,可以借助panflute库实现:
- 先安装依赖:
pip install panflute - 新建Python脚本
wrap_html.py,内容如下:
import panflute as pf def wrap_html(elem, doc): if isinstance(elem, pf.RawBlock) and elem.format == 'html': return pf.RawBlock(f'{{{{< rawhtml >}}}}\n{elem.text}\n{{{{< /rawhtml >}}}}', format='markdown') if __name__ == "__main__": pf.run_filter(wrap_html)
- 转换时调用:
pandoc 输入文件.md -o 输出文件.md --filter wrap_html.py
和正则方案的对比
正则匹配HTML天生存在缺陷,遇到跨行标签、属性带特殊字符、嵌套结构的场景很容易出现匹配边界错误,把普通文本误判为HTML或者漏匹配HTML块。pandoc过滤器基于语法树识别真正的原始HTML块,准确率100%,适合处理复杂的文档场景。
内容的提问来源于stack exchange,提问作者Ildar Akhmetov
相关产品推荐
相关产品推荐

