[英]How does this Haskell Pandoc filter work?
我想使用 Pandoc 合并多个 Markdown 文件。 这样做时,我希望每个文件的 frontmatter 或元数据在合并之前在文档顶部生成自定义 Markdown。 我发现这个SO post answer似乎可以满足我的要求,但我对 Pandoc 过滤器或建议过滤器的 Haskell 的理解不够。 我尝试将 Haskell 翻译成 Python 是这样的:
from pandocfilters import Header
from pandocfilters import toJSONFilter
def insertMeta(key, value, format, meta):
if ???:
return Header(meta['title'], [], [])
if __name__ == "__main__":
toJSONFilter(insertMeta)
我知道toJSONFilter
将遍历文档的 AST,但我不知道如何编写一个条件,只在文档顶部插入 header 信息。 我在调理什么? 我试图dir(pandocfilters)
但没有看到看起来像元数据或文件头的 object。 谢谢你的帮助。
是的,要理解toJSONFilter
有点困难,因为它涉及理解 Haskell 类型类(并且这种类型 class 也不是很常见,因为它的实例是函数)。 但好消息是您并不需要真正理解它,因为它是一个帮助程序 function 将您的自定义逻辑包装到适当的 Pandoc 过滤器中。
所以,跳过你需要的所有细节开始
import Text.Pandoc.JSON
main :: IO ()
main = toJSONFilter myFunc
并实现myFunc
,一个Walkable
,它采用一些可步行的东西并产生相同的改变的东西。 在您的示例中,那个东西是Pandoc
,一个顶级 AST 节点 IIRC。
您可以在此处查找可步行物品的完整列表: Walkable
://hackage.haskell.org/package/pandoc-types/docs/Text-Pandoc-Walk.html#t:Walkable
由于Pandoc
包含文档Block
的列表,并且您想在开头添加一些块,因此您的myFunc
也应该在Pandoc
上运行,就像您的示例一样。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.