1 回答
TA貢獻(xiàn)1966條經(jīng)驗(yàn) 獲得超4個(gè)贊
似乎對(duì)將 Markdown 呈現(xiàn)為 HTML 更感興趣
這是對(duì)的。這就是 Markdown 解析器所做的;將 Markdown 轉(zhuǎn)換為 HTML。
然而,Markdown 解析器的一個(gè)子集是通過(guò)兩步過(guò)程實(shí)現(xiàn)的,其中第一步將 Markdown 解析為抽象語(yǔ)法樹(shù) (AST),第二步將該 AST 呈現(xiàn)為 HTML。通常,第二步可以用可以輸出不同格式的替代渲染器代替。如果存在 Markdown 渲染器,則可以從 AST 輸出 Markdown。執(zhí)行此操作的一些實(shí)現(xiàn)包括 mistune (Python) 和 marked (JavaScript),等等。但是,AFAIK 都沒(méi)有附帶 Markdown 渲染器,因此您需要尋找第三方渲染器或構(gòu)建自己的渲染器。
假設(shè)存在第三方 Markdown 渲染器,您可以將其子類(lèi)化并覆蓋相關(guān)部分。例如。使用 mistune,你可以定制一個(gè)理論上的 Markdown 渲染器來(lái)改變圖像元素,如下所示:
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)
請(qǐng)注意,圖像src是由函數(shù)修改的get_link。您將需要?jiǎng)?chuàng)建該函數(shù)或可能進(jìn)行內(nèi)聯(lián)修改。您還需要根據(jù)找到的庫(kù)調(diào)整導(dǎo)入語(yǔ)句。
要使用您的自定義渲染器,請(qǐng)執(zhí)行以下操作:
markdown = mistune.create_markdown(renderer=CustomRenderer())
output = markdown(input)
如果你要?jiǎng)?chuàng)建自己的 Markdown 渲染器,它可能看起來(lái)像這樣:
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''
# other elements defined here
當(dāng)然,您需要為 Markdown 文檔中的每種元素定義方法。
請(qǐng)注意,我在示例中使用了 Python f 字符串,這需要更新版本的 Python。如果使用舊版本,您可能需要進(jìn)行調(diào)整。
添加回答
舉報(bào)
