我正在寻找一些帮助来调整Pandoc过滤器(用Python编写)来修改Markdown输出。
我最近帮助解决了类似的问题(Pandoc: HTML-to-Markdown--can I replace elements using templates or scripts),但是我在修改这个新过滤器时遇到了错误。
我正在将HTML转换为Markdown(严格),我希望定义列表中的术语是粗体,所以我想我可以从pandocfilters开始deflists.py
。
这是deflists.py:
from pandocfilters import toJSONFilter, BulletList, Para, Strong
def deflists(key, value, format, meta):
if key == 'DefinitionList':
return BulletList([tobullet(t, d) for [t, d] in value])
def tobullet(term, defs):
return([Para([Strong(term)])] + [b for d in defs for b in d])
if __name__ == "__main__":
toJSONFilter(deflists)
我想替换DefinitionList
,例如(来自AST),
DefinitionList
[([Str "TERM",Space,Str "1"],
[[Plain [Str "DEFN",Space,Str "1"]]])
,([Str "TERM",Space,Str "2"],
[[Plain [Str "DEFN",Space,Str "2"]]])]
这样定义术语就像[Strong[Str "TERM",Space,Str "1"]]
。
这是我到目前为止所尝试的内容:
from pandocfilters import toJSONFilter, DefinitionList, Para, Strong
def dlterm_strong(key, value, format, meta):
if key == 'DefinitionList':
return DefinitionList([todlist(t, d) for [t, d] in value])
def todlist(term, defs):
#return([Para([Strong(term)])] + [b for d in defs for b in d])
#return(([Str(Strong(term))],[[Para [b for d in defs for b in d]]]))
return(([Str(Strong(term))],[[b for d in defs for b in d]]))
if __name__ == "__main__":
toJSONFilter(dlterm_strong)
我得到的错误与Pandoc预期[a]
和看到对象等有关。
我的Python,JSON和Pandoc知识目前非常肤浅,所以任何有关我接下来可以尝试的内容的建议或建议都会受到赞赏。
非常感谢。
答案 0 :(得分:1)
不确定回答我自己的问题是否合适,但经过一些试验和错误以及更多时间使用Pandoc文档,我设法让过滤器正常工作:
from pandocfilters import toJSONFilter, DefinitionList, Para, Strong, Plain
def dlterm_strong(key, value, format, meta):
if key == 'DefinitionList':
return DefinitionList([todlist(t, d) for [t, d] in value])
def todlist(term, defs):
return(([Strong(term)], defs))
if __name__ == "__main__":
toJSONFilter(dlterm_strong)