You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
57 lines
1.5 KiB
57 lines
1.5 KiB
#!/usr/bin/env python
|
|
# encoding: utf-8
|
|
|
|
|
|
"""
|
|
@version: ??
|
|
@author: liangliangyy
|
|
@license: MIT Licence
|
|
@contact: liangliangyy@gmail.com
|
|
@site: https://www.lylinux.org/
|
|
@software: PyCharm
|
|
@file: common_markdown.py
|
|
@time: 2017/1/14 上午2:30
|
|
"""
|
|
|
|
import mistune
|
|
from pygments import highlight
|
|
from pygments.lexers import get_lexer_by_name
|
|
from pygments.formatters import html
|
|
|
|
|
|
def block_code(text, lang, inlinestyles=False, linenos=False):
|
|
if not lang:
|
|
text = text.strip()
|
|
return u'<pre><code>%s</code></pre>\n' % mistune.escape(text)
|
|
|
|
try:
|
|
lexer = get_lexer_by_name(lang, stripall=True)
|
|
formatter = html.HtmlFormatter(
|
|
noclasses=inlinestyles, linenos=linenos
|
|
)
|
|
code = highlight(text, lexer, formatter)
|
|
if linenos:
|
|
return '<div class="highlight">%s</div>\n' % code
|
|
return code
|
|
except:
|
|
return '<pre class="%s"><code>%s</code></pre>\n' % (
|
|
lang, mistune.escape(text)
|
|
)
|
|
|
|
|
|
class BlogMarkDownRenderer(mistune.Renderer):
|
|
def block_code(self, text, lang):
|
|
# renderer has an options
|
|
inlinestyles = self.options.get('inlinestyles')
|
|
linenos = self.options.get('linenos')
|
|
return block_code(text, lang, inlinestyles, linenos)
|
|
|
|
|
|
class common_markdown():
|
|
@staticmethod
|
|
def get_markdown(value):
|
|
renderer = BlogMarkDownRenderer(inlinestyles=False)
|
|
|
|
mdp = mistune.Markdown(escape=True, renderer=renderer)
|
|
return mdp(value)
|