1 回答
TA贡献1966条经验 获得超4个赞
似乎对将 Markdown 呈现为 HTML 更感兴趣
这是对的。这就是 Markdown 解析器所做的;将 Markdown 转换为 HTML。
然而,Markdown 解析器的一个子集是通过两步过程实现的,其中第一步将 Markdown 解析为抽象语法树 (AST),第二步将该 AST 呈现为 HTML。通常,第二步可以用可以输出不同格式的替代渲染器代替。如果存在 Markdown 渲染器,则可以从 AST 输出 Markdown。执行此操作的一些实现包括 mistune (Python) 和 marked (JavaScript),等等。但是,AFAIK 都没有附带 Markdown 渲染器,因此您需要寻找第三方渲染器或构建自己的渲染器。
假设存在第三方 Markdown 渲染器,您可以将其子类化并覆盖相关部分。例如。使用 mistune,你可以定制一个理论上的 Markdown 渲染器来改变图像元素,如下所示:
from somelib import MdRenderer
class CustomRenderer(MdRenderer):
def image(self, src, alt="", title=None):
src = get_link(src)
return super().image(self, src, alt, title)
请注意,图像src是由函数修改的get_link。您将需要创建该函数或可能进行内联修改。您还需要根据找到的库调整导入语句。
要使用您的自定义渲染器,请执行以下操作:
markdown = mistune.create_markdown(renderer=CustomRenderer())
output = markdown(input)
如果你要创建自己的 Markdown 渲染器,它可能看起来像这样:
from mistune.renderers import BaseRenderer
class MdRenderer(BaseRenderer):
NAME = 'md'
# other elements defined here
def image(self, src, alt="", title=""):
src = get_link(src)
if title:
title = f' "{title}"'
return f'![{alt}]({src}{title})'
# other elements defined here
当然,您需要为 Markdown 文档中的每种元素定义方法。
请注意,我在示例中使用了 Python f 字符串,这需要更新版本的 Python。如果使用旧版本,您可能需要进行调整。
添加回答
举报