我想使用Pandoc合并多个Markdown文件。这样做时,我希望每个文件的前题或元数据在合并之前在文档顶部生成自定义Markdown。我发现此SO post answer似乎可以满足我的要求,但是我对proposed filter的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,但是我不知道如何编写条件以仅在文档的顶部插入标头信息。我以什么为条件?我尝试dir(pandocfilters)
,但看不到看起来像元数据或文件头的对象。感谢您的帮助。
是的,要想掌握toJSONFilter
有点困难,因为它涉及理解Haskell类型类(并且该类型类也不是很常见,因为其实例是函数)。但好消息是您实际上不需要了解它,因为它是一个帮助程序函数,可将您的自定义逻辑包装到适当的Pandoc过滤器中。
因此,跳过所有需要的详细信息开始
import Text.Pandoc.JSON
main :: IO ()
main = toJSONFilter myFunc
并实现myFunc
,该函数接受某些Walkable
东西并产生相同的变更东西。在您的示例中,该事件是Pandoc
,即顶级AST节点IIRC。
您可以在此处查找Walkable
的整个列表:https://hackage.haskell.org/package/pandoc-types/docs/Text-Pandoc-Walk.html#t:Walkable
由于Pandoc
包含文档Block
的列表,并且您想在开头添加一些块,所以myFunc
也应像您的示例一样在Pandoc
上进行操作。