修改定义列表术语的Python过滤器

2024-04-27 12:23:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在寻找一些帮助,以适应Pandoc过滤器(用Python编写)来修改标记输出。

最近我在处理类似问题(Pandoc: HTML-to-Markdown--can I replace elements using templates or scripts)时有帮助,但是我经常遇到错误来适应这个新过滤器。

我正在将HTML转换为标记(严格),我希望定义列表中的术语是粗体的,所以我想我可能可以从pandocfilters开始。

这是defilist.py(2):

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)

我想替换^{cd2>},例如(来自AST)

^{pr2}$

所以定义项类似于^{{cd3>}。

我试过以下几点:

^{pr3}$

我得到的错误与Pandoc有关,它期望a^{cd4>}和看到对象等

我的Python、JSON和Pandoc知识目前非常肤浅,因此,对于我可以尝试下一步的内容,任何指针或建议都将不胜感激。

非常感谢。


Tags: in标记过滤器for定义defhtml错误
1条回答
网友
1楼 · 发布于 2024-04-27 12:23:43

我不确定是否应该回答我自己的问题,但经过一些尝试和错误,再加上更多的时间阅读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)

相关问题 更多 >