Python - 如何覆盖Markdown库的输出

时间:2014-03-02 12:24:11

标签: python markdown

我有以下问题,我正在为我的webapp使用markdown库,我需要修改它生成的输出,即我想将默认<img src="...">标记更改为<img data-src="...">。更改此模块生成的html的最佳方法是什么?

1 个答案:

答案 0 :(得分:3)

您可能想要使用Python-Markdown的Extension API。大多数人使用API​​来添加自己的语法,但它可以轻松地改变现有输出。这样,您可以使用Markdown的解析器,但获得所需的输出。不需要包装或解析两次。

在您的情况下,您希望覆盖(子类)ImagePattern类并定义由handleMatch方法返回的自己的Element。然后你只需要tell Markdown about it。在你的情况下,正则表达式甚至不需要是不同的。只需导入并重复使用现有的IMAGE_LINK_RE并覆盖inlinePatterns["image_link"]

tutorial应该可以帮助您入门。虽然它实现了不同的语法,但基础知识是相同的,并且比API文档要短得多。

为了完整性,如果您对图像使用参考语法,则需要对ImageReferencePattern执行相同的操作。您可能会发现更容易实现TreeProcessor(我相信@Kos在他对原始帖子的评论中所指的是)。这样现有的解析器构建现有的输出,但在将ElementTree序列化为文本之前,您可以遍历所有img标记并更改它们以满足您的需要。例如,HeaderId Extension执行此操作以将ID添加到h1-6标记。