Markdown Parse Survey On Js and Python

目標

取得一份 markdown 的 ast,在遍歷樹結構時同時修改節點值,不會增刪節點,最後在轉換回 markdown 具體專案需求請見 rfmswg 最基本要支援 common markdown,註腳可選

結論

只有 mistune 可以做到

1
2
3
4
astrender = MarkdownRenderer()
# plugins=['strikethrough', 'footnotes', 'table','task_lists' , 'math']
ast = mistune.create_markdown(renderer='ast', escape=False)(md)
mdc = astrender(ast, state=mistune.core.BlockState())

文件沒有明寫此用法但 v3.0.2 確定可以在專案中使用 plugins 被註解應為加入 plugins 時無法 astrender 回 markdown,需要自己撰寫 render

Survey

背景調查過以下函式庫

  • marked Js 庫 有 AST 但 AST 只能編譯成 Html,無法編譯回 markdown

  • markdown-it Js 庫 文件中找不到 AST 樹資訊

  • remarkable Js 庫 符合 common markdown 的設定會導致 AST 無法編譯回

  • Python-Markdown Python 庫

    我想要解析然後遍歷一個 Markdown 檔案。我正在尋找類似 xml.etree.ElementTree 但適用於 Markdown 的東西 正如另一位評論者提到的,Python-Markdown 具有擴展 API,並且它在內部使用 xml.etree.ElementTree。理論上,你可以創建一個擴展來訪問該內部的 ElementTree 對象,然後對其進行所需的操作。然而,如果你使用原始 HTML(包括 HTML 實體)和/或 codehilite 擴展,則最終獲得的文檔可能是不完整的,因為在序列化的字符串上還有一些後處理器會執行額外的處理。因此,我不太推薦這種方法來達成你的目的。(完整聲明:我是 Python-Markdown 的開發者。)

    官方開發者不推薦使用 AST

Markdown Parse Implementation List