欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

使用misaka格式化GFM markdown

程序员文章站 2022-03-30 08:40:53
...

版权声明:*转载-非商用-非衍生-保持署名 | Creative Commons BY-NC-ND 3.0

python里markdownmarkdown2各有缺点, markdown不支持GFM代码格式, markdown2 虽说可以支持, 但格式化之后的代码下面有下划线, 找了好多原因, 未解。google过程中发现markdown2不好的消息, markdown2作者经常自我吹嘘, 而我在github看源码的时候, 觉得markdown2开发结构不是很好。所以抛弃markdown, 选择其他。

在众多的python markdown parsers我们该如何选择呢?

这里Markdown Parsers in Python对python几个常用markdown parser多了对比评测, 最后我选择了misaka

misaka 里, 没有直接对pygments封装生成代码高亮的逻辑,所以代码高亮部分需要定义一遍。

Code Example

定义code 渲染类, 然后在实例化Markdown的加入自定义的渲染类即可。

# -*- coding: utf-8 -*-
'''
File Name: markbook/markdown.py
Author: JackeyGao
mail: [email protected]
Created Time: Fri May  1 13:51:14 2015
'''

import misaka as m
from pygments import highlight
from pygments.lexers import get_lexer_by_name
from pygments.formatters import HtmlFormatter

# Create a custom renderer
class BleepRenderer(m.HtmlRenderer, m.SmartyPants):
    def block_code(self, text, lang):
        if not lang:
            return '\n<pre><code>%s</code></pre>\n' % \
                text.strip()
        lexer = get_lexer_by_name(lang, stripall=True)
        formatter = HtmlFormatter()
        return highlight(text, lexer, formatter)

if __name__ == '__main__':
    # And use the renderer
    renderer = BleepRenderer()
    md = m.Markdown(renderer,
        extensions=m.EXT_FENCED_CODE | m.EXT_NO_INTRA_EMPHASIS)

    print md.render("""```python
    # -*- coding:utf-8 -*-
    import os
    import sys
    ```""")