Skip to main content

MarkdownParser

PyPI download month PyPI versionfury.io PyPI pyversions codecov

MarkdownParser 是一个 Markdown 语法解析器,用于实现 markdown 文本到 html 文本的转换

安装

pip install markdownparser

快速开始

import MarkdownParser

html = MarkdownParser.parse('# Hello World!')
print(html)

#<div class='markdown-body'><h1>Hello World!</h1></div>

两个简单易用的接口函数

# 解析 markdown 文本转 html
def parse(text: str, toc = False) -> str:
    ...

# 解析 md 文件转 html
def parse_file(file_name: str, toc = False) -> str:
    ...

接口类 Markdown, Block

结果预览与 Markdown 功能测试

本仓库下提供了了一个快速验证转换结果的工具 generate.py, 跟一个文件名即可快速验证预览本库的转换结果是否正确

python generate.py <FILE_NAME>

# python generate.py ./testfiles/md/test1.md
# python generate.py README.md

运行会生成index.html, 使用浏览器打开生成的index.html即可与您预期的渲染结果对比

20230218202400

不支持

  • 四个空格变为代码段
  • [^1]的引用方式
  • Setext 形式的标题
  • 上标 / 下标 / 下划线
  • <details><summary></summary></details> 折叠块

HTML 结果说明

众所周知 Markdown 转换后的 html 文本还需要 css 美化, 本仓库下提供了一个 index.css 作为参考(Github Markdown 主题)

  • 生成的结果会以 "markdown-body" 类名的一个 div 包裹

    例如 <div class='markdown-body'>markdown内容</div>

  • 代码段会根据语言为 pre 加入一个类名便于后期高亮,例如 class="language-cpp", 未定义语言则为 language-UNKNOWN

  • 默认导出的HTML中层级任务列表会有显示问题,这是因为使用了ul+li+checkbox的方式,您需要添加以下css样式修正

    .markdown-body > ul>li:has(input) {
      padding-left: 0;
      margin-bottom: 0;
    }
    
    .markdown-body  ul>li:has(input)>ul {
      list-style-type: none;
      padding-left: 8px;
    }
    
  • toc 参数用于标记跳转, 如果设置 toc=True 则会将所有标签(#)组成目录树, 除 "markdown-body" 外额外生成一个 <div class="header-navigator">...</div> 用于导航

    辅助一些 js 相关的代码即可实现跳转, 具体可以参考 template.html

    let links = document.querySelectorAll('div a[href^="#"]');
      links.forEach(link => {
        link.addEventListener('click', function(event) {
          event.preventDefault();
          let target = document.querySelector(this.getAttribute('href'));
          target.scrollIntoView({ behavior: 'smooth' });
        });
      });
    

    以及一些样式美化

    .header-navigator {
      position: fixed;
    }
    
  • 如果您想添加对Mermaid的支持, 您可参考mermaid plugin在您的html页面 <body> 末尾添加如下 <script>

    <script type="module">
      const codeBlocks = document.querySelectorAll('.language-mermaid');
      codeBlocks.forEach(codeBlock => {
          codeBlock.classList.remove('language-mermaid');
          codeBlock.classList.add('mermaid');
      });
      import mermaid from 'https://cdn.jsdelivr.net/npm/mermaid@10/dist/mermaid.esm.min.mjs';
      mermaid.initialize({ startOnLoad: true });
    </script>
    

    请注意, 由于本Markdown解析器的CodeBlock解析得到的类名为 language-mermaid, 而mermaid插件支持的类名格式为mermaid, 所以代码中手动修改了 language-mermaid 的类名

  • 如果您想添加对Latex数学公式的支持, 可以在html页面 <body> 末尾添加如下 <script>

    <script>
        MathJax = {
          tex: {
            inlineMath: [['$', '$'], ['\\(', '\\)']]
          }
        };
        </script>
    <script id="MathJax-script" async
    src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-chtml.js">
    </script>
    

实现思路

Markdown解析器的代码实现

您可通过取消 core.py 注释来获取树的结构

def parse(self, text: str) -> str:

    # 去除空行/注释/html标签
    lines = self.preprocess_parser(text)
    # print(lines)
    # 逐行解析,得到一颗未优化的树
    root = self.block_parser(lines)
    # root.info()
    # 优化,得到正确的markdown解析树
    tree = self.tree_parser(root)
    # tree.info()
    # 输出到屏幕 / 导出html文件
    return tree.toHTML()

参考

Release files for markdownparser 0.5.39

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for markdownparser 0.5.39
File Size Uploaded
markdownparser-0.5.39.tar.gz 17.3 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for markdownparser 0.5.39
File Interpreter ABI Platform
markdownparser-0.5.39-py3-none-any.whl Python 3 none any Details

Total release size: 37.6 kB

Release files / markdownparser-0.5.39.tar.gz

Download URL markdownparser-0.5.39.tar.gz
Size 17.3 kB
Tags Source
SHA-256 checksum
How to use checksums
e7d3c037d30db64f4bb62225c968890f530de0b7a14ae73967bd854ca354cd08
BLAKE2b-256 checksum
How to use checksums
8400b9e6d594001c6a395e021f1fb8102061f8c171b221867baa435026714da2
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/1.5.1 CPython/3.10.9 Windows/10

Release files / markdownparser-0.5.39-py3-none-any.whl

Download URL markdownparser-0.5.39-py3-none-any.whl
Size 20.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
cc00cb3c7d0e1641803ace44bf207b876f66b324bb3787ac11bee803c99bfbe2
BLAKE2b-256 checksum
How to use checksums
287512e9b33c3dd3f38336be25bffdb9f6830795f6678941ce06a110cc233fb0
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/1.5.1 CPython/3.10.9 Windows/10

Release history Release notifications | RSS feed

This release

0.5.39 This release

2 release files

0.5.38

2 release files

0.5.37

2 release files

0.5.36

2 release files

0.5.35

2 release files

0.5.34

2 release files

0.5.27

2 release files

0.5.26

2 release files

0.5.25

2 release files

0.5.24

2 release files

0.5.23

2 release files

0.5.22

2 release files

0.5.21

2 release files

0.5.20

2 release files

0.5.18

2 release files

0.5.17

2 release files

0.5.16

2 release files

0.5.15

2 release files

0.5.14

2 release files

0.5.13

2 release files

0.5.12

2 release files

0.5.11

2 release files

0.5.9

2 release files

0.5.8

2 release files

0.5.7

2 release files

0.5.5

2 release files

0.5.4

2 release files

0.5.3

2 release files

0.5.2

2 release files

0.5.1

2 release files

0.5.0

2 release files

0.4.3

2 release files

0.4.2

2 release files

0.4.1

2 release files

0.4.0

2 release files

0.3.10

2 release files

0.3.9

2 release files

0.3.8

2 release files

0.3.7

2 release files

0.3.6

2 release files

0.3.5

2 release files

0.3.4

2 release files

0.3.3

2 release files

0.3.2

2 release files

0.3.1

2 release files

0.3.0

2 release files

0.2.1

2 release files

0.2.0

2 release files

0.1.6

2 release files

0.1.5

2 release files

0.1.4

2 release files

0.1.3

2 release files

0.1.2

2 release files

0.1.1

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page